
Yanlış soyutlamadansa kopyalama: Sandi Metz'in uyarısı
Sandi Metz, 2014'teki RailsConf konuşmasında ve 2016'daki denemesinde kopyalamanın yanlış soyutlamadan çok daha ucuz olduğunu savundu; paylaşılan bir fonksiyonun koşullarla dolu tuzağa dönüşme yolunu ve geri dönüş reçetesini anlattı.
Kopyalama, yanlış soyutlamadan çok daha ucuz
Sandi Metz, 2014'te RailsConf'ta yaptığı "All the Little Things" konuşmasının kısa bir bölümünü, yazılım ekiplerinde hâlâ dolaşan bir iddiaya ayırdı: kopyalama, yanlış soyutlamadan çok daha ucuzdur. Tavsiyesi netti — yanlış soyutlama yerine kopyalamayı tercih edin. Tepki o kadar güçlü oldu ki Metz bu fikri bir denemeye dönüştürdü: metin önce Chainline bülteni için yazıldı, Ocak 2016'da blogunda yeniden yayımlandı. Bazı geliştiriciler aklını kaçırdığını söyledi; çok daha fazlası anlattığı kalıbın kendi kod tabanlarında her yerde olduğunu yazdı.
İyi bir soyutlama nasıl tuzağa dönüşür
Metz tekrar eden bir hikâye anlatıyor. Programcı A kopyalamayı fark eder, onu dışarı çıkarır, bir ad verir — bir metot, belki bir sınıf — ve her kopyayı yeni soyutlamayla değiştirir. Kod kusursuz görünür. Zaman geçer. Soyutlamanın neredeyse uyduğu, ama tam uymadığı yeni bir gereksinim gelir. Programcı B onu korumak zorunda hisseder; bir parametre ve bir koşul ekler. Bir sonraki gereksinim bir parametre ve bir koşul daha getirir; döngü kod anlaşılmaz hâle gelene kadar sürer.
Tuzak en az teknik olduğu kadar psikolojiktir. Mevcut kod kendi lehine savunma yapar: varlığı onun doğru ve gerekli olduğunu ima eder ve birinin korumak istediği emeği temsil eder. Kod ne kadar karmaşıksa onu tutma baskısı o kadar artar — batan maliyet yanılgısı. Sıradaki geliştirici geldiğinde paylaşılan yardımcı artık tek bir fikir değil, anlaşılması zor ve bozulması kolay, koşullarla dolu bir prosedürdür.
Geri dönüş yolu: içeri al, buda, yeniden çıkar
Reçetesi sezgiye aykırı: soyutlama yanlışsa ileri gitmenin en hızlı yolu geri gitmektir. Soyutlanmış kodu her çağırana geri koyun, her çağıranda parametreleri kullanarak gerçekte hangi parçaya ihtiyaç duyduğunu belirleyin ve gerisini silin. Böylece hem soyutlama hem koşullar birlikte ortadan kalkar; her çağıran yalnızca kullandığı kodla kalır.
Bunu deneyen ekipler, çağıranların aslında hiçbir zaman aynı şeyi yapmadığını sık sık gördü. Eski soyutlama gidince kopyalamayı yeniden ayırmak ve öğrenilenlerden yeni soyutlamalar çıkarmak mümkün oldu; yeni özellik eklemek hızlandı. Metz'in pratik kuralı şu: paylaşılan kodda parametre geçiriyor ve koşullu yollar ekliyorsanız soyutlama yanlıştır. Onu erkenden bırakmak, savunmaktan daha az acıtır. "Soyutlama yanlış olduğunda ileri gitmenin en hızlı yolu geri gitmektir. Bu geri çekilme değil, daha iyi bir yöne ilerlemedir," diye yazıyor.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.