it-swarm.dev

"İyi kod" yazmak ne anlama geliyor?

this soruda kötü bir yazar olmanın iyi kod yazmanı engeller olup olmadığını sordum. Cevapların çoğu "iyi kodla ne demek istediğine bağlıdır" ile başladı.

"İyi kod" ve "kötü kod" terimi çok özneldir. Bir görüşüm olduğundan, başkalarının görüşlerinden çok farklı olabilir.

Peki "iyi kod" yazmak ne anlama geliyor? "İyi kod" nedir?

41
gablin

İyi bir kodlayıcı iyi bir havuz oyuncusu gibidir.

Profesyonel bir bilardo oyuncusu gördüğünüzde, ilk başta etkilenmeyebilirsiniz: "Tabii, tüm topları içeri aldılar, ancak sadece kolay atışları vardı!" Çünkü bir havuz oyuncusu şutunu çektiğinde, hangi topun hangi cebe gireceğini düşünmez, aynı zamanda isteka topunun nerede biteceğini düşünür . Bir sonraki atış için kurulum muazzam bir beceri ve pratik gerektirir, ancak aynı zamanda kolay göründüğü anlamına gelir.

Şimdi, bu metaforu koda getirmek, iyi bir kodlayıcı kolay ve anlaşılır gibi görünen bir kod yazar. Brian Kernighan'ın kitaplarındaki örneklerin çoğu bu modeli takip ediyor. "Hile" nin bir kısmı bir sorunun doğru bir şekilde kavramsallaştırılması ve çözümü ile geliyor. Bir problemi yeterince iyi anlamadığımızda, çözümlerimizi aşırı derecede karmaşık hale getirme ihtimalimiz daha yüksektir ve birleştirici fikirleri göremeyiz.

Sorunun doğru bir şekilde kavramsallaştırılmasıyla, diğer her şeyi elde edersiniz: okunabilirlik, sürdürülebilirlik, verimlilik ve doğruluk. Çözüm çok basit göründüğü için, muhtemelen daha az yorum olacaktır, çünkü ekstra açıklama gerekli değildir. İyi bir kodlayıcı ayrıca ürünün uzun vadeli vizyonunu görebilir ve kavramsallaştırmalarını buna göre oluşturabilir.

91
Macneil

WTF's per minute

( orijinal )


DÜZENLEME: Temel fikir, "Kod Kalitesi" kurallarına, "İyi sanat" veya "İyi şiir" koyamazsınız, böylece bir bilgisayarın "Evet, iyi sanat" demesine izin veremezsiniz. veya "Hayır, kötü şiir". Şu anda tek yol, kodun diğer insanlar için ne kadar kolay anlaşılabilir olduğunu görmektir.

49
user1249

Kodu ne kadar hızlı anlayabileceğiniz dışında gerçekten iyi bir kriter yoktur. özlü ve okunabilirlik arasındaki mükemmel uzlaşmayı bularak kodunuzun iyi görünmesini sağlarsınız.

"Dakikada WTF'ler" (yukarıda) doğrudur, ancak bu daha genel kuralın bir sonucudur. Daha fazla WTF anlayışı daha yavaştır.

7
mojuba

İyi bir kod yazdığınızı biliyorsunuz ...

  1. Müşteri mutlu
  2. İş arkadaşlarınız başlangıç ​​noktası olarak kodunuzu ödünç alır
  3. Yepyeni adam/gal'e 6 ay önce kurduğunuz bir sistemde değişiklikler yapması söylendi ve size bir zamanlar bir soru sormadı
  4. Patronunuz ekibin kullanması için yeni widget'lar geliştirmenizi istiyor
  5. Bugün yazdığınız koda bakıp kendinize "Keşke iki yıl önce böyle bir kod yazmış olsaydım" dersiniz.

Kodun iyi olup olmadığını nasıl ölçersiniz ...

  • Tepki süresi nedir?
  • Sunucuya kaç gidiş dönüş yapar?
  • Uygulamayı bizzat kullanır mıydınız yoksa bunun hantal olduğunu düşünüyor musunuz?
  • Bir dahaki sefere aynı şekilde inşa eder misiniz?

İyi kod olması gerektiği zaman çalışır. İyi kod gerektiğinde kolayca değiştirilebilir. İyi kod, kar elde etmek için tekrar kullanılabilir.

