Yıllarca sonra hala kötü kod yazan bir çalışanla devam etmeli miyiz? [kapalı]


13

Bu soruyu C ++ programcılarına veriyorum çünkü: a) Örneklerin teknik değerlerini yalnızca bir C ++ programcısı değerlendirebilir; b) Sadece bir programcı böyle kod yazan başka bir programcının mizaçını hissedecektir.

İK ve yöneticiler sadece alanda kanıt gördükleri için bir sorun olduğunun farkındalar. Söz konusu programcıya daha fazla zaman verip vermeyeceğimi çağırıyorum. Hataların çoğu çok temel düzeydedir - sorum (programcılara) kıdemli bir C ++ geliştiricisi olarak görev yapan birine mevcut kodlarının örneklerine dayalı bir şüphe yaratıp faydalanmayacağıdır. Programcı olmayanlar - C ++ programlaması dışındaki kişiler bile - bu konuda herhangi bir yargıya varamazlar.

Arka plan için, iyi kurulmuş bir şirket için geliştiricileri yönetme görevine atandım. Tüm C ++ kodlamalarında uzmanlaşmış (sonsuza dek) tek bir geliştiriciye sahipler, ancak işin kalitesi uçsuz bucaksız. Kod incelemeleri ve testler birçok sorunu ortaya çıkarmıştır, en kötüsü bellek sızıntılarıdır. Geliştirici kodunu hiçbir zaman sızıntı açısından test etmedi ve uygulamaların yalnızca bir dakika kullanımla birçok MB sızdırabildiğini keşfettim. Kullanıcı çok büyük yavaşlamalar olduğunu bildiriyordu ve onun görevi "benimle bir ilgisi yok - istifa edip yeniden başlarlarsa, yine iyi."

Sızıntıları tespit etmek ve izlemek için araçlar verdim ve araçların nasıl kullanıldığını, sorunların nerede oluştuğunu ve bunları düzeltmek için ne yapılacağını göstermek için saatlerce onunla oturdum. Pistte 6 ay kaldık ve onu yeni bir modül yazması için görevlendirdim. Daha geniş kod tabanımıza entegre edilmeden önce inceledim ve daha önce olduğu gibi aynı kötü kodlamayı keşfetmek için dehşete düştüm. Anlaşılmaz bulduğum kısım, kodlamanın bir kısmının amatörden daha kötü olduğudur. Örneğin, başka bir sınıfın (Bar) nesnesini doldurabilecek bir sınıf (Foo) istedi. Foo'nun Bar'a referansta bulunmasına karar verdi, örneğin:

class Foo {
public:
    Foo(Bar& bar) : m_bar(bar) {}
private:
    Bar& m_bar;
};

Ancak (diğer nedenlerden dolayı) Foo için varsayılan bir kurucuya ihtiyaç duydu ve ilk tasarımını sorgulamak yerine bu gemiyi yazdı:

Foo::Foo() : m_bar(*(new Bar)) {}

Böylece, varsayılan kurucu her çağrıldığında bir Çubuk sızdırılır. Daha da kötüsü, Foo öbekten diğer 2 nesne için bellek ayırır, ancak bir yıkıcı veya kopya oluşturucu yazmadı. Yani Foo'nun her tahsisi aslında 3 farklı nesne sızdırıyor ve bir Foo kopyalandığında ne olduğunu hayal edebilirsiniz. Ve - sadece daha iyi olur - aynı modeli diğer üç sınıfta da tekrarladı, bu yüzden bir kerelik bir not değil. Tüm konsept pek çok düzeyde yanlıştır.

Bu tam bir acemiden gelirse daha fazla anlayış hissederdim. Ama bu adam yıllardır bunu yapıyor ve son birkaç aydır çok yoğun bir eğitim ve tavsiye aldı. O zamanlar çoğu zaman mentorluk yapmadan ya da akran incelemeleri olmadan çalıştığını anlıyorum, ama değişemeyeceğini hissetmeye başlıyorum. Benim sorum şu: Açıkçası kötü bir kod yazan biriyle devam eder misiniz?


