Kodlamada isimlendirme çoğu zaman küçük bir nezaket kuralı gibi anlatılır: Okunabilir olsun, ekip arkadaşın anlasın, altı ay sonra kendine küfretme. Bunlar doğru, fakat yüzeyde kalır. Bir değişkene isim vermek yalnızca etiketi kavanoza yapıştırmak değildir; kavanozu, içindekini ve onu hangi rafta arayacağımızı aynı anda icat etmektir. Programcı, count yazdığında sayılabilir bir şeyler evreni kurar. activeUsers dediğinde kullanıcıları varlık, etkinliği durum, çoğulluğu da yönetilecek bir alan olarak ilan eder. Bu küçük satırda sessiz bir metafizik çalışır.
Ontoloji, en basit haliyle neyin var olduğunu ve nasıl var olduğunu sorgular. Yazılımda bu soru daha acımasızdır, çünkü cevap derlenir. Bir veriye temp adını verdiğinizde onu geçici, değersiz, birazdan atılacak bir nesne haline getirirsiniz. Sonra o temp, sistemin kalbine yerleşir; kimse dokunamaz, çünkü kimse onun gerçekte ne olduğunu bilmez. Böylece kötü isim, teknik borçtan önce varoluşsal borç üretir. Kod tabanında dolaşan hayaletlerin çoğu, yanlış adlandırılmış varlıklardır.
İsim, sınır çizmektir
Bir değişkene isim vermek, dünyadan bir parçayı kesip çerçevelemektir. price mı, netPrice mı, discountedPrice mı? Bunlar aynı sayının farklı kostümleri değildir. Her biri farklı bir gerçeklik iddiasıdır. price belirsizdir; çıplak bir rakam gibi durur. netPrice vergiyi dışarıda bırakır, discountedPrice pazarlığı tarihe dahil eder. İsim, hangi ilişkilerin görünür olacağını belirler. Görünür olan yönetilir; görünmez olan hata olarak geri döner.
Bu yüzden isimlendirme, yalnızca programlama pratiği değil, modelleme disiplinidir. Bir domain uzmanı aynı kavrama müşteri derken, hukuk ekibi taraf, pazarlama ekibi potansiyel, yazılımcı ise user diyorsa, ortada tek bir nesne değil, çakışan dünyalar vardır. Kodun görevi bu dünyaları kaba kuvvetle susturmak değil, yeterince doğru bir ortak dil kurmaktır. İyi isim, toplantı odasındaki belirsizliği sınıfta, fonksiyonda ve veritabanı kolonunda yakalar.
Kötü isimler yalan söyler
En tehlikeli değişken adı yanlış olan değil, eskiden doğru olup artık yalan söyleyendir. isAdmin başlangıçta basit bir boolean olabilir. Zamanla moderatör, editör, sahip, geçici yetki, organizasyon rolü eklenir. Değişken hâlâ isAdmin diye fısıldar, fakat sistem artık hiyerarşik bir yetki ormanıdır. Bu noktada isim, harita olmaktan çıkar; bataklığa dönüşür. Programcı hata ayıklarken kodla değil, kodun eski inançlarıyla savaşır.
İyi isimlendirme cesaret ister, çünkü adlandırmak karar vermektir. Karar vermek de bazı olasılıkları öldürmektir. data demek kolaydır; kimseyle kavga etmez. Fakat failedPaymentAttempts dediğinizde hem nesneyi hem niyeti hem de sınırı açığa çıkarırsınız. Artık kaçış yoktur. Değişken size hesap sorar: Başarısızlık ne demek? Ödeme girişimi ne zaman başlar, ne zaman biter? Aynı kullanıcı mı, aynı kart mı, aynı sipariş mi? İsim ne kadar netleşirse düşünce de o kadar disipline olur.
Burada pratik bir ilke belirebilir: İsim, okuyanın zihninde doğru soruyu azaltmalı, doğru cevabı çağırmalıdır. Çok kısa isimler çoğu zaman kibirlidir; sanki herkes bağlamı ezbere biliyormuş gibi davranır. Çok uzun isimler ise bazen tasarımın yardım çığlığıdır; değişken adının roman gibi olması, kavramın yanlış yerde bölünmüş olabileceğini gösterir. Güzel isim, ne bilmece ne de tutanaktır. Kılıç gibi olmalıdır: Gerektiği kadar keskin, gerektiği kadar kısa.
Sonuçta kod, makineler için yazılır ama insan zihninde yaşar. Derleyici x ile invoiceTotalBeforeTax arasındaki ahlaki farkı umursamaz. Fakat ekip, sistem ve gelecek umursar. Her isim, gelecekteki bir bakışa bırakılmış pusuladır. Yanlış isim labirent üretir; doğru isim yol açar. Bu yüzden bir değişkene isim verirken küçük bir tanrı gibi davranmayın; daha iyisi, dikkatli bir bahçıvan gibi davranın. Çünkü isim verdiğiniz şey büyüyecek, kök salacak ve bir gün bütün mimarinin gölgesini belirleyecektir.