Bitsel operatörlerin yorumlaması ne kadar zor?
Gömülü sistemleri programlarım. Bu şeyleri çok çalıştım. Kod ile karma haritalar hakkındaki bağlantınız
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
Kodu yüksek sesle dikte etmek ne kadar sürer diye bana çok mantıklı geldi. Açıklanan olaylar bitCount
hemen açıktır, ancak aslında neden bit saydığını hesaplamak bir dakika sürer. Yorumlar olsa harika olurdu ve kodun karma problemden sadece biraz daha zor ne yaptığını anlama.
Kodu okumak ve anlamak arasında ayrım yapmak önemlidir. bitCount
Kodu yorumlayabilir ve ne yaptığını okuyabilirim, ancak neden çalıştığını, hatta çalıştığını bile bir dakika alacağını kanıtlayabilirim. Kodu sorunsuz bir şekilde okuyabilmek ve kodun neden olduğu gibi kodlama yapabilmek arasında bir fark vardır. Bazı algoritmalar sadece zor. Ne bir hash
kod mantıklı ama açıklama açıkladı niçin ne yapılmakta idi. Bitsel operatörleri kullanan bir fonksiyonun anlaşılması zorsa, formattan bağımsız olarak zor olan zorlu matematiksel şeyler yapmak için alışkınlarsa cesaretini kırmayın.
Bir benzetme
Bu işe alışkınım. Alışık olmadığım bir konu regex. Onlarla zaman zaman yapım senaryoları üzerinde çalışıyorum, ancak günlük geliştirme çalışmalarında asla.
Bir regex'in aşağıdaki öğelerini nasıl kullanacağımı biliyorum:
[]
karakter sınıfları
*
, .
Ve +
joker
- Dizenin başlangıcı ve dizenin
^
sonu$
- \ D, \ w ve \ s karakter sınıfları
- / G bayrağı
Bu basit sorgulamalar yapmak için yeterlidir ve gördüğüm sorguların çoğu bundan uzak durmuyor.
Bu listede olmayan herhangi bir şey, bir aldatmaca için ulaşıyorum. Her şey, bu hariç, {}
ve ()
- - Hile sayfası yeterli olmayacak. Bu adamlar hakkında bir beyaz tahtaya, referans el kitabına ve belki de bir iş arkadaşına ihtiyacım olacağını bilecek kadar çok şey biliyorum. Bazı çılgın algoritmaları birkaç kısa regex satırına yerleştirebilirsiniz.
Bilinen öğeler listemde olmayan herhangi bir şeyi gerektiren veya öneren bir regex tasarlamak için, onları tanımayı ve test takımına koymayı umduğum tüm girdi sınıflarını listeleyeceğim. Regex'i yavaş ve artımlı olarak çok sayıda aralıklı adımla hazırlayacağım ve bu adımları, kontrolü sağlamak ve / veya onları yorumda bırakmak ve böylece daha sonra kırılmaları durumunda ne olacağını anlayabilmem için taahhüt ediyorum. Üretim kodundaysa, daha fazla deneyime sahip bir kişi tarafından incelendiğinden emin olacağım.
Burası bitsel operatörlerle bulunduğunuz yer mi?
Yani iyi yuvarlanmak mı istiyorsun?
Tahminime göre, böyle bir kodun bir kağıt parçasını çekerek veya beyaz tahtaya gidip işlemleri el ile geçirerek nasıl yapabileceğini yorumlayabiliyorsanız, çok yönlü sayılırsınız. Bitsel işlemler alanında iyi düzenlenmiş bir programcı olarak nitelenmek için dört şeyi yapabilmelisiniz:
Genel işlemleri akıcı
bir şekilde okuyabilir ve yazabilir Bir uygulama programcısı için, bitsel operatörlerle yapılan ortak işlemler temel operatörleri içerir |
ve &
bayraklar ayarlar ve siler. Bu kolay olmalı. Böyle şeyler okuyabilmeli ve yazabilmelisin.
open('file', O_WRONLY | O_APPEND | O_CREAT );
// Use an OR operator ^ here and ^ here to set multiple flags
yavaşlamadan ( bayrakların ne anlama geldiğini bildiğinizi varsayarak ).
Bazı çalışmalarla daha karmaşık işlemleri okuyabilme
Dalları olmayan O (log (n)) zamanlarında bitleri hızlı bir şekilde sayma, hashCodes'taki çarpışma sayısının sınırlandırılmış bir miktarda farklılık göstermesini ve e-posta adreslerini , telefon numaralarını veya Bir regex ile HTML zor problemlerdir. Bu alanlarda uzman olmayan bir kişinin beyaz tahtaya ulaşması mantıklıdır, anlamak için çalışmaya başlayamamak makul değildir.
Çok fazla karmaşık çalışmayı içeren karmaşık algoritmalar yazabilirsiniz
Uzman değilseniz, karmaşık ve zor şeyler yapmayı beklememelisiniz. Ancak, iyi bir programcının sürekli çalışarak başarabilmesi gerekir. Bunu yeterince yapın ve yakında bir uzman olacaksınız :)