15
Zaten kötü kod yazdığını gördüyseniz, neden onu 6 ay boyunca denetlemeden yazmasına izin verdiniz?
Billy McNuggets

4
IMO, bir süreliğine kötü iş çıkardığını gördüğünüzde, sadece hata ayıklama / tamir etse bile yalnız çalışmasına izin veremezsiniz. Eğer onu şirketinizde tutmanız isteniyorsa, onu denetlemeniz ve ondan hala kötü sonuçlar alıp almadığınızı SONRA görmelisiniz. Ona bakmadan 6 ay boyunca yalnız çalışmasına izin vermek IMO'nun kötü bir yönetimi.
Billy McNuggets

3
@ user94986 Eğer onunla zaman geçirirseniz, tavşanlarının kötü olduğunu açıklarsanız, ona göz kulak olmalısınız ve hiçbir şey değişmezse, onunla konuşmak için 6 ay beklemeyin.
Billy McNuggets

4
Bellek sızıntılarının bir sorun olduğunu düşünmüyorsa, ona onlardan nasıl kaçınılacağını öğretmek ve buna yardımcı araçlar vermek mantıklı değildir. Ana sorun, ürünün hedeflerini ve gereksinimlerini yanlış anlaması olabilir.
maxim1000

2
Bu soru konu dışı gibi görünmektedir, çünkü en iyi şekilde sağlamamız bizim için sorunlu olan İK yasal tavsiyesinin ne olduğu ile ilgilidir.
Dünya Mühendisi

Yanıtlar:


22

Benim tavsiyem bu örnek hakkında onunla yüzleşmek ve söylediklerini görmek. Kod ile ilgili kötü bir şey olduğunu reddederse, korkarım ki yapabileceğiniz çok az şey var. Eğer bir hata yaptığını kabul ederse (bu konuda savunmacı olsa bile), en azından iyileştirilmesi için yer var. Onu geliştirmek için zaman ve çabayı kabul ederseniz, o zaman ya da kıdemli bir programcı, tüm bu eğilimler düzleştirilene kadar onu oturtmalı ve birlikte kodlamalısınız (bu kişiyi en az 1 ay boyunca adamaya hazır olun).

Kötü bir programcı, genellikle birlikte çalışabilirim, ancak geliştiremeyen bir programcı yapamam.


12
+1 "Kötü bir programcı, genellikle birlikte çalışabilirim, ancak geliştiremeyen bir programcı yapamam."

Evet, ayrıca, adamın oldukça ciddi olduğunu bilmesine izin verirdim. Sanki yıllardır bir sorun olduğunu söylememiş ya da kabul etmemiş gibi görünüyor. Yapmaması gereken şeylere ve uygulamanın kalitesini nasıl etkilediğine dikkat çekmeye hazır konuşmaya gelin. Eğer hala koduyla ilgili bir problemi çözmek istemiyorsa, muhtemelen gitmesine izin verirdim. Ve eğer yaparsa muhtemelen birlikte hareket etmesi için ona çok fazla zaman vermezdim. Kesinlikle şirkette geleceğinin tehlikede olduğunu ve bir C ++ geliştiricisi için oldukça kritik bir beceri eksik olduğunu vurgulamak gerekir.
Erik Reppen

@ErikReppen Kabul ediyorum, ama aynı zamanda programcıların dünyadaki en inatçı insanlar olabileceğini düşünüyorum. Çok zorlarsanız, sadece savunma nedeniyle koduyla ilgili herhangi bir sorunu reddedebilir. Sanırım durumun ciddiyetini vurgulamak önemli, ama yine de ona sempati duymaya çalışıyordum "Bu küçük hatayı fark ettim. Siz de yakaladınız mı? programınız? "
Neil

@Neil İnatçı bir duvarın içinden geçmenin tek yolu kıçından bir tekme. Ve deneyimle bu denklemin inatçı eşek tarafı olarak konuşuyorum. Bununla birlikte, koduyla ilgili bir sorun olduğunu ilk duyduysa, evet, biraz daha yumuşak olurdum ama bir konuyu en az bir kez iletmeye çalışmış gibi görünüyor
Erik Reppen

