Güzel kod nedir? [kapalı]


30

Genelde geliştiricilerin güzel kodlar yazmaları gerektiğini okudum, ancak yeni başlayanlar için güzel kodun ne olduğunu belirsiz bırakıyor ve onu nasıl tanıyorsunuz?

Asıl soru şudur: Güzel kodlar nasıl yazılır ve kodunuzun kalitesini yükseltmek için bazı pratik alışkanlıklar nelerdir? , güzel yazdığım kodu yapmak için neye dikkat etmeliyim (ve hangi öğreni öğreniyorum).



4
Bu sadece bir konuşma figürü. Güzellik, sahibinin gözünde yatar ve bunun ötesinde, bir sorunu çözmek için bir metin dosyasına koyduğunuz talimatların netliği ve sizin veya bir başkasının sizin için ne kadar kolay bir şekilde değiştirip koruyabileceği ile ilgilidir. geleceği. Bunun ötesinde, kodunuzun ne kadar güzelliği sızdığı tamamen size kalmış - girintiler, modüler yapı, karmaşıklık, aynı anda kolay okunabilirlik, verimlilik, adlandırma kuralları, vb.
bad_keypoints 12:13


Yanıtlar:


55

"Güzellik gözün yargılamasıyla satın alınır".

Bununla birlikte, çoğu programcının güzel kodun açıklık ve şeffaflık, zerafet, verimlilik ve estetik arasında bir denge gösterdiği konusunda hemfikir olacağını düşünüyorum.

  • Netlik ve Şeffaflık : Netlik, bir okuyucunun kodun ne yaptığını kolayca tespit edebileceğidir. Şeffaf kod göründüğü gibi yapar. Kod bir şeyi yapıyor gibi görünüyorsa, ancak aslında başka bir şey yapıyorsa (veya daha fazlasını yaparsanız), şeffaf değildir - yanıltıcıdır.

  • Elegance : Çoğu algoritmayı uygulamanın birçok yolu vardır, ancak bazı yollar beceriksizken, diğer yollar temiz ve zarifdir. Özlülük sıklıkla zarafet katar, ancak aşırı özlülük netliği azaltabilir.

  • Verimlilik : gereksiz kaynak kullanımından kaçınılması (CPU zamanı, bellek ve G / Ç gibi).

  • Estetik : gözlerde kolay olmak. Bu oldukça özneldir. Çoğunlukla stile iniyor. Önemli bir husus tutarlı bir stile sahip olmaktır . Örneğin stilin yarısını girintili olarak değiştiren kod çirkindir.


11
güzel bir açıklama, +1
koenmetsu

2
"Verimlilik" i alırdım. Kesin bir anlamda olumlu olsa da, listeye dahil edilmesi en iyi ihtimalle yanıltıcı olabilir. Normalde diğerlerinin bir yan ürünüdür ve kodlama zamanında ikincil bir endişe olmalıdır. Asıl sebep, çoğunlukla derleyici kara büyüsünü çalıştıktan sonra kendisini gösterir.
DPM

@Jubbat Indeed - bazen en verimli çözüm aslında çok çirkin kodlara yol açar. (Örneğin, klasik Hızlı Ters Karekök işlevi)
Darrel Hoffman

@DarrelHoffman Hakkı, bu uzlaşma aynı zamanda iyi kodu tanımlayan daha fazla değişkenle de olsa, sadece verimlilik ve geri kalanı da içermez ("Kod Tamamlandı" bölümünde bunun uzunca bir açıklaması vardır - ne yazık ki kitap, muhtemelen başlangıcına yakın-)
DPM

@Jubbat: Verimliliğin genellikle ikincil bir mesele olduğu konusunda hemfikirim, ancak bunun hala güzellik denklemini etkilediğini düşünüyorum.
Igby Largeman,

20

İnsanların sizi güzel kodun aşağıdaki olduğunu düşünmelerine kandırmasına izin vermeyin:

  • akıllı algoritmalar
  • sinsi dil özellikleri
  • en az tuş vuruşuyla bir problem çözme

Çünkü öyle değil. Bunun gibi bir kod şirin ve kesinlikle bir göz atmaya değer, ancak halletmek istediğiniz türden bir kod değil.

Ve biliyorsunuz ki, değişken lambdaları miras alan fantezi özyinelemeli meta şablonlu statik polimorfizm - ya da çevrimiçi hakkında ne okudunuz? Bunları kullanmak için net bir neden olmadan yenilikçi ve şık numaralara atlamak için istekli olabilirsiniz. Ancak bir dilin sınırlarını zorlayan kod da güzel değildir.

