Programlamada uzun kod bazen çok çalışıldığının kanıtı gibi görünür. Ekranı satır satır dolduran koşullar, döngüler ve yardımcı fonksiyonlar insana üretkenlik hissi verir. Oysa deneyimli geliştiriciler çoğu zaman tersine bir hedefe yönelir: Aynı işi daha az kodla, daha açık biçimde ve daha az hata olasılığıyla yapmak. Bu, tembellik değil; problemin özünü ayıklama sanatıdır. Kısa kod yazmak, tuşlara daha az basmak değil, düşünceye daha fazla emek vermektir.
Satır sayısı değil, zihinsel yük
Bir programın gerçek maliyeti onu ilk yazarken değil, ikinci kez anlamaya çalışırken ortaya çıkar. Kodun bakımını yapan kişi çoğu zaman onu yazan kişi değildir; hatta çoğu projede bu kişi, birkaç ay sonraki sizsiniz. Her gereksiz değişken, tekrar eden kontrol ve özel durum, okuyucunun zihninde taşınması gereken ek bir yük yaratır. Dil ekonomisi tam burada devreye girer: Kod, makinenin çalıştıracağı talimatların yanında insanların okuyacağı bir metindir. İyi kod, yalnızca doğru sonucu üretmez; niçin doğru olduğunu da görünür kılar.
Örneğin aynı doğrulama mantığını beş farklı yerde kopyalamak ilk anda hızlıdır. Fakat kurallar değiştiğinde beş noktayı hatasız güncellemek gerekir. Bu tekrarları anlamlı bir fonksiyonda toplamak, satır sayısını azaltırken değişimin maliyetini de düşürür. Ustalık, tekrar eden şekilleri fark etmek ve onları doğru soyutlama düzeyinde ifade etmektir. Ne çok genel ne de aşırı özel bir yapı seçmek gerekir. Çünkü her soyutlama, gelecekteki değişiklikler hakkında yapılmış bir bahistir.
Kısalık ile sıkıştırma aynı şey değildir
Burada önemli bir tuzak vardır: Daha az kod her zaman daha iyi kod değildir. Bir satıra sığdırılmış, iç içe geçmiş koşullarla dolu bir ifade kısa olabilir ama anlaşılır olmayabilir. Akıllıca yazılmış kod ile numara yapan kod arasındaki fark, açıklıkta görülür. Bir fonksiyon üç satırda işi çözüyor diye başarılı sayılmaz; adı davranışını anlatıyor, girdileri öngörülebilir ve yan etkileri sınırlıysa değerlidir. Dil ekonomisinin amacı karakter sayısını düşürmek değil, gereksiz kavramsal hareketleri azaltmaktır.
Bu nedenle iyi programcı, hazır kütüphaneleri tanır ve tekerleği yeniden üretmez. Sıralama, filtreleme, tarih işlemleri ya da güvenli veri doğrulama için olgun araçlar varken yüzlerce satır özel çözüm yazmak çoğu zaman cesaret değil, maliyet üretmektir. Ancak kütüphane kullanmak da körü körüne kısaltma değildir. Aracın karmaşıklığını, sınırlarını, performansını ve hata davranışını anlamak gerekir. Az kodun arkasında çoğu kez çok bilgi vardır.
Silmek, eklemekten daha zor olabilir
Bir özelliği eklemek görünür bir başarıdır; gereksiz bir özelliği, bağımlılığı veya soyutlamayı silmek ise daha sessiz bir zaferdir. Silmek için sistemin hangi parçalarının gerçekten gerekli olduğunu bilmek gerekir. Bu yüzden refaktörizasyon, estetik bir düzenleme değil, bilgi çıkarma işlemidir. Geliştirici kodu sadeleştirirken sistemin değişmezlerini keşfeder: Hangi kurallar vazgeçilmez, hangi dallanmalar geçmişten kalma, hangi veri yapıları aslında aynı kavramı temsil ediyor?
Sonuçta dil ekonomisi, minimalizm modasından çok mühendislik disiplinidir. En iyi çözüm her zaman en kısa olan değildir; en az sürpriz yaratan, en kolay doğrulanan ve değişime en sakin tepki veren çözümdür. Daha az kod yazmak, problemi küçültmek anlamına gelmez. Tam tersine, problemi yeterince derin anlayıp onun gereksiz kabuğunu soymaktır. Usta programcı, karmaşıklığı ekrana yaymak yerine tasarım kararlarında çözmeye çalışır. Makineye az şey söyleyebilmek için önce probleme çok şey sormak gerekir.