Bir kod

  1. böcek ücretsiz

  2. yeniden kullanılabilir

  3. bağımsız

  4. daha az kompleks

  5. iyi belgelenmiş

  6. oynaması kolay

iyi kod denir.

İyi bir program kusursuz çalışır ve hiçbir hatası yoktur. Ama hangi içsel nitelikler böyle bir mükemmellik üretiyor? Bu bir sır değil, sadece ara sıra hatırlatmaya ihtiyacımız var. İster C/C++, C #, Java, Basic, Perl, COBOL veya ASM'de kodlayın, tüm iyi programlama aynı zamana bağlı kaliteleri sergiler: basitlik, okunabilirlik, modülerlik, katmanlama, tasarım, verimlilik, şıklık ve netlik verimliliği, şıklık ve netlik

Kaynak: MSDN

4
Chankey Pathak

Bu tanıdık geliyor mu?

Philips bana yeni bir ürünün tasarımını izleme fırsatı verdi. Geliştikçe, giderek tedirgin oldum ve endişelerimi amirime teslim etmeye başladım. Ona defalarca tasarımların “temiz” olmadığını ve Dijkstra’nın tasarımlarının güzel olduğu şekilde “güzel” olması gerektiğini söyledim. Bunu yararlı bir yorum olarak bulamadı. Bana sanatçı değil mühendis olduğumuzu hatırlattı. Zihninde sadece zevkimi ifade ediyordum ve kararımı verirken hangi kriteri kullandığımı bilmek istiyordu. Ona söyleyemedim! Hangi ilkelerin ihlal edildiğini açıklayamadığım için yorumlarım göz ardı edildi ve çalışmalar devam etti. “Lezzetimi” açıklamak ve motivasyon sağlamak için bir yol olması gerektiğini algılayarak, iyi tasarımları kötü tasarımlardan ayıracak bir ilke bulmaya başladım. Mühendisler çok pragmatiktir; güzelliğe hayran olabilirler, ama fayda ararlar. “Güzelliğin” neden faydalı olduğunu açıklamaya çalıştım.

Lütfen diğerlerine bakın burada .

3
mlvljr

doğal kod kalite kriterleri dışında (minimum kopyala/yapıştır, spagetti vb.) iyi bir endüstriyel kod her zaman biraz naif, biraz fazla ayrıntılı görünmelidir.

int key = i;
const bool do_not_create = false;
Record r = cache.get(key, do_not_create);
++i;

aksine

Record r = cache.get(i++, false);
1
bobah

Belki de tam tersini gösteren bir cevap yardımcı olacaktır (artı XKCD buraya girmek için bir bahane).

alt text

İyi kod

  • anlaşılması kolay,
  • bakımı kolay,
  • tüm sorunları sadece eldeki ile çözmeye çalışmaz
  • geliştiricileri alternatifler aramaya başlamadan uzun süre yaşıyor

Örnekler:

  • Apache Commons
  • Bahar çerçevesi
  • Hazırda bekletme çerçevesi
1
Gary Rowe

Ben sadece "bakım" ile gideceğim

Tüm kodlar korunmalıdır: bu görevin gerekenden daha zor hale getirilmesine gerek yoktur

Herhangi bir okuyucu bu basit gereksinimi anlamıyorsa veya dile getirilmesi gerekiyorsa, o okuyucu kod yazmamalıdır ...

1
gbn

İyi kod her insan için farklı olacaktır ve birlikte çalıştıkları dilin iyi kod olarak kabul edilebilecek şeyler üzerinde de etkisi vardır. Genellikle bir projeye yaklaştığımda aşağıdakileri ararım:

  • Proje nasıl organize edilir? Kaynak dosyalar temiz bir şekilde organize edilmiş mi ve çok fazla çaba harcamadan kod bulabilir miyim?
  • Kod nasıl düzenlenir? Bir dosya üstbilgisinin kullanımı veya kendi dosyasında bulunan her sınıfın kullanımı gibi dosyadaki kodun ne yaptığı açıkça belgelenir mi? Dosyada artık uygulamada kullanılmayan bir işlev var mı?
  • İşlevler nasıl düzenlenir? Değişkenlerin nerede bildirildiği konusunda net bir model var mı, yoksa oldukça rastgele bir model mi? Kodun mantıksal bir akışı var mı ve gereksiz kontrol yapılarından kaçınıyor mu? Her şey, kodun gerektiği yerde kendi kendini belgelemesiyle açık bir şekilde belgelenmiş mi ve yorumlar kodun neden ve/veya nasıl yapıldığını açıkça ifade ediyor mu?