Çok seksiler .
Çok eğlenceli, ama kendinize şunu sorun: Gerçekten bu dilin anatomisini araştırmak için zaman harcamak mı istiyorum, bir dille birlikte mi çalışmak ve güzel bir şey inşa etmek mi istiyorum? Sonuçta, bir programlama dili sadece yaratma aracıdır.


Peki o zaman güzel kod nedir?

Güzel kod = bakım kodu. BU KADAR!
FORMULA BU!

Bir şeyler yazabiliyorsanız, birkaç ay sonra tekrar gelin ve bu konuda ilerleme kaydetmeye devam edin, o zaman bu çok güzel. Bir yıl sonra işlevsellik eklemek istediğinizin yanı sıra mevcut bir özelliği çimdiklediğinizi ve göreceli bir kolaylıkla yapmayı başardığınızı anlarsanız, bu güzel. Diğer insanlar kod tabanınıza girip hızlıca neler olup bittiğini anlayabilirler, çünkü işler organize edilir, daha fazla saça sahip olurlar ve aynı zamanda güzel olurlar.

Bu yüzden sormak istediğiniz asıl soru şudur: "Nasıl daha bakımı yapılabilir kod yazarım?". Korkarım bu daha büyük bir soru ve oldukça yaratıcı bir disiplin. Sadece kod yazmaya devam edin, ama bu sefer daha güzel olup olmayacağını kendinize sormayın. Kendinize daha fazla bakım yapabilir olup olmadığını sorun.



4

Buna benim almam, "Güzel Kod" un amaç veya özellikle yararlı bir terim olmadığı yönünde. Ve bunu tanımlamaya çalışmamalıyız.


İngilizce kelimesi "beauty" nun tipik sözlük tanımları aşağıdaki gibidir:

  • “1. duyuları memnun eden ve aklı memnun eden bir kişinin ya da bir şeyin tüm niteliklerinin birleşimi”
  • “1. yoğun bir estetik zevk ya da zihne veya duyulara derin bir memnuniyet veren bir kişi veya şeyde mevcut kalite.”
  • “1. Zihne veya duyulara zevk veren ve formun veya rengin uyumu, sanatın mükemmelliği, doğruluk ve özgünlük gibi özelliklerle ilişkili olan kalite.”

