Hayatını Refactor Et: Minimalizm, Temiz Kod ve Fazlalıkların Sessiz Gürültüsü

Bir yazılımcının ekranındaki dağınık kod ile bir insanın dolabındaki kullanılmayan eşyalar arasında gizli bir akrabalık vardır. İkisi de bir zamanlar gerekli görünmüştür. İkisi de “belki lazım olur” bahanesiyle orada kalmıştır. Ve ikisi de sonunda sistemi yavaşlatır: biri programı, diğeri zihni. Minimalizm ile temiz kodun ortak derdi aslında aynıdır: çalışmayanı değil, çalışsa bile gereksiz olanı fark etmek.

Temiz kod yalnızca bilgisayarın anlayacağı komutlar yazmak değildir; gelecekteki insanın, yani çoğu zaman bizzat kendimizin, ne anlatılmak istendiğini anlamasını sağlamaktır. Minimalizm de yalnızca az eşyaya sahip olmak değildir; yaşamın okunabilirliğini artırmaktır. Karmaşık bir fonksiyonun içinde kaybolmakla, ağzına kadar dolu bir odada nefes alamamak aynı deneyimin iki farklı arayüzüdür.

Fazlalık Bir Hata Değil, Bir Semptomdur

Kötü yazılmış kod genellikle kötü niyetten doğmaz. Aceleden, korkudan, belirsizlikten ve “şimdilik böyle kalsın” cümlesinden doğar. Hayattaki fazlalıklar da böyledir. Kullanmadığımız nesneler, yarım kalmış planlar, gereksiz ilişkiler, otomatik tepkiler ve zihinsel gürültüler çoğu zaman birer eşya değil, ertelenmiş kararların tortusudur.

Bir kod tabanında kullanılmayan değişkenler, tekrar eden bloklar ve belirsiz isimler varsa, sistem teknik borç üretir. Yaşamda da benzer bir borç vardır: psikolojik borç. Her gereksiz şey dikkatinizden küçük bir vergi alır. Her ertelenmiş mesele arka planda çalışan bir süreç gibi bellek tüketir. Bilgisayar buna RAM der; insan buna yorgunluk.

Refactor: Yıkmadan Yeniden Düzenlemek

Temiz kodun en zarif kavramlarından biri refactor etmektir. Refactor, çalışan bir sistemi bozmadan iç yapısını iyileştirmektir. Minimalist yaşamın da en olgun hali budur. Her şeyi yakıp dağa çıkmak şart değildir. Bazen yalnızca bir fonksiyonu bölmek, bir değişkenin adını değiştirmek, bir bağımlılığı azaltmak yeterlidir. Hayatta da bazen devrim değil, iyi adlandırılmış bir niyet gerekir.

Mesela “daha iyi yaşamak istiyorum” çok genel bir fonksiyon adıdır. Ne yaptığı belli değildir, test edilemez. Buna karşılık “her sabah telefona bakmadan önce on dakika yürümek” daha temiz bir koddur. Girdisi, çıktısı ve davranışı nettir. Zihin belirsizlikten hoşlanmaz; belirsizlik, iç dünyamızın spagetti kodudur.

Minimalizm burada estetik bir moda olmaktan çıkar, bilişsel bir optimizasyon tekniğine dönüşür. Amaç boş duvarlara bakıp kendini ermiş sanmak değildir. Amaç, karar verme maliyetini azaltmak, dikkat bant genişliğini korumak ve anlamlı işlere daha fazla işlem gücü ayırmaktır. Kısacası mesele az şeye sahip olmak değil, sahip olduklarının seni yönetmemesidir.

Okunabilir Bir Hayat Mümkün mü?

İyi kod kendini açıklamak için bağırmaz. Doğru isimlendirilmiş, gereksiz tekrarları azaltılmış, sorumlulukları ayrılmıştır. İyi bir hayat da böyledir: her an dramatik açıklamalara ihtiyaç duymaz. Ne için çalıştığınız, kime zaman ayırdığınız, neye hayır dediğiniz ve neyi koruduğunuz okunabilir hale gelir.

