Gerçekte Olmayan Sayılar Dünyayı Nasıl Gerçekten Çalıştırıyor?

Bir sayının karesi nasıl negatif olabilir? İlk bakışta cevap açıktır: Olamaz. Pozitif bir sayıyı kendisiyle çarparsanız sonuç pozitiftir; negatif bir sayıyı kendisiyle çarparsanız iki eksi birbirini götürür ve sonuç yine pozitif çıkar. Fakat matematikçiler, “Olamaz” denilen yerde durmak yerine sayı sistemini genişletmeyi seçti. Böylece karesi −1 olan bir birim tanımlandı: i² = −1. Adına da sanal birim denildi.

Sanal demek gerçek dışı demek mi?

Buradaki “sanal” sözcüğü biraz talihsizdir. Çünkü sanal sayılar uydurma, keyfî veya işe yaramaz değildir. Negatif sayılar da bir zamanlar anlamsız bulunuyordu. Üç elmadan beş elma çıkarılamayacağına göre −2 ne işe yarayabilirdi? Sonra borçları, sıcaklık farklarını ve yönleri anlatmak için negatif sayıların vazgeçilmez olduğu anlaşıldı. Sanal sayılar da benzer biçimde, eski sayı doğrusunun açıklayamadığı işlemleri mümkün kılan yeni bir boyuttur.

Gerçek sayıları yatay bir doğru üzerinde düşünün. Sağa gittikçe pozitif, sola gittikçe negatif değerlerle karşılaşırsınız. Sanal sayılar ise bu doğrunun dışına, dikey bir eksene açılır. Böylece sayı doğrusu bir düzleme dönüşür. a + bi biçimindeki bir karmaşık sayı, bu düzlemde bir noktadır: a yatay konumu, b ise dikey konumu gösterir. Matematik, tek şeritli bir yoldan iki boyutlu bir haritaya geçmiştir.

Çarpma işlemi nasıl dönüşe dönüşür?

Sanal sayıların en büyüleyici yanı, çarpma ile geometri arasında kurdukları bağdır. Bir sayıyı i ile çarpmak, karmaşık düzlemde onu 90 derece döndürmek anlamına gelir. İkinci kez i ile çarptığınızda toplam 180 derece dönersiniz ve sayının ters yönüne, yani negatifine ulaşırsınız. Bu nedenle i × i = −1 olur. Görünüşte tuhaf olan denklem, geometrik açıdan son derece düzenli bir hareketi anlatır.

Bu özellik, dalga ve salınım içeren problemleri olağanüstü biçimde sadeleştirir. Bir yayın titreşimi, alternatif elektrik akımı, radyo sinyali veya ses dalgası sürekli büyüklük ve yön değiştirir. Sinüs ve kosinüs fonksiyonlarıyla ayrı ayrı uğraşmak yerine bunları karmaşık sayılarla tek bir dönen hareket olarak temsil edebiliriz. Hesap tamamlandığında fiziksel olarak ölçülen gerçek kısım alınır. Sanal bölüm ise hesap boyunca yönü ve fazı taşıyan güçlü bir yardımcıdır.

Laboratuvardan cebimize

Elektrik mühendisleri alternatif akım devrelerini çözerken karmaşık sayıları kullanır. Direnç, bobin ve kondansatörün akıma verdiği farklı tepkiler, karmaşık empedans kavramıyla ortak bir dilde ifade edilir. Cep telefonlarının sinyal işlemesi, Wi-Fi bağlantıları, radar sistemleri ve tıbbi görüntüleme teknolojileri de Fourier dönüşümü gibi karmaşık sayılara dayanan yöntemlerden yararlanır. Başka bir deyişle “sanal” sayılar olmadan oldukça gerçek cihazlarımız ya çalışmaz ya da tasarımları çok daha zor hâle gelirdi.

