Tutarlı bir kod stilinin gerçek değeri nedir


47

Bir müşteri için yeni bir çözüm uygulayan danışman ekibin bir parçasıyım. Müşteri tarafı kod temeli (React and javascript) kod incelemelerinin çoğundan sorumluyum.

Bazı ekip üyelerinin, sadece stilden kimin yazdığını söylerken rastgele bir dosya seçebileceğim bir noktaya kadar benzersiz kodlama kalıpları kullandıklarını fark ettim.

Örnek 1 (bir defalık satır içi işlevler)

React.createClass({
  render: function () {
    var someFunc = function () {
      ...
      return someValue;
    };
    return <div>{someFunc()}</div>
  }
});

Yazar, someFunc'a anlamlı bir isim atayarak, kodun okunmasının daha kolay olacağını savunuyor. Fonksiyonu çizerek ve yorum ekleyerek bunun yerine aynı etkinin elde edilebileceğine inanıyorum.

Örnek 2 (sınırsız işlevler)

function renderSomePart(props, state) {
    return (
      <div>
        <p>{props.myProp}</p>
        <p>{state.myState}</p>
      </div>
    );
}

React.createClass({
  render: function () {
    return <div>{renderSomePart(this.props, this.state)}</div>;
  }
});

Genelde yaptığımız şey budur (devleti geçip sahne almak zorunda kalmaktan kaçınır):

React.createClass({
  renderSomePart: function () {
    return (
      <div>
        <p>{this.props.myProp}</p>
        <p>{this.state.myState}</p>
      </div>
    );
  },
  render: function () {
    return <div>{this.renderSomePart()}</div>;
  }
});

Bu kodlama kalıpları teknik olarak doğru olsa da, kod tabanının geri kalanıyla veya Facebook'un (React'in yazarı) öğreticiler ve örneklerde bahsettiği stil ve kalıplarla tutarlı değillerdir.

Zamanında teslim etmek için hızlı bir adım tutmamız gerekiyor ve takımı gereksiz yere sıkmak istemiyorum. Aynı zamanda makul bir kalite seviyesinde olmalıyız.

Ben bunlar gibi tutarsızlıklar (her bileşen ile karşı karşıya müşterilerin bakım geliştirici olarak kendimi hayal çalışıyorum olabilir aynı şeyi yapmanın başka bir yolunu anlamak gerektirir).

Soru:

Tutarlı bir kod tabanının müşteri ve bakım geliştiricileri tarafından algılanması ve bunun gibi tutarsızlıkların devam etmesine ve potansiyel olarak yayılmasına izin vermenin değeri nedir?


50
Tutarlı bir yazımın değeri nedir? Metin okuma ve yazmada kalıcı, sürekli bir hızlanma. Tutarlı kod stilinin değeri nedir? Okuma ve yazma kodunda kalıcı, tutarlı bir hızlanma. Başka ne istersin?
Kilian Foth

9
Bir şeyleri okuduğunuzda okuduğunuzdaki kalıplara alışır ve gelecek şeyleri nasıl okuyacağınızı tahmin etmeye gelirsiniz. Tutarlılık yoksa, modeller tahmin edilemez ve kodun daha fazla yorumlanması gerekiyor, okuyucuyu yavaşlatıyor.
Kanadalı Kodlayıcı

1
Joel'in bu konuda iyi fikirleri var. Kısacası, iyi bir kodlama standardı, böceklerin görülmesini kolaylaştırır. joelonsoftware.com/articles/Wrong.html

13
Adlandırılmış işlevleri neredeyse her zaman JavaScript'teki adsız işlevler için tercih edildiğini eklemek istiyorum. Hata ayıklama yaparken bu yığında nerede olduğunu belirlemek için bir ton yardımcı olur.
Mike McMahon

1
@yoniLavi bunu meta üzerinden sormalısınız.
RubberDuck,

Yanıtlar:


48

Kod transferi avantajı

Bir kitaplığın sağladığı kalıpları takip etmek, Reactsizin durumunuzda, sunduğunuz ürünün, React'e aşina olan diğer geliştiriciler tarafından da kolayca toplanıp muhafaza edileceği anlamına gelir.

Potansiyel Geriye Uyumluluk Sorunları

Bazı kitaplıkların yeni bir ana sürümü olacaktı ve kalıplarınız önemli ölçüde farklıysa, gelecekteki yükseltmenizi yavaşlatan / durdurarak geriye dönük uyumluluktan ödün verilebilir. ReactYeni sürümlerle nasıl başa çıkacağımı bilmiyorum ama bunun daha önce olduğunu gördüm.

