Bir kod parçasının çalışması, onun iyi olduğu anlamına gelmez. Bu cümle ilk bakışta haksız gibi durabilir; sonuçta bilgisayar ekranda beklenen çıktıyı veriyorsa mesele kapanmış sayılmaz mı? Hayır. Çünkü kod yalnızca makineye yazılmaz. Kod, gelecekte onu okuyacak insana da yazılır: ekip arkadaşına, stajyere, açık kaynak katkıcısına ve en önemlisi, altı ay sonra o satırlara boş gözlerle bakacak olan sana.
Python bu konuda özel bir dile sahiptir. Sözdizimi sade, girintiler anlamlı, standart kütüphanesi zengindir. Fakat Python’ın asıl gücü sadece teknik olanaklarında değil, kültüründedir. Python topluluğunun meşhur ilkelerinden biri şudur: okunabilirlik önemlidir. Bu ilke, basit bir stil önerisi değil, yazılım dünyasında ahlaki bir pusuladır. Çünkü okunamayan kod, başkasının zamanını izinsizce harcar.
Makine Anlar, İnsan Acı Çeker
Bilgisayar için değişkenin adının x, tmp, zzz ya da user_session_timeout olması arasında büyük bir duygusal fark yoktur. Bilgisayar kırılmaz, sinirlenmez, kahveye ihtiyaç duymaz. İnsan ise bağlam arar. Niyet arar. Bir fonksiyonun neden orada olduğunu, hangi durumda ne yaptığını, hangi sınırları gözettiğini anlamaya çalışır. Eğer kod bu sorulara cevap vermiyorsa, çalışan bir labirentten ibarettir.
Okunabilirlik, kodun niyetini görünür kılma sanatıdır. Bir fonksiyon tek bir iş yapıyorsa, adı yaptığı işi söylüyorsa, karmaşık koşullar anlamlı parçalara ayrılmışsa, yorumlar gereksizi tekrar etmek yerine kararların nedenini açıklıyorsa, orada teknik beceriden daha fazlası vardır. Orada bir insan diğer insana şöyle der: Seni düşündüm.
Bu yüzden okunabilir kod bir nezaket biçimidir. Kapıyı çarpmadan kapatmak, toplantıya zamanında gelmek, ortak mutfağı temiz bırakmak gibidir. Kod tabanları da ortak yaşam alanlarıdır. Dağınık bırakılan her fonksiyon, gelecekte birinin zihinsel masasına dökülen kırıntıdır.
PEP 8 Bir Görgü Kuralı Kitabıdır
Python’da PEP 8 çoğu zaman biçimsel bir standart gibi anlaşılır: satır uzunluğu, boşluklar, isimlendirme, girintiler. Oysa daha derin bakınca PEP 8 bir topluluk sözleşmesidir. Hepimiz aynı dili konuşalım ki birbirimizi daha az yanlış anlayalım der. Kod biçimlendiriciler, linter araçları ve tip ipuçları bu sözleşmeyi destekleyen medeni kurumlar gibidir.
Elbette okunabilirlik yalnızca güzel hizalanmış satırlar değildir. Bazen fazla akıllı olmak okunabilirliğin düşmanıdır. Tek satırda yazılmış büyülü bir liste üreteci, beş farklı koşulu ve iki yan etkiyi içine sıkıştırıyorsa, belki de programcı zekasını değil sabırsızlığını sergiliyordur. Kod golfü eğlencelidir; üretim kodunda ise çoğu zaman toplumsal bir suç mahalline dönüşür.
İyi Python kodu kendini açıklamaya çalışır. Örneğin kullanıcıları filtreleyen bir fonksiyon düşünelim. İçinde karmaşık bir if yığını yerine is_active_user, has_valid_subscription, can_receive_email gibi küçük, anlamlı yardımcı fonksiyonlar varsa, okuyucu kodu çözmez; kodla konuşur. Bu fark önemlidir. Çözülen şey şifredir. Okunan şey metindir.
Etik, Bakım Maliyetinde Saklıdır
Yazılım projelerinde maliyetin büyük kısmı ilk yazımda değil, bakımda ortaya çıkar. Bugün hızlıca geçiştirilen bir isimlendirme, yarın hatalı bir düzeltmeye; belirsiz bir fonksiyon, gelecek ay yanlış kullanılan bir API’ye dönüşebilir. Okunamazlık yalnızca estetik bir kusur değildir; hata üretir, güvenliği zayıflatır, ekipleri yavaşlatır, yeni katılanları dışarıda bırakır.
Bu noktada etik başlar. Çünkü etik, çoğu zaman görünmeyen sonuçları hesaba katma yeteneğidir. Ben şimdi bu kodu nasıl yazarsam, benden sonra gelenin hayatı kolaylaşır? Hangi soyutlama gerçekten gerekli, hangisi egomu parlatan sis makinesi? Nerede yorum yazmalıyım, nerede daha iyi bir isim yeterli? Bu sorular teknik olduğu kadar karakterle de ilgilidir.
Python bize şunu fısıldar: Basitlik tembellik değildir. Açıklık yüzeysellik değildir. Hatta çoğu zaman en zor beceri, karmaşık olanı sade biçimde ifade etmektir. Okunabilir kod yazmak, düşüncenin arıtılmasıdır. Dağınık kod çoğu zaman dağınık zihnin izidir; temiz kod ise disipline edilmiş dikkatin.
Sonuçta yazılım, yalnızca algoritmaların değil ilişkilerin de alanıdır. Her commit küçük bir mektuptur. Her fonksiyon bir sonraki okuyucuya bırakılmış nottur. Python’da okunabilirlik ahlakı tam da burada doğar: Kodum çalışıyor demek yetmez; kodum anlaşılabilir, sürdürülebilir ve başkasının zihnine saygılı olmalı. Çünkü iyi programcı yalnızca makineyi ikna eden kişi değildir. İyi programcı, insanı da yormadan gerçeğe götüren kişidir.