Bir kez kopyalamaya başlayınca.
İlk kopya makul bir karardır. İkincisi daha kolaydır. Üçüncüden itibaren alışkanlık olur. Kopyalamanın kendi dinamiği — ve durup düşünmemiz gereken an — üzerine öğrenilmiş bir ders. Bir kahramanlık hikâyesi değil.
Bu nedir? · Mühendislik Hikâyesi
Çıkarılmış bir ders — bir hata, neden yaşandığı ve bize ne öğrettiği. Anonim, müşteri adı olmadan, dramsız. Kahraman değil, öğretmen hatanın kendisidir. Genel bakışa git
- Yazar
- Batunet Engineering
- Okuma süresi
- 4 dk
- Seviye
- İleri düzey
- Durum
- Onaylandı
Bu sayfada
Başka bir yerde anlattığımız, bununla akraba bir ders var: Kod tekrarı, kopyaların birlikte değişmesi gerekene kadar ucuz kalır — ve hata, bu dönüm noktasını gözden kaçırmaktaydı. Bu hikâye aynı konuya öbür taraftan bakıyor. Kopyalamanın pahalı hâle geldiği ana değil, oraya götüren eğime. Kasıtlı olarak genel tutuldu — sistem, kişi ve zaman belirtmeden.
Durum
Mevcut bir sistemde bir işlev bir kez değil, onlarca kez vardı. Aynı görev birçok yerde çözülmüştü; her kopya bulunduğu yere biraz uyarlanmıştı, hiçbiri diğerinin tıpatıp aynısı değildi. Toplamda, sistemin her yerine dağılmış yaklaşık 5000 satır neredeyse aynı kod birikmişti.
Başlangıç varsayımları
İlk kopya bir özensizlik değil, savunulabilir, yerel bir karardı. Görev ikinci kez ortaya çıktığında ortak biçim henüz belli değildi ve şüpheye dayalı bir soyutlama bir kumar olurdu — belki de her kopyadan daha pahalıya patlayan yanlış soyutlama. Kopyalamak hızlı, bağımsız ve güvenliydi. Bu varsayım ilk kopya için doğruydu. Dile getirilmeyen kısım ise bir kez doğru olanın bir sonraki ve ondan sonraki seferde de doğru kalacağı varsayımıydı.
Sorun
Zamanla kod tabanının bakımı son derece zorlaştı. Ortak kuralın değişmesi gerektiğinde, birçok kopyada aynı anda değiştirilmesi gerekiyordu — ve hepsinin bulunduğundan asla emin olunamıyordu. Bir yerdeki düzeltme diğerlerine ulaşmıyordu; aynı görev kopyaya göre farklı davranıyordu. Daha derindeki tespit bunun altındaydı: Hiç kimse onlarca kopya olmasına karar vermemişti. Her biri tek başına savunulabilirdi; toplamları değildi. Maliyet belirli bir kopyayla gelmedi — birinin durup düşüneceği eşiğin altında birikti.
Neden
Asıl neden kopyalamanın kendi dinamiğiydi. İlk kopya ikincisinin önündeki eşiği alçaltır; ikincisi üçüncüyü olağan kılar. Her tekrar bir sonrakini daha doğal ve daha az sorgulanmaya değer gösterir. Hata tek bir kopyada değil, ilkinden sonra eksik kalan karar noktasındaydı. Kod tekrarı tam da her adım tek başına küçük ve gerekçelendirilebilir olduğu için bu kadar sessizce büyür — tehlike ilk adım değil, eğimdir.
Karar
Batunet, tekrarlanan uygulamayı temiz bir çözümle değiştirmeye karar verdi — kopyalamak yasak olduğu için değil, kopyalar sayılarıyla ve birlikte farklılaşmalarıyla, aslında birçok kılığa girmiş tek bir şey olduklarını gösterdikleri için. Daha önce yalnızca tahmin edilebilecek ortak biçim artık görünürdü. Böylece soyutlama bir kumar olmaktan çıkmış, kanıtlanmış bir şey olmuştu.
Uygulama
Yeniden yapılanma tek bir sıçramayla değil, küçük ve geri alınabilir adımlarla yapıldı. Önce gerçek ortaklık ayıklandı — tüm kopyaların gerçekten paylaştığı şey, yalnızca tesadüfen aynı görünen şeyden ayrıldı. Bu ortaklık, net bir sınırın arkasında tam bir kez ifade edildi. Ardından kopyalar tek tek buna geçirildi; her birinde, herhangi bir iyileştirme yapılmadan önce davranışın değişmeden kalması hedeflendi. Sonunda kod tabanı yaklaşık yüzde 90 küçülmüştü — aynı yetenek, birçok yer yerine tek bir yerde.
Ödünleşimler
Konsolidasyon bedava değildir ve her zaman doğru değildir. Artık tek çözümün bakımının yapılması gerekir; daha önce dağınık olanı bir araya toplar ve o tek yeri önemli kılar. Erken kopyaların bedeli — beklemek — yanlış soyutlamayı inşa etmemenin bilinçli karşılığıydı. Kopyalar gerçekten bağımsız kalsaydı farklı karar verirdik: O zaman birleştirmek, ayrı olması gerekenleri birbirine bağlayan bir hata olurdu. İki tekrar tesadüf olarak kalabilir; mesele üçüncüsünü gözden kaçırmamaktır.
Ne öğrendik
Tehlikeli an ilk kopya değil, ikincisidir — kopyalamanın bir tercih olmaktan çıkıp alışkanlığa dönüşmeye başladığı an. Buradan çıkardığımız kural eski ve basittir: Aynı türden iki tekrar tesadüf olabilir; üçüncüsü bir örüntü ve bir karar noktasıdır. “Don't Repeat Yourself”, birlikte değişen bilginin tek bir yerde ifade edilmesi gerektiğini söyler; üçler kuralı ise ne zaman harekete geçileceğini. Ders “asla kopyalama” değil — “asla bilinçsizce kopyalama”dır.
Bu deneyim Batunet'i nasıl değiştirdi
O zamandan beri ikinci tekrarı görünür kılıyoruz. Code review'da bir kopya ortaya çıktığında bilinçli olarak soruyoruz: Bu ikincisi mi? Üçüncüsü mü? Kopyalar bağımsız olduğu sürece vicdan rahatlığıyla kopyalıyoruz ve aynı türden üçüncü tekrarı birleştirme anı olarak ele alıyoruz. Kopyalamak serbest; karar vermeden kopyalamak değil. Sessiz bir eğim, bilinçli olarak durduğumuz bir noktaya dönüştü.
İleri okuma
- Rehber: On yıl sonra hâlâ çalışan yazılım — bağımlılık (coupling) ve değiştirilebilirliğin ömür boyunca neden belirleyici olduğu.
- Karar: Başlangıç noktası olarak modüler monolit — yapıyı önceden değil, bir sorun gerektirdiğinde eklemek.
- Uygulama kılavuzu: Bir legacy monoliti modernize etmek — küçük, geri alınabilir adımlarla konsolidasyon.
- Bakış açısı: Erken soyutlama neden karmaşıklık yaratır — yanlış soyutlama, kod tekrarından daha pahalıdır.
- Sözlük: Rule of Three (üçler kuralı) — ilk seferde değil, üçüncüsünde birleştirmek.
Hiçbir kopya, onlarca kopya olmasına verilmiş bir karardan doğmaz. Hepsi tek tek makul olan küçük adımlardan doğar — bu yüzden ikinci adımı da ilki kadar bilinçli atmak gerekir.
Atıfta bulunulan varlıklar
Mühendislik yolculuğunuza devam edin.
İlgili kavramlar, kararlar, uygulama kılavuzları ve bakış açıları — bir bağlantı listesi olarak değil, bütünlüklü bir yol olarak.
Rehberler
Referanslar
Mühendislik kararları
Uygulama kılavuzları
Bakış açıları
Bu alanda somut bir projeniz mi var?
Referans Rehberleri nasıl düşündüğümüzü gösterir. Sisteminiz için doğrudan yönetimle görüşün — teknik düzeyde, satış görüşmesi olmadan.
