Bir takımdaki farklı programlama stilleriyle nasıl başa çıkılır?


14

Küçük bir geliştirme ekibimiz var (sadece 3 geliştirici) ve yakın zamanda yeni bir ekip üyemiz var. Akıllı bir kodlayıcı iken, kodlama stili bizimkinden tamamen farklıdır. Mevcut kod tabanımız çoğunlukla okunabilir, temiz ve bakım yapılabilir kod içerir, ancak yeni ekip üyesi birçok dosyayı hızla değiştirir, çirkin hackler ve kısayollar sunar, her yerde tanımları kullanır, yanlış yerlere işlevler ekler vb.

Sorum şu: Başkaları daha önce böyle bir durum yaşadıysa ve onunla nasıl konuşulacağı konusunda ipucu varsa.


2
Depoya ulaşmadan önce çirkin kesmek ve kısayolları yakalamak için akran değerlendirmesi kullanmayı düşünüyor musunuz?

Mümkün olduğunca iyi, tarafsız otomatik araçlar kullanın.
İş

Kodlama standartları günümüzde büyük ölçüde otomatikleştirilebilir. İnsanların dosyayı teslim etmeden önce kullandığınız her araçla her kaynak dosyayı çalıştırmasını istemek, çoğu kodlama standardı ihlallerini önlemeye doğru uzun bir yol kat edecektir. Sanırım araçların yakalayamayacağı şey OP'nin yeni insanı gibi gerçekten çirkin uygulamalara sahip bilgisayar korsanları. Kod incelemeleri gibi görünüyor ve istenmeyen stilleri reddetmek bir hacker'ı düzeltmenin tek yoludur.
Dunk

Yanıtlar:


22

Bir yıldan az bir sürede 2 geliştiriciden 10'a büyüyen bir ekiple çalışıyorum. 3 numaraydım ve ilk kodlama standartları konusunu gündeme getirdim. İki orijinal geliştirici birkaç yıldır yan yana çalışıyorlardı ve bana yabancı görünen ortak bir standart benimsemişlerdi. Açıkladığınız sorunların aynısını yaşadık.

Yaptığımız şey:

Araştırma kodlama standartları

Oluşturulan açık kaynak projelerini kontrol etmek için birkaç gün geçirdik. Ekibin hızla genişleyeceğini biliyorduk ve bazı genel yönergelere değil, gerçek projelere dayalı gerçek çözümler arıyorduk. Ayrıca en uygun kodlama standartlarını umursamadık, ancak mantıklı olacak ve tüm kod tabanımızın yeniden düzenlenmesi için çağrı yapmayacak bir dizi kural ve yönerge için önemliyiz. Eğer sen-ecek istemek bir kodlama standartları kesmek için arıyorlardı.

Üçümüz, kurulu bir PHP projesi için en iyi kodlama standartlarının Zend Framework tarafından takip edilenler olduğuna karar verdik. Neyse ki Zend Framework çalışanları çok kapsamlı bir kodlama standartları belgesi sağlıyor .

Kendi kodlama standartlarımızı oluşturma

Tabii ki başka bir projenin kodlama standartlarını projemize uygulamak mantıklı değildi. Zend Framework belgesini şablon olarak kullanıyoruz:

  • Önce projemize uymayan her şeyi kaldırdık
  • Sonra bir stil meselesi olarak algıladığımız her şeyi stilimize değiştirdik
  • Ve sonunda her şeyi yazdık

Bu yüzden elimizde oldukça büyük bir belge vardı, süslü wiki'mizde saklandık, hoş bir okuma oldu, hepimiz tarafından kabul edildi. Ve kendi başına tamamen işe yaramaz.

Sözümüze sadık kalmak