Kuantum mekaniğinde durum daha da çarpıcıdır. Bir parçacığın durumu, karmaşık değerli bir dalga fonksiyonuyla betimlenir. Doğrudan ölçülen şey bu fonksiyonun kendisi değil, ondan hesaplanan olasılıklardır. Yine de sanal bileşen çıkarıldığında kuramın dinamiği bozulur. Doğa, bize ölçüm ekranında gerçek sayılar gösterirken perde arkasındaki hesabı karmaşık sayılarla yürütüyor gibidir.

Sanal sayılar yalnızca pratik değildir; Mandelbrot kümesi gibi fraktalların da kapısını açar. Basit bir karmaşık sayı işlemini tekrar tekrar uyguladığınızda sonsuz ayrıntıya sahip şaşırtıcı desenler doğar. Cebir, geometri ve sanat aynı yüzeyde buluşur. Bu desenler matematiğin sadece sonuç üreten bir araç değil, keşfedilecek yapılar barındıran yaratıcı bir evren olduğunu hatırlatır.

Sonuçta sanal sayılar, matematiğin imkânsızlıklarla nasıl başa çıktığını gösteren parlak bir örnektir: Sorunu reddetmek yerine düşünce alanını genişletmek. √−1, eski kurallar içinde bulunamaz; fakat daha geniş bir sistemde hem tutarlı hem de vazgeçilmezdir. Belki de en önemli ders budur: Bir şey mevcut haritamızda görünmüyorsa, sorun o şeyde değil haritanın boyutlarında olabilir.

Evrenin Dinlediği Şifre: Kuantum Anahtar Dağıtımı Gerçekten Kırılamaz mı?

Bir şifre düşünün: Gücünü daha büyük asal sayılardan, daha hızlı işlemcilerden ya da saldırganın yeterince sabırsız olmasından değil, doğanın en temel huylarından alıyor. Kapıyı çelikle değil, evrenin davranış kurallarıyla kilitliyorsunuz. Kuantum Anahtar Dağıtımı, yani QKD, tam olarak bu fikrin etrafında döner. Eğer biri anahtarı çalmaya kalkarsa, kuantum dünyasının nazlı parçacıkları bunu sessizce geçiştirmez; iz bırakır, düzeni bozar, alarmı çaldırır.

Klasik kriptografide çoğu güvenlik, bazı matematiksel problemlerin pratikte çözülemeyecek kadar zor olmasına dayanır. Bugün kullandığımız birçok şifreleme sistemi, saldırganın devasa sayıları çarpanlarına ayırmasının ya da ayrık logaritma gibi problemlerde boğulmasının çok uzun süreceğini varsayar. Bu kötü bir varsayım değildir; modern dünyanın omurgasını taşır. Fakat kuantum bilgisayarlar sahneye çıktığında bu omurganın bazı kemikleri çatırdayabilir. Shor algoritması gibi yöntemler, bugün güvenli sandığımız bazı sistemleri gelecekte savunmasız bırakabilir.

QKD burada başka bir kapı açar. Şifreyi doğrudan kuantumla yazmaz; asıl yaptığı şey, iki taraf arasında gizli bir anahtarın güvenli biçimde paylaşılmasını sağlamaktır. Alice ve Bob adlı klasik kahramanlarımızı düşünelim. Alice, Bob’a tek tek fotonlar gönderir. Bu fotonların polarizasyon gibi ölçülebilir kuantum özellikleri vardır. Araya Eve adlı meraklı bir dinleyici girip fotonları ölçmeye kalkarsa, kuantum mekaniğinin ölçüm ilkesi devreye girer: Ölçmek, sistemi değiştirir. Eve yalnızca bakmış olmakla bile iz bırakır.

Gizliliğin fiziği

QKD’nin en meşhur protokollerinden biri BB84’tür. Bu protokolde Alice, fotonları farklı bazlarda kodlar; Bob da rastgele bazlarda ölçer. Daha sonra açık bir kanaldan hangi bazları kullandıklarını karşılaştırırlar, fakat ölçüm sonuçlarının kendisini açıklamazlar. Bazların uyuştuğu durumlar, ham anahtarın parçası olur. Eğer bir dinleyici varsa, ölçüm hataları artar. Yani sistem, yalnızca mesaj iletmez; aynı zamanda kendisine dokunulup dokunulmadığını da sınar. Bu, kriptografide neredeyse şiirsel bir fikirdir: Bir sırrı çalmak isteyen kişi, sırrın dokusunu bozmak zorundadır.

