Kod kalitesi ve güçlü geliştirici kişilikleri nasıl dengelenir?


15

İş yerinde kod incelemelerde mutlaka kod kalitesini genel olarak veya sürdürülebilirlik eklemesine rağmen "akıllı" olduğunu düşündüğüm kod ve desenler görüyorum. Bunu geri bildirimlerime işaret ediyorum ve karşıt konulardan ikna olmadım. Bu kod repo ve daha sonra üretime girince biraz endişeliyim.

Uyumlu bir ekip tutmak istiyorum, bu yüzden rezervasyonlarım hakkında çok vokal olarak gerginlik yaratmak istemiyorum. Ayrıca çok parlak olmadan müşterilerimiz için harika bir ürün yaratmak istiyorum.

Geleneksel olarak, nelerin check-in ve nasıl yapıldığı konusunda 'veto' gücü vardır?

Kod nasıl çalışır, ancak çok ilgili / akıllı ayak parmaklarına basmadan kaldırılabilir?


7
"Zeki" olarak değerlendirdiğiniz şeyin bir örneğini ekleyebilir misiniz, hepimiz aynı sayfadayız?
BlackJack

Buna karışan kişilerin hiyerarşisi nedir?

2
Akıllı çözüm nedir? Aslında kendi fikrinizden daha üstün bir olasılık varsa, çözümü nasıl inkar edeceğinizi söylemekten çekinmeyin.
jojo

'Akıllı' kod zamanından önce optimize edilmiş mi yoksa erken genelleştirilmiş mi? Genellikle en kısa kod kazanır, uygun bir kısalık ölçümü için (karakterler değil DRYness veya jetonlar).
kevin cline

3
Bir alternatif sunun. Aksi takdirde gerçekten üretkenliğin önünde bir engel vardır. Alternatif bir yaklaşım olmaksızın eleştirmek için “karşı argümanlar” sunmak zordur. Sanki sanıklara ispat yükü koymak gibi. Onlardan olası tüm karşı senaryolara karşı savunmalarını istiyorsun.
Nicole

Yanıtlar:


16

Bu alıntıyı seviyorum:

"Hata ayıklama ilk etapta kodu yazmaktan iki kat daha zordur. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği hata ayıklamak için yeterince akıllı değilsiniz." - Brian W. Kernighan

Bir tarafta, bu çok akıllı koddan yorulur, çünkü daha sonra hata ayıklamak ve genişletmek zor olacaktır.

Öte yandan, iş yapan akıllı kod öğrenmek için harika bir yoldur. Muhtemelen tüm ekip için. Yazarı meslektaşlarına kod hakkında küçük bir gayri resmi konuşma yapmaya teşvik etmeye ne dersiniz? Sadece gerçekten amaçlandığı gibi çalıştığından ve projede bir bütün olarak mantıklı olduğundan emin olun. Anlamsız bir rekabete dönüştürmek istemezsiniz!

Değer kattığını düşünmüyorsanız, karşı soruyu şu soruyu sorun: "Daha okunabilir olması için bu bölümü nasıl yeniden düzenleyebilirsiniz (yerinde testleriniz var, değil mi?"). Geçilemez külçeler yapmak için akıllı, okunabilir kod yapmanın daha zor olduğuna dikkat edin.


Kodunuz karışıklık ve süper kırılgan değilse, neredeyse -1, hata ayıklama zor değildir. Hata ayıklama ile ilgili tek sorun, birçok geliştiricinin hata ayıklama araçlarını nasıl kullanacağına dair hiçbir fikri yoktur. Çok esnek ve hata farkında kod yazmak çok daha zor.
Coder

Hata ayıklamanın kesinlikle daha zor olduğunu düşünüyorum. Bu şekilde düşünün. Kod başlangıçta doğru yazıldıysa, hata ayıklama sorunu (birim ve entegrasyon) sınamada herhangi bir hata bulamadığı için sorun olmayacaktır.
tehnyit

10

Benim tavsiyem, salak oynamaktır, kod değerlendirmeleri yapma zamanı, nasıl çalıştığına dair bir ipucunuz olmadığını söylemekten çekinmeyin (egonuzun bir masaja ihtiyacı varsa, anlamaya zamanınız olmadığını söyleyebilirsiniz) ) geliştiriciye açıklamasını sağlayın. Bitirdiğinde, tüm bunları gelecekteki bakım için bir yorum olarak yazmasını önerebilirsin, ima edilen ipucunun 'iyi' kod olarak düşünülemeyecek kadar kıvrımlı ipucu var.

