RSS

Kötü Programcıya Övgü

18 Mar

Kötü Programcıya Övgü

Kötü Programcıya Övgü

Harold kötü bir programcıydı, gerçekten kötü bir programcı. Hani hem kendisi hem de etrafindaki herkes için kendine yeni bir meslek bulması gereken türden. Ama Harold iyi biriydi ve bir işte ömür boyu çalışacaklardandı; çok uzun süredir şirketteydi. Ezelden beri alt kademelerde olan bir programcısıydı, hiçbir zaman terfi etmedi, her sene maaşına en düşük zammı aldı ve yeri çok değiştiriliyordu. Ama kimse onu işten çıkarmak istemiyordu. Böylelikle ne zaman yeni bir proje başlasa ve yeni adama ihtiyaç olsa, Harold’ın takımının müdürü bu durumu fırsat bilip onu yönetmek zorunda kalacak bir sonrakı bahtsız kişiye gönderiyordu Harold’ı. Bir seferinde bu kişi ben oldum.

Bu olay, bir şirkette uzun yıllar kalmanın günümüzdekinden daha anlamlı olduğu 1980’li yıllarda geçiyordu. Yönettiğim ekip çok istekliydi. Belirleyici özelliğimiz daha iyi bir takım olma isteğimizdi ve bu hedef için de epey çalışıyorduk. İyi tanımlamış ve denenmiş süreçlerimiz vardı, gereksinim ve tasarım modelleme yaklaşımları geliştirdik ve gerçekleştirdik; gereksinimleri, tasarımı, kodu, test planlarını, test olaylarını, her şeyi denetleyen kapsamlı bir gözden geçirme yöntemi uyguladık ve bu yöntemi aynı zamanda mükemmelleştirdik. Hatta yenilikçi bir test etme yöntemi geliştirdik. Ve daha etkin olduğumuz zaman, daha da etkin hale gelmek için çok çalışıyorduk. Sonra takıma Harold katıldı.

Harold ekibe katılmadan çok daha önce ekipçe bir anlaşma yapmıştık: hiç kimsenin kötü bir işini projeye dahil etmeyecektik, o iş ister baş tasarımcıdan gelsin, ister test koordinatöründen, isterse de müdürden. Ve hatta Harold’dan gelse bile. Ekibin her üyesinin %100 başarılı olması için gerekli tüm süreçleri, şablonları, desteği, kaynakları, eğitimi, gözden geçirmeyi ve geribildirimi sunuyorduk. Bu başarı oranını ölçen metrikleri bile tanımlamıştık. Harold bize katıldığında ona sistemimizi gösterdik ve eğer bizim ekibin bir üyesi olacak ise bahsettiğimiz süreçlere tam olarak uymanın şart olduğunu açık açık belirttik. Bu disiplin herkes için geçerliydi, Harold için bile.

Bir Program Yeniden Tasarlanıyor

Harold’a verilen ilk görev kolay bir program sayılırdı. Kodlamaya başlamadan önce aldığı pakette iyice gözden geçirilmiş gereksinimler, tüm grafikleriyle birlikte ortaya konmuş görsel tasarım, test koşullarını geliştirmesi için kullanılabilecek, geçerliliği kanıtlanmış bir süreç ve biten kodun gözden ne zaman geçirileceğine dair bir zaman planı vardı. Harold kodu yazarken proje ile ilgili başka meseleler gündeme geldi ve bu yüzden kodunu gözden geçirme tarihini aksattık. Harold gözden geçirmemiz için bize kodunu getirdiğinde birim testlerini çoktan yazıp geçmişti. Bu durum normal ve beklenen süreçteki çalışma sırasına uymuyordu ama Harold’ın hatası değildi ve yazdığı program çalışıyordu, en azından Harold’a göre. Ancak kodu incelemeye başladığımızda gördük ki yazdığı program gözden geçirilmiş ve onaylanmış tasarıma kesinlikle uymuyordu. Harold ekibin sistem tasarımcılarına alternatif bir tasarım sunup bunu savunmamıştı, kendi kafasına göre ne şekilde istiyorsa öyle kod yazmıştı. Bu yüzden de yazdığı kod incelemeyi başarı ile geçemedi. Harold şok geçirmişti: “… ama tüm birim testleri geçti!…” diye bağırmıştı. İtirazları ve şikayetleri kurulum yöneticisine kadar çıkmıştı: “… çalışan bir şeyi yeniden yazmamı istiyorlar!…” Neyse ki bu protestosu görmezden gelindi ve yönetici de ekibin tarafını tuttu. Harold programı tekrar yazmak zorunda kaldı, bu sefer özgün belgelerdeki tasarıma uyacak şekilde. Kod yeniden gözden geçirme sürecine girdiğinde ilk tasarıma uygundu, iyi çalışıyordu ve bir iki basit yorum dışında hiç sorun çıkarmadan süreci başarı ile geçmişti.