O zaman kod tabanımız yaklaşık 1 * 10 ^ 6 sloc idi. Resmi kodlama standartlarını benimsediğimizden beri, kodumuzu yeniden düzenlemeye başlamamız gerektiğini biliyorduk, ancak o zaman başka sorunlarla da karşılaştık. Bu yüzden sadece 5 * 10 ^ 3 sloc olan en temel kütüphanelerimizi yeniden düzenlemeye karar verdik.

Biz (biz yerine yerel küfür kodlama standartları usta olmak birimizi atanan usta kontrol ve standartları uygulayan sorumluluğuyla). Rolü her birkaç sprintte geri dönüştürüyoruz. İlk bendim ve neredeyse her işimi izlemem gerektiğinden çok işti.

Görev sürem boyunca orijinal belgeye birkaç yeni tartışma ve küçük ek yaptık ve sonunda biraz istikrarlı bir belgemiz vardı . Bunu arada bir değiştiriyoruz ama bu değişikliklerin çoğu dilin yeni özellikleri üzerindedir, çünkü PHP 5.3 adından başka önemli bir sürümdür.

Yeni adamla uğraşmak

Bir sonraki yeni adam geldiğinde, kodlama standartlarımızı test etme zamanı gelmişti. Kod tabanımıza küçük bir girişin ardından kodlama standartları dokümanımızı değerlendirmesini istedik. Neredeyse ağladı. Her şeyi farklı yaptığını gördü.

O zaman kodlama standartları ustası olduğum için, girdisini değerlendirmek ve belgeyi buna göre revize etmek bana kalmıştı. Onun önerileri:

  • Kişisel tarzın meseleleri (genellikle reddedildi)
  • Java geçmişi için anlamlı olan ancak PHP ile çok fazla olmayan standartlar (reddedildi)
  • PHP ile kısa süreli maruz kalmasından kaynaklanan sözleşmeler (bazıları reddedildi, ancak birçoğu ilk araştırmamızda hiç düşünmediğimiz veya bulamadığımız popüler sözleşmeler olduğunu kanıtladı)

