Kuantum Bilgisayarda Windows 95 Çalıştırıyorsunuz
: Ruhunuzdaki Çözülmemiş Teknik Borcun Gizli Maliyeti
20 yıl önce bir stajyer tarafından yazılan tek bir satır kod yüzünden milyonlarca dolar kaybeden bir yüksek frekanslı ticaret algoritması hayal edin. O stajyer sizin 7 yaşındaki haliniz. Ve o kod şu anda hayatınızı yönetiyor.
Yazılım mühendisliğinde, 'Eski Kod' (Legacy Code), hala kullanımda olan ancak bakımı zor olan eski kaynak kodunu ifade eder. Mevcut ölçek göz önünde bulundurularak yazılmamıştır. O zamanlar belirli bir sorun için hızlı bir çözümdü (yama).
Reddedilme korkunuz? Bu, sınıfın önünde azarlandığınız zaman yazılmış Eski Kod'dur. Para kaygınız? Ebeveynlerinizin faturalar yüzünden kavga etmesini izlemekten gelen Eski Kod. Bunlar başlangıçta 'kusur' değildi; hayatta kalma senaryolarıydı. O zamanlar sizi korudular. Ama şimdi, karmaşık bir operasyonu yürüten bir Komutansınız ve bu 8 bitlik senaryolar RAM'inizin %80'ini işgal ediyor.
Çoğu insan bu çöken işletim sisteminin üzerine yeni 'Alışkanlıklar' (Uygulamalar) yüklemeye çalışır. Asla işe yaramaz. Yeni bir uygulamaya ihtiyacınız yok; bir Çekirdek Yeniden Düzenlemesine (Kernel Refactor) ihtiyacınız var.
1. Teknik Borcu Tanımlama: Gecikme Testi
Eski Kod çalıştırıp çalıştırmadığınızı nasıl anlarsınız? 'Gecikme'ye (Latency) bakın.
- Tepki Boşluğu: Küçük bir şey olur (patronunuz belirsiz bir e-posta gönderir) ve duygusal tepkiniz muazzamdır (panik atak). Bu orantısız tepki, arka planda dönen eski kodun neden olduğu gecikmedir. Temiz bir sistem verilere olduğu gibi tepki verir. Dağınık bir sistem verilere artı 20 yıllık önbelleğe alınmış günlüklere tepki verir.
- Tekrarlayan Hatalar: Aynı tür zehirli insanlarla mı çıkıyorsunuz? İşleri tam olarak aynı ay dönümünde mi bırakıyorsunuz? Bu, içinden çıkamadığınız bir 'While Döngüsü'dür.
2. Travmanın 'Spagetti Kodu'
Neden sadece 'aşmak' bu kadar zor? Çünkü Travma 'Spagetti Kodu'dur. Yapılandırılmamıştır, karışıktır ve net GOTO ifadeleri yoktur. Bir anı bir kokuya, o bir korkuya, o da mide ağrısına bağlıdır.
Bir satıra dokunmak tüm modülü bozar. İrade gücünün başarısız olmasının nedeni budur. 'Öfke' fonksiyonunu düzeltmeye çalışıyorsunuz ama 'Güvenlik' kütüphanesine sabit kodlanmış (hard-coded). Sadece silemezsiniz.
3. Yeniden Düzenleme vs. Yeniden Yazma (Rewriting)
Acemi geliştiriciler 'Sıfırdan yeniden yazmak' isterler. Egolarını öldürmek veya bir gecede yeni bir insan olmak isterler. Kıdemli Mimarlar bunun felaket olduğunu bilirler. Bağımlılıklarınız (Dependencies) var. Çalışma süresi (Uptime) gereksinimleriniz var.
Biz 'Yeniden Düzenleme' (Refactoring) kullanıyoruz. Kodun dış davranışını hemen değiştirmeden iç yapısını değiştiriyoruz.
- Yorum Satırı Yapma (Commenting Out): Korku senaryosunu henüz silmiyoruz. Sadece otomatik olarak çalışmaması için yorum satırı yapıyoruz. Onu gözlemliyoruz.
- Modülerleştirme: Karmaşayı çözüyoruz. 'Benlik Saygım'ı 'Üretkenliğim'den ayırıyoruz. Şu anda bunlar birleşik sınıflardır (Coupled Classes). Onları ayırmalıyız (Decouple).
4. Dokümantasyon Aşaması: Kod İncelemesi Olarak Günlük Tutma
Dokümantasyonu olmayan kod bir kara kutudur. Okuyamadığınız şeyi düzeltemezsiniz. iRooting'deki [Diary] modülü "Sevgili Günlük, bugün üzücüydü" yazmak için değildir. Kod İncelemesi (Code Review) içindir.
- İzleme Günlükleri (Trace Logs): Aksaklığı (kaygı/öfke) hissettiğinizde, yığın izini (stack trace) takip edin. "Öfkeli hissettim. Neden? Çünkü beni görmezden geldi. Bu neden acıttı? Çünkü babamın gidişi gibi hissettirdi." Bum. Kök dizini buldunuz.
- Taahhüt Mesajları (Commit Messages): Her farkına vardığınızda yazın. "Eleştirinin savunma alt yordamını tetiklediği hata düzeltildi."
5. Eski API'leri (İlişkileri) Kullanımdan Kaldırma (Deprecating)
Bazen Eski Kodunuz harici sunucular tarafından korunur. Sizin 'komik şişman adam' olmanızı bekleyen eski arkadaşlar. Size çocuk gibi davranan ebeveynler. Bunlar Kullanımdan Kaldırılmış (Deprecated) API'lerdir.
Artık var olmaması gereken bir uç noktaya ping atıyorlar. Bir 410 Gone hatası göndermelisiniz. "Artık bu davranışı desteklemiyorum." Ping atmaya devam ederlerse IP'yi engellersiniz.
6. Yeni Çekirdeği Birim Testine Tabi Tutma (Unit Testing)
Bir inancı yeniden düzenledikten sonra (örneğin, "Zayıfım" yerine "Yeterliyim" olarak değiştirmek), Birim Testleri çalıştırmalısınız.
- Stres Testi: Kendinizi bilerek eskiden hatayı tetikleyen bir duruma sokun. Topluluk önünde konuşma? Yüzleşme?
- CPU Sıcaklığını İzleyin: Kalp atış hızınızı izleyin ([Control Tower] sağlık özelliklerini kullanarak). Paniklediniz mi? Yoksa soğukkanlı mı kaldınız? Paniklediyseniz, yeniden düzenleme başarısız oldu. Koda geri dönün.
7. Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD)
Asla 'Bitmiş' değilsiniz. Her zaman Beta aşamasındasınız. Daha yüksek başarı seviyelerine (Daha Yüksek Trafik) ölçeklendikçe yeni hatalar ortaya çıkacaktır.
- Gecelik Derlemeler (Nightly Builds): Her gece kodunuzu gözden geçirin. Herhangi bir Eski senaryo gizlice içeri girdi mi?
- Yama Salısı (Patch Tuesday): Derin terapi veya meditasyon için özel olarak zaman ayırın. Bu sunucu bakım zamanıdır.
8. 'Eski Donanım' Tehlikesi (Vücut)
Kod donanım üzerinde çalışır. Vücudunuz travmayı fiziksel olarak depolar. Psoas kası, vagus siniri. Bazen kod iyidir ama sunucu rafı tozludur.
- Donanım Temizliği (Hardware Flush): Fiziksel protokollere ihtiyacınız var. Yüksek yoğunluklu aralıklı antrenman. Derin taktiksel nefes alma. Soğuğa maruz kalma. Bu BIOS'u yeniden başlatır. Somatik bir sorundan konuşarak kurtulamazsınız. Onu fiziksel olarak dışarı atmalısınız.
9. Neden Eski Koda Saygı Duyuyoruz
Geçmişinizden nefret etmeyin. O Eski Kod, başka hiçbir kaynak yokken sistemi çalışır durumda tuttu. 2010 çöküşünden (gençlik yıllarınız) sağ çıktı. İşini yaptı.
Onu onurlandırın. Ona teşekkür edin. Ve sonra emekli edin. Arşivde ona bir anıt inşa edin ve üretim trafiğini yeni Kümeye taşıyın.
Ek: Yaygın Çalışma Zamanı Hatalarını Giderme
S1: Üzgün değil, uyuşmuş hissediyorum. Bu bir hata mı? C: Uyuşukluk kod eksikliği değildir; aşırı yüklenmeyi (DDoS saldırısı) önlemek için gelen tüm trafiği engelleyen bir Güvenlik Duvarıdır (Firewall). Bu, sisteminizin yüksek tehdit algıladığı anlamına gelir. Duyguları zorlamak değil, tehdit seviyesini düşürmeniz gerekir.
S2: Yeniden düzenledim ama stres altında hata geri geldi. C: Bu bir 'Geri Alma'dır (Rollback). Yüksek yük altında sistemler bilinen son kararlı yapılandırmaya geri döner. Eski alışkanlıklarınız kararlı yapılandırmadır. Bu sadece yeni kodun henüz 'Üretime Hazır' (Production Ready) olmadığı anlamına gelir. Test etmeye devam edin.
S3: Tam bir yeniden yazma ne kadar sürer? C: Tam bir yeniden yazma yoktur. Ölene kadar güncellemeler gönderirsiniz. Ancak kritik kararlılık genellikle 6-12 ay yoğun çalışma gerektirir.
S4: Yalnız başıma yeniden düzenleme yapabilir miyim? C: Kıdemli olmayan geliştiriciler yalnız kod yazar. Kıdemli Mimarlar Eşli Programlama (Pair Programming) yapar. Bir terapist veya akıl hocası sizin Eş Programcınızdır. Ekrana çok uzun süre baktığınız için kaçırdığınız sözdizimi hatalarını tespit ederler.
Sistem Mimarının Talimatı
[Diary] modülünüzü açın. Bugün bir çocuk gibi davrandığınız BİR durumu belirleyin. Yargılamayın. Sadece koda bakın. EĞER/O ZAMAN (IF/THEN) ifadesi neydi? "EĞER telefonuna bakarsa, O ZAMAN benden nefret ediyor demektir." Onu tanımlayın. Yarın yeniden düzenlemeye başlıyoruz.