Bazen yazılım süreçleri tüm bireysellik ve yaratıcılık izlerini silip atacak şekilde uygulanıyormuş gibi görünür.

Daha İyi Bir Takım, Daha İyi Bir Sistem

Takımca ilginç bir şey fark ettik: Harold başarısız bir programcı olduğu için daha iyi bir takım haline gelmiştik: sürecimizi daha iyi tanımlamış ve daha sıkı uygulamaya başlamıştık, ölçümleri kurmuş ve daha tutarlı bir şekilde almaya başlamıştık, programcılara (özellikle Harold’a) destek ve yönlendirme sağlamayı daha iyi öğrenmiştik. Her şeyden önemlisi, bir takım hedefi ve etiği benimsemiştik: asla kötü iş kabul etmeyecektik ve iş yapamayan, daha zayıf bir takım üyesini de kolayca takımdan çıkarmayacaktık; kişinin takım standartlarına ulaşabilmesi için ne gerekiyorsa onu yapacaktık. Takım üyeleri bu hedefi desteklediği, kaynaklardan yararlandığı ve geçerli ürünler ürettikleri sürece takımımızın bir parçası olabilirdi ve takım onları profesyonel olarak gözetecekti. Bu etik bizi daha iyi bir ekip yaptı.

Modern fizik, bir sistemin davranışının o sistemin tek tek parçalarının davranışının doğrudan bir fonksiyonu olmayabileceğini öğreniyor. Bir saatin içindeki çark dişlerinin hepsi büyük çark dişi olmak zorunda değil. Bazen bir sistemde daha az iyi parçalar kullanarak daha iyi davranış elde edebilirsiniz. Bazen en iyi takımlar sadece süper kahramanlardan oluşmazlar ve eğer bir takım bir sınırlamayı aşmakta kararlı davranırsa, kendi personelinden kaynaklanan bir sınırlandırma bile olsa, o sınırlandırmanın olmadığı durumundakinden bile daha iyi bir takım haline gelebilir. Kötü programcıları işe almalıyız demiyoruz ama takımlar bir kutudaki birbirine bağlanmamış somunlar ve civatalar gibi değiller, onlar bir sistem. Etkin bir takımın dinamikleri bazen göründüğünden daha karmaşık ve inceliklidir ve performansı düşük kişilerin projeye ürettikleri ürünlerin ötesinde ve farklı etkileri olabilir.

Bazen yazılım süreçleri tüm bireysellik ve yaratıcılık izlerini silip atacak şekilde uygulanıyormuş gibi görünür. Sanki sistem kurmak, düşünce gerektirmeyen bir süreç haline getirilmeye çalışılır. Bu takımda biz bunu özellikle yapmamaya özen gösterdik; ama aynı zamanda kimsenin değerini ve getirisini düşünmeden herhangi birşeyi herhangi bir anda değiştirmesine izin vermemeye dikkat ettik. Kuşkusuz kimseye sadece tembellikten, yanlış anlamalardan veya yetersizliklerinden dolayı değişiklik yapmalarına izin vermedik. Ve kimsenin başarısız olmasına da izin vermedik.