Takımdaki Yeni Üyeler Üretken Hızlı Olmaya Başlıyor

Yazarın sağladıklarını takip ederseniz, çerçevenizi kullanarak yetenekli geliştiricileri işe alma ve yeni kalıplar öğretmek yerine, bunları sisteminizle daha hızlı başlatmanız daha olasıdır.

Potansiyel Keşfedilmemiş Konular

Gelecekte henüz yaklaşımınızla henüz keşfetmediğiniz, yazarın yaklaşımıyla çözülmüş olan sorunlar olabilir.

Olduğu söyleniyor, inovasyon her zaman bir risktir, yaklaşımınızın daha iyi olduğunu ve ekibiniz için çalıştığını düşünüyorsanız, buna devam edin!


Bu mükemmel puan için teşekkürler. Genelde kütüphanenin sağladığı kalıpları takip ediyoruz. Verdiğim örnekler (kod incelemelerinde bulundu) sapma. Müşterinin reddettiğinden ve teslimatımızın bir bölümünü tekrar etmemizi isteyebileceğinden endişeliyim, çünkü "Tepki gibi görünmüyor ve hissetmiyor". Şimdi neden bunu yaptıklarını biliyorum.
Andreas Warberg

2
+1 "rather than teaching new patterns"- usule dayalı eğitim yeni işe alımlarla dolu çok büyük bir zaman dilimidir. Her zaman iyi bilinen modelleri destekleyerek
çalışın

1
@Alexus: Geriye dönük uyumluluk açısından, React hala sürüm 1.0'da değil. Mevcut sürüm 0.13, bazı oldukça sert şekillerde uyumluluğu bozdu, ancak bu hataların gerçekleşip gerçekleşmeyeceği, React bileşenlerini çağırmak için hangi mekanizmanın kullanıldığına bağlı. React'i nasıl çağırmak için çok tutarlı kurallara sahip olmak, React yükseltmelerinin kod kırmasını engellemeyebilir, ancak tutarlı kodu düzeltmek daha kolay, daha hızlı ve daha güvenilirdir. Geriye dönük uyumluluk sorunlarıyla ilgili endişeleriniz Tepki durumunda kesinlikle haklı. Örneğin, stackoverflow.com/a/20913637/18192
Brian

53

Tutarsızlıklar durup düşünmeye neden , hangi ve nerede :

  • Kodun bir bölümünü okuduğunuzda ve kodun geri kalanından farklı bir stil kullandığını gördüğünüzde, merak etmenizi sağlar - bu özel kısım neden farklı? Bilmem gereken özel bir neden var mı? Bu tehlikelidir, çünkü gerçekten bu kısmın farklı olmasının bir sebebi varsa, bunun farkında olmanız gerekir, yoksa başka kötü böcekler yaratabilirsiniz. Bu yüzden, sizi bu duruma dokunan orijinal problemi düşünmek yerine, neden farklı olduğunu düşünerek zaman harcıyorsunuzdur ve bunu çözemezsiniz, böylece sormak, zamanlarını boşa harcayarak, orijinal yazara gidersiniz. daha da kötüsü - bu süreçte, üzerinde çalıştığınız sorunların zihinsel modelini kaybedersiniz.

    Ekipte bu koda dokunması / okuması gereken diğer geliştiriciler tarafından çarpın.

  • Birden çok stil kullanan bir koda eklemeniz gerektiğinde, eklemeniz için hangi stilin kullanılacağına karar vermeniz ve karar vermeniz gerekir . Önemli olan yeterli kararları vermelisin - önemli olmayan kararları düşünerek zaman kaybetmek zaman kaybı.

  • Stil tutarlı olduğunda, kod içinde gezinmek kolaydır, çünkü tutarlılık malzemelerin bulunduğu yeri hızlıca bulmanıza yardımcı olur . Tutarsız stille bile grepleme zorlaşır çünkü aradığınız şeyin ne tarz kullandığını bilmiyorsunuzdur.


6
Harika, fanstastic içgörü. Neden bazı geliştiriciler bunu sadece “alıyor” gibi görünüyor ve diğerleri buna karşı savaşıyor?
Dogweather,

2
Şüpheli olduğu için, şimdi önerilmekte olan tutarlı bir stil, önceki projelerde çalıştıkları ile derinden tutarsız. Özellikle farklı ortamlarda önemli miktarda deneyime sahip olanlar için.
Kickstart

4

Kod iyi yazılmış ancak tam olarak tutarlı değil, bu yüzden bazı müşteriler umursamıyor. İşler kötüye gitmeye başladığında, onlara başka bir vuruş yapmalarını ister misiniz? Çok geliştiricili bir proje üzerinde çalışmak için bir şirket kiraladıysam ve bana bir kodlama standardı olduğunu ve takip ettiğini göstermedilerse, şüpheci olurdum.