Elbette burada dikkatli olmak gerekir. QKD, tek başına her şeyi sihirli biçimde çözen bir güvenlik muskası değildir. Mutlak güvenlik iddiası, ideal fiziksel varsayımlar altında ve doğru kullanımla anlam kazanır. Paylaşılan anahtar, örneğin tek kullanımlık şerit yöntemiyle kullanılırsa bilgi kuramsal güvenlik elde edilebilir. Fakat gerçek cihazlar kusurludur. Dedektörler kandırılabilir, ışık kaynakları sızdırabilir, yazılım hataları yapılabilir, kullanıcılar aceleci davranabilir. Evrenin kanunları sağlam olabilir; ama laboratuvardaki kablo gevşekse saldırgan kapıyı oradan aralar.

Bu yüzden QKD’yi anlamanın en sağlıklı yolu onu bir mucize değil, güvenlik mimarisinde çok güçlü bir katman olarak görmektir. Fiber optik hatlar üzerinden çalışan sistemler, şehirler arası kuantum ağları, uydularla yapılan deneyler ve kuantum internet vizyonu bu alanı giderek somutlaştırıyor. Çin’in Micius uydusu gibi örnekler, kuantum anahtar dağıtımının yalnızca teorik bir oyuncak olmadığını gösterdi. Bankalar, devlet kurumları ve kritik altyapılar için uzun vadeli gizlilik ihtiyacı arttıkça, QKD daha cazip hale geliyor.

Yine de soru şudur: Kırılamaz şifre gerçekten mümkün mü? Cevap, hem evet hem hayır. Evet, çünkü kuantum mekaniği bize anahtar dağıtımında klasik yöntemlerin veremediği türden bir güvenlik garantisi sunar. Hayır, çünkü güvenlik hiçbir zaman tek bir teknolojiye indirgenemez. En güçlü kuantum hattının ucunda zayıf bir parola, kötü yapılandırılmış bir sunucu ya da dikkatsiz bir insan varsa, doğa kanunları bile sosyal mühendislik karşısında utanarak susar.

QKD’nin asıl büyüsü, insanlığın güvenliği hesaplama gücünün ötesine taşıma cesaretidir. Artık sır saklamak için yalnızca matematiğe değil, fotonların kırılgan dansına da güveniyoruz. Bu dans bize şunu fısıldar: Bazı kapılar daha kalın kilitlerle değil, bakıldığı anda değişen gerçekliklerle korunur. Ve belki de geleceğin en iyi şifresi, evrenin kendisine sorulmuş doğru bir sorudan başka bir şey değildir.

Singleton Patron, Observer Komşu: Yazılım Desenleriyle Toplumun Gizli Tiyatrosu

Yazılım tasarım desenleri ilk bakışta soğuk bir mühendislik sözlüğü gibi görünür: Singleton, Observer, Factory, Adapter… Oysa biraz yaklaşınca bu desenlerin sadece kodu değil, toplumu da tarif ettiğini fark ederiz. Çünkü insan kalabalıkları da tıpkı büyük yazılım sistemleri gibi karmaşıktır; tekrar eden problemler üretir, bu problemlere pratik çözümler bulur ve sonra bu çözümleri gelenek, rol, unvan ya da karakter diye paketler. Mahalledeki her şeyi bilen teyze ile bir olay olduğunda anında haberdar olan Observer deseni arasında sandığımızdan az mesafe vardır.