İyi kodu biraz fazla karmaşıksa, çoğu insan kod kalitesi veya geliştirici uzmanlığı hakkında hiçbir şey söylenmeden ipucu alacaktır.

PS. Açıkçası bu kodun çoğu zaten öznel olacak, bu yüzden bir kişinin imkansız akıllı kodu başka bir geliştiriciye makul ve hatta endüstri standardı bir algoritma olabilir, bu yüzden kimseyi doğrudan kötü kod yazmakla suçlayamazsınız ( bayt dizisini bir stl listesine kopyalayan yüklenici gibi, bunu bir şifreleme rutinine geçirdi ve sonra tekrar bir bayt dizisine dönüştürdü!)


4
Testim "Mezun olan bir programcı (1-2 yıl sürebilir) bunu koruyabilir mi?" .... Zeki olabilir, ama aynı zamanda açık ve öz olmalıdır.
mattnz

1
@mattnz - Bu testi kullanacak olsaydım, yıllar boyunca yazdığım kodun yarısı (ya da bu konudaki herhangi biri) kötü kabul edilirdi. Lisansüstü programcılar (1-2 yıl sonra) tüm insanlar tarafından kabul edilmez. Kötü kod yazmamız gerektiğini söylememek; sadece bu "test" çok anlamlı değil.
Kale

6

Temel kuralım, kod kalitesi yönergelerini güçlü geliştirici kişilikleri lehine bükmektir. Her zaman yeterince derin kazmak için zamanım olmadığında kullanıyorum - bu arada kazmak genellikle oldukça çaba harcıyor (daha fazlası aşağıda).

Bu kural kişisel deneyime dayanmaktadır. Fanatik olarak takip eden yönergeler ve her bir sapmayla tamamen savaşarak (muhtemelen herhangi bir neofit gibi) başladım. Bir zamanlar yeterli beceriler kazandım ve bu tür kavgaları göreceli olarak kolaylıkla kazanacak kadar hileler öğrendim - bu da “zaferlerimin” genel etkisini öğrenmeye daha fazla odaklanmaya izin verdi. Ve anlayabildiğim kadarıyla etki oldukça olumsuzdu - "kavgayı kaybeden" adamlar acı çekiyor ve daha az üretken hale geliyordu - ve bilirsiniz, kodlarının kalite kurallarına% 200 uyumlu olması bunu telafi etmedi.

Bu keşif, çatışmaların çoğunu düşürmeme neden oldu ve bu da sorunlu vakaları analiz etmek için daha fazla zamana neden oldu. Ve yeterince derin kazdığımda , tipik olarak arkasında bir yerde ilginç bir tasarım problemi olduğunu, savaşan kişiliklerin arkasında saklanan ince (veya çok ince olmayan) bir problem olduğunu buldum .

  • Sanki, 30K gibi önerilen boyut sınırını aşan 31K kaynak dosyası bulduğumu söylemek gibi. Benim seçenekler şekilde dışarı bu ekstra kilobayt sıkmak için kuvvet sahibi dosya savaşan birkaç dakika / saat geçirmek için ya vardır ya bir veya iki gün düşünme geçirmek ve öğrenmek için kazma, diyelim ki, bütün yerine kullanılabilecek bazı kütüphane API var bu dosyadaki kod (sadece kaldırılabilmesi için).

Böyle bir keşif bazen son kullanıcı perspektifinden çok yararlı olmayabilir (ancak bazen gerçekten derin bir etkisi olabilir), ancak böyle bir somunu kırdığımda elde ettiğim eğlenceyi yine de çabaya değer kılar ... kek yönergeleri sapma buzlanma da kavga olmadan gider. :)


2

Kuruluşunuzda, geliştirme ekibinden gelen girdilerle düzenli olarak güncellenen bir kodlama yönergeleri / standartları belgesi olmalıdır. Bu belge, değişkenlerin nasıl adlandırılacağı, kodun nasıl biçimlendirileceği vb. Gibi özellikleri açıklayabilir. Belge ayrıca, programcıların okunabilirlik, sürdürülebilirlik, doğruluk, verimlilik ve standartlara uyum gibi şeylerin göreceli önemi de dahil olmak üzere programcıların kod yazmasını benimsemelerini beklediği değerleri açıklamalıdır.

