Robert C. Martin'in "Clean Code" kitabı yazılım dünyasının kutsal metinlerinden biri olarak kabul edilir. İçindeki prensipler — tek sorumluluk, anlamlı isimlendirme, küçük fonksiyonlar — o kadar çok tekrarlanmıştır ki artık herkesin ezbere bildiği ama kimsenin gerçekten uygulamadığı birer klişeye dönüşmüştür.
Ama Martin'in kitabında satır aralarına gizlenmiş, çoğu kişinin gözünden kaçan bir cümle vardır: "Kod, insanlar tarafından okunmak için yazılır; makineler tarafından çalıştırılması sadece bir yan etkidir." Bu cümle, yazılım mühendisliğinin en derin gerçeğini barındırır: Kod yazmak, aslında bir iletişim eylemidir.
Ve iletişimin kalitesi, doğrudan empati kapasitesiyle ölçülür.
Gelecekteki Yabancıya Mektup
Her yazdığınız fonksiyon, her oluşturduğunuz sınıf, her commit'lediğiniz dosya aslında gelecekte o kodu okuyacak birine yazılmış bir mektuptur. O kişi belki bir yıl sonraki kendinizdir; belki de projeye yeni katılmış, henüz mezun olmuş, heyecanlı ama tedirgin bir genç geliştiricidir.
Empati sahibi bir mühendis, kod yazarken şu soruyu sorar: "Bu kodu ilk defa gören, bağlamı bilmeyen, belki de gece 3'te çökmüş bir sistemi ayağa kaldırmaya çalışırken bu fonksiyonu okuyan biri ne hisseder?"
Eğer cevabınız "Muhtemelen kafası karışır, hangi parametrenin ne işe yaradığını anlamaz ve en az 30 dakikasını bu fonksiyonun ne yaptığını çözmeye harcar" ise, o kod teknik olarak çalışıyor olsa bile başarısızdır.
Paramediklikte buna benzer bir kavram vardır. Bir hastayı stabilize ettikten sonra hastaneye teslim ederken yazdığınız notlar, sizi hiç tanımayan bir doktor tarafından okunacaktır. O notların netliği, eksikliği veya karmaşıklığı, hastanın tedavi sürecini doğrudan etkiler. Sahadaki notlarınız karışıksa, hastanedeki ekip kritik bir bilgiyi kaçırabilir. Tıpkı karışık bir kod tabanında gizlenmiş bir bug'ın, aylar sonra production'ı çökertmesi gibi.
"Çalışıyor" ile "Anlaşılıyor" Arasındaki Uçurum
Yazılım dünyasında bir meritokrasi yanılsaması (meritocracy illusion) vardır: "En iyi kod, en hızlı çalışan koddur." Bu inanış, geliştiricileri okunaklılıktan çok performansa, anlaşılırlıktan çok zekice çözümlere yönlendirir.
Bir fonksiyonu tek satırda, üç tane ternary operatör ve bir reduce zinciriyle yazabilirsiniz. O satır muhtemelen çalışır, muhtemelen performanslıdır ve sizi muhtemelen çok zeki hissettirir. Ama o satırı iki ay sonra okuyan biri (ki o kişi büyük ihtimalle yine siz olacaksınız) "Bu ne?" diye ekrana bakakalmak zorunda kalacaktır.
Empati, bu noktada devreye girer. Empatik bir geliştirici, zekâsını göstermek için değil, karşısındakinin hayatını kolaylaştırmak için kod yazar. Fonksiyonu birkaç satıra böler. Değişkenlere anlamlı isimler verir. Karmaşık bir iş kuralı varsa üstüne bir yorum yazar — ama sadece "ne" yaptığını değil, "neden" böyle yapıldığını açıklayan bir yorum.
Ego ve Kod İncelemesi (Code Review) Savaşları
Kod incelemesi (Code Review), yazılım ekiplerinde empatinin sınandığı en keskin alandır. Birinin yazdığı kodu eleştirmek, dolaylı olarak onun düşünce sürecini, kararlarını ve yetkinliğini sorgulamaktır. Bu süreç ya bir öğrenme fırsatına ya da bir ego savaşına dönüşebilir.
Empatiden yoksun bir kod incelemesi şöyle görünür: "Bu yaklaşım tamamen yanlış. Neden X pattern'ı kullanmadın?" Bu geri bildirim teknik olarak doğru olabilir ama alıcısında savunma refleksi tetikler, öğrenme kapısını kapatır ve ekip içi güveni aşındırır.
Empatik bir kod incelemesi ise şöyle görünür: "Buradaki yaklaşımı anlıyorum. Bir de X pattern'ını denemeyi düşündün mü? Şu senaryoda avantaj sağlayabilir." Aynı teknik geri bildirim, ama alıcısına saygı gösteren, onun perspektifini kabul eden ve birlikte öğrenmeye davet eden bir ton.
Derleyicinin Görmediği Hatalar
TypeScript, ESLint, Prettier... Bu araçlar kodunuzun teknik doğruluğunu ve biçimsel tutarlılığını kontrol eder. Ama hiçbir derleyici, kodunuzun ne kadar "insancıl" olduğunu ölçemez. Hiçbir linter, fonksiyonunuzun adının gelecekteki okuyucuyu yanıltıp yanıltmadığını kontrol edemez. Hiçbir formatlayıcı, hata mesajlarınızın kullanıcıyı aşağılayıp aşağılamadığını tespit edemez.
İşte bu yüzden empati, yazılım mühendisliğinde otomatize edilemeyen son beceridir. Ve belki de en önemli olanıdır. Çünkü sonuçta kodumuz, insanlar tarafından okunacak, insanlar tarafından değiştirilecek ve insanlar tarafından sürdürülecektir. Makineler sadece çalıştırır; anlam veren ve acı çeken bizleriz.