Burada temiz kod prensipleri şaşırtıcı biçimde varoluşsal prensiplere dönüşür. “Tek sorumluluk ilkesi” der ki bir sınıfın değişmek için tek nedeni olmalıdır. İnsan için de benzer bir bilgelik var: Her role aynı anda tutunmaya çalışma. Herkesi memnun etmek, her projede bulunmak, her tartışmaya girmek, kişiliği çok amaçlı ama kırılgan bir sınıfa çevirir. Sonra küçük bir değişiklik bütün sistemi çökertir.

“Kendini tekrar etme” ilkesi de yalnızca kod için değil, davranış için önemlidir. Aynı hatayı farklı dekorlarla yaşamak, ruhsal düzeyde kopyala-yapıştır programlamadır. Jungiyen bir gözle bakarsak, tekrar eden desenler gölgenin imza dosyalarıdır. Onları silmek yetmez; neden üretildiklerini anlamak gerekir. Yoksa bastırılmış kod başka bir modülde yeniden belirir.

Elbette her optimizasyon iyi değildir. Erken optimizasyon yazılımda nasıl bir tuzaksa, hayatta da aşırı sadeleşme bir performans takıntısına dönüşebilir. İnsan bir algoritma değildir; bazı verimsizlikler oyun, sanat, dostluk ve merak olarak hayatı güzelleştirir. Temiz kod donuk kod demek değildir. Minimalizm de steril bir boşluk değil, anlamlı karmaşıklığa yer açmaktır.

Sonuçta hem kodda hem hayatta asıl soru şudur: Bu şey gerçekten çalışıyor mu, yoksa sadece orada durduğu için var mı sanıyorum? Bazen en büyük ilerleme yeni bir özellik eklemek değil, gereksiz olanı silmektir. Çünkü sadeleşmek eksilmek değil; sistemin gerçek amacını daha net duyacak kadar gürültüyü kısmaktır. Hayatınızı refactor edin: önce küçük bir fonksiyondan başlayın.

Zihnin Kilidini Kıran O An: Öğrenilmiş Çaresizliğe Dışarıdan Gelen Darbe

Öğrenilmiş çaresizlik, insan ruhunun sessizce imzaladığı en tehlikeli sözleşmelerden biridir. Kişi aslında yenilmez; yenildiğine ikna olur. Kapı kilitli değildir, fakat zihin kapının kilitli olduğuna dair o kadar çok delil toplamıştır ki artık tokmağa uzanmak bile anlamsız görünür. İşte psikolojik çıkmazların en karanlık yanı budur: Acıdan çok, acının sonsuza dek süreceğine duyulan inanç yorar.

Bu kavramın kökeni deneysel psikolojiye uzanır. Tekrarlanan başarısızlık, kaçışsızlık veya kontrolsüzlük deneyimleri, canlıya şu mesajı öğretir: Ne yaparsan yap sonuç değişmeyecek. İnsan ilişkilerinde, iş hayatında, okulda, ailede ya da kişinin kendi iç savaşlarında bu mesaj farklı kılıklara bürünür. Bazen bir öğretmenin küçümseyen bakışı, bazen yıllarca süren ekonomik sıkışmışlık, bazen de çocuklukta duyulan şu cümle olur: Sen yapamazsın.

Döngü neden kendi kendine kırılmaz?

Çünkü döngü, yalnızca davranıştan oluşmaz; algı, beden, hafıza ve kimlikten oluşan bir kale gibidir. İnsan yalnızca başarısız olduğunu düşünmez; başarısız biri olduğuna inanmaya başlar. Bu noktada sorun, kötü bir gün geçirmekten çıkar, varoluşsal bir kostüme dönüşür. Kişi o kostümü o kadar uzun süre giyer ki derisi sanır. Jungiyen bir dille söylersek, gölge sahneye çıkmış ve yönetmen koltuğunu ele geçirmiştir.