Design pattern dediğimiz şey, aynı türden problemlere defalarca verilmiş sınanmış cevaptır. Kod dünyasında bu, geliştiricinin her seferinde sıfırdan kahramanlık yapmasını engeller. Toplumda da roller benzer bir iş görür. Öğretmen, arabulucu, asi genç, bilge ihtiyar, düzen koruyucu, girişimci, günah keçisi… Bunların her biri sosyal sistemin tekrar eden gerilimlerine verilmiş kalıplaşmış çözümlerdir. Klişe olmaları onları değersiz yapmaz; tam tersine, klişe dediğimiz şey çoğu zaman kültürel hafızanın önbelleğidir.

Singleton: Tek Adam, Tek Kapı, Tek Hakikat

Singleton deseni, bir sınıftan yalnızca bir örnek üretilmesini garanti eder. Yazılımda bazen gereklidir: merkezi yapılandırma, log sistemi, kaynak yönetimi. Toplumdaki karşılığı ise daha tehlikelidir: her şeyi bilen tek lider, tek uzman, tek ağabey, tek kanaat önderi. Bir ailede herkesin son sözüne baktığı kişi, bir ofiste bütün kararların önünde düğümlendiği yönetici, bir toplulukta gerçeğin tek distribütörü olan figür… Singleton sosyal hayatta pratiklik sağlar ama bağımlılık üretir. Sistem hızlı karar alır; fakat o tek nesne bozulursa, bütün mimari titrer.

Observer deseninde bir nesnenin durumu değiştiğinde ona bağlı gözlemciler haberdar edilir. Sosyal medyayı düşünün: biri ilişki durumunu değiştirir, yüzlerce Observer tetiklenir. Mahalle kültürü de eski usul bir event-driven mimaridir. Perdeler aralanır, balkonlar subscribe olur, haber yayılır. Observer sağlıklıdır; çünkü sistemin çevresel farkındalığını artırır. Ama aşırı kullanıldığında paranoyak bir toplum üretir: herkes herkesin olay dinleyicisidir, kimse kendi iç sürecinde yalnız kalamaz. Bildirim çağında insan, kendi ruhunun bile push notification alıcısına dönüşür.

Factory deseni, nesne üretimini merkezileştirir ve soyutlar. Toplumda bunun karşılığı kurumlar ve ritüellerdir. Okullar öğrenci üretmez sadece; vatandaş, uzman, itaatkâr, muhalif, başarılı çocuk gibi sosyal nesneler üretir. Aileler, şirketler, tarikatlar, üniversiteler ve algoritmalar birer Factory gibi çalışır. Hangi girdiden hangi rolün çıkacağını belirleyen görünmez kalıpları vardır. Burada soru şudur: Bizi kim instantiate ediyor? Kendi kurucumuz biz miyiz, yoksa başkalarının sınıf şemasından türetilmiş birer nesne miyiz?

Adapter deseni iki uyumsuz arayüzü konuşturur. Toplumun Adapter karakterleri tercümanlardır: kuşaklar arasında köprü olan çocuk, mühendisle müşteri arasında sıkışan ürün yöneticisi, aileyle modern hayat arasında arabuluculuk yapan genç kadın, akademiyle halk arasında dil kuran popüler bilimci. Adapter görünmez emek harcar. Herkes anlaşmayı doğal sanır, oysa arada biri protokol çevirisi yapıyordur. Bu rol yorucudur; çünkü Adapter hem kaynak sistemin hem hedef sistemin hatasını üstlenir. Yine de medeniyet dediğimiz şey, büyük ölçüde iyi yazılmış adaptörlerden oluşur.

Decorator deseni bir nesneye davranış ekler; onu kökten değiştirmez, katmanlandırır. Sosyal hayatta unvanlar, kıyafetler, diplomalar, biyografiler ve marka kimlikleri birer Decorator’dır. İnsan aynı insandır, ama üzerine profesörlük, CEO’luk, sanatçılık, aktivistlik, influencer’lık sarılır. Sorun, dekorasyonun özü yutmasıdır. Kodda aşırı Decorator okunabilirliği bozar; hayatta aşırı imaj da karakteri belirsizleştirir. Bir noktadan sonra karşımızdaki kişinin kim olduğunu değil, hangi katmanları taşıdığını görürüz.

