Eski Hataların Yeni Sürümleri: Kodda Geçmişi Taşımanın Laneti

Geriye dönük uyumluluk, yazılım dünyasının en kibar görünümlü hayaletlerinden biridir. Dışarıdan bakınca olgunluk, güvenilirlik ve kullanıcıya saygı gibi görünür. İçeriden bakınca ise bazen kırık bir sandalyeyi müzede sergilemek değil, hâlâ toplantı odasında kullanmak zorunda kalmaktır. Bir zamanlar aceleyle yazılmış, kimsenin tam anlamadığı, fakat milyonlarca sistemin üzerine bina edildiği bir karar; yıllar sonra mimarinin kutsal taşı haline gelir. Çünkü onu kaldırırsanız sadece bir fonksiyonu değil, bir ekosistemi düşürürsünüz.

Programlamada geriye dönük uyumluluk şu basit vaadi verir: Dün çalışan şey bugün de çalışacak. Bu vaat, kullanıcı için huzurdur; geliştirici içinse omuzlara asılmış görünmez bir çuval. İçinde eski API kararları, yanlış isimlendirilmiş parametreler, tuhaf varsayılan değerler, mantıksız veri formatları ve birinin 2009’da cuma akşamı saat 17.43’te yaptığı küçük bir kestirme vardır. O kestirme artık ürünün anayasasına dönüşmüştür.

Hatanın Kültüre Dönüşmesi

Bir bug tek başına teknik bir olaydır; ama yıllarca korunursa kültür olur. Yazılım tarihindeki pek çok gariplik bu yüzden yaşamaya devam eder. Bir alanın adı yanlış yazılmıştır ama düzeltilemez, çünkü müşterinin entegrasyonu ona bağlıdır. Bir fonksiyon mantıksız sonuç döndürür ama değiştirilemez, çünkü bazı sistemler o mantıksızlığa göre davranmayı öğrenmiştir. Hata artık hata değildir; protokoldür. Tıpkı eski bir şehirde yanlış açılmış bir yolun zamanla ana caddeye dönüşmesi gibi.

Burada problem yalnızca teknik borç değildir. Teknik borç, ödenebilir bir borçtur; faizini hesaplar, taksit planı yaparsınız. Geriye dönük uyumluluk ise bazen miras hukukuna benzer: Borcu siz yapmadınız ama tapu sizin üzerinize geçti. Üstelik alacaklılar da haklıdır. Kullanıcı çalışır sistemi sever. Şirket kırılmayan sözleşmeleri sever. Ekosistem istikrar ister. Geliştirici ise temiz, zarif, akılcı bir tasarım hayal eder. İşte çatışma burada başlar: Estetik ile sadakat, doğruluk ile süreklilik, gelecek ile geçmiş aynı kod tabanında kavga eder.

Kırmadan Yenilemenin Sanatı

İyi mühendislik, her şeyi yıkıp yeniden yapmak değildir. Bu, bazen genç geliştiricinin romantik yanılgısıdır. Eski kodu görünce kılıcı çeker: Bunu komple atalım. Fakat gerçek sistemler laboratuvar faresi değildir; canlı organizmadır. İçlerinde müşteriler, veri akışları, alışkanlıklar, sözleşmeler, raporlar, otomasyonlar ve kimsenin dokunmaya cesaret edemediği cron işleri yaşar. Bir şeyi değiştirmek istiyorsanız önce onu kimin neden kullandığını anlamalısınız.

Bu yüzden geriye dönük uyumluluk, disiplin ister. Versiyonlama, açık kullanım dışı bırakma politikaları, geçiş rehberleri, uyarı mekanizmaları, adaptör katmanları ve ölçümleme şarttır. Bir API değiştirilecekse önce eski davranış gözlemlenir. Kim kullanıyor, nasıl kullanıyor, ne kadar kritik kullanıyor? Sonra yeni yol sunulur. Eski yol hemen yakılmaz; üzerine tabela asılır: Bu köprü yaşlandı, lütfen yeni köprüyü kullanın. En sonunda, yeterince zaman ve iletişimden sonra kapatılır. Medeni yazılım budur.

Fakat her şeyi sonsuza dek uyumlu tutmak da erdem değildir. Bazen geriye dönük uyumluluk adı altında sistemin geleceğini rehin alırız. Kimse kırılmasın diye her garip davranışı koruruz; sonra yeni özellik eklemek mayın tarlasında bale yapmaya döner. Kod, geçmiş kullanıcıların anıt mezarlığına dönüşür. Her satırın başında şu yazılıdır: Buraya dokunma, biri bir yerde ağlayabilir.

Cesaret ve Nezaket Dengesi

Sağlıklı yaklaşım iki uçtan da kaçınır. Ne geçmişi kutsallaştırmak gerekir ne de geçmişe savaş açmak. Geriye dönük uyumluluk bir ahlaki sorumluluktur; ama sonsuz itaat yemini değildir. Kullanıcının güvenini korumak önemlidir, fakat sistemin evrim hakkı da vardır. Eski hatayı taşımak bazen merhamettir, bazen korkaklık. Aradaki farkı ölçen şey niyet değil, plandır.