Öğrenilmiş çaresizlikte kişi genellikle mantıksız değildir; tersine, kendi geçmişine göre çok mantıklıdır. Daha önce denemiştir, düşmüştür, reddedilmiştir, alay edilmiştir, cezalandırılmıştır. Bu yüzden yeni bir ihtimal belirdiğinde zihin onu fırsat olarak değil, tehlike olarak okur. Beyin şöyle fısıldar: Sakın kıpırdama, en azından mevcut acıyı tanıyorsun. Tanıdık cehennem, bilinmeyen cennetten daha güvenli görünür.

Döngü kırıcı nedir?

Döngü kırıcı, bu hipnotik tekrarın içine dışarıdan giren ani, beklenmedik ve yeterince güçlü müdahaledir. Bazen bir insan olur: Sert ama şefkatli bir dost, usta bir terapist, seni senden önce gören bir öğretmen. Bazen bir olaydır: İşten atılmak, taşınmak, bir hastalık, beklenmedik bir başarı, bir ayrılık. Bazen de küçük ama sarsıcı bir cümledir: Peki ya sandığın kadar çaresiz değilsen?

Buradaki anahtar, müdahalenin sadece motive edici olması değildir. Motivasyon çoğu zaman zihinsel şekerleme gibidir; tatlıdır, hızlı erir. Gerçek bir break, kişinin iç haritasını bozar. Eski otomatik tepkiyi keser, sinir sistemine yeni bir veri sunar. Yani beyne şunu gösterir: Bak, başka bir sonuç mümkün. Bu tek cümle, ruhun karanlık odasında kibrit çakmak gibidir. Oda hâlâ dağınıktır, ama artık tamamen karanlık değildir.

Ancak dış müdahalenin romantize edilmesi de tehlikelidir. Kimse gelip hayatımızı bir film sahnesi gibi kurtarmayabilir. Ayrıca bazı müdahaleler iyileştirici değil, daha yıkıcı olabilir. Döngü kırıcı, kişiyi aşağılayan, zorla sürükleyen, utandıran bir darbe değildir. Gerçek müdahale, insanın özne olma kapasitesini geri çağırır. Onun yerine karar vermez; ona karar verebileceğini hatırlatır.

Küçük çatlaklar büyük duvarları yıkar

Öğrenilmiş çaresizlikten çıkış çoğu zaman devrim gibi değil, sabotaj gibi başlar. Kişi kendi eski düzenini küçük küçük bozar. Her gün aynı saatte gelen umutsuzluk düşüncesine beş dakika yürüyüşle karşılık verir. Hiç cevap yazmadığı mesaja cevap verir. Başvurmaktan korktuğu işe başvurur. Hayır diyemediği birine hayır der. Bunlar dışarıdan bakıldığında sıradan görünür; fakat içeride bir imparatorluk çatırdar.

Döngü kırıcıların asıl işlevi, iradeyi yeniden başlatmaktır. İrade burada kaba bir kas gücü değildir; anlamla temas etme yeteneğidir. İnsan neden ayağa kalkacağını bilmeden ayağa kalkamaz. Bu yüzden çıkış yolu sadece teknik değil, aynı zamanda mitolojiktir. Kişi kendi hikâyesini yeniden yazmalıdır: Ben başına gelenlerin toplamı değilim; onlara verdiğim cevabın yazarıyım.

Sonuçta öğrenilmiş çaresizlik, zihnin kader taklidi yapan bir alışkanlığıdır. Kırılması mümkündür, ama çoğu zaman içeriden gelen sessiz istek ile dışarıdan gelen beklenmedik müdahalenin buluşmasını ister. Bir ses, bir olay, bir yüzleşme, bir kayıp ya da bir sevgi biçimi döngüyü kesebilir. Ve o anda insan şunu fark eder: Zincir yıllardır bileğimde değildi; elimde tuttuğum eski bir hikâyeydi.

Sınıf Babadan Kalır mı? OOP Mirası, Genetik ve Kuşak Çatışmasının Kod Hali