Strategy deseni, davranışı koşullara göre değiştirilebilir hale getirir. Bu, sağlıklı yetişkinliğin yazılımsal metaforudur. Her durumda aynı tepkiyi veren insan kırılgandır; bağırmak, susmak, kaçmak ya da memnun etmek tek stratejiyse sistem kolay tahmin edilir ve kolay sömürülür. Bilge kişi içinde çoklu Strategy barındırır: gerektiğinde savaşır, gerektiğinde geri çekilir, gerektiğinde pazarlık eder, gerektiğinde bekler. Jungiyen dille söylersek, olgun benlik tek bir persona’ya hapsolmaz; gölgesiyle, kahramanıyla, bilgesiyle ve soytarısıyla temas kurar.

Bu benzetmelerin büyüsü şurada: Tasarım desenleri bize klişelerden utanmamayı, ama onlara teslim olmamayı öğretir. Kötü yazılımcı deseni ezbere uygular; iyi yazılımcı bağlamı okur. Kötü toplum da insanları hazır rollere hapseder; iyi toplum rollerin geçici, geçirgen ve dönüştürülebilir olduğunu bilir. Belki de en büyük mesele şudur: Kendi hayatımızın kod tabanında hangi desenleri miras aldık, hangilerini bilinçle kullandık, hangileri artık teknik borca dönüştü? İnsan, bazen refactor edilmesi gereken bir mimaridir.

Dolu Otelde Sonsuza Yer Açmak: Aklın Kilidini Kıran Paradoks

Bir otel düşünün: Odaları 1, 2, 3 diye sonsuza kadar gidiyor. Sonsuz koridor, sonsuz kapı, sonsuz anahtar. Üstelik otel tamamen dolu. Her odada bir müşteri var. Normal bir resepsiyonist burada çaresiz kalırdı; kahvesini bırakır, yüzünü buruşturur ve boş oda yok derdi. Ama burası Hilbert’in Sonsuzluk Oteli. Burada mantık, günlük sezgimizin üniformasını çıkarıp matematiğin tuhaf ama kesin kıyafetlerini giyer.

Önce daha basit bir ısınma yapalım: Tamamen dolu bu sonsuz otele tek bir yeni müşteri gelsin. Finite, yani sonlu bir otelde bu imkansızdır. 100 odalı otelde 100 kişi varsa, 101. kişiye yer açamazsınız. Fakat sonsuz otelde resepsiyonist hoparlörden şu anonsu yapar: Her müşteri kendi oda numarasının bir fazlasına geçsin. 1 numaradaki 2’ye, 2 numaradaki 3’e, 3 numaradaki 4’e… Böylece herkes hâlâ bir odada kalır, kimse sokağa atılmaz ve 1 numaralı oda boşalır. Yeni müşteri içeri alınır. İlk çatlak burada oluşur: Dolu olmak, sonsuzlukta sandığımız kadar kesin bir kapı değildir.

Peki sonsuz yeni müşteri gelirse?

Şimdi mesele büyüsün. Kapının önüne yalnızca bir müşteri değil, sonsuz sayıda yeni müşteri gelsin. Hepsinin numarası olsun: yeni müşteri 1, yeni müşteri 2, yeni müşteri 3 ve böyle sonsuza dek. Otel zaten tamamen dolu. Yine de resepsiyonist paniğe kapılmaz. Çünkü sonsuz otelde asıl ustalık, yer bulmak değil, eşleştirme yapmaktır.

Çözüm şudur: Mevcut her müşteri, oda numarasının iki katı olan odaya taşınır. Yani 1 numaradaki müşteri 2 numaralı odaya, 2 numaradaki 4’e, 3 numaradaki 6’ya, 4 numaradaki 8’e geçer. Genel kural nettir: n numaralı odadaki müşteri 2n numaralı odaya taşınır. Böylece eski müşterilerin tamamı çift numaralı odalara yerleşmiş olur.

