Yazılım geliştirmek, topluluk önünde bir performans sergilemek gibi hissettirebilir. İnternet; lansmanları, ekran görüntülerini ve değişim günlüğü (changelog) maddelerini ödüllendirir. Bu nedenle, bir geliştirici tüm oturumunu bir projeye harcayıp sonunda gösterebileceği görünür bir şey bulamadığında, o günün boşa gittiği içgüdüsüyle hareket eder. Food Blog Platform'un son geliştirici günlüğü bunun tam tersini kanıtlıyor. Sergilenecek yeni bir tarif, yeniden tasarlanmış kartlar veya kullanıcıların tıklayabileceği ek butonlar yoktu. Sadece parçalarına ayrılmış, incelenmiş ve eskisinden daha iyi bir şekilde yeniden bir araya getirilmiş kodlar vardı.
İşte uzun vadeli projeleri hayatta tutan görünmez çalışma budur.
Özellikler Şan Kazanır; Refactoring İşleyişi Sağlar
Bir yemek blogu platformunu yönetirken yüzey basit görünür. Kullanıcılar tarif paylaşır, fotoğraf yükler ve kategorilere göre göz atar. Ancak işin altında; görüntü işleme hatlarını (image pipelines), malzemeler ve talimatlar arasındaki veritabanı ilişkilerini, arama dizinlerini ve önbellekleme katmanlarını yönetiyorsunuzdur. Zamanla hızlı çözümler birikir. Üç farklı dosyaya kopyalanmış bir yardımcı fonksiyon. On gönderi için mantıklı olan ancak bin gönderiye ulaştığınızda yavaşlayan bir veritabanı sorgusu. Düzenli başlayan ancak beş acil yama ile bir labirente dönüşen CSS kodları.
Refactoring, bu karmaşayla doğrudan yüzleşmek demektir. Bir tarif düzenleme formunun ve bir yönetici panelinin paralel versiyonlar sürdürmek yerine aynı doğrulama katmanından beslenmesi için mükerrer mantığı birleştirmek anlamına gelebilir. Görüntülerin işlenme biçimini basitleştirerek sıkıştırma rutinini her sayfa yenilendiğinde değil, sadece bir kez çalışacak hale getirmek anlamına gelebilir. Ya da kod tabanını (codebase) yeniden yapılandırarak, ileride yeni bir içerik türü eklemenin altı farklı dizin arasında arama yapmayı gerektirmemesini sağlamak anlamına gelebilir.
Bunların hiçbiri kullanıcı arayüzünde görünmez. Siteye gelen bir ziyaretçi "sorgu optimize edildi" veya "bileşen ayrıştırıldı" yazan bir banner görmeyecektir. Ancak site daha hızlı yüklendiğinde bunu hissedeceklerdir. Yeni bir özellik, talep edildikten üç hafta sonra değil de üç gün sonra geldiğinde bunu fark edeceklerdir. Geliştirici bugün yeni yetenekler eklemedi; sadece yeteneklerin kod tabanıyla savaşmadan eklenebilmesi için yolu temizledi.
Temiz Kod, Gelecekteki Başarısızlıklara Karşı Bir Yatırımdır
Bir aydan uzun süren her proje sürtünme biriktirir. Bir fikri test etmek için hızlı bir prototip oluşturursunuz. Sonra kullanıcılar gelmeye başlar. Ardından bir kimlik doğrulama katmanına, sonra bir moderasyon kuyruğuna ve sonra bir mobil düzene ihtiyacınız olur. Bu eklemelerin her biri, halihazırda var olan yapıya monte edilir. Düzenli bakım yapılmadığında mimari, her yeni odası kat planını hiç görmemiş farklı bir kişi tarafından tasarlanmış bir eve benzemeye başlar.
Teknik borç bir disiplin hatası değildir. Gerçek bir şeyi yayına almak için yapılan ödünlerin doğal bir yan ürünüdür. Tehlike kodunuzun kusursuz olmaması değildir. Tehlike, onu o kadar uzun süre kusurlu bırakmaktır ki, tek bir değişkeni değiştirmek birbiriyle ilgisiz üç özelliği bozacak hale gelir. En son denediğinizde etiket sistemi bozulduğu için arama çubuğuna dokunmaya korkar hale gelirsiniz. Veritabanı şemasının çözülmesi saatler alacak bir kördüğüme dönüştüğünü bildiğiniz için bir öğün planlayıcı widget'ı eklemeyi ertelersiniz.
Bir günü refactoring yaparak geçirmek, faiz sizi boğmadan önce o borcu ödemek gibidir. Küçük sorunların büyük sorunlara dönüşmesini engeller. Food Blog Platform nihayet bir sonraki büyük özelliğini eklediğinde, geliştirici kırılgan kodların etrafından dolanmak zorunda kalmayacaktır. Yeni mantığı yazacak, temiz bir arayüze bağlayacak ve yoluna devam edecektir. Yatırım getirisi budur.
Küçük Adımlar, Gerçek Öğrenme
Yazılım geliştirme etrafında, ilerlemenin dahice buluşlar ve her şeyi bir gecede yeniden yazan maraton kodlama seansları gibi göründüğüne dair bir mitoloji vardır. Çalışan çoğu geliştirici size bunun bir fantezi olduğunu söyleyecektir. Gerçek ilerleme; bir Salı öğleden sonrasındaki diff (fark) gibidir: üç fonksiyon kısalmıştır, gereksiz bir bağımlılık kaldırılmıştır ve bir sonraki okuyucunun ne işe yaradığını gerçekten anlayabilmesi için kafa karıştırıcı bir değişken adı değiştirilmiştir.
Food Blog Platform geliştirici günlüğü bu ritmi mükemmel bir şekilde yakalıyor. Yazılım geliştirmek, küçük ve tutarlı iyileştirmelerle ilgilidir. Her zorluktan bir şeyler öğrenirsiniz. Belki bugün zorluk, belirli bir modülün neden başka birine bu kadar bağımlı hale geldiğini anlamaktı. Belki de iki hafta önce yapılan bir kestirmenin, tasarruf ettiğinden daha fazla zamana mal olmaya başladığını fark etmekti. Her commit, yarattığından daha fazlasını silse bile projeyi daha iyi hale getirir.
Bu yaklaşım aynı zamanda motivasyonunuzu da korur. Büyük çaplı yeniden yazımlar yorucu ve risklidir. Eski hataları çözerken yenilerini ortaya çıkarırlar. Kademeli refactoring, yapıldığında