Bir yazılımcı için inheritance, yani miras, kulağa neredeyse aile toplantısı gibi gelir: Bir üst sınıf vardır, çocuk sınıflar vardır, herkes bir şeyler devralır, bazıları memnundur, bazıları ise içinden sessizce refactor etmek ister. Genetikte de tablo çok farklı değildir. Göz renginden metabolizmaya, yatkınlıklardan davranış örüntülerine kadar biyolojik kodlar kuşaktan kuşağa aktarılır. Fakat mesele yalnızca aktarım değildir; asıl hikâye, devralınan şeyle ne yapıldığıdır.

OOP’de bir sınıf başka bir sınıftan türediğinde, üst sınıfın özelliklerini ve davranışlarını alır. Diyelim ki bir Canli sınıfımız var: solunum yapar, beslenir, çoğalır. Bundan Memeli sınıfı türetiriz; sonra Insan. Kodda bu pratik görünür. Aynı mantık biyolojide de vardır: Önce ortak özellikler, sonra özelleşmeler. Fakat işin dramatik kısmı burada başlar. Çünkü her çocuk sınıf, üst sınıfın her davranışını aynen taşımak zorunda değildir. Override eder. Yani der ki: Bunu senden aldım ama böyle kullanmayacağım.

Kuşak çatışması bir override problemidir

Anne babanın çocuğuna devrettiği şey yalnızca genetik değildir; alışkanlıklar, korkular, ekonomik refleksler, sevme biçimleri, susma teknikleri ve öfke protokolleri de aktarılır. OOP diliyle söylersek, aile bir base class gibi çalışır. Çocuk ise ondan türeyen ama kendi runtime koşullarında çalışan yeni bir sınıftır. Sorun, üst sınıfın kendi metodlarının evrensel olduğunu sanmasıyla çıkar. Baba sınıfı şöyle der: calis() metodu böyle yazılır. Anne sınıfı ekler: guvendeKal() metodu asla değiştirilmez. Çocuk sınıf ise çağın API’larına bakar ve cevap verir: Bu sistem artık başka bağımlılıklarla çalışıyor.

Programlamada kötü miras tasarımı, bağımlılık cehennemi üretir. Bir alt sınıf, üst sınıfın gereksiz tüm yükünü taşımaya mecbur kalırsa esneklik kaybolur. Buna kırılgan temel sınıf problemi denir. Biyolojik ve kültürel düzeyde de benzeri yaşanır. İnsan, atalarından gelen kodları taşır; ama bütün kodlar bugünün dünyasında anlamlı değildir. Bir zamanlar hayatta kalmayı sağlayan aşırı tetikte olma hali, modern ofiste anksiyeteye dönüşebilir. Bir zamanlar kabileyi koruyan içe kapalılık, bugün iletişim krizine neden olabilir.

Burada önemli ayrım şudur: Miras kötüdür demek sığ bir sonuç olur. OOP’de inheritance doğru yerde kullanıldığında güçlüdür. Ortak davranışı tekrar yazmayı önler, sistemi anlaşılır kılar, soyutlamayı kuvvetlendirir. Genetik miras da böyledir. Bedenimiz milyonlarca yıllık başarılı denemelerin arşividir. Reflekslerimiz, bağışıklığımız, öğrenme kapasitemiz bu büyük kod tabanından gelir. Fakat hiçbir ciddi yazılımcı, eski kod çalışıyor diye ona dokunmama dogmasına tapmaz. Çalışan kod da incelenir, test edilir, gerekirse yeniden tasarlanır.

Kompozisyon mu, miras mı?

Modern yazılım tasarımında sıkça duyulan ilke şudur: Miras yerine kompozisyonu tercih et. Yani bir nesnenin ne olduğundan çok, hangi yetenekleri bir araya getirdiğine bak. Bu fikir kuşak çatışmasına da şaşırtıcı biçimde uyar. İnsan yalnızca ailesinin alt sınıfı değildir. Sadece soyadından, genlerinden, çocukluk klasöründen ibaret değildir. Okudukları, dostları, şehirleri, başarısızlıkları, terapileri, aşkları ve kayıplarıyla kendini besteler. Yani insan, inheritance ile başlar ama composition ile olgunlaşır.