Kod incelemeleri bu kodlama standartları belgesi kullanılarak yapılmalıdır. Kodlama standartları, programcıların ikisi çakıştığında okunabilirliği tercih etmeleri gerektiğini söylüyorsa, "akıllı" koda karşı tartışmak için biraz desteğiniz olacaktır. Standartlar bunu söylemezse ve yapmaları gerektiğini düşünüyorsanız, o zaman birisinin egosu hatta olduğunda bunu anlamaya çalışmak yerine, kodlama standartları toplantısında özette tartışabilirsiniz.

Nihayetinde, bazen bir karar çağrısına gelir ve bu durumlarda son kelime, kod ve / veya üründen nihai olarak sorumlu olan kişiye gitmelidir. Bu genellikle kıdemli bir geliştirici, teknik lider, proje yöneticisi veya mühendislik direktörü gibi biri. Sorumlu olan sizseniz ve belirli kodların yeterince sürdürülemez olduğunu düşünüyorsanız, bunu söylemekten korkmamalısınız. Bununla ilgili diplomatik olabilirsiniz:

Sam, buradaki yaratıcılığından çok etkilendim, ama bunun biraz fazla zeki olabileceğinden endişeliyim. Bunu sürdürmektense bundan bir yıl sonra yeni gelişim üzerinde çalışmanıza ihtiyacım olacak ve bunu sürdürmesi gereken her şeyin onun mükemmelliğini tam olarak anlayamayabileceğinden endişeliyim. Bunu yapmaktan nefret ettiğini biliyorum, ama tartıştığımız anlaşılır uygulamaya geri dönersen çok sevinirim.

Öte yandan, sorumlu kişi siz değilseniz, yapabileceğiniz en iyi şey pozisyonunuzu net bir şekilde açıklamak ve ekibin geri kalanını ikna etmeye çalışmaktır. Yöneticiden destek alamıyorsanız, bunun sizin aramanız olmadığını kabul edin ve devam edin.


2

Sizin yerinizde (ve bazen, bu zekâlardan biriyim) onu kaldırmam, ama şahsen / zeki yazardan yorumlarda çok iyi belgelemesini ve mümkünse alternatif ve örneklerle kullanabileceği daha basit yazılar.

Bunun en iyisi olduğunun altını çizerdim, çünkü o bile iki ay içinde o satırlardaki tüm bitleri ve bobs'ları hatırlamayacaktır .

Muhtemelen akıllı kodu, en basit kod lehine, örnek olarak yazmak zorunda kaldığı anda bırakacaktır.

Neden işe yaradı.

  • Ne yazdığını önemsediğini kabul ettin ,
  • Onu gösterdi saygı ile soran ,
  • hafıza / odaklanma problemlerine atıfta bulunarak , şirket veya ekip için çalışırken kodun değiştirilmesi ve değiştirilememesi gereken bir senaryo tasarlarsınız.

(bu son ima olmadan, bu tür bir talep , şirketin tarafında, programcıyı metalaştırarak herhangi bir zamanda diğer herhangi bir kod maymunuyla değiştirilebilir hale getirmeye çalışılabilir ).


1

Deneyimlerime göre, kod tabanından tüm gereksinimleri karşılayan kod almak genellikle çok zordur.

Bununla birlikte, kodun bir sonraki bakımı sırasında, eski kodun bakımı daha zor olduğu için, bunun gelecekteki bir maliyet tasarrufu önlemi olarak değiştirilmesini kolayca tartışabilirsiniz.

Veto gücüne gelince, yönetim elbette buna sahiptir.
Bazen, kod kalitesinden sorumlu ekipler veya komitelerdir, bu durumda da bu güce sahip olurlar.

'Akıllı' bir desen örneği vermeniz de yararlı olacaktır. Belki de sadece aşırı tepki veriyorsun ...

'Akıllı' kitabımda neredeyse hiç kötü bir şey değil, ama akıllı ve kıvrımlı arasında kaygan bir eğim olabileceğini kabul edebilirim.


0

Diğer birçok uygulama gibi cevabın buna bağlı olduğunu düşünüyorum .

  • Eğer bir kusursa, mutlaka düzeltilmesi gerekir.
  • Kod çalışırsa, kodun akıllı kodun gelecekteki maliyetiyle değiştirilmesinde ısrar etmenin değerini dengelemeniz gerekir. Geliştirme işi ile bakım işi arasındaki oran konusunda temel kurallar olsa da, projeden projeye çok değişecektir. Mantıklı ol.
  • Takım arkadaşınızı neden kodun basitleştirilmesi gerektiğine ikna edemediğinizi düşünün.
  • Her zaman mükemmel olmak zorunda değilsiniz. Sonsuz bir döngüde kod incelemeleri anlamına gelir ve hiçbir şey (kodum dışında haha ​​hariç) mükemmel olduğu için kontrol edilmez.
  • Kişisel tercihim, kodun yazarının son sözü söylemesi. Açıkçası çok kötü bir iş çıkarıyorlarsa, o zaman başka bir işlem yapılması gerekir, ancak söylediğiniz gibi, geliştiriciyi kodu değiştirmeye zorlamanın negatif değeri, bu çok nadir bir durum ise, düzelterek elde edilen kazançtan daha yüksek olabilir. .