@ErikReppen Belki, ama seni sadece kuyruğundan çıkarmak için şekillenme riski taşıyorsun. Bu oranda, "Şekillendir, yoksa kovuldun" da diyebilirsin. En azından bu yaklaşım hatalarının vicdanına sahip olup olmadığını öğrenir.
Neil

18

Benim sorum şu: Açıkçası kötü bir kod yazan biriyle devam eder misiniz?

Hayır. Temel bellek yönetimi anlayışına sahip olmayan herhangi bir profesyonel C ++ geliştiricisini işten atarım.

Java veya C # ya da bir şeyden geliyorsa, onlara bir miktar kafes verirdim, ama bu tamamen yetersiz.


9
Bu cevabın nasıl kaldırılabileceğini anlayamıyorum. Birisini kovmak, hafife alınması gereken bir mesele değildir.
Florian Margaine

3
@FlorianMargaine - Tabii, ama bu kesin bir dava gibi görünüyor. Bu çalışan, bellek sızıntıları veya güvenlik açıkları nedeniyle şirkete kayıp satışlarda ne kadar maliyet veriyor? Bu saçmalığı test etmek / düzeltmek için ne kadar zaman kaybettiniz? OP çocuk bakıcılığı ne kadar? Diğer programcıların varlığından muzdarip olmasının ne kadarı var ? Çalışanın saçma miktarda alan bilgisi (veya şantaj) olmadığı sürece, bunları değiştirmenin daha maliyetli olması mümkün değildir.
Telastyn

1
@FlorianMargaine, Bu tip bir çalışan yeterince işten atılmayan, teknik borcu düzeltmesi zor olan şirketi sakat bırakıyor. Büyük kırmızı ışıklarda "Umursamıyorlar, neden yapalım ki?" Diyor. Gerçekten istediğiniz çalışanın ne söyleyeceğini biliyor musunuz? “... ama umrumda, bu yüzden bir yere gitmem gerekiyor”. Kötü olanlar zaten umursamadı, bu yüzden ofisinizde kalıyorlar. Üretkenliğe zarar veren insanları, katkıda bulunduklarından daha fazla ZORUNLAYIN. Bu hafife alınan bir seçim değil, ancak gerçekten açık bir çizgi, hareket edememe açık bir eylem.
JM Becker

13

Sorunuzun daha geniş bölümünü yanıtlayamayız. Yani, o çalışanı tutmanız veya kovmanız gerekir. Bir çalışanı kovmak zordur, ancak bu, böyle bir topluluğun tasfiyesi dışında bir karardır.

Sorunuzu, C ++ programcılarına verilen yanıtları kısıtlayacak şekilde güncellediniz. Arka plan / niteliklerim için: Dişlerimi C'de kestim ve C ++, C # ve Java ile kod yazabilirim. Ve iş parçacıkları arasındaki yarış koşullarını takip etmeyi seviyorum çünkü eğlenceli olduğunu düşünüyorum. Evet, biraz döndürüyorum.

Bu çevrede Yanıtınız ve karar sarar: olmadığı birisi teneke değişikliği bireysel bağlıdır ve eğer onlar değişim istiyoruz.

Ama bazı sorularınızla başlayalım:

  1. Ona bahsettiğiniz kod ve örneği sordunuz mu? İnceleme hakkındaki izlenimi neydi?
  2. O 6 ay boyunca bellek manipülasyonunu anlama ve kodunun bellek sızıntısı olmadığından emin olma hakkında bilgi verdiniz mi?
  3. Bu 6 ay boyunca, ilerleme gösterip göstermediğini belirtmek için makul sıklıkta geri bildirim sağlıyor muydunuz.
  4. Eski kodlama yönteminin artık yeni kodda kabul edilemez olduğunu açıkça belirttiniz mi?

Tüm bu sorulara evet diyebildiğinizden emin olmalısınız. Değilse, onunla iletişim kurduğunuz için hâlâ kanıtınızın yükü var.