Kuşaklar arasındaki çatışma çoğu zaman şu yanlış beklentiden doğar: Üst sınıf, alt sınıfın kendisini genişletmesini ister ama değiştirmesini istemez. Oysa polymorphism tam da değişik biçimlerde davranabilme gücüdür. Aynı aileden gelen iki çocuk, aynı yasam() metodunu bambaşka biçimde çalıştırabilir. Biri geleneksel rotayı seçer, diğeri radikal bir kariyer değişimi yapar. Biri şehirde kök salar, diğeri dünyayı gezer. Bu hata değil; sistemin çok biçimliliğidir.

Elbette her override özgürlük değildir. Bazen çocuk, ailesine karşı çıkıyorum sanırken yine aile kodunun tersinden çalışan bir versiyonudur. Babası gibi olmamak için aldığı her karar, hâlâ babayı merkez alan bir algoritmadır. Gerçek özgürlük, mirası inkâr etmek değil, onu okumaktır. Hangi metod bana ait, hangisi devralınmış? Hangi değişken hâlâ çocuklukta set edilmiş? Hangi exception her ilişkide tekrar fırlatılıyor? Kendini tanımak, kaynak kodu açıp korkmadan bakmaktır.

Sonuçta OOP ile genetik arasındaki benzetme bize şunu öğretir: Hiçbir sınıf boşluktan doğmaz, hiçbir insan da sıfırdan yazılmaz. Hepimiz bir kod tabanının devamıyız. Ama iyi haber şu: Devraldığımız her şey kader değildir. Bazı metodları override edebilir, bazı bağımlılıkları silebilir, bazılarını adapter ile dönüştürebiliriz. Kuşak çatışması da belki bir savaş değil, büyük bir refactoring sürecidir. Eski kodu aşağılamadan, yeni sistemi boğmadan, daha temiz, daha esnek ve daha insani bir mimari kurma çabası.

Zihninizin Çöp Toplayıcısı Ne Zaman Çalışıyor?

Bir bilgisayar programı çalışırken kullandığı belleği sürekli kirletir: Yeni nesneler oluşturur, geçici veriler üretir, sonra bunların bir kısmını geride bırakır. Eğer kullanılmayan alanlar temizlenmezse sistem ağırlaşır, takılır ve sonunda çöker. Çöp toplayıcılar, yani garbage collector mekanizmaları, artık erişilemeyen verileri saptayıp belleği geri kazanmak için tasarlanmıştır. İnsan zihni de buna şaşırtıcı ölçüde benzer bir problemle yaşar: Her gün deneyimler, yüzler, utançlar, tehditler, hayaller ve yarım kalmış cümleler biriktiririz. Fakat zihin, bilgisayar değildir; bu benzerlik bize güçlü bir düşünme aracı sunarken tehlikeli basitleştirmelere de davetiye çıkarır.

Unutmak bir arıza değil, seçici bir tasarruftur

Unutma çoğu zaman kusur gibi görülür. Bir ismi hatırlayamadığımızda, eski bir bilgiyi kaybettiğimizde ya da çocukluğumuzun ayrıntıları silik kaldığında zihnimizi suçlarız. Oysa unutma, bilişsel ekonominin en zarif araçlarından biridir. Beyin her ayrıntıyı eşit sadakatle saklasaydı, güncel kararlar geçmişin gürültüsü altında ezilirdi. Bu anlamda unutmak, dosya silmekten çok erişim önceliklerini yeniden düzenlemeye benzer. Bir anı bütünüyle yok olmayabilir; yalnızca ona giden yol daha az kullanılır, çağrışım ağı zayıflar ve zihinsel sahnedeki yeri küçülür.