0

Bu soru ile kesinlikle ilgili olabilirim. Şu anda 2 ekip için teknik liderim ve ürettiğimiz kodun mümkün olduğunca okunabilir ve bakımı kolay olmasını sağlamak benim görevim. Aynı zamanda bazı "akıllı" kodlar ürettiğim biliniyor ve takım arkadaşlarımın çoğunun onu takip etmekte çok zorlanacağını biliyorum.

Sunabileceğim birkaç gözlem:

  1. Ekibinizin bir anlaşmazlık olduğunda nihai kararı verecek bir ipucuna ihtiyacınız var. Son sürümde liderliği olmayan bir takımdaydım ve bu iğrençti. Her şey bir argüman haline geldi ve eğer güçlü kişilikleri olan az sayıda insanınız varsa, bunlardan hiçbiri bütçelenmeyecek. Eğer bir ipucunuz varsa, hangi kararın seçili olduğuna bakılmaksızın, takımdaki herkes olası satışın ne dediğini anlamalıdır. Bu yüzden yönetim onu ​​öncülük etti.

  2. İnsanları mutlu etmek çok önemlidir. Bu nedenle, tüm ekibi kendi bakış açınıza doğru itmek yerine, onları orada sürükleyin. SOLID ilkelerini açıklayın, küçük ve uyumlu sınıfların / yöntemlerin / arayüzlerin önemini açıklayın ve her ihlal edildiğinde (yani bir kod incelemesinde) bunları tekrarlayın. Aynı zamanda, sevmediğiniz her şeyi yeniden yazmalarını sağlayın. Günün sonunda, kişisel ifade ile aşağıdaki grup standartlarını dengelemek gerekir. Umarım bu ikisi kişisel tercihler grubun genel olarak nasıl işlediğine yaklaştıkça birleşecektir.

  3. Temiz, anlaşılması kolay sınıf arayüzlerine sahip olmanın, hiç "akıllı" kodlara sahip olmamaktan çok daha önemli olduğuna inanıyorum. Örneğin, 3 farklı yolla aranan girişlerin listesini tutan bir sınıfımız var. Şu anda sadece küçük ölçekte çalışan tüm aramalar için doğrusal arama kullanıyor, ancak bu sınıf çok düşük bir seviyede olduğu için çok iyi ölçeklenmediğini görüyorum. Boost Intrusive kapsayıcılarını kullanan farklı bir sınıfla değiştirmek üzereyim. Her bir eleman, indekslerin her birine aynı anda yerleştirilmesini destekleyecek ve tüm arama O (sqrt (N)) olarak yapılacaktır. Evet, içeride çok daha karmaşık olacak ve birçok insan Boost'u sevmiyor, ancak dışarıda 3 yöntem kalacak: Ekle, Kaldır, Al. Sonuç olarak, insanlar istedikleri kodu yazabilirler (akıl içinde),

  4. Kod sahipliği fikrini sürdürün. Farklı kişilerin bazı kodları eklemesi / değiştirmesi gerekebileceğinden, bazen başarılması zor olsa da. Kod yazıldığında, orijinal geliştirici bu kodun nihai koruyucusudur. Bu, başka hiç kimsenin ona dokunamayacağı anlamına gelmez. Diğerleri kodlarını değiştirirse, bu iyi, ancak günün sonunda orijinal geliştirici kodu inceler ve orada ne varsa sorumludur. Bu kod basit veya zeki olsun, onun bebeği. Tahmin ettiğiniz gibi, hatalar, yapılan tasarım / kodlama kararları nedeniyle birikmeye başlarsa, bu hataları geldikleri gibi düzeltmek yerine, geliştiriciye oturun (btw tüm bu hataları düzeltmelidir) ve nasıl farklı bir şekilde verilebileceğini görmek için bu kararlar üzerine düşünmek.


0