Harold’ın Kurtuluşu

Harold’ın kodu onaylandığında kendisi herkesi şaşırtan şu sözleri sarf etti: “Biliyor musunuz, bu tasarım benim daha önce yaptığımdan çok daha iyi.” Aslında o andan sonra Harold bizim yaklaşımımıza tamamen inanmaya başladı ve yine herkesi şaşırtacak şekilde bizim ekibin ve sürecin misyoneri gibi davranmaya başladı. Bununla kalmadı, ekibin sürecine ve kullandığı araçlara da katkıda bulundu, elbette uygun ekip incelemeleri ve onaylarından sonra.

Ekibimiz yazılan bir kodun inceleme esnasında varabileceği en üst kalite seviyesini “OLDUĞU GİBİ” olarak belirlemişti. Yani incelenen kodda hiçbir hata yoksa, hiçbir işlevsel sorun, tasarıma dair bir şüphe yoksa, belgelendirme tamamen yapılmışsa ve imla hatası dahi yoksa bu sistem “OLDUĞU GİBİ” kabul edilebilir, mükemmel bir sistem olarak etiketleniyordu. Projenin yaşam döngüsü boyunca gerçekleştirdiğimiz 500 incelemeden sadece tek bir kişinin hazırladığı bir kod
“OLDUĞU GİBİ” kalite seviyesiyle geçebilmişti. O kişi Harold idi.

Phillip G. Armour’ın “In Praise of Bad Programmers” başlıklı makalesinden yazarın izni ile Elif T. Kuş, Yaşar Safkan ve Emre Sevinç tarafından Mart 2010’da çevrilip yayımlanmıştır.

Advertisements
 
17 Comments

Posted by on March 18, 2010 in business, Programlama

 

