Bir geliştirme ekibinde farklı kodlama stillerini desteklemenin bir yolu var mı


13

Sorun: İki geliştirici => çirkinlik hakkında üç görüş, yeni hatta parantez içinde olsun ya da olmasın.

Projelerimizde genellikle üç veya dört kişiyle çalışırız ve her birinin kendi kod stili vardır. Biliyorum, ortak çözüm bir kod stili üzerinde anlaşmaya varmak, herkes kullanmak zorunda, ama yaratıcı programcıları onlara uymayan bir takımda zorlamak istemiyorum.

Yani soru şudur: Her programcının kendi stilini yaşamasına izin vermenin bir yolu var mıdır, ancak depo içinde ortak bir kod tabanına sahip mi? Ben ödeme ve taahhüt kişisel ve ortak tarzı arasında değişen bazı git / svn / ne olursa olsun eklenti düşünüyorum. Bana öyle geliyor ki, bu yaklaşımdaki zor kısım, bir dosyanın sürümleri arasındaki doğru farkları desteklemektir.


1
Çoğu dil için otomatik kod formatlayıcılar vardır, ancak bazıları için (örn. C ++), dili ayrıştırmanın karmaşıklıkları nedeniyle tamamen güvenilir hale getirmek son derece zordur.
Joris Timmermans

5
Gerçekten kötü bir fikir. Ekibinizden rızaya dayalı bir standart bulmasını isteyin, ardından uygulamalarını sağlayın. Biraz şarap varsa, onlara biraz büyümelerini söyleyin.
Clement Herreman

8
Belki de son derece yaygın olan diğer açıklamaların burada yapılması gerekir: Kod stillerindeki farklılıklar ile ilgili gerçek bir sorun var mı? Kırık olmayan bir şeyi tamir etmeyin!
Joris Timmermans

5
"ancak yaratıcı programcıları kendilerine uymayan bir takımda zorlamak istemiyorum" - programcılarınız girinti veya küme stili değişiklikleri gibi basit şeylere uyum sağlayamazlarsa, daha iyi geliştiriciler tutmanız gerekir. Bir veya iki hafta boyunca yeni bir stil kullandıktan sonra unutursunuz.
Mike Weller

4
@MikeWeller Tersi iddia edilemez mi? Adlandırma kuralları, önemli olduğunu düşündüğüm tek şeydir, çünkü bir şeyin amacını tanım bağlamının dışında tanımlamayı kolaylaştırır. Birisi blokların yuvalandığı, başladığı ve bittiği yerde netlik sağlamak için yarı tutarlı bir şekilde şekillendirdiği sürece, neden bu kadar önemli olması gerektiğini asla anlamadım.
Erik Reppen

Yanıtlar:


20

Hayır, bir standart oluşturmalısınız. Ekip üyesi B değişikliğiniz varsa (otomatik bir IDE aracıyla veya el ile), ekip üyesi A'nın bir yığın yığını yazdı, bu taahhüt edilecek ve değişiklik olarak gösterilecektir.

Bu neredeyse her takımın karşı karşıya olduğu ve standartların bu nedenle "zorlandığı" bir şeydir. Dil yetkilileri standartlarını bir temel olarak izlemenizi ve bunları ekibinize uyacak şekilde benimsemenizi öneririm.

Tutarlı bir kodlama stiline sahip olmak, projenin sürdürülebilirliğine yardımcı olacak ve kod üzerinde çalışan yeni insanlar için giriş engelini azaltacaktır.


11

Hayır, bir kodlama standardı (tercihen zaten var olan) tanımlamanız ve geliştiricilerinize uymasını sağlamanız gerekir. Profesyonel bir programcı olmak, üzerinde çalıştığınız projede kullanılan herhangi bir kodlama standardına uyum sağlayabileceğiniz anlamına gelir.


2
+1. Bir tanesini seçmelerine izin verin, ama uygulamalarını sağlayın.
Clement Herreman

Biçimlendirmenin, programların yalnızca "geçerli" veya "geçerli değil" değil, aynı zamanda "geçerli ve iyi biçimlendirilmiş" üçüncü bir durumuna sahip olacak şekilde bir programlama dili standardının bir parçası olmasını diledim.
JesperE

4
Girintinin bir dil semantiği olduğu python'da (az ya da çok) durum budur.
Clement Herreman