Son incelemenize vermiş olduğu yanıt en anlatılan kısım olacaktır.

Eğer deniyorsa ve bazı ilerleme belirtileri gösteriyorsa, belki de mentorluk sürecinizi gözden geçirmeniz gerekir. Bir şey varsa, belki de tasarım kararlarını verirken anında geri bildirim alabilmesi için onu daha deneyimli bir programcı ile eşleştirmeyi düşünmelisiniz. Ben çift programlama hayranı değilim, ama böyle bir durumda çok yararlı olabilir. Sürekli olarak eski kodda daha fazla revizyon yapmak için onu göndermek her zaman pratik bir rota değildir.

Eğer denemediyse, motivasyonunu daha iyi anlamanız gerekir. Daha çok denemesi gerektiğini anlamadı mı? Sadece umursamıyor mu? Takımda becerilerinin daha iyi olacağı başka alanlar var mı ve onunla daha fazla ilgileniyor mu? Denemek umurunda değilse, nedenini anlamanız gerekir.

Oradan, o değiştirmek ve o olmadığını isteyip istemediğini bileceksiniz olabilir değiştirin. Hiçbir değişiklik arzusu, değişememe ile eşdeğer değildir. Arzu ve bir derece ilerleme varsa, onu nasıl iyileştirmeye çalıştığınızı değiştirmeyi düşünün.


1
+1 "Sürekli olarak eski kodda daha fazla düzeltme yapmak için onu göndermek her zaman öğrenme için pratik bir yol değildir"
Bill

Son paragraflar için +1. Birinin çabaya karşı kaydettiği ilerleme, her ikisinin de performansın herhangi bir yargısını hesaba katması gerektiğine rehberlik etmeye yatırım yaptı.
Marjan Venema

10

Korkarým kötü kodu ekibinizdeki tek sorun deđil.

  1. Kodunu kim gözden geçiriyor? Neden bellek sızıntısı güvenlik açığı bulunan kodu kabul etmeden önce uyarı yapmadan kaçtı?
  2. Stres testleri neden bu problemi bulamadı? Onları kullanıyor musunuz? Evet ise, neden çalışmıyorlar?
  3. Uzun bir süre gözetimsiz kaldı. Neden?
  4. Ona verdiğiniz aletleri kullanmıyor. Uygun araçları kullanmaya başlamak için onu nasıl motive ettin?

Uzun süredir şirkette olduğunu söylüyorsunuz. Böyle bir kişiyi kovmak nadiren iyi bir fikirdir (Wally tipi bir çalışan olmadığı sürece). Müşteri ihtiyaçları, sahip olduğunuz ürünler vb. Hakkındaki bilgileri genellikle yazdıkları koddan çok daha değerlidir.

Çözümler:

  • Nelerden kaçınacağını öğrenmesi için onu KG'ye taşıyın
  • programlama hatalarını gösterebilecek biriyle eşleştirin
  • kodunda QA'nın genişletilmiş çabaları
  • stres testlerini yazmasını sağlayın, eğer 10k nesneyi oluşturup imha ettikten sonra geliştirici makinesinin çöktüğünü görürse belki öğrenir
  • birkaçı / hepsi yukarıda :)

3

Herhangi birini kovma kararı vermek, herkesin vermesi zor bir karardır. Durumunuz birkaç faktörle birleşti:

  1. Bu geliştiricinin birkaç yıldır şirkette olduğu anlaşılıyor
  2. Geliştirici tüm şirketlerin C ++ kodunu yazar
  3. Sizden önce hiç kimse geliştirici ile kötü kod düzeyini tartışmadı
  4. Yeni bir yönetici olarak, geliştiricinin şirkette / şirket hakkında kim / ne bildiği ve geliştiriciyi işten çıkarmanın politik sonuçlarının ne olduğu hakkında hiçbir fikriniz yoktur.

Son 6 ayı geliştiriciye yollarının hatasını göstermek için harcadığınızı ve yeni kodunun henüz gelişmediğini söyledi.

Bu aşamada gerçekten proaktif bir yönetim başlatmanız gerekir, böylece 3 ay içinde

  • Ne yaptığını bilen iyi bir C ++ programcısı