Zamanında teslim etmek için hızlı bir adım tutmamız gerekiyor ve takımı gereksiz yere sıkmak istemiyorum.

Kodlama standartları çok çılgınca olmadığı sürece, herkesin kullanması o kadar zor olmamalı. Projeler durur, çünkü insanlar yazacakları ve yazacakları kodları bilmeyip yazabileceklerini bilmezler. Uyması gereken orantısız bir zaman gerektiğinde uzağa gittiğinizi bileceksiniz. Umarım, bu senin ilk rodeo değil.

Kendi testinizi yürütün Tek yapmanız gereken atamaları bir başkasından diğerine geçmek ve başkalarının dosyasını bitirmelerini sağlamaktır. Şeyleri sürümlerine tamamen yeniden biçimlendirmek için zaman harcıyorlar mı? Takip etmek çok mu zor? Müşterinizin bakım ekibi için daha da kötüleşecek.


2

Stilleri doğal İngilizce olarak yazarken olduğu gibi kod stillerini işleme konusunda da iyi şanslar elde ettim. Her gün konuşmamızda konuşma tarzımızı taklit eden konuşma İngilizcesinden, genellikle ağır ve stilize edilmiş biçimsel İngilizceye kadar çok çeşitli stiller var.

Nihai ürünün bu anlamda nasıl görünmesini istediğinizi düşünün. Bazı durumlar, o dönemde en iyi olan yapıyı kullanmayı çok destekleyicidir. Diğerleri düzgün bir kadans ve yapı gerektirir. Bu, özellikle ürününüz resmi İngilizce yazılmış gibi olsa en iyisi ise geçerlidir. Bu durumda yardımcı olabilir, ancak ürünün genel hissini yırtıyorlar.

Genel olarak, kodlama standardınız ne kadar tutarlı olursa, geliştiricinin dikkatini ilginç bir şeye çekmek için daha az çaba göstermesi gerekir. Kodlama standartlarındaki büyük çeşitliliği destekliyorsanız, olağandışı veya benzersiz bir şey yaptıklarını söylerken geliştiricilerin gürültülü olması gerekir. Bir geliştiricinin neyin önemli olduğunu düşündüğünü ifade etme girişimi genellikle kodun kendisinin dinamik aralığını gölgeleyebilir. Bu olduğunda, böceklerin kayması kolaydır çünkü onları görmek çok zordur.

Bu argümanın diğer tarafında, kodlama standartlarınız ne kadar gevşek olursa, geliştiricilerin sözdizimlerini soruna uyarlamaları o kadar özgür olur. Kodlama standardı argümanı ile ironik bir kontrast olarak, çok fazla standardizasyon stilize kod yapısına yol açabilir ve bu da hataların daha kolay kaymasını kolaylaştırabilir.

Aradığın şey kendi ekibinin mutlu ortamı.


2

Diğerlerinin de belirttiği gibi, bakım geliştiricileri arkanızda durmak zorunda kaldıklarında, farklı tarzda bir kod bölümü durmalarına neden olacak ve bu bölüm için neyin özel olduğunu anlamaya çalışacak. Ayrıca tutarsız stilin diğer bölümlere yayılma riski çok daha yüksek bir karmaşaya yol açıyor.

Bu sorunun cevabını zaten bildiğiniz ve bunun için olmasa bile karşı karşıya gelmeyeceğiniz izlenimini edindim:

Zamanında teslim etmek için hızlı bir adım tutmamız gerekiyor ve takımı gereksiz yere sıkmak istemiyorum.

Bu her zaman evrensel bir takas gibi görünmektedir ... doğru yapmadan vs çabuk yapıyor. Müşterinin teslim tarihini değiştirmek için iyi kodlama uygulamalarını feda etmenin sonuçlarını yalnızca siz değerlendirebilirsiniz. Ancak, (muhtemelen alışılmadık veya karşı sezgisel) bir kodlama stilini takip etmenin ekibinizi yavaşlatmaması gerektiğini ve bu yüzden son başvuru tarihlerinin ciddi şekilde kayması için dikkat etmemesi gerektiğini gözlemlediğinde JeffO ile aynı fikirdeyim.

Bu konsepti yıllardır bilmeme rağmen, son zamanlarda " teknik borç " terimini öğrendim . Şimdi disiplinli bir tarzı izlemiyorsanız, eninde sonunda ödenmesi gereken teknik borcu dikkate almanız gerekir.