Önümüzdeki birkaç hafta boyunca kendisine basit bir görev verildi: Kod tabanımızın birkaç bölümünü standartlara uygun hale getirin. Bu kuralları birkaç kurala göre dikkatlice seçmek zorunda kaldım:

  • Kod tabanımıza (ve genel olarak PHP'ye) aşina olmayan biri için kod nispeten kolay olmalıdır
  • Kod ne işe alındığına dair olmalı

Sürecini izledim ve iyi bir iş çıkardı. Belgemize uyması imkansız olan ve buna göre revize edilen birkaç kod parçasını belirledik (hangisi daha mantıklıysa, kod ve / veya standartlar)

Sonra yeni bir adam daha geldi. Süreci tekrarladık (bu sefer farklı usta) ve tekrar çalıştı. Ve yeniden.

Sonuç olarak

  1. Bir kodlama standartları belgesi oluşturun, ancak standartlarınızın yalnızca size ait olmadığından emin olun, ancak platformunuzun daha geniş topluluğunda ortak standartları yansıttığından emin olun.
  2. Kodlama standartları yöneticimize benzer bir rol atayın. Birisi en azından yeni kodu ve özellikle yeni üyelerin yeni kodunu izleyecek. Son derece sıkıcı olduğu için rolü geri dönüştürün.
  3. Her zaman yeni bir üyenin girdisini değerlendirin. Mantıklıysa, standartlarınızı daima revize edin. Kodlama standartları belgeniz gelişiyor olmalı, ancak yavaş olmalıdır. Her yinelemede kod tabanınızı yeniden etkinleştirmek istemezsiniz.
  4. Her yeni üyenin standartlarınızı ve sözleşmelerinizi öğrenmesi ve bunlara uyum sağlaması için bir süre bekleyin. Bu durumlarda en iyi çalışmaları yaparak öğrenin.
  5. Wiki, bu tür belgeler için harikalar yaratıyor.
  6. Kod incelemeleri her durum için harikalar yaratıyor!

Sürecin bir noktasında standartların kontrolünü otomatikleştirmek için ön taahhüt kancası kullanmamız önerildi . Çeşitli nedenlerden dolayı buna karşı karar verdik, bu konuda StackOverflow hakkında bazı ilginç tartışmalar var:

Bazıları PHP'ye özgüdür, ancak yanıtlar tüm platformlar için geçerlidir.


Keşke tüm kalkınma yönetimi uygulamaları bu kadar iyi cevaplanabilirse ... teşekkürler!
jleach

3

Evet, daha önce deneyimledim. Bir ekip içinde çalışırken, ekip üyeleri belirli kurallar ve sözleşmeler üzerinde hemfikir olmalı ve buna stili de dahil etmelidir.

Ekibinizin birlikte oturmasını ve teslim edilen kodun her parçasına uymanızı gerektiren bir dizi kural, kodlama standardı hazırlamanız gerekir.

Muhtemelen, kurallar dizisinin temeli, en azından stil, mevcut kod olacaktır. Tamamlandığında, herkes uymalı ve kod incelemesinin bir parçası olarak incelenmelidir . Standartlara uymayan kodun kontrol edilmesine izin verilmemelidir.

Demokratik bir oy olmak zorunda değil, bu arada, takım liderinin gerçekte bir otorite kurabileceği şeylerden biri. Ancak bunu söyledikten sonra, ekibin çoğunun reddettiği standartları uygulayabileceğinizi sanmıyorum. Sen edebilir tek bir kişinin, özellikle de bir yenisi, reddeder olduğunu standartlarını empoze.

Onunla nasıl konuşulacağına gelince ... Her deneyimli programcı, her yer ve takımın kendine özgü sözleşmeleri ve tarzı olduğunu bilir. Ona iyileştirmeler önermek için çok daha hoş olduğunu söyleyebilirsin, ama ekibin sahip olduğu kurallara uymak zorunda ve mevcut kodun stilini değiştirmemeli, yeni kod eklerken aynı stili kullanmalıdır.

Ayrıca şunları yapabilirsiniz anlatmak o kişiye (Bu konuda sizin yöneticisine yöneticisini veya konuşacağız varsa) (eğer tanımlarınızı, düzen, kesmek ve kısayolları söz ve böyle) uygunsuz olduğunu düşündüğünüz belirli şeyleri yapmaya değil.


Ekibimizde böyle yaptık: bir kodlama standardı belgesini tartıştık ve onayladık ve her check-in için kod incelemelerini kullanıyoruz. Oldukça iyi çalışıyor.
Giorgio

3
  1. Biri sorumlu - böyle davranması gerekiyor.
  2. Kodlama stili çok önemliyse, bu neden bu kişiye açıklanmadı ve kuralları öğrenene kadar herhangi bir koda erişemeyeceklerini bildirin.
  3. Kod İnceleme - Görünüşe göre hiç yok veya çok zayıf. Bkz.

İşe alım sürecinizde, kabul edilen kodlama stillerinin takip edilmesinin istihdam için bir gereklilik olduğunu unutmayın. Şimdi kurallara uymayanlara ne yapıyorsunuz? Programa ulaşıncaya kadar canlı koda erişimlerini kaldırarak başlayın.

.


1

İşte neler yapılabilir:

  1. Gerekli kodlama stilini açıklayan bir belge yazın ve takımdaki herkesin bunu öğrenmesini sağlayın. Her ekip üyesinden bilgi toplayın.
  2. görevleri her ekip üyesinin kendi parçalarından sorumlu olacak şekilde bölün ve kodun o kısmının kurallarına karar verebilir. Herhangi bir sorun bulunursa, onu yazan kişi sorunları düzeltir.
  3. sürüm kontrolüne kod her kontrol edildiğinde girintiyi ve diğer şeyleri düzelten sürüm kontrolüne otomatik bir araç ekleyin
  4. Farklı programcılar her zaman farklı programlama stiline sahiptir ve daha sonra değiştirmek zor olabilir. Bunu ele almanın en iyi yolu, herkesin insanların hangi stilleri kullandığını öğrenmesi için ekip üyeleri arasında bilgi paylaşmaktır. Farklı kod yazan bir ekip üyeniz varsa, mevcut ekip üyelerinizin yeni stili öğrenmesi için bir şans.
  5. İyi bir hile, mevcut kodu asla değiştirmektir. Kodu değiştirmek yerine, boş satırları yeni kodla değiştirerek yeni kod yazın. Kod hazır olduğunda, yeni kodu kullanıma almak için mevcut sistemde yalnızca en az miktarda değişiklik yapın. Bu, mevcut kodun değiştirilmesini önler, muhtemelen zaten iyi çalışanı kırır.

Kaçınılması gerekenler:

  1. birinin kodunun diğer ekip üyelerinden daha iyi veya daha kötü olduğuna karar vermek. Sadece böyle çalışmıyor - herkes dilin belirli alt kümesini kodda kullanmak için yeterince iyi biliyor. Her programcı öğrenmek için farklı bir altküme seçti ve birlikte öğrenmedikçe farklı görünecek.
  2. Birinin kod yazma şeklini değiştirme. İnsanları alışılmadık bir tarz yazmaya zorlayarak elde ettiğiniz tek şey, kodda büyük miktarda hata elde etmenizdir. İnsanlar ilk kez kullandıkları bir şey hakkında yeterince ayrıntı bilmiyorlar. Programcılar her zaman bir dil alt kümesi seçer ve bunu tek başına kullanır. Programcılarınız gotolarla dolu binlerce satır yazmışsa, goto'lar size en az miktarda hata içeren kod verecektir.
  3. Ayrıca, mevcut kod tabanınızın güzel, temiz ve bakımı kolay şeyler olduğunu düşünmemelisiniz. Her zaman iyileştirilecek şeyler vardır. Ancak her değişiklik, kendisine yazılan orijinal tasarım fikrini bulanıklaştırır. İlk kez mükemmel kod yazmayı hedefleyin, böylece değişikliklere daha sonra ihtiyaç duyulmaz. (ilk kez doğru şekilde yapılırsa, yeni adamın mükemmel kodunuzu "kırmasına" gerek yoktur)

cevabınızı OP'nin orijinal bağlamında kullanmak için ... kesmek ekleyen, makro kullanan ve diğer kötü kodlama alışkanlıklarına sahip bir programcı var, bu yüzden ürünün bir kısmını çıkarmanızı, ona vermenizi ve onu çağırmak yerine kod "kötü", "farklı" deyin. Buna daha fazla katılamamıştım. Bir ekip olarak çalışırken, sürekli iletişim, tasarım / kodlama tartışmaları ve incelemeler önemli bir parçadır ve ekip olgunlaştıkça, ekip üyelerinizin hepsi yeteneklerini arttırır çünkü işaret ettiğiniz gibi, hepimiz farklı alt kümeyle başlıyoruz, ancak birbirimizle konuşarak, biz ...
DXM

... birbirinize öğretin, böylece tüm ekibinizin beceri ve yetkinliği artar. Aksi takdirde, ürünün iyi olan kısımlarına sahip olacaksınız, ancak sürdürülemeyen karışıklıklar haline gelen daha birçok parçaya sahip olacaksınız ve bu karışıklıkların "sahipleriniz", bu hataları geldikçe düzeltmeye hacklemeye devam edecekler. İnsanların yıllarca hiç doğru yapılmayan aynı bileşen üzerinde çalıştıklarını gördüm.
DXM

1
Hayır, buradaki sorun, birinin kötü kodlama alışkanlıkları kullanması değil. Asıl sorun, ekibin geri kalanı kendi kodlarının mükemmel olduğunu düşünürken, bir kişinin kod yazma şeklini değiştirmeleri gerektiğine zaten karar vermeleridir. Eğer onlara şans verirseniz, insanlar kodlama stillerini geliştirecekler, ancak bu insanlar bir daha çabuk gelişmeye zorlarken, asla aynı şeyi yapmaya zahmet etmiyorlar.
tp1

@DXM Birçok harika dil özelliği, daha önce görmemiş veya kullanmamış kişiler tarafından 'çirkin hackler ve kısayollar' olarak adlandırılır. En iyi şey, sadece yeni adamın bir hacker olduğuna karar vermek yerine standartlar hakkında konuşmaktır.
Kirk Broadhurst

cevaplarımızı burada farklı deneyimlere dayandırabiliriz. Diğer şeylerin yanı sıra OP, "her yerde tanımları kullanmak" dedi. Yazılan sabitler yerine bu kadar kötü değil, ancak geliştirilebilir. Ama gördüm insanlar #define kod bir yığın çünkü onlar sınıf düzgün bir şekilde yeniden refactor ve hata ayıklanabilecek bir fonksiyon içine ortak kod koymak için çok tembel (veya beceri). Kesinlikle hiçbir şekilde, "farklı bir stil" düşünün ve bunu yapmaya devam etmelerine izin verirdim. Ayrıca, diğer tüm cevaplar ekibi ortak bir üslup / konvansiyona dönüştürmeye odaklanır. Bu cevap ...
DXM

1

Mevcut kod tabanımız çoğunlukla okunabilir, temiz ve bakımı kolay kod içerir

Yıllar boyunca öğrendiğim bir şey, okunabilirliğin izleyicinin gözünde olması. Birisinin tavuk çizik kodlama stilinin "okunabilir" olarak haklı olduğu birçok durum gördüm ve mükemmel makul insanların hangi kodlama stillerinin en "okunabilir" olduğunu tartıştığını gördüm. Belki bu adam tarzınızı okunabilir görmüyor olabilir?

Bununla birlikte, yeni adam diğer standartlara değil, standartlarınıza uymalıdır.


0

Depoya yeni kod için çekme isteklerini kullanmayı düşünün. Bu, kod incelemesi yapmak için uygun bir yer sağlar. Kod incelemesini geçemeyen kod, şekline gelene kadar depoya birleştirilmez.

Sadece çekme isteklerini çok büyük yapmamaya dikkat edin. Deneyimlerime göre, yarım günden en fazla iki güne kadar daha büyük olmamalıdırlar ya da çok fazla birleştirme çatışması yaşayacaksınız.

Bitbucket veya github gibi çevrimiçi vcs sistemleri bu işlevi destekler. Yerinde bir yaklaşımı tercih ederseniz, stash şu anda en iyi bahis gibi görünüyor.


0

İzleyebileceğiniz basit bir kural vardır: Bir dosyayı kodla değiştirirseniz, o dosyada kullanılan kodlama standardını kullanırsınız. Yeni bir dosya oluşturursanız, iyi bir kodlama standardı kullanırsınız. (Artı: Derleyiciniz uyarı verebilirse, tüm makul uyarıları etkinleştirirsiniz, uyarıları = hatayı mümkünse açarsınız ve uyarı içeren kodlara izin vermezsiniz. Artı: Dosyada toptan satış gibi değişiklikler yapan araçlar kullanıyorsanız boşluklara veya benzerlerine sekmeler, bunları KULLANMAYIN).

Kodlama standartları hakkında büyük tartışmaların olmasının nedeni, bir standardın diğerinden (genellikle) daha iyi veya daha kötü değil, sadece farklı olmasıdır. Gerçekten kötü olan tek şey kodlama stillerini karıştırmak.

Açıkçası, herhangi bir iyi programcının, belirli bir standardı tercih etseler de etmeseler de, herhangi bir kodlama standardını takip ederek kod yazabilmelerini beklerim.

Öte yandan kalite standartları da var. Kalite standartlarınızı karşılamayan kodları asla kabul etmeyin.

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.