veya

  • Geliştiriciyi sonlandırdı.

Bunu yapmak için geliştiriciye oturmanız gerekiyorsa, yazma / e-postada neyin yanlış olduğunu açıklayın, geliştiricinin nasıl iyileştirilebileceğini açıklayın ve beklenen iyileştirme gerçekleşmezse 3'te sonlandırılacağını çok açık bir şekilde belirtin. aydır.

Ayrıca, bu noktadan itibaren iyileşmenin sadece 3 aylık süre için değil, şirketle olan işinin geri kalanı için beklendiği konusunda da çok açık olmalısınız!

Ayrıca kendi yöneticinizi ve İK Departmanını (varsa) bilgilendirmelisiniz.

Bu işlem sırasında geliştiriciyi aktif olarak yönetmeniz ve görevleri / kodu her 1-2 günde bir gözden geçirmeniz ve çizilmediklerinden emin olmanız, olmayanları detaylandırmanız ve bunları geliştirmek için neler yapılabileceğini açıklamanız gerekir.


1

Ya onun zayıf işçiliğini ne kadar ciddiye aldığınız konusunda net değilsiniz (yani mutlak bir zorunluluktan ziyade geliştirmek isterse onunla geçirdiğiniz zamanı bir seçenek olarak görüyor olabilir) ya da inanılmaz derecede kötü sürdürülemez bir tutum. Bu geliştiriciye, bu konudaki konumunu düşündüğünüz açık değilse, o zaman dile getirilmesi gerekir (liderliğinizin sona erme yetkinizle tamamlandığı varsayılarak). Şok umarım değişime neden olur.

İstihdam kararının sadece bu adamdan çok daha geniş etkileri vardır, ancak takım üzerindeki etkisini düşünmeniz gerekir. Tutumunun gelişmesine izin verilirse, ya başkalarından kızgınlık sağlayabilir ya da başkalarının bu tür şeylerin iyi olduğunu hissetmesini sağlayabilir. Yine de takımın bakış açısından, eğer giderse, bunun doğru nedenlerden kaynaklandığını ve iyileştirme fırsatı bulduğu kesinlikle açık olmalıdır.

Bir ders yıl geri aldı bir mücevher diğerleri teknik bilgi olmayan insanların onları gevşek vermek için yönetim yol açabilir olmasıdır. Takım için kötü. Sadece c ++ geliştiricisini kaybetme korkusu olabilir, ancak değiştirilebilir. Açıkçası, piyasaya sürülen ürünleri iyi biliyorsa doğal riskler var, ancak çoğu zaman görünüşte yeri doldurulamaz ürün / teknik bilgiye sahip insanların tahmin edilenden daha kolay değiştirildiğini gördüm. Takımlar ve kuruluşlar genellikle başlangıçta doldurulması zor görünen boşlukları doldurabilir. Tabii eğer onun yerini değiştirmek zor olacağını düşündüğünüz c ++ becerileri veya organizasyona özel bilgisi yoksa, çok daha az sorun var!


1
Bu adamın menajerinin onu kovmayı düşündüğünü öğrenmek için kesinlikle şaşkına dönmüş olduğundan şüpheleniyorum. Bazı insanlar sadece bir tahta ile başınıza vurmak ve düzleştirmek zorundasınız, onlara iyileştirmeleri gerektiğini ya da ateşleneceklerini söyleyin.
HLGEM

0

Tabii ki yapmamalısınız. Unutmayın, bu bir hayır kurumu değil, iş için para alıyorsunuz. Eğer anlaşmanın tarafını tutmuyorsa, o zaman herhangi bir işlem gibi ödemeyi bırakardım.


-1

Ona bir şans vermek istiyorsanız, bellek sızıntısıyla ilgili metrikleri toplayan standart bir test geliştirin. Değiştiği kodu görmekte ısrar ederek ilerlemesini haftalık olarak izleyin ve iyileştirme arayın. Bu noktada idare edemezse, işe yaramaz daveti işten çıkarı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.