Bir yazılım ekibi kendine şu soruları sormalıdır: Bu uyumluluk kime hizmet ediyor? Eski davranışı korumanın maliyeti nedir? Yeni tasarım gerçekten daha mı iyi, yoksa sadece daha mı yeni? Kullanıcıya geçiş için yeterli araç verdik mi? Kırılma kaçınılmazsa bunu dürüstçe duyurduk mu? Bu sorular cevaplanmadan yapılan her devrim, prod ortamında patlayan bir havai fişektir.

Sonuçta geriye dönük uyumluluk, kodun hafızasıdır. Hafıza olmadan kimlik olmaz; ama travmayı sonsuza dek tekrar etmek de iyileşme değildir. Usta geliştirici, geçmişin hatasını inkâr etmez; onu belgeler, sınırlar, izole eder ve mümkünse onurlu bir emekliliğe gönderir. Çünkü iyi yazılım yalnızca çalışmakla kalmaz; zaman içinde yaşlanmayı da bilir. Asıl mesele, geçmişin kamburunu geleceğin omurgası sanmamaktır.

VARsıl- YOKsul

Yoksulların açlığını gidermek kolay. Asıl sorun, zenginlerin açlığının giderilmesinin imkansız olması!

Demişler, doğrudur da neden? Sebebini düşündünüz mü?

  • Turan Erdal İlki bedensel, digeri zihinsel oldugu icin…

    Jaan Eric Maslow ihtiyaclar semasinin en alt basamagindakiler icin karnin doymasi en temel ihtiyac, karni doydugunda toktur artik, bir dahaki acikmaya kadar. Yukseldikce tatmin, beklenti yukseliyor, paranin hersey oldugu bir deger anlayisi yaratiliyor, realiteyi yaratanlar oldugumuz unutuluyor veee sonuc hep aclik..

    Sibel Atasoy Söyledikleriniz gayet yerinde görünüyor. Benim de ilk aklıma gelen “sürdürülebilirlik” oldu. Bi şeye bir kez ulaşmak nisbeten kolaydır. Yeterli ve saf arzu bile bazen şans çarkını işletir. Fakat o şeyi sürdürülebilir kılmak büyük bi iştir! İşte bana göre zenginlerin tasası ve doyamaması seviyelerini sürdürülebilir kılmak olunca açlık bitmez. bu sadece parasal refah için değil, sürdürmek istediğiniz her şey için geçerlidir ve belki paradan çok aşk konusunda kendini alanen gösterir.
  • Jaan Eric Zorla guzellik olmuyor, zer(altin, para, mal) ile de olmuyor, birakmayi hatirlamak icindir belki de hersey 🙂

    Turan Erdal Surdurebilirlik guzel bir tez. Zenginler ellerindeki olanları kaybetmekten korkuyorlar. Bir seyi olmayanın da kaybedecek bir seyi olmaz.

    Jaan Eric Tabi birakmaktan muradim, kendi kilifindaki sen sanislari birakmak, yoksa disarida birakilacak birsey yok, kilifin sanislari sustukca icerdekinin sesi yukseliyor, ozgurce 🙂
  • Çağla Necat Çünkü açlık korkusu olanın açlığı hiç giderilemez.

    Sibel Atasoy Çok doğru. Bu korkunun sebebi nedir sence?

    Çağla Necat Bu korku Kur’an da bile geçer.. Hristiyanlar için mi Yahudiler için mi hatırlamıyorum gerçi.. Gökten sofralar inmiş ya yarın inmezse diye saklamalarından cezalar verildiği söylenir.

    Turan Erdal Bulundugumuz yerden dusmek surekli insani korkutur.

    Sibel Atasoy Neden neden, ah bu çileli başımız nedennn? (beste yaptımm) :))))
  • Çağla Necat Hadislerde en çok övülen davranışlardan biri cömertliktir. Hem para hem de yiğeceğini verme yiğeceğinden vazgeçme ve açlığa sabretme. Bu çok büyük bir nefs terbiyesi yoludur. Açlık bizim insani değil belki de hayvani yönümüzdür.

    Sibel Atasoy Hiç sanmam, hayvanlar doyunca doyar, özel durumlar haricinde biriktirme faaliyetleri yok onların.

    Turan Erdal Senin söylediğin süreklilik ile korkuyu birlestirebilirsek çok güzel bir teori olur.

    Sibel Atasoy e zaten birleşik onlar :))) Bizler algılayanlarız. Algıladıklarımızın rasgele değil sürdürülebilir olmasını isteriz. Bütün rüyalar bu istek sebebiyle kuruluyor. Einstein bile tanrının zar atmasını hazmedemedi 🙂
  • Turan Erdal İnsan kendi ınsaa ettiği şeyleri kaybetmekten korkuyor. Einsteinde de durum aynı galiba, yıllarca emek verdiği bir teorinin yıkılmasını görmek.
  • Sibel Atasoy YOKsul ve VARsıl, oyunun dengeye gelip yavaşlaması hatta sona ermesi tehlikesine karşı alınmış önlemler gibi geliyor bana. Dengede de uyunabili! Uyanık olmak için akla hayale gelmeyen mekanizmalar var hayat oyununda 🙂