Tüm bunların ötesinde, uygulamanın tasarımı bir bütün olarak anlamlı mı? Uygulamada bulunan kod dünyanın en iyisi olabilir, ancak uygulamanın genel tasarımı hiçbir anlam ifade etmiyorsa, çalışmak hala bir acı olabilir.

1
rjzii

Okumak için nazikçe katılmama izin verin Hayır, tamamen değil: İyi kod okunabilir olmalıdır ve bu yeterli yorumlarla kolayca elde edilebilir.

Ama ben iki tür WTF düşünüyorum: programcının 101 programlamadan daha ileri gidip gelmediğini merak edenler ve kodun gerçekliğini kesinlikle anlamadığınız kişiler. Bazı kodlar ilk başta çok garip görünebilir, ancak aslında zor bir soruna çok yaratıcı bir çözümdür. İkincisi WTF metrede sayılmamalıdır ve yorumlarla önlenebilir.

Çok okunabilir kod çok, çok yavaş olabilir. Daha az okunabilir bir çözüm, hızda çok kat iyileştirme sağlayabilir. R, genellikle doğru olan bir dile mükemmel bir örnektir. Orada mümkün olduğunca for-döngüler önlemek için seviyor. Genel olarak, daha az okunabilir olmasına rağmen en hızlı kodu daha iyi kod olarak kabul ediyorum. Yani, iyileştirme önemli ölçüde ders dışı ise ve kodun ne yaptığını açıklamak için yeterli yorum eklenirse.

Dahası, bellek yönetimi birçok bilimsel uygulamada çok önemli olabilir. Çok okunabilir kod, bellek kullanımında biraz özensiz olma eğilimindedir: oluşturulan daha fazla nesne var. Bazı durumlarda akıllı bellek kullanımı, kodu daha az okunabilir hale getirir. Ancak örneğin gigabayt DNA dizilerinin etrafında dolanırsanız, bellek çok önemli bir faktördür. Yine, ne kadar az bellek yoğun kod okunabilir olursa olsun, daha iyi kodu düşünün.

Evet, iyi kod için okunabilirlik önemlidir. Uwe Liggis'in adacesini biliyorum: Düşünme acıları ve bilgisayarlar ucuz. Ancak benim alanımda (istatistiksel genomik), bir haftanın hesaplama süreleri ve 40 Gb'nin üzerindeki bellek kullanımı anormal kabul edilmez. Bu nedenle, iki kat daha hızlı ve yarı belleğin iyileştirilmesi, bu ekstra okunabilirlik değerinden çok daha değerli.

1
Joris Meys

Bildiğim kadarıyla ... Başka bir projede çalışan bir iş arkadaşı geldiğinde ve her kod bloğunun üzerinden geçmeden ne yaptığımı anlayabildiğimde iyi kod yazdığımı biliyorum. ve ne yaptığını göstermek.
Onun yerine, "Bir dakika, ne ?!" "Oh, tamam, orada ne yaptığını görüyorum" diyor.

İyi kod ayrıca çok sinsi geçici çözümlere veya 'saldırılara' sahip değildir. Çizgiler, yazarken, kendinize de, "Bunu yapmak için iyi bir yol olmadığını biliyorum, ama şimdilik bu şekilde yapmak zorunda kalacağım. kendimi daha sonra geliştirmek için ... "

1
chiurox

'İyi' kodun birçok özelliği vardır, ancak en önemlisi IMHO, okunabilirlik ve sürdürülebilirliktir.

Kodunuz will hatalar içeriyor, muhtemelen genişletilecek ve yeniden kullanılacak ve gerekir bir noktada yeniden çarpanlara ayrılmak - tekrar ziyaret ediyorsanız, ilk etapta ne yaptığınıza dair bir ipucuna sahip olmayacağınız, kendinize bir iyilik yapmanın ve herhangi bir engel koyma olasılığınız yoktur.

Elbette, karmaşık ama uber-verimli algoritmayı kullanın, ancak bunu belgelemek için biraz fazla zaman harcadığınızdan emin olun, ancak aksi takdirde kodunuzu net ve tutarlı hale getirin.

1
cjmUK