Uzun yıllar geliştirme ekiplerini yöneterek ve yöneterek geçirdim. Doğası gereği, kod açısından biraz OKB ve çok siyah-beyazım. Deneyim yoluyla öğrendim ki, savaşları seçmenin bir takım lideri olarak öğrenmesi en zor becerilerden biri. Evet, standartlar önemlidir. Evet, okunabilirlik ve bakım kolaylığı inanılmaz derecede önemlidir. Evet, hepimiz tek tip, standartlara uygun kod yazmak için çaba göstermeliyiz. Geliştiriciler insan olsa da ... kod oluşturma araçları değil. Kişiliklerimiz, görüşlerimiz var, sıkılıyoruz ve yeni şeyler öğrenmek istiyoruz.

İş yerinde kod incelemelerde mutlaka kod kalitesini genel olarak veya sürdürülebilirlik eklemesine rağmen "akıllı" olduğunu düşündüğüm kod ve desenler görüyorum.

Tamam ... yani eklemiyorlar, ama küçülüyorlar mı? Kodlama stillerinde sadece kişisel bir tercih meselesinden mi bahsediyoruz, yoksa kod tamamen gereksiz mi yazılıyor (örn. İfade ağaçlarını ve yansımayı kullanmak sadece ifade ağaçlarını ve yansımayı kullanmak eğlenceli olduğu için)? Eğer eskisi ise, bırak gitsin. Bir geliştirici olmanın eğlencesinin bir kısmı sorunlara yaratıcı çözümler üretmektir. Belki (ve çoğumuz bunu kabul etmekten hoşlanmıyoruz), bazen anlamadığımız yaklaşımlardan korkarız ve ya yeni yaklaşımı öğrenmek için sormak istemez ya da ek enerjiye sahip değiliz.

Şimdi, yaratıcılık gereksiz kodlara ve tamamen haksız karmaşıklığa yol açtığında, elbette vokal olun ve vakanızı yapın. Takım oyuncusu olmak önemlidir, ancak sorumlu olmak (ve başkalarını tutmak) da sorumludur. Kod incelemeleri, kalite güvencesi ve öğrenme kadar hesap verebilirlikle ilgilidir. Bazı ayak parmaklarına basacaksınız, ancak güçlü bir argümanınız olduğunu düşünüyorsanız, çalışma kodunu yeniden yazmak için çaba (para) harcanmalı ve bir ego bu süreçte çürük olmalı ve birinin zanaatına olan coşkusunu ezme riskini almak istiyorsunuz , o zaman masanın üzerine koymaktan çekinmemelisiniz. Takım lideri sizseniz, bu sizin işiniz. Etkinin farkında olun ve yapın. Eğer bir takım lideri değilseniz ve yetkiniz yoksa, karar vermek için takıma koyun.

Ekibinize hesap verebilirliği aşılamanın en iyi yolu, başkalarını sizi hesap verebilir tutmaya teşvik etmektir. Açık fikirli olursanız ve kodunuzda iyileştirmeler önerdiğinde insanları kapatmazsanız, önerilerinize daha açık olduklarını görebilirsiniz.


0

Kişisel deneyimimden, bu olduğunda , alışılmadık uygulamaya işkence etmek için testler yapmak için gönüllü bir düşman birimi test cihazı olmak için izin isteyeceğim .

Kodun nasıl çalıştığını gerçekten anlamaya çok çalışacağım ve aynı zamanda birçok farklı şekilde araştırmaya çalışacağım.

Bunun bir zaman taahhüdü olduğunu unutmayın. Saatler, onlarca saat hatta haftanın iyi bir kısmı olabilir. Gerekçeli olup olmadığı, kodun karmaşıklığının gereksinimin karmaşıklığı ile orantılı olup olmadığına bağlıdır.

Eğer hakim olmasaydım, yani kod birçok testten kurtulursa, belki de uygulamanın benden daha aydınlanmış olduğuna ikna olurum ve ana ürüne dahil edilmesini destekleyeceğim.

Kaynak kontrol metodolojisine bağlı olarak, bu test aşaması başlamadan önce kodun kaynak kontrol sistemine (belki de bir dalda) geçici olarak işlenmesi gerekebilir.

Cevabım OpenCV kullanma deneyimim tarafından renklendirildi. Herhangi bir programcının kendi başına uygulayabileceğinden çok daha karmaşık algoritmalar vardır; doktoralar bile değil - belki doktoraların ilk birkaç yüzdesi. Eğer kod bu kadar iyi ise, kendi içgüdülerinize ve önyargılarınıza karşı hareket ederek, bu güven düzeyini ölçmek için etkili araçlara sahip olmasanız bile, buna güvenmelisiniz.

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.