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?