SUÇLU KİM?

no_picture.jpgBir kaç gündür aklımı meşgul eden bir soru var. Bu yazıyı da belki sizler aklımdaki bu sorunun cevabını verirsiniz diye yazıyorum. (Vermeseniz de olur tabi)

Aslında aklımı meşgul eden sorunun kaynağı ff kod adlı arkadaşın CODE OF HORROR başlıklı yazısı. Öncelikle bu yazının kalanını okumadan evvel Code of Horror yazısına göz atmanızı tavsiye ediyorum. Yazıda uygulama geliştirirken “NEYİ NASIL YAPMAMALIYIZ” şeklinde uyarılar var ve bu uyarılar kötü anılar eşliğinde gayet çarpıcı bir şekilde anlatılmış. Önüne koyulan kaynak kodlarını revize ederken ff dikkatini çeken kodlama hatalarını blogunda paylaşmış. (Daha doğrusu ortaya dökmüş)

Bu durum çoğu iş ortamında blogda anlatıldığı gibi birebir yaşanıyor. Yani birileri vakt-i zamanında birşeyler kodluyor daha sonra başka birileri (Muhtemelen işin piri , programcının hası yada yüzüklerin efendisi diye tabir edilen abilerimiz) gelip bu kodlardaki saçmalamaları buluyorlar. Hataları bulmakla kalmayıp üstüne üstelik önceden kodu yazan arkadaşın da sık sık kulaklarını çınlatıyorlar. (Aynen ff‘ in yaptığı gibi)

Şimdi buradaki hikayede iki tip karakter var. Birtanesi herşeyi çok iyi bilen (yada öyle sanan yada çok iyi bildiği düşünülen) kişi. O kişi açısından bir sorun yok. Sadece kodlardaki anormallikleri bulup düzeltecek ve parasını alacak. Diğeri ise ; bir zamanlar kendisine verilen görevi yerine getirirken hatalar yapmış kişi.

Olaydaki kişileri de belirledikten sonra, sıra “acaba ben burada hangi kategoriye giriyorum” sorusuna geliyor. Elbetteki 2. kategoriye yani hata yapma ihtimali olan kişi kategorisine giriyorum. Durum böyle olunca beni “ ileride benim de kulaklarımı çınlatırlar mı” diye bir telaş sarıyor.

Elbetteki bir hata yapıyorsak yada yapacaksak bunun sonuçlarına katlanmamız ve hatamız yüzümüze vurulunca da itiraz etmememiz lazım. Fakat benim takıldığım nokta burası değil. Acaba bu hatalarda ; hatanın yapılmasına baştan engel olmayan yada engel olmaya çalışmayanların suçu yok mu?

Gözlemlediğim kadarıyla çoğu projede bu tip denetimler yada iyileştirmeler bir gün bir yerlerde sorun olduğunda yapılıyor. (en azından benim gördüklerimde) Yani bir şikayet yada sorun şans eseri ortaya çıkmamışsa kulak çınlamalarından yırtmış oluyorsunuz. (O tip sorunlar ne hikmetse testlerde bir türlü fark edilmez.) Ama yaptığınız işte sonradan sorunlar çıktıysa vay halinize , vay verdiğiniz emeklere. Bir anda harcanmaya hazır olun.

Acaba bu gibi sorunların ortaya çıkmasında zamanında:
(NOT: Aşağıdaki maddeler tüm iyi niyete rağmen laftan anlamayan developer ‘larla çalışmak zorunda olanları kapsamamaktadır.)

Yeterince deneyimi olmayan çalışanlara (özellikle benim gibi işe yeni başlayanlara) bir araç yardımıyla “CODE POLICY” uygulamayanların payı olabilir mi?

Yada yazılan kodlara en azından developer belirli bir nokataya gelip alışana kadar KOD POLİSLİĞİ uygulamayanların , yada “şunu şöyle yaparsan daha iyi daha efektif olur” demeyenlerin payı olabilir mi?

Yada şirkette yeterince dökümantasyon,tutorial vs. olmamasının , olsa bile güncel olmayıp işin yapılış şeklini öven (Biz çok akıllıyız dünyanın bir numaralı aracını kullanıyoruz. ) yazılarla dolu olmasının payı olabilir mi?

Yada işi yap nasıl yaparsan yap , işi vaktinde bitirmeni sağlayan her yol mübahtır gibi bir zihniyete destek verenlerin payı olabilir mi? (Makul bir proje takvimi hazırlanamadığı durumlarda ortaya çıkan bir durum)

Yada proje için kodlama standartlarını koymayıp çalışanlara kopyala-yapıştır bir de şuradaki butona bas herşey çok güzel olacak diyenlerin payı olabilir mi?

Görüldüğü üzere gitgide soru işaretlerinin sayısı artıyor. Sanırım olaylara tek taraflı bakmak ve birilerini yaptığı hatalardan ötürü harcamak pek de doğru değil. Hele de bir kişinini yaptıklarını tüm projeye mal etmek hiç doğru değil. ( ff adlı arkdaş da bunun farkına varıp sonradan olayları toparlamaya çalışmış.)

Bu kadar şikayet sanırım yeterli . Çözüm ise iş yerlerinde yada projelerde abi-kardeş ,usta-çırak ilişkisini geliştirmek. Bizde genelde işi iyi bilen insanlar ya “şöyle yapın böyle yapın tarzından emirler yağdırırlar ” yada “üzerlerinde çok yük olduğu için kod polisliği gibi işlere zaman ayıramazlar” (Genelde bu tip işler angarya olarak görülmektedir.) İş verenlerin de deneyimi az kişileri ucuz iş gücü olarak görmeyi bırakıp, çalışanlarına yatırım yapmayı öğrenmesi gerekiyor. (Bu yatırımın en büyük geri dönüşü yine kendilerine olacaktır)

Bu blog yazısıyla deşarj olduğuma göre mutlu bir haftasonu geçirmeme hiçbir engel kalmadı. Bu yazıyı sabırla okuyan herkese mutlu haftasonları diliyorum…

  1. Haziran 29, 2007, 10:55 pm

    aslında bu dediğin değil koca bir yazılım geliştirme ekibi, 2 kişinin beraber geliştirdiği orta çaplı bir projede bile olabilir. Ayrıca sorularında da oldukça haklısın İbrahim Abi. Bu tür olaylar genelde angaryo görülsede bencede çok gerekli. Belki bir çözüm olarak o deneyimli programcı abi ile işe yeni başlıyan programcı extrame coding olayına girebilirler. Yani biri yazarken biri bakar, bak şurda şunu yapabilirdin, şöyle daha iyi olur der böylece hem işe yeni başlıyan tecrübe edinmiş olur hemde daha sonra çıkabilcek olan sorunlar azaltılmış olur.

  2. Haziran 30, 2007, 1:45 am

    çok güzel bir konuya değinmişsin yani algoritma hatalarını geç basit bir if else in bile parantezleri olmadık yerlere koyulan kodlara incelerken çok güçlük çekiyorum.yani basit bi parantez yeri bile kodu sonradan inceleyen adamı rahatsız ederken kaldı ki algoritmanın yanlış olması bünyede nasıl bir etki bırakır siz düşünün.hatta geçenlerde bir kod inceliyordum.yani scripte bakılacak olursa belli ki bu insan bayağıdır php ile haşır neşir fakat yaptığı algortima hatası gerçekten komik.yani ben phppye yeni yeni ısınan biri olarak o kodun yanlışlığını analiz edebiliyorsam nasıl böyle yanlışlar yapabilir enteresan.tabi insanoğlu bu %100 mükemmelik bekleyemeyiz ama en azından bir işle uğraşıyorsak onun hakkını vermeliyiz.

  3. Haziran 30, 2007, 8:08 am

    Bazı şirketler Pair adı altında deneyimli kişilerle deneyimsiz kişileri eşleştiriyorlar ve bu sayede yazıda bahsi geçen ABİ-KARDEŞ ilişkisi nadirden de olsa kurulmuş oluyor.

    Yapılan en büyük hatalardan biri de yeni başlayanlara ” 1 haftalık eğitim”vererek tamam artık süper projeler yapabiliriz havasına girmek. Eğer yazılan kodlar bir şekilde DERLENEBİLİYORSA arkadaşlar kullanılan programlama dilini öğrenmiş demektir ama işin mantığı ve efektif çalışabilirliği öyle bir haftalık eğitimle olacak iş değildir.

    Selamlar…

  4. Haziran 30, 2007, 10:10 pm

    Selamlar,

    Kodun kalitesini stabil tutmanın en iyi yolu projenin başında kod stili ve standartları ile ilgili metriklerin belirlenmesi. Daha sonra bu metriklerin http://www.java-source.net/open-source/code-analyzers bahsedilen araçlarla kontrolü. Eğer Test veya Production ortamına kodlarınızı CruiseControl ve Ant derleme araçları ile alıyorsanız. Code Analyzer’ın araçlarınızı standartlara veya metriklere uyulmadığın an FAIL edecek şekilde konfigüre edebilirsiniz.

    Genelde bu işler için PMD, Checkstyle, Findbugs gibi araçlar çok kullanılır.

    Tekrar hatırlatıyorum bu araçları sakın bitmiş ya da ortasına gelmiş projelere uygulamaya kalkmayın. Çıkan sonuçlardan birçok insan rahatsız olacaktır.

  5. Haziran 30, 2007, 10:26 pm

    @ Mustafa TAN: Sonunda yetkili bir merciden açıklama geldi 🙂
    Mustafa abi belirttiğin gibi bu tip araçlarla kuralları tanımlayıp kodlar baştan kontrol altında tutulursa sonuç daha tatmin edici olacaktır. Ama işin içine bir tool sokmadan evvel bir şekilde bu kuralları tanımlama kapasitesinde ve bilincinde kişilere ihtiyaç var???
    Öte yandan bu tip araçlar çoğunlukla RULE-BASED çalıştığı için her saçmalığı yakalamalarını da beklememek lazım. O nedenle yine <strong>Deneyim Şart</strong> diyorum.
    Bir de acaba işler bu kadar kitabına uygun ve güzel yapılırsa birileri rahatsız olur mu? Yani birilerinin ekmeğine mani olur mu merak ediyorum.Çünkü sırf bu işlerden para kazanan şahıslar mevcut 🙂

    NOT: .NET ‘ci arkadaşlar da PARALARI BOL ise Visual Studio Team System alıp çok güzel bir şekilde kodlarını kontrol altında tutabilirler

    Selamlar

  6. Temmuz 4, 2007, 8:17 am

    aslında yazında da geçtiği gibi İbrahim önemli olan ‘tools’ ya da kod kontolünden önce insan faktörü.
    Abi-kardeş,usta-çırak ilişkisi söylemi hoşuma gitti.Gerçekten bunu ortaya koyduktan sonra hem ‘Abi’ hemde ‘kardeş’ çalışmasından memnun olur o zaman yaptığı işlerden hem zevk alırlar hem de başarılı işler ortaya çıkar.

    Fakat olayın değişme noktası işte kod yazmanın ötesine geçip ‘ticari iş’ olunca; projenin yetişmesi, müşterinin sıkıştırması vs. o zaman iş bitsin denilmekte.”Derledin mi hatasız çalıştı mı tamam o zaman” olayı oluşmakta ki elden de başka birşey gelmez.

    Mutlu Günler

  7. Temmuz 20, 2007, 2:44 pm

    İşin aslı ff’nin belirttiği hataların hemen hiç birini arkadaşların bahsettiği “standart, kod metrikleri” veya statik analiz araçları bulamaz. Bahsedilen Hataların çoğunun temelinde programcıların acemiliği ve bilgisizliği geliyor. Tüm kodların ve tasarımların sürekli topluca gözden geçirilmesi için bir mekanizma bu yüzden gerekli.

    O yüzden kulaklarınızın gelecekte çınlatılması ihtimalini azaltmak için bir şeyi yazarken hep iki kere düşünmek lazım, ve yaptığımız şeyleri sonradan mutlaka tekrar gözden geçirmek gerekiyor..

  8. Mart 3, 2008, 4:10 pm

    ben ce sız kendı nız dogru dıyosanız ve bıldıgınız yolda devam edın elbet bırgun savundugunuz yazıda sızın dusuncenıze katılıan ve sız haklısınız dıyen bırı veya bırı lerı çıkar sız umudınızı kaybetmeyın derya

  1. No trackbacks yet.

Mustafa Tan için bir cevap yazın Cevabı iptal et