2
Go kesinlikle böyle bir zorlama değil, yerleşik bir kaynak kodu biçimlendiricisi ile birlikte gelir go fmt. Bkz. Golangtutorials.blogspot.fr/2011/06/…
Clement Herreman

1
@JesperE olduğu ile Python uygulanan PEP8 ve ilgili aracı inventively adlı pep8 .
phihag

8

EVET, stillerin hepsi mantıklı olduğu sürece ve insanlar tercihlerinin eşleşmesi ve / veya stilleri tek bir kod dosyasında karıştırmak için diğer insanların kodlarını değiştirmeye devam etmezler.
İdeal değil, ancak eski kodu kendinizden farklı bir "standarda" devralmak ve kod tabanınızla entegre etmek zorunda değilsiniz.
Dolayısıyla, yapmanız gerekiyorsa, bazı yönergeler:

  • tercihlerinize uyacak şekilde farklı tarzda kod değiştirmemek, zamana mal olur ve hatalar getirir
  • herhangi bir dosyada tutarlı kalır. Yani A stili başlangıçta yazmak için kullanılmışsa, herkes A stilini değiştirirken kullanır
  • genel arayüzünüz için ortak bir standart oluşturun, bu nedenle dışarıya maruz kalan her şey için (ve evet, bir sistemin diğer alt bileşenleri dışarıdadır).

2
Profesyonel geliştiricilerin genellikle birbirlerinin stillerini birleştirme eğiliminde olduklarını da ekliyorum. Bazı noktalarda gayri resmi tartışmalar yapacaklar ve anlaşmaya varacaklar.
Joris Timmermans

Otomatik kod yeniden biçimlendirme kullanımının asgari düzeyde tutulması gerektiği konusunda uyarıda bulunur (açıkça yasaklanmadıysa).
Mart'ta

2
"Tercihlerinize uyacak şekilde farklı tarzda kodların değiştirilmesi gerekmez, zamana mal olur ve hatalar ortaya çıkarır" - tam tersi - otomatik olmayan bir standardın elle eşleştirilmesi çok zaman kaybettirir, bir kod formatlayıcı çalıştırır, değişikliği 'seçeneklerle biçimlendirilmiş' olarak işler. ne olursa olsun "o zaman fonksiyonel değişiklikler yapmak çok daha hızlı.
Pete Kirkham

Bu cevap aslında sorunun "otomatik biçimlendirme" bölümünü kaçırmış olabilir düşünüyorum?
Joris Timmermans

Dosyalar arasında çeşitli stiller, sadece tutarlı bir stile sahip olmaktan çok daha zordur.
Andy

4

Kısa cevap hayır.

Düşünceler işte özellikle Yazılım Geliştirme gibi bilgiye dayalı bir işte değerlense de, geliştiriciler bir düşüncenin sadece bir fikir olduğunu ve hangi satır girintisi standardının en iyi olduğu konusunda tartışmayacak bir yazılım yazmak için orada olduklarını fark etmelidir.