(Kaynak http://dictionary.com )

Yaygın olan, "güzelliğin" estetik açıdan hoş olan şeyle ilgili olmasıdır. Bu mutlaka özneldir ... "Güzellik seyircinin gözündedir" ifadesinde gösterildiği gibi.


"Güzellik" kelimesini koda uygulayabiliriz ve bariz anlam, kodun "estetik açıdan hoş" olduğudur.

Ancak daha sonra, "güzel kod" un (diğer Cevaplar tarafından önerildiği gibi) belirli bir dizi özelliğe sahip olduğunu söylemek , estetik açıdan hoş olanın açık anlamındaki bir çelişkidir . Estetik, insanların ... bireysel insanların ... şeyleri nasıl algıladıklarıyla ilgilidir.

Ya da başka bir deyişle için, bir şey var iğrenç güzeldir ne düşünmelidir bana birisi hakkında, bu sanat eserleri, insanlarda olabilir veya ... kodu.

Endişe duyduğum kadarıyla güzel kod bence güzel ve kod budur. Bu öznel ve bireyseldir ve sadece bu konuda bırakalım.


2

İşte benim tavsiyem.

Cevapları ile Bak olmayan bir programcı için "güzel kod" açıklayabilir nasıl? ve hangi özelliklere odaklanmaları gerektiğini söylediklerini görün. Ardından, Code Complete gibi bir kitap alın ve daha iyi kod yazmanın önerileri hakkında bilgi edinmek için kitabınızı okuyun.

Bir noktada eski koduna bakarken sana vuracak, "Bu çirkin." Doğrudan bir estetik reaksiyon olacak. Ve ona bakarak, kodunuzu bir programcı gibi görüntülediğinizi fark edeceksiniz ve çirkinliği görebiliyorsunuz çünkü daha iyi görünen kodun neye benzemesi gerektiğini biliyorsunuz.


1

Sırf güzel kodları sık sık okuduğunuz için, onun hakkında yazan kişilerin aynı tanımı olduğu anlamına gelmez. Ne yazık ki, sorunuza bakıldığında ilk etapta tanımlamak için can atdıkları bile görünmüyor.

Bana göre güzel kod:

  • etkileyici
  • Özlü

Etkileyici olmayan özlü kod şifreli olabilir ve özlü olmayan etkileyici kodun okunması için şişirilmiş ve sıkıcı olma eğiliminde olduğu için ikisine de ihtiyacınız vardır.

Sürdürülebilirliği, kodu güzelleştiren şeyin bir parçası olarak dahil etmem. Çünkü güzellik, üzerinde çalıştığınız bir şey değil, gördüğünüz / okuduğunuz bir şeydir. Ama sonra yine benim kişisel görüşüm.


0

Güzel kod terimi çok belirsiz ve soyut bir terimdir. Neyi temsil ettiğini ve ne anlama geldiğini anlamak kolaydır, ancak asla ikincil bir amaçtan daha fazlası olarak görülmemelidir.

Bana kod kapsamı ölçütünü hatırlatıyor. Numarayı yeterince yükselttiğinde rahatlayabilir ve başka bir şeye gidebilirsiniz. Yaklaşık% 80 kapsama sahip bir kod tabanına sahip olmak harikadır, kurşun geçirmez değil, aynı zamanda ürperme ve başka şeyler yapma konusunda da yeterlidir. % 40 kapsama sahip olmak oldukça korkutucu ve bu numarayı almanız için sizi cesaretlendirmeli.

Mesele şu ki, kod kapsamı yalnızca sayı düşükse gerçekten anlamlıdır. Yani düşük olmasına izin verme. Kapsam belirli bir noktaya ulaştığında, başka bir şeye geçin.

Benzer şekilde güzel kod harika. Güzel kodunuz varsa, harika, başka bir şeye geçin. Bu konuda çok fazla stres yapma. Asla% 100 işaretine ulaşamayacaksınız ve yaparsanız, neye benzediğine ya da neye benzediğine, ne yaptığına ya da nasıl yaptığına yeteri kadar odaklanmadığını göreceksiniz. . Bu yüzden makul bir işarete geçin ve sonra durun.

Ancak eğer kodunuz titizse, devasa bir spagetti kodu karmaşası varsa, dosyayı açmak için fiziksel olarak acı çekiyorsa, yorum veya dokümantasyon vb. Varsa vb düzeltin. Ve en kısa zamanda yap.

Zamanla, kod tabanınızın daha temiz, genellikle daha parlak ve genellikle daha güzel ve daha az dikkat çekmeye odaklandığınızda daha önemli ve daha da önemlisi daha kullanışlı olduğunu görürsünüz. Güzel kod yazmak tek adımlı bir işlem değildir.

Sihir felsefesi yoktur. Hepsi birlikte yapılan 1000 küçük adım, hepsi de kodun ne kadar güzel göründüğü ile ilgisi olmayan somut bir amaca hizmet ediyor. Ancak, hepsini bir araya getirdiğinizde, parçalarının toplamı olarak güzel bir kod oluştururlar. Voltron gibi. Veya kaptan gezegeni.


0

Buradaki cevaplara gerçekten katılıyorum, ancak daha az teknik bir yaklaşım benimsemenin güzel kodun, yazarların iyi formüle edilmiş ve kesin ama basit bir dille kendini gösteren tezahürü eldeki sorunun netliğini ifade ettiğini söyleyebilirim.

Benim için, güzel kodlara bakmak, bir sanat eserine bakmak, yapımcının niyetini gösteren yeni detaylar görmek, aynı zamanda, her biri bu kadar çok soruya cevap veren farklı parçaların nasıl gerçekleştiğini görmek gibi. varoluşunun, her şeyin sadece huşu sözleriyle tanımlanabileceği şekilde uyum sağladığı doğal bir yasa gibi hissettirdiği: muhteşem, ilham verici, güzel.

Bu nedenle, bu bakış açısıyla, bir programcı olarak kariyerinizde, başkalarının anlayamayacağı, çok fazla güzellik tarafından şımartıldığı için bilgiden yoksun oldukları ya da artık kayda değer bulunamadıkları için başkalarının anlayamayacağı güzel kod keşifleri yapabilirsiniz;)

Güzel kod, aksi belirtildiği gibi tüm pragmatik niteliklere sahiptir, tamamen katılıyorum.


0

Üç kriterim var:

  • Basit: En azından insan tarafından okunabilir olmalı. Örneğin, ton satırlı bir çözüm için O (1) 'de çalışan bir kod yazabilirsiniz, ancak 0 (n) ile çalışan kodu birkaç satırla çözerim. Bu aşırı durumlar için değişebilir ama başlangıç ​​için basitlik önemlidir.
  • Yeniden Kullanılabilir: Kod tekrar kullanılabilir, ancak üzerine yazılmamış olmalıdır. Ameliyata ihtiyacınız varsa, yıllar sonra kullanabileceğiniz şekilde tanımlamalısınız.
  • Girinti: Belki bu sizin için bir sorun değildir, ama başlangıç ​​seviyesi için, çözülmesi gereken ilk şey budur.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.