Peki ne oldu? Tek numaralı odaların hepsi boşaldı: 1, 3, 5, 7, 9… Ve tek numaralı odalar da sonsuz tanedir. Şimdi yeni gelen sonsuz müşterileri bu tek odalara yerleştiririz. Yeni müşteri 1, oda 1’e; yeni müşteri 2, oda 3’e; yeni müşteri 3, oda 5’e gider. Genel kural: yeni müşteri k, 2k – 1 numaralı odaya yerleşir. Böylece hem eski sonsuz müşteri otelde kalır hem de yeni sonsuz müşteri içeri alınır.

Sezgi neden isyan eder?

Çünkü zihnimiz çoğunlukla sonlu dünyaya göre eğitilmiştir. Çantaya on elma koyarsınız; çanta dolarsa on birincisi sığmaz. Bir masada dört sandalye varsa beşinci kişi ayakta kalır. Gündelik hayatımızda doluluk, sınır demektir. Fakat matematiksel sonsuzlukta doluluk, sonlu nesnelerdeki gibi davranmaz. Sonsuz bir kümenin bir parçası, bütünle aynı büyüklükte olabilir. Doğal sayıların tamamı sonsuzdur; çift sayılar da sonsuzdur. Üstelik her doğal sayıyı bir çift sayıyla eşleştirebiliriz: 1 ile 2, 2 ile 4, 3 ile 6… Bu yüzden doğal sayılar kadar çift sayı vardır demek matematiksel olarak anlamlıdır.

Bu paradoksun kalbinde sayılabilir sonsuzluk yatar. Sayılabilir sonsuz, elemanlarını sıraya koyabildiğimiz sonsuzluktur. Odalar numaralıdır, müşteriler numaralıdır ve resepsiyonist her biri için açık bir kural verebilir. Sonsuzluğu yönetilebilir kılan şey, büyüklüğü avuçlamak değil, düzenli bir eşleme kurmaktır.

Sonsuzluk Oteli bize yalnızca eğlenceli bir zihin oyunu sunmaz; düşünmenin disiplinini de öğretir. Sezgi ilk darbede bağırır: Bu imkansız. Mantık ise sakin konuşur: Kuralı göster. Matematik, imkansız görüneni sihirle değil, kesinlikle aşar. Otel hâlâ tamamen doludur; ama yeni sonsuz müşteri de içeridedir. Sonsuzluk, aklın bittiği yer değil, aklın daha keskin davranmak zorunda kaldığı yerdir.

Ölü Kod Mezarlığı: Sistemi Yavaşlatan Hayalet İnançlar

Her yazılım sisteminin bodrum katında bir mezarlık vardır. Orada artık çalışmayan fonksiyonlar, yıllar önce terk edilmiş koşullar, kimsenin çağırmadığı sınıflar ve üstüne not düşülmüş kadim büyüler uyur: sakın silme, bir gün lazım olabilir. Ölü kod tam olarak budur; programın yaşayan akışına katkısı olmayan ama depoda yer kaplayan, zihni meşgul eden, bakım maliyetini artıran eski parçalar. İlginç olan şu: Ölü kod teknik bir mesele gibi görünür, ama çoğu zaman psikolojik bir arızanın izidir. Kod çalışmaz; korku çalışır.

Bir ekip düşünün. Beş yıl önce yazılmış bir ödeme modülünün içinde devasa bir if bloğu duruyor. Artık hiçbir müşteri o yolu kullanmıyor, dokümantasyon onu anmıyor, testler ona uğramıyor. Ama biri silmeyi önerdiğinde odada sessizlik oluşuyor. Çünkü kodun kendisinden çok, onun etrafındaki efsane yaşıyor: Eski CTO bunu yazmıştı. Büyük bir müşteride sorun çıkarmıştı. Bir ara kampanya döneminde hayat kurtarmıştı. İşte yazılımda ölü kod, çoğu zaman eski bir savaşın madalyasıdır; paslanmıştır ama kimse duvardan indirmeye cesaret edemez.

Ölü kod neden tehlikelidir?