17 responses to “Kötü Programcıya Övgü

  1. Atamert Ölçgen

    March 18, 2010 at 12:47

    Gerçekten güzel bir makaleymiş. Çeviri de çok başarılı, zevkle okudum.

    Fakat, hemen sonra şunu düşünmeden edemedim; ya durum tam tersine olsaydı? Yani düzgün bir programcı Harold’ların takımına dahil edilseydi. Acaba ekip yeni geleni entegre edebilir miydi?

     
    • Emre Sevinc

      March 18, 2010 at 12:51

      Atamert,

      Guzel bir soru! Bahsettigin durumda, yani iyi bir programcinin o ekibe katilmasi durumunda neden problem cikacagini dusunuyorsun?

       
  2. Atamert Ölçgen

    March 18, 2010 at 13:09

    Problem çıkacağını söylemedim. Öyle olması gerektiğini de düşünmüyorum.

    Benim sorum, veya zihinsel egzersiz diyelim; bu durumda yeni katılan programcı yine mevcut yazılım geliştirme sistemi açısından fayda sağlar mıydı?

    Daha somut örnek verek gerekirse, tasarıma uyma konusunu ele alalım. Harold takımının mühendisi doğal olarak Harold bir tasarım yapacaktır. İyi programcı ya bu tasarımca göre yazacak, ya da alternatif sunacak ve savunacak. (Yani Harold’ın yaptığı gibi kovboy takılmayacağını varsayıyorum)

    İşte bu iki durumda hikaye nasıl gelişirdi. Düşünüyorum sadece, sesli düşünüyorum. 🙂

     
  3. Yener Yıldız

    March 18, 2010 at 13:24

    Güzel ve etkileyici bir makale. “Bazen en iyi takımlar sadece süper kahramanlardan oluşmazlar” cümlesi makalenin özeti gibi.

     
  4. Emre Sevinc

    March 18, 2010 at 15:24

    Atamert, sesli dusunmekle iyi ediyorsun 😉 Daha da cok dusunceye ihtiyacimiz var.

     
  5. Emre Sevinc

    March 18, 2010 at 15:25

    Yener, yorum icin tesekkurler. Ceviriyi bosuna yapmadigimizi gormek sevindirici.

     
  6. Murat Demir

    March 18, 2010 at 18:29

    Güzel bir makaleymiş.İnsanın Harold olası geliyor:).
    Çeviri için teşekkürler.

     
  7. Fatih

    March 19, 2010 at 11:26

    Güzel ve akıcı bir makale. Çeviriniz ve paylaşımınız için teşekkürler.

     
  8. sinanişler

    March 19, 2010 at 20:09

    Çeviri ve paylaşım için teşekkürler. Yararlı ve öğretici bir okuma oldu.

     
  9. Tarık

    March 22, 2010 at 18:14

    Güzel makaleymiş diyen arkadaşlara nerede yaşadıklarını ve hangi edebi akıma istinaden güzel makale olarak gördüklerini sorsam cevap alabilir miyim merak ettim. Elbette güzellik görecedir. Fakat ben bu makaleyi okuyunca neden edebi olarak birşey ifade etmeyen, programcı ya da hacker felsefesi içermeyen bir şirket başarım kılavuzu okuyor gibi oldum? Nerde benim Programlamanın Tao’ su kitabım?!…

     
  10. Sundance

    March 22, 2010 at 20:57

    Elinize sağlık Emre. Her zaman alışık olduğumuz düşündürücü/dürtücü konu ve içerik bir yana “bir çeviri, gerekli izin ve referanslarla nasıl yapılır”ı göstermesi açısından da 🙂

     
  11. Murat Demir

    March 22, 2010 at 21:48

    Bu makaleyi güzel bulan kişilerden biri olarak,
    Ben bir makaleyi nokta,virgül,devrik cümle tarzındaki özelliklerine göre değerlendirmem.Ben edebiyatçı veya türkçeci değilim:).Bana bu şirket başarım kılavuzundan çok bazı insani duygulara örnek veren bir yazı gibi geldi.Veya başka bişey gibi geldi.Hatta yanlış anladığımı düşünelim.Ben bu yazıyı okurken gayet iyi hissediyordum kendimi.Okuduktan sonrada iyiki okumuşum diye düşünmekteydim ve düşüncelerimide paylaşmak amacıyla yorum yaptım.
    Okurken harcadığım dakikaların boşa gitmediğini düşündüğüm her makale,yazı,günlük vs vs herşey benim için güzeldir.
    Bu arada istanbul`un kartal ilçesinde yaşamaktayım.Eğer isterseniz açık adresimide verebilirim:).Sanırım böylece sizin merakınızıda gidermiş oldum:).Gerçi hangi edebi akıma istinaden böyle düşündüğümü söylemedim ama inanın bilseydim söylerdim.
    Ayrıca belirtmek isterim ki daha önce “Programlamanın Tao`su” diye bişey duymamıştım.Şimdi tdk.org.tr ye baktım ve “Programlamanın kuşu(Brezilya’da yaşayan bir kuş türü)” gibi garip bir anlama geldiğini öğrendim.Öğrenmek iyidir tabiki ama sanırım yanlış bişey öğrendim:(.İşte bu benim için boşa harcanmış bir zamandı ve hiç hoşuma gitmedi.
    Belki türkçe kurallarına uymadan yazı yazdım ama eminimki okuyan herkes anlatmak istediğimi anlamıştır.En azından türkçe olmayan bir kelime kullanmadığıma inanıyorum.
    Okuduğunuz için çok teşekkür ederim.Bu yorum hoşunuza gitmediyse veya yanlış bişeyler söylediysem çok özür dilerim.Elimden özür dilemekten başka bişey gelmez:(.

     
  12. Atamert Ölçgen

    March 22, 2010 at 22:49

    Murat Demir: Trolleri beslememek lazım. 😉

     
  13. Murat Demir

    March 23, 2010 at 01:23

    Atamert Ölçgen: Kendimi tutamadım:)

     
  14. Pingback: Anonymous

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: