Bir programcının öğrenebileceği en önemli yetenek
Konumuz tek bir kelime odaklı.
HAYIR.
Hayır diyememek günümüz hastalıklarından bir tanesi. Bu konu makalelerden tutun kişisel gelişim kitaplarına kadar pek çok farklı şekilde ısıtılıp ısıtılıp önümüze getiriliyor. Bunu bir de benden dinleyin demeyeceğim. Niyetim bu konuyu yazılımcıların perspektifinden ele almak.
Hatırlarsanız daha önce “Aykırı Yazılımcı” terimi altında yazılım dünyasında doğru bilinen yanlışlara aykırı bir duruş sergileyen ve doğru yazılımcı zihniyetini aşılamaya çalışan bir seri başlatmıştım. Bu makale serinin 3. makalesi.
Hayır diyememek yazılımcılar tarafından sıklıkla yapılan yanlışlardan bir tanesi ve muhtemelen siz de bu konudan muzdaripsiniz. Bu satırları okurken tahmin ediyorum ki hayır diyemediğiniz için sıkıntı çektiğiniz bir kaç anınız aklınızda canlandı ama kafanız hala biraz karışık. İçinizden şu soruyu soruyorsunuz:
Ne zaman ve neye hayır demeliyim?
Eh burası bir çok programcının hatta kıdemli olanlarının bile kolayca kafasının karıştığı nokta.
Bir programcı olarak, kod yazmak işinizin büyük bir kısmını kapsar. Programlama hayatınız boyunca, bir çok farklı kod isteğiyle uğraşmak zorunda kalırsınız. Her talep sizi zor kararlar almaya zorlar. Hepsi tamam. Bunda yanlış bir şey yok. Bir programcı olarak herkesin sizden beklediği şey de zaten bu: Kod yazmak. Ancak, akla gelen soru şu: Sizden istenen her kodu yazmalı mısınız?
Bu soru bir programcının öğrenebileceği en önemli yeteneği karşımıza çıkarıyor:
Kodun ne zaman yazılmaması gerektiğini bilmek, muhtemelen bir programcının öğrenebileceği en önemli yetenektir. — The Art Of Readable Code
Buna daha fazla katılamazdım. Neden?
Programlama bir problem çözme sanatıdır. Doğal olarak, programcılar problem çözücülerdir. Programcılar olarak, önümüzde çözülmeye hazır yeni bir problem olduğunda ya da herhangi bir sebeple bizden kod yazmak istendiğinde heyecanlanırız.Ve bu çok doğal. Çünkü biz programcıyız. Kod yazmak bizim tutkumuzdur.
Ancak kod yazma konusunda çok heyecanlanmak bizi kör edebiliyor. Gelecekte uğraşmamız gereken daha büyük sorunlara neden olabilecek bazı önemli gerçekleri görmezden gelmemize neden olabiliyor.
Peki, görmezden gelme eğiliminde olduğumuz bu gerçekler neler?
Yazdığınız her kod satırı:
- diğer programcılar tarafından okunmalı ve anlaşılmalıdır.
- test edilmeli ve hataları ayıklanmalıdır.
- bir mayın gibi üzerine basmanızı bekleyen, yazılımınızda saklanan potansiyel birer hata kaynağıdır.
Ek olarak kod bozuktur. Zamanla çürür. Periyodik bakım gerektirir. Bulunması gereken ve düzeltilmesi gereken hataları vardır. Yeni özellikler eklemek eski kodun yeni eklenenlere adapte edilmesi demektir.
Ne kadar fazla kod, hataların saklanacağı o kadar fazla alan demektir. Derlemelerin daha çok zaman almasıdır. Yeni programcıların mevcut sistemi anlaması için daha fazla zaman gerektiğidir. Eğer kodu yeniden yapılandırmak zorunda kalırsanız düşünmeniz gereken o kadar fazla kod parçası demektir.
Dahası, daha fazla kod genellikle daha az esneklik ve fonksiyonellik getirir. Sizi kısıtlar. Hızlı ve rahat hareket edemezsiniz. Bu sezgiseldir fakat çoğu kez basit, zarif çözüm daha az deneyimli bir programcı tarafından yazılan karmaşık kod yağınından daha efektiftir.
Kod yazılımcılar tarafından üretilir. Daha fazla kod yazmak daha fazla yazılımcı gerektirir. Daha fazla yazılımcı daha fazla iletişim yükü getirir ve sizi daha da yavaşlatır. Yeni yazılımcıların geliştirilen proje hakkında en ufak bir ipucu yoktur. Mevcut sistemi öğrenmeleri gerekir. Size sorular sorarlar. Bu sorular da zamanınızı çalıp verimliliğinizi azaltır. Sisteme kod yazarak katkıda bulunurken hata yapma olasılıkları da bir o kadar yüksektir. Yapılan hataların bulunup düzeltilmesi yine sizin yardımınızı gerektirir. Çünkü sistemi en iyi bilen sizsinizdir. Yazılımcılar tarafından mevcut sistemin özellikleri geliştirilirken yazılan her kod iletişimle beraber maliyetin daha da artmasına neden olur.
Çok doğru değil mi? İşte tüm bunlar önünüze çıkan her kod talebine hayır diyemediğiniz zaman yüzleşmek zorunda kalacaklarınızdır. Belki de aramızda bunlardan bir çoğu ile zaten yüzleşip derslerini alanlar var. Belki de bazıları yüzleşmesine rağmen daha fazla kodun nelere mal olacağını hala anlayamayıp bu bilindik hataları yapmaya devam ediyor.
Sizi üretkenlikleriyle ve kodlama zihniyetleri ile etkileyen programcılar hayır demeyi bilenler ve ne zaman kod yazılmaması gerektiğini bilenlerdir. Kolay yönetilebilir, daha uzun ömürlü ve kullanıcıların problemlerini çözen yazılımlar, gereksizce yazılan fazla kod yığınlarına sahip olmayan yazılımlardır.
En iyi kod olmayan koddur ve en etkili programcı ne zaman kod yazmaması gerektiğini bilen programcıdır.
Ne zaman kod yazmamanız gerektiğini nasıl biliebilirsiniz?
Bir proje üzerinde çalışırken ve ekleyeceğiniz her güzel özellik üzerinde düşünürken heyecanlanırsınız. Gayet normal. Fakat programcılar projelerinde olması gereken özellikleri abartma eğilimindedirler. Faydalı gibi görünen bir çok özellik daha bitirilemeden veya bitirilip son kullanıcı ile buluşamadan yok olup gider. Bunların çoğu projeyi olduğundan daha karmaşık hala getirir. Bu tip durumlardan kaçınmak için biz yazılımcıların projelerimizi ve gereksinimlerini iyi tanımamız gerekir.
Geliştirdiğimiz yazılımın amacını ve onun temel tanımını anlamak, ne zaman kod yazmamanız gerektiğini bilmek için ilk adımdır.
Size bir örnek vereyim. Diyelim ki tek bir amacı olan yazılımınız var: Mailleri yönetmek. Ve bu amaç için, mail gönderip almak yazılımınızın iki önemli ana özelliği. Bu yazılımınızdan ayrıca sizin yapılacaklar listenizi yönetmesini beklemezsiniz değil mi?
Yani demem o ki, yazılımınızın amacına ve tanımına uygun olmayan tüm muhtemel yeni özellik talebine hayır demelisiniz. Bu tarz taleplerin geldiği anlarda kesinlikle kod yazmamanız gerektiğinden emin olabilirsiniz.
Yazılımınızın amacını asla genişletmeyin.
Yazılımınız için neyin önemli olduğunu anladığınız zaman, gelecekte sizden istenecek muhtemel kod yazma taleplerini değerlendirirken sizin daha bilinçli olmanızı sağlayacaktır. Kod yazmanız için gerekli olan gereksinimleri tam olarak bileceksiniz. Hangi özellik eklenmeli? Hangi kod yazmaya değer? Gereksizce yazılan fazla kodların yazılımınızı nasıl ölüme sürükleyebileceğinizi bildiğinizden dolayı herşeyi sorgulayacaksınız.
Ne zaman kod yazmamanız gerektiğini bilmek kod tabanınızı küçük tutmanızı sağlar.