Çünkü yazılım yalnızca işlemciye verilen talimatlardan oluşmaz; aynı zamanda geliştiricinin zihninde kurduğu modeldir. Sistemde gereksiz kod ne kadar artarsa, bu model o kadar bulanıklaşır. Yeni gelen geliştirici şunu sorar: Bu fonksiyon hâlâ kullanılıyor mu? Bu parametre niye var? Bu hata yakalama bloğu hangi senaryo için? Cevap yoksa, kod artık bilgi değil gürültüdür. Gürültü de karar vermeyi yavaşlatır. Yavaş karar veren ekip, hızlı bozulan sistem üretir.

Ölü kodun maliyeti yalnızca satır sayısı değildir. Derleme süresini uzatabilir, statik analizleri kirletebilir, güvenlik taramalarında yanlış alarm üretebilir, test kapsamını sahte şekilde yükseltebilir. Daha kötüsü, yeni bir özellik geliştirirken yanlış referans noktası sunar. Geliştirici, yaşayan mimariyi değil, fosilleşmiş bir çözümü taklit eder. Böylece ölü kod çoğalır; mezarlık, şehir planına dönüşür.

Burada en kritik ayrım şudur: Eski kod ölü kod demek değildir. Legacy kod, hâlâ değer üretiyorsa yaşlı ama canlıdır. Ölü kod ise artık sistem davranışının parçası olmayan koddur. Onu kutsal yapan yaşlılığı değil, belirsizliğidir. Belirsizlik arttıkça insanlar silmek yerine dokunmamayı seçer. Dokunmamak güvenli görünür, ama uzun vadede en pahalı stratejilerden biridir.

Silmek bir vandalizm değil, bakım disiplinidir

Ölü kodla mücadele romantik cesaretle değil, yöntemle yapılır. Önce kullanım izleri aranır: çağrı grafikleri, loglar, feature flag kayıtları, telemetri, testler, sürüm geçmişi. Kod gerçekten çalışmıyorsa, onu yorum satırına almak çözüm değildir; bu sadece cesedi salona taşımaktır. Versiyon kontrol sistemi zaten hafızadır. Git varsa, mezar taşı olarak yorum satırı bırakmaya gerek yoktur.

İyi bir temizlik süreci küçük ve geri döndürülebilir adımlarla ilerler. Önce şüpheli alan işaretlenir, ardından gözlem süresi tanımlanır. Kullanım yoksa testler güncellenir, bağımlılıklar kaldırılır, kod silinir. Pull request açıklamasında neden silindiği net yazılır. Böylece silme eylemi kişisel bir saldırı değil, izlenebilir bir mühendislik kararı olur. Ölü kodu silmek, geçmişteki geliştiriciyi küçümsemek değildir; onun bir zamanlar çözdüğü problemin artık var olmadığını kabul etmektir.

Bu konu yazılımın dışına da sızar. Kurumların süreçlerinde, ekiplerin alışkanlıklarında, bireylerin düşüncelerinde de ölü kod vardır. Bir zamanlar işe yarayan ama artık sadece refleks olarak sürdürülen kurallar. Kimsenin okumadığı raporlar. Her toplantıda tekrarlanan ama karar üretmeyen cümleler. Eski bir başarının gölgesinde yaşayan inançlar. Yazılım bize acımasız bir ayna tutar: Çalışmayan şeyi sistemde tutarsan, sistem sonunda ona benzemeye başlar.

En sağlıklı kod tabanları, en çok kod yazılanlar değil, gereksiz kodun düzenli olarak eksiltildiği yerlerdir. Çünkü iyi mühendislik eklemek kadar çıkarmayı da bilmektir. Bir satırı silmek bazen yüz satır yazmaktan daha yüksek zekâ ister. Ölü kodun fısıltısı hep aynıdır: Ya lazım olursam? Usta geliştiricinin cevabı ise sakindir: Lazım olursan geçmişten geri çağırırım; bugün yaşamıyorsan, üretimde yerin yok.