Ne yazık ki, eBusiness’in belirttiği gibi, müşteriniz özellikle teknik olarak meraklı olmadıkça veya daha sonra kodu kendi başlarına koruyamayacaksa, tutarlı kodlama standartlarının değerini takdir etmeleri zordur. Bununla birlikte, herhangi bir makul iş adamı, “şimdi bir miktar önleyici bakım” (iyi kodlama şeklinde) “daha ​​sonra önemli onarım masraflarından kaçınmaya yardımcı olacağı” kavramını kavrayabilmelidir (daha sonra atık üreticileri zamanından sonra dağınıklık).


Müşteri teknik olarak anlayışlı ve büyük olasılıkla çözümün bir noktada bakımını ve daha da geliştirilmesini üstlenecek. Şimdiye kadarki soru-cevap çalışmaları işlevsellik konusuna değil, görsel düzene odaklandı. İşlevsellik hataları ortaya çıkmaya başladığında, bakımın nasıl bir şey olduğunu hissedeceğiz. Kod incelemelerinin daha tutarlı bir şekilde daha hızlı olacağını düşünüyorum (aynı şeyi yapmanın şaşırtıcı yeni yollarını azaltın). Müşteri açık bir şekilde maksimum tutarlılığı istiyor (ancak bunun için fazladan ödeme yapmıyor).
Andreas Warberg

2

Burada en çok oy alan cevaplar, kod kodlarımızın nasıl olmasını istediğimizi detaylandıran, kolayca kabul edilebilir teorik en iyi uygulamaları tekrar eder. Ama gerçek kod bir şekilde asla böyle gözükmüyor. Bu mükemmel kod temeli oluşturmaya çalışırsanız, kaçınılmaz olarak başarısız olacaksınız. Bu, daha iyisini yapmaya çalışmamamız gerektiği anlamına gelmez, ancak hedeflerimizi gerçekleştirebilmemizin gerçekte ne kadar uzağında olacağının bir sınırı olmalı.

Küçük şeylere çok fazla odaklanılması, işin genel olarak en verimli şekilde nasıl çözüleceği gibi, daha önemli konulara odaklanma riskini kaybetme riski taşır.

Size ilk örneğe stil olarak bakmayacağım, stil net veya yanlış olmayan seçeneklerin olduğu, bu durumda ekstra fonksiyonun tersi olmayan kod bloğu olduğu. Sadece 2 ekstra satır, hala okunması kolay ve düzeltilmesi kolaydır, bu nedenle bu örneğin kendisi büyük bir sorun değildir.

Çok daha büyük sorun, kıvrımlı kod şişmesidir. Sarmalayıcı işlevleri, sınıf hiyerarşileri ve etrafındaki kodun, gerçek bir amaca hizmet etmedikleri açık olmadığı kadar karmaşık olduğu yerlerde, diğer yapıların her türlü. Kodda belirgin bir şişkinlik varsa, muhtemelen çok daha belirgin olmayan bir şişkinlik vardır. Hakkında bir şeyler yapmak çok zor, fark etmesi zor ama aynı zamanda çok daha büyük bir konu.

Müşteriler hakkında

Müşteriler, ihtiyaçlarını çözen çalışan bir ürün elde etmeye odaklanırlar. Kod kalitesi konusunda endişe duyan birkaç müşteriden birine sahip olsanız bile, ikincil bir öncelik olacak ve kod kalitesi konusundaki fikirleri sizinki ile tam olarak tutarlı olmayabilir. Müşteri şirketi kendi programcılarına sahip olabilir, ancak hala iyi bir iş yapıp yapmadığınıza karar verecek olan bir yönetimdir ve yönetim büyük olasılıkla kod kalitesinin ne anlama geldiğini bile bilmiyordur.


Kodları incelerken, doğrudan DOM manipülasyonu, yerelleştirilmemiş kullanıcıya yönelik dizeler, yeniden kullanım fırsatları (mevcut bir bileşen, yardımcı, önceden yüklenmiş 3. taraf kütüphanesi vb.), Uyumsuz veya uygunsuz değişiklikler gibi kesinlikle önemli olduğuna inandığım birkaç şeyi arıyorum. paylaşılan kod, müşteri ve ekip sözleşmelerinden sapma. Stil tutarlılığı ve kodlama kalıpları benim için net değildi, bu yüzden kod incelemelerindekilere nasıl cevap vereceğimi bilemedim.
Andreas Warberg

0

Farklılıkların okunaklılığı hakkında çok şey var. Kod stili etrafa fırlarsa, farklar programın anlamsal bir anlamı olmadan değişiklikleri gizler ve birleşmeleri zorlaştırır veya imkansız hale getirir.

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.