Kod refaktörü, yazılım dünyasının en tuhaf sanatlarından biridir: Seyirci salona girer, perde açılır, sahne aynı görünür. Düğmeler aynı yerde, ekran aynı renkte, kullanıcı yine aynı işlemi yapar. Fakat kulisin arkasında dekor sökülmüş, kablolar etiketlenmiş, oyuncuların giriş çıkışları yeniden düzenlenmiş, yangın çıkışları açılmıştır. Dışarıdan hiçbir şey değişmemiştir; içeride ise küçük bir uygarlık kurulmuştur.
Bu yüzden refaktör, sadece teknik bir işlem değil, bir ahlak biçimidir. Çünkü hızlıca çalışan ama içten içe çürüyen kod ile karşılaşan geliştirici, iki yoldan birini seçer: Ya halının altına bir hata daha süpürür ya da diz çöküp zemindeki çatlağı onarır. Refaktör yapan kişi, gelecekteki bilinmeyen bir meslektaşına, hatta çoğu zaman kendisinin üç ay sonraki hâline not bırakır: Burada seni bekleyen bir mayın yok, rahat yürü.
Davranış aynı kalır, anlam değişir
Refaktörün temel ilkesi basittir: Dış davranışı değiştirmeden iç yapıyı iyileştirmek. Bu cümle kuru görünür ama yazılım mühendisliğinin Zen bahçesidir. Bir fonksiyon hâlâ aynı sonucu döndürür; fakat artık adının ne yaptığı anlaşılır. Bir sınıf hâlâ aynı sorumluluğu taşır; fakat sırtındaki beş gereksiz çuval indirilmiştir. Bir koşul hâlâ aynı kararı verir; fakat artık ormanda kaybolmuş bir if-else labirenti değildir.
Burada güzellik, kullanıcı arayüzünde değil, niyette ve düzendedir. İyi refaktör edilmiş kod, sessizce nefes alır. Değişiklik talebi geldiğinde panikle camdan atlamaz; sandalyeyi çeker, çayını koyar ve şöyle der: Buyur, nereye evrileceğiz? Kötü kod ise aynı isteği duyunca mağara ayısı gibi hırlar. Çünkü bağımlılıklar birbirine düğümlenmiş, isimler sisli, testler yok, mantık her yere sızmıştır.
Temizlik takıntısı değil, risk yönetimi
Refaktör bazen yanlış anlaşılır. Sanki geliştiricinin estetik kaprisiymiş gibi görülür: Aa, arkadaşımız kodun simetrisini beğenmemiş, biraz süsleyecek. Hayır. Refaktör, süsleme değildir; karmaşıklık borcunun faizini düşürmektir. Teknik borç, kredi kartı gibidir: Bugün hızlı geçersin, yarın faiz seni toplantı odasında yakalar. Bir noktadan sonra yeni özellik eklemek, bataklıkta piyano taşımaya benzer.
Bu nedenle iyi refaktör, ölçülü ve amaçlıdır. Her şeyi yeniden yazma sarhoşluğu refaktör değil, mimari yangındır. Gerçek refaktör küçük adımlarla ilerler: Bir metodu böl, bir adı netleştir, tekrarı kaldır, yan etkiyi izole et, testi ekle, bağımlılığı tersine çevir. Her adımda sistem çalışmaya devam eder. Cerrahın hastayı güzelleştirmek için değil, yaşatmak için kesmesi gibi.
İsim vermek, dünyayı kurmaktır
Programlamada isimlendirme, küçümsenen bir felsefe problemidir. Bir değişkene temp demek, onu sisin içine atmaktır. calculate demek de çoğu zaman yetmez; neyi hesaplıyor, kimin için, hangi bağlamda? İyi isim, zihinsel yükü azaltır. Kod okuyan kişi artık dedektiflik yapmaz; metni izler. Refaktör bu anlamda dilin arkeolojisidir: Koddaki bulanık kavramları kazar, ortaya gerçek niyeti çıkarır.
Bir başka estetik nokta da sınır çizmektir. Her şeyi bilen nesneler, yazılımın küçük diktatörleridir. Her yere erişen yardımcı sınıflar, imparatorluğun casus ağıdır. Refaktör, bu güç yoğunlaşmasını dağıtır. Sorumluluklar ayrılır, modüller kendi mahremiyetini kazanır, veri akışı izlenebilir hâle gelir. İyi mimari, her parçanın hem yalnız kalabildiği hem de doğru anda konuşabildiği bir şehir planıdır.
Testler: İç düzenin aynası
Refaktörün cesareti testlerden gelir. Test yoksa geliştirici karanlıkta mobilya taşıyordur; her an vazoya çarpabilir. Test varsa ışık yanar. Dış davranışın değişmediğini doğrulamak, refaktörün güvenlik kemeridir. Bu yüzden testler sadece hata yakalama aracı değil, tasarımın nabız ölçeridir. Test edilmesi zor kod genellikle fazla bağlı, fazla gizli anlaşmalar yapan, fazla dramatik koddur.
Sonunda refaktörün estetiği şurada belirir: Kimse alkışlamaz. Kullanıcı fark etmez. Ürün yöneticisi bazen ne yaptığını bile anlamaz. Fakat bir gün kritik bir değişiklik gelir ve ekip şaşırtıcı bir sakinlikle ilerler. İşte o an, geçmişte yapılan görünmez temizlik konuşur. Refaktör, geleceğin paniklerini bugünden susturma sanatıdır. Dışarıda aynı bina durur; içeride taşıyıcı kolonlar hizalanmış, merdivenler aydınlatılmış, kapılar artık duvara açılmamaktadır. Yazılımda gerçek güzellik bazen tam da budur: Hiçbir şey olmamış gibi görünür, çünkü içeride her şey olması gerektiği gibidir.