Standartlar belgesinin amacı, aşağıdakileri ele alan bir dizi ortak kodlama standardını / sözleşmesini uygulamak / önermek olmalıdır

  1. Sekme, girinti, kullanımı {, (,
  2. Değişken, Nesne ve İşlev adı yani CamelCase, Macarca gösterim
  3. İstisna Nasıl / ne zaman / nerede yapılacağını işleme
  4. Kod yorumları. Her zaman bir tasarım dokümanı, hata numarası vb.

Standart belgeleri, kodun kurallarında okunması, sürdürülmesi ve tutarlı olmasını sağlar.

Bu, orijinal geliştiricinin şirketten ayrılmasından birkaç yıl sonra, check-inlerden önce kodu incelerken, başka bir kişinin kodunda hata ayıklarken veya kodu değiştirirken çok değerlidir.

Normalde bir Kodlama Standartları belgesi oluştururken, kullandığım dil için endüstri standartlarını gözden geçiririm (C, C #, SQL), en uygun standartları kullanır, yorum için en üst düzey / etkili geliştiricilere dağıtır, yorumları uygun olduğunda birleştirir ve sonra belgeyi bırakın.


1
Gerçek pratikte, birçok dükkan, genellikle Eski El veya PrimaDonna olan bir geliştiriciye sahiptir, bu da ilgilenecek insanların geri kalanı için Biçimlendirici Kutsal Savaşlar yaratmayı sevmektedir. Profesyonel == Ne dersem. Ne derseniz == Profesyonel olmayan. Ve sonra devolur. "Çok sayıda küresel değişken kullanın, asla yeni sınıflar yaratmayın, nesneye yönelik programlamayı her ne pahasına olursa olsun kaçının ve hiçbir şeyi değiştirmeyin" gibi kaba şeyler gerektiren kodlama standartlarını gördüm. Ne yazık ki, insanların "Kodlama standartları" adı verilen bir şeyin kapsamına girmeye çalıştıklarının bir sınırı yoktur.
Warren P

4

Kod, sürüm kontrol sisteminize bağlı olmadan önce otomatik olarak yeniden biçimlendirmek teoride mümkündür.

Ancak , büyük bir sorun var: otomatik kod biçimlendirme araçları% 100 güvenilir değil. Böylece, aslında bu sistem ile kod sorunları getirebilir. Aklımda, bu fikri öldürüyor. Fonksiyonel koda sahip olmak her zaman doğru biçimli koddan daha önemlidir!

Proje bölümlere ayrılmışsa ve kodun çoğu bölümü ayrı ayrı programcılar tarafından "sahiplenilme" eğilimindeyse, kendi stillerini (akıl içinde) kullanmalarına izin vermek uygun olabilir. Bununla birlikte, birkaç kişi sıklıkla aynı kod parçası üzerinde çalışıyorsa, muhtemelen bir stili zorlamak gerekir.

İşte Stack Overflow ile ilgili benzer bir tartışma .


2
Bağlantılı tartışmada kabul edilen cevaba da dikkat edin!
Joris Timmermans

1

Aşağıdaki durumlarda tek yönlü otomatik olarak yeniden biçimlendirme kodu uygulanabilir bir çözüm olabilir:

  1. Gerçekleştirmek istediğiniz kural ve programlama diliniz için gerçekten işe yarayan bir otomatik formatlayıcı bulun.
  2. Yeniden biçimlendirme işlemi gerçekleştirilebilir, böylece yeniden biçimlendirme, gerçek fonksiyonel değişikliklerle karıştırılan ve ayırt edilemeyen değişiklik günlüklerinde görünmez.
  3. Ekibinizin hangi sözleşmenin uygulanması gerektiğine karar vermesini sağlayın (çünkü genel olarak bir geliştiricinin kişisel tercihine çıkışta "geri dönüş" yoktur, en azından bildiğim kadar değil).

Bunların hiçbirini birçok durumda yapmak kolay değildir, bu yüzden savaşlarınızı burada seçmeyi düşünün! Ekiplerin bunu, geliştiricinin PC'sinde yeniden biçimlendirmenin zaten gerçekleştiği bir C # /. NET projesi için başarıyla yaptığını gördüm, bu nedenle bazı durumlarda mümkündür.


1

kesinlikle yapabilirsiniz. Onun tüm küçük şeyler terleme değil.

Önemli olan tek standart "değişikliklerinizi mevcut kodla aynı stilde tut". Kendinizi tercih ettiğiniz bir kodlama stiline sığabildiğiniz sürece, herhangi bir kodlama stiliyle çalışabilirsiniz.

Peki aynı şirket içinde 3 farklı tarzda çalışmakla ilgili en önemli şey nedir? Kişisel geliştiriciler, bu anlıyoruz gerek onlar gibi onların kodunu bulmak ama bir şekilde kod yazmak onlar kullanır farklı bir stil, onlar farklı bir dosyada değişiklik yapmak bir kez sahip (ya da gerçekten kötü bakacağız) bu stili korumak için . Yeniden biçimlendirmeye izin verilmez (veya sürekli olarak yeniden biçimlendirilirler ve scm farkları işe yaramaz) (ve bunu yaparsanız, otomatik olarak biçimlendirilmiş olmalıdır).

Şanslar, bununla başladıklarında, hangi stilin kullanılacağı konusunda biraz fikir birliğine varırlar ya da stil çoğunlukla birlikte sürüklenirler. Bu konuda çocukça olacaklar ve her zaman kodlarını yeniden biçimlendireceklerse, internetten bir standart indirmenin ve kullanmasını talep etmenin zamanı olacaktır. Bunu yine de yapmak isteyebilirsiniz, sadece yüzlerinde "iyi ya da başka bir oyun" kartı olarak sallayın.

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.