Çöp toplayıcının temel sorusu şudur: “Bu nesneye hâlâ ulaşılabiliyor mu?” Zihnin benzer sorusu ise daha inceliklidir: “Bu anı bugün hâlâ ne işe yarıyor?” Geçmişte tehlikeden korunmayı sağlayan bir korku, yıllar sonra sıradan bir sesi alarm gibi algılamamıza neden olabilir. Demek ki bazı zihinsel kayıtlar erişilebilir olmakla kalmaz; gereğinden fazla öncelik kazanır. Travmatik yaşantıların zorluğu da burada belirir: Sorun anının basitçe saklanması değil, sanki olay hâlâ sürüyormuş gibi sinir sistemini harekete geçirebilmesidir.

Travma silinmesi gereken bir dosya değildir

Yine de “kötü anıları çöpe atalım” fikri hem cazip hem yanıltıcıdır. Bir çöp toplayıcı, kullanılmayan nesneyi sessizce kaldırabilir; insan ruhunda ise acı veren anılar kimliğe, ilişkilere, bedensel tepkilere ve hayatta kalma öyküsüne bağlanmıştır. Travmayı atlatmak çoğu zaman anıyı silmek değil, onunla kurulan ilişkiyi dönüştürmektir. Anı, zihnin merkezi işlemcisini sürekli meşgul eden bir acil durum sinyali olmaktan çıkar; geçmişte kalmış, anlatılabilir ve taşınabilir bir deneyime dönüşür.

Terapiyi bu açıdan yalnızca “temizlik” olarak değil, dikkatli bir bellek düzenleme süreci olarak düşünebiliriz. Kişi, bastırdığı içerikleri zorla silmeye çalışmaz; güvenli koşullarda onlara yaklaşır, anlam verir ve bugünün kaynaklarıyla yeniden değerlendirir. Konuşmak, yazmak, beden duyumlarını fark etmek, güvenilir ilişkiler kurmak ya da profesyonel destek almak; zihinsel dosyaları yeniden adlandırmanın farklı yollarıdır. “Bu benim suçumdu” adlı kayıt, zamanla “Bu bana oldu ve hayatta kaldım” biçiminde değişebilir.

Programlamada kötü tasarlanmış bir bellek yönetimi performansı düşürür. İnsan yaşamında ise sürekli bastırma, kaçınma ve tetikte olma; dikkati, uykuyu, ilişkileri ve merakı tüketebilir. Fakat çözüm, zihni her gün agresif bir temizliğe zorlamak değildir. Bazı hatıralar geri döner; bazı duygular dönemsel olarak yeniden derlenir. Bu, iyileşmenin bozulduğu anlamına gelmez. Zihin doğrusal bir sistem değil, anlam üreten canlı bir ekosistemdir.

Belki de en iyi psikolojik çöp toplayıcı, unutmayı emretmek değil, hangi yüklerin artık bugünkü benliğimize hizmet etmediğini şefkatle fark etmektir. Geçmişi yok etmek mümkün olmayabilir; ama onun bellekte kapladığı alanı, alarm düzeyini ve hayatımız üzerindeki yetkisini değiştirmek mümkündür. Ruhsal arınma, hafızasızlık değil; hatırlarken özgür kalabilme sanatıdır.

Kod Her Satırda Şüphe Ederken, Biz Neden Kesinlik Arıyoruz?

Bir yorumlayıcı dilde program çalıştırmak, biraz güvenilmez ama parlak bir kahinle konuşmaya benzer. Kodunuzu baştan sona önceden mühürlemez; satır gelir, okunur, yorumlanır ve o anda hükmünü verir. İlk yüz satır kusursuz ilerleyebilir, yüz birinci satırda ise eksik bir değişken, yanlış türde bir veri ya da beklenmedik bir ağ yanıtı bütün evreni küçük bir hata mesajına indirger. Programın çalışıyor olması, onun bir sonraki anda da çalışacağına dair mantıksal bir garanti değildir.