Eskiden kodladığınız bir projeyi hayal edin. Projeye ilk başladığınız ani şöyle bir hayalinizde canlandırın. Sadece 2 veya 3 kod dosyası vardır. Herşey çok basit görünür. Projeyi derleyip kodu çalıştırmak sadece bir kaç saniyenizi alır. Aradığınız şeyi nerede bulabileceğinizi çok net bir şekilde bilirsiniz çünkü arama yapacağınız dosya sayısı bir kaç tanedir.
Sonra proje büyüdükçe, daha fazla kod dosyası proje dizinini doldurmaya başlar. Her bir kod dosyası yüzlerce kod satırı içerir. Onları organize etmek için yakında bir kaç tane daha ek dizine ihtiyacınız olacaktır. Hangi fonksiyonun hangi fonksiyonu çağırdığını hatırlamak zordur ve hata ayıklamak daha fazla zaman ve çalışma gerektirir. Projenizi yönetmek gittikçe zorlaşır, ve size yardım edecek daha fazla programcıya ihtiyaç duymaya başlarsınız. Programcı sayısı arttıkça iletişim maliyeti de artar. Gittikçe daha da yavaşlarsınız.
Sonunda, geliştirdiğiniz yazılım dev bir proje haline gelir. Artık yeni bir özellik eklemek bile çok sancılıdır. Küçük değişiklikler yapmak bile saatlerinizi alır. Mevcut hataları düzeltmek yeni hataların yaratılmasına neden olur. Sürekli olarak son teslim tarihini kaçırırsınız.
Şimdi hayat sizin için tam bir mücadele haline gelmiştir. Neden?
Çünkü ne zaman kod yazmamanız gerektiğini bilemediniz. Muhtemel tüm özellik isteklerine evet diyerek gereksiz kodlar yazdınız. Kördünüz. Yeni birşeyler kodlamak önemli gerçekleri görmezden gelmenize neden oldu.
Tam bir korku filmi, değil mi?
Herşeye evet derseniz karşılacaklarınız tam olarak bunlar olacaktır. Ne zaman kod yazmamanız gerektiğini tam olarak bilin. Gereksiz tüm kodları projenizden fırlatıp atın. Bilinçli programlama, hayatınızı kolaylaştıracak ve yazılımınızın daha uzun ömürlü olmasını sağlayacaktır.
En verimli olduğum gün 1000 satırlık kodu fırlatıp attığım gündü. — Ken Thompson
Biliyorum. Ne zaman kod yazmamanız gerektiğini bilmek zor. Kıdemli programcılar için bile bu böyle. Belki bu makalede anlattıklarım, meslek hayatına yeni atılmış tecrübesiz programcılar için anlaşılması zor. Sorun yok, bu kabul edilebilir bir durum.
Programlama yolculuğunuza daha yeni başladınız ve kod yazmak istiyorsunuz. Bunun farkındayım. Bende sizin gibiydim. Bu konuda çok heyecanlısınız ve bu çok iyi. Bu heyecanınızı asla kaybetmeyin ancak önemli olan gerçekleri de görmezden gelmeyin. Biz bu gerçekleri hatalar yaparak acı yollardan öğrendik. Siz de hatalar yapacaksınız ve bu hatalarınızdan dersler çıkaracaksınız. Ama bu makalede yazdıklarımı okuyup aklınızın bir köşesine koyarak en azından daha bilinçli birer programcı olabilirsiniz.
Kodlamaya devam edin ancak ne zaman kod yazmamanız gerektiğini de bilin.