Bob Amca neden önleyemiyorsanız kodlama standartlarının yazılmaması gerektiğini öne sürüyor?
Sizce fikrinin arkasındaki nedenleri soruyorsanız, o zaman bir cevap gönderirse bir cevabınız olabilir ( bizim fikrimiz önemsizdir),
Neden bir Kodlama Standardı yazmamalıyım?
Bu konuda haklı olup olmadığını soruyorsanız : İzin vermemek için hiçbir nedeniniz olmadığını söyleyen tek popüler kişi olmamı sağlayın.
AŞAĞI YAZIN . Ancak nedenlerimi açıklamaya çalışacağım ...
David olmamalıdır neden Stephen cevabın ana noktası olmadığını bir yorum önerdi yazma belgeleri ancak hangi olduklarını oluştururlar. Eğer kurallar araçlarda resmileştirilirse (yalnızca manuel kod incelemesi değil) o zaman katılıyorum (yasa başka bir şey gerektirmediğinde). Maalesef araçların her şeyi kontrol edemediğini (hesaplama teorisi arkadaşımız değildir), çünkü belirli bir çeviri birimi veya paketi ile sınırlıdırlar ya da en sevdiğiniz dil sınır ne olursa olsun .
Ancak Bob Amca'nın ifadesi, onun hakkında konuştuğunu düşünmemi sağlamaz.
Böyle bir uzmanla aynı fikirde miyim? Alıntı yaptığım yazıdaki hemen hemen her nokta için bunu yapıyorum (ayrıntılar için bu cevabın ikinci bölümüne de bakın). Nedenini anlamaya çalışalım (kodlama yönergelerinin yalnızca küçük biçimlendirme sorunları hakkında olmadığını zaten varsayalım ).
- Bazı durumlarda, yazılı kodlama standartları kanunen zorunludur.
- Belgeleri okudum ve yalnız olmadığımdan eminim. Ekip üyeleri zaman içinde değişebilir, bilgi 5-10 yıllık bir kod tabanında veya ekip üyelerinin zihinlerinde olamaz. Kuruluşlar, iç yönergelere uymayan insanları kovmalıdır.
- Kodlama standartları bir kez onaylandıktan sonra , sık sık değişmeyecekler ve eğer bunu bilmek istiyorlarsa. Standartlar değiştiyse, belgeleriniz (koddaki) güncel değildir, çünkü tüm kodunuz yeni standarda uymaz. Yeniden biçimlendirme / yeniden düzenleme yavaş olabilir ama her zaman yazılı olan yetkili takip etmek kılavuz.
- Hiç şüphesiz, bir kural (ek olarak yanlış anlayabileceğiniz BTW) öngörmek için 10 / 20K LOC'yi denetlemekten daha 5 sayfalık bir belge okumak daha iyidir .
- Tasarım ilkeleri ve kodlama tarzı hakkında birçok kitap yazan birinin, kendi kurallarınızı yazmamanız gerektiğini önermesi, bize bazı kod örnekleri bırakması durumunda daha iyi değil mi? Hayır, çünkü yazılı kurallar size sadece ne yapmanız gerektiğini değil, aynı zamanda kodlarından yoksun olan iki şeyi söyler: ne yapılmaması ve yapılmaması için nedenler.
"Özgür öz-örgütlü programlama" ninja 16 yaşındaki bir adam için iyidir, ancak kuruluşların başka gereksinimleri vardır :
- Kod kalitesi şirket düzeyinde verilmelidir (ve tanımlanır) - bu, tek bir ekibin karar verebileceği bir şey değildir. Neyin daha iyi olduğuna karar verme becerisine bile sahip olmayabilirler (örneğin, MISRA'yı incelemek veya her bir kuralı yalnızca anlamak için gerekli geliştiricilerin sayısı kaçtır ?)
- Üyeler farklı ekipler arasında hareket edebilir: eğer herkes aynı kodlama standartlarına uyarsa, entegrasyon düzgün ve hataya açıktır.
- Eğer bir ekip kendi kendini organize ediyorsa, ekip üyeleri değiştiğinde standartlar zaman içinde gelişecektir - o zaman geçerli kabul edilmiş standartlara uymayan büyük bir kod tabanına sahip olacaksınız .
Süreçten önce insanları düşünürseniz , sadece TPS hakkında okumayı önerebilirim: insanlar Yalın'ın merkezi bir parçasıdır, ancak prosedürler oldukça resmileştirilmiştir.
Tabii sadece bir ekiple küçük bir organizasyon olabilir ekibi benimsemeye standartlarını karar versin ama sonra aşağı yazılmalıdır. İşte Programcılar'da. Eric Lippert'in yayınlarını okuyabilirsiniz: Sanırım hepimiz Microsoft için çalıştığı zaman, kendi yazılı yönergelerine uyması gerektiğine (bazı kurallar yanlış olsa bile , uygulanamaz veya yararsız olsa bile) deneyimli bir geliştirici olduğuna katılıyorum. Ona.) Peki ya Jon Skeet? Google yönergeleri oldukça katıdır (ve birçok kişi onlarla aynı fikirde değildir) ancak bu tür kurallara uyması gerekir. Onlara saygısızlık mıdır? Hayır, muhtemelen bu rehberleri tanımlamak ve geliştirmek için çalıştılar, bir şirket bir üye (veya bir takım) tarafından üretilmedi ve her takım bir ada değil .
Örnekler
- C + 'da çoklu kalıtım ve iç içe geçmiş sınıfları kullanmamaya karar verdiniz, çünkü asıl ekip üyeleriniz bunu iyi anlamıyor . Daha sonra çoklu miras kullanmak isteyen birisinin, daha önce kullanılmış olup olmadığını görmek için tüm 1M LOC'ye göz atması gerekir. Kötü çünkü tasarım kararları belgelenmemişse, onları anlamak için tüm kod tabanını incelemeniz gerekir. Ve o zaman bile, kullanılmamışsa, bunun nedeni kodlama standardına aykırı olduğu ya da izin verildiği için mi, ancak çoklu kalıtımın uygun olduğu daha önceki durumlar olmadı mı?
- C # 'da varsayılan parametreleri sağlamak için aşırı yükleme yöntemlerine sahipsiniz, çünkü isteğe bağlı parametreler C #' da mevcut olmadığında kod tabanınız başladı. Ardından değiştiniz ve kullanmaya başladınız (eski işlevleri yeniden düzenlemek için bu tür işlevleri değiştirmek zorunda kaldığınızda bunları yeniden kullanmak). Daha sonra bile isteğe bağlı parametrelerin kötü olduğuna karar verdiniz ve bunları kullanmaktan kaçınmaya başladınız. Kodunuzun size söyleyeceği kural nedir ? Kötü çünkü standart evrim geçiriyor ancak kod temeli gelişmeye yavaşlıyor ve sizin belgeniz ise başınız belada.
- Jon, A takımından B takımına taşındı. Jon yeni bir standart öğrenmek zorunda ; Öğrenirken muhtemelen daha ince hatalar ortaya çıkaracaktır (ya da eğer şanslıysanız, mevcut kodu anlamak ve kod incelemesini daha uzun yapmak için uzun zaman alacaktır).
- A takımı, daha önce B takımının sahip olduğu bir kod tabanına taşınır. Tamamen farklı kodlama standartlarına sahiptir. Yeniden yazmak? Adapte olmak? Mix? Hepsi eşit derecede kötü.
Bob Amca
İlk birkaç tekrar sırasında gelişmelerine izin verin.
Doğru, bir standarda sahip değilseniz ve kuruluşunuz size bir tane oluşturma görevi verene kadar .
Şirkete özgü yerine takıma özel olmalarını sağlayın.
Hayır, yukarıda açıklanan tüm nedenlerden dolayı. Sadece kod formatlamayı (resmileştirmek isteyebileceğiniz en az faydalı olan şey) resmileştirmeyi düşünseniz bile, hala biçimlendirme konusundaki sonsuz (ve işe yaramaz) savaşların hatırasına sahibim. Onları tekrar tekrar yaşamak istemiyorum, hepsini bir kez ayarlayın.
Bunu önleyebilirsiniz eğer onları yazmayın. Aksine, kodu standartların yakalanma şekli olsun.
Hayır, yukarıda açıklanan tüm nedenlerden dolayı (elbette kurallar değiştiğinde tüm kodunuzu tek seferde yeniden sıralayamazsanız). Kodunuzu olduğu gibi bırakmak ister misiniz? Geçerli yönergeleri anlamak için kod tabanını nasıl denetlersiniz ? Dosya yaşına göre arama ve kodlama stilinizi kaynak dosya yaşına uyarlama
İyi tasarımı yasaklama. (örneğin insanlara goto kullanmamalarını söyleme)
Doğru, kurallar kısa olmalı ya da hiç kimse bunları okumaz. Bariz tekrar etmeyin.
Herkesin standardın iletişim ile ilgili olduğunu ve başka bir şey olmadığını bildiğinden emin olun.
Yalnızca küçük ayrıntılarla ilgili bir standarda sahip olmak istemediğiniz sürece , sadece iyi bir standart kalite ile ilgili değildir.
İlk birkaç tekrardan sonra, kararı vermek için ekibi bir araya getirin.
İlk noktaya bakın ve bir kodlama standardının genellikle geliştirilmesi ve rafine edilmesi uzun yıllar süren bir süreç olduğunu unutma: belki de küçük geliştiricilerle? Gerçekten mi? Bir (eğer varsa) üyenin hafızasına güvenmek ister misiniz?
Üç not:
- Bence bazı dezavantajlar diğerlerinden daha ciddi, örneğin C ++ 'da şirket düzeyinde bir standardın Java'dan bile daha fazla olması gerekiyor.
- Sadece bir küçük ekibiniz olduğu çok küçük bir şirkette çalışıyorsanız, bu akıl yürütme tamamen geçerli olmayabilir (ve Bob Amca sebepleri daha az aşırı olabilir ).
- İşe alındınız (takım olarak) ve yeni bir proje ile tek başınıza çalışacaksınız, sonra unutup devam edeceksiniz. Bu durumda sen umurumda değil olabilir (ancak işverenin gerekir ...)