Bu durum, felsefedeki radikal kuşkuculuğun teknoloji içindeki ilginç karşılığıdır. Radikal kuşkucu, duyularımızın, anılarımızın ve çıkarımlarımızın mutlak biçimde güvenilir olduğunu kanıtlayamayacağımızı söyler. Belki gördüğümüz dünya bir yanılsamadır; belki en sağlam sandığımız inanç, fark etmediğimiz bir varsayıma yaslanıyordur. Yorumlayıcı program da benzer biçimde yaşar: Elindeki satırın anlamını çözebilir, fakat henüz karşılaşmadığı satırların, verilerin ve koşulların güvenli olduğunu peşinen bilemez.

Çalışmak, Kanıtlanmak Değildir

Bir Python betiğinin terminalde başarıyla sonuçlanması çoğu zaman gereğinden fazla güven üretir. Geliştirici, ekran çıktısını görünce programın doğru olduğunu düşünmeye meyleder. Oysa bu yalnızca belirli girdiler, belirli ortam değişkenleri, belirli saat ve belirli bağımlılık sürümleri altında bir yürütmenin başarıyla tamamlandığını gösterir. Kodun doğruluğu ile kodun şu an hata vermemesi aynı önerme değildir. Tıpkı güneşin her gün doğmuş olmasının yarın da doğacağını biçimsel olarak ispatlamaması gibi, bin başarılı çalışma da milyon birinci çalışmanın güvence senedi değildir.

Burada David Hume’un alışkanlık üzerine düşüncesi devreye girer. Geçmişte sürekli birlikte gördüğümüz olaylardan, gelecekte de aynı düzenin süreceği sonucunu çıkarırız. Yazılımda buna daha teknik bir ad veririz: test kapsamı. Bir fonksiyon yüz testten geçince ona güveniriz; ama test edilmemiş sınırlar, boş değerler, eşzamanlılık sorunları ve kullanıcıların hayal gücü hâlâ kapıda bekler. Kullanıcı, yazılımcının asla düşünmediği bir kombinasyonu denemek konusunda neredeyse metafizik bir yeteneğe sahiptir.

Kuşku, Felç Değil Tasarım İlkesidir

Radikal kuşkuculuk yanlış yorumlandığında insanı eylemsizliğe sürükler: Hiçbir şey kesin değilse neden kod yazalım? Yazılım mühendisliğinin cevabı pratiktir: Kesinlik yoksa savunma katmanları kurarız. Tür denetimi, birim testleri, istisna yakalama, doğrulama kuralları, günlük kayıtları, geri alma mekanizmaları ve izleme araçları bu yüzden vardır. Bunlar mutlak doğruluk makineleri değildir; hata ihtimalini görünür, sınırlı ve onarılabilir kılan araçlardır.

Yorumlayıcı dillerin satır satır karakteri, bu yaklaşımı özellikle canlı tutar. Derleme aşamasında yakalanabilecek bazı sorunlar daha geç ortaya çıkabilir; çalışma zamanındaki dünya, kodun mantığına sürekli müdahale eder. Dosya bulunamaz, API cevap vermez, kullanıcı metin yerine sayı gönderir, sayı yerine boşluk gönderir. Bu kırılganlık bir kusur olmak zorunda değildir. Doğru kullanıldığında geliştiriciyi, sistemin soyut bir şemadan ibaret olmadığını; gerçek veri, gerçek zaman ve gerçek belirsizlik içinde yaşadığını kabul etmeye zorlar.

Sonuçta iyi programcı, koduna körü körüne inanan kişi değildir. Kodunun hangi varsayımlar üzerinde durduğunu soran, bu varsayımlar bozulduğunda ne olacağını tasarlayan kişidir. Kuşkuculuğun yazılımdaki değeri, her şeyi şüpheli ilan etmek değil; güvenin dereceli olduğunu kavramaktır. Program çalışır, ama koşullu olarak. Bilgi işe yarar, ama sınırları içinde. En olgun sistemler, hata vermeyeceklerini iddia edenler değil, hata verdiklerinde dünyayı yıkmadan konuşabilenlerdir.