Direksiyondaki Ahlak Makinesi: Otonom Araç Kimi Feda Edecek?

Bir gün arabanız sizi eve götürürken, yolun ortasına aniden üç kişi fırlıyor. Frenler yetmiyor. Sağda duvar var; duvara çarparsa içerideki yolcu ölebilir. Düz giderse yayalar ölecek. Klasik trol vagonu problemi, artık rayların üzerinde değil; lidar sensörleri, kamera verileri ve milisaniyelik işlemciler arasında dolaşıyor. Eskiden filozofların seminer odasında tartıştığı soru, şimdi yazılım mühendisinin hata kayıtlarında yanıp sönüyor: Araç kimi feda edecek?

Bu sorunun cazibesi biraz karanlık bir lunapark oyuncağına benzer. Herkes koltuğa oturup kahramanca bir karar vereceğini sanır. Fakat otonom araç etiğinde mesele, tek bir dramatik anın cevabı değildir. Asıl mesele, bu cevabın daha kaza olmadan önce kimin tarafından, hangi değerlerle, hangi testlerle ve hangi sorumluluk zinciriyle sisteme gömüldüğüdür. Yani sorun yalnızca algoritmanın tercihi değil, algoritmayı doğuran toplumun aynasıdır.

Algoritma ahlak sahibi midir?

Otonom araçlar vicdan taşımaz; olasılık hesaplar. Bir insanın yüzündeki korkuyu anlamaz, piksel yoğunluklarını, hız vektörlerini, çarpışma risklerini ve tahmini hasar oranlarını işler. Bu yüzden araca ahlak yüklemek, tost makinesinden şiir eleştirisi beklemeye benzer. Ama burada küçük bir hile var: Algoritma ahlak sahibi olmasa da, onu tasarlayanlar ahlaki tercihleri kodlar. Hangi riskin kabul edilebilir olduğu, yolcunun mu yayanın mı önceleneceği, çocuk ile yaşlı arasında ayrım yapılıp yapılmayacağı gibi kararlar teknik parametre gibi görünür; fakat içlerinde toplumun değerleri saklıdır.

Bu nedenle basit bir faydacılık formülü, yani en az sayıda insan ölsün yaklaşımı, kulağa mantıklı gelse de yeterli değildir. Diyelim araç bir kişiyi kurtarmak için beş kişiye çarpmaktan kaçınıyor. Peki bu hesabı yaparken kişilerin yaşı, sağlık durumu, sosyal statüsü, trafik kuralına uyup uymaması hesaba katılacak mı? Eğer katılırsa araç bir tür dijital mahkeme olur. Katılmazsa da bazı gerçek bağlamları görmezden gelir. İşte etik burada, matematiğin üstüne atılmış süslü bir örtü değil; matematiğin hangi soruyu sormaya hakkı olduğunu belirleyen sınır çizgisidir.

Asıl soru: Kimi feda edelim değil

Bence otonom araç etiğinde en sağlıklı başlangıç, kahramanca ölüm senaryolarına takılı kalmamaktır. Asıl hedef, aracın kimi feda edeceğini mükemmel seçmesi değil, bu tür durumların olasılığını radikal biçimde azaltmasıdır. Daha iyi sensörler, güvenli hız politikaları, araçlar arası iletişim, şehir altyapısıyla veri paylaşımı ve sıkı test süreçleri, trol vagonu ikilemini romantik bir trajediden mühendislik problemine indirir. İyi tasarlanmış bir sistem, filozofları daha az heyecanlandırır ama insanları daha çok yaşatır.

Yine de sıfır risk masaldır. Bu yüzden kurallar gerekir. Birincisi, karar ilkeleri şeffaf olmalıdır. Şirketler, ölümcül senaryolarda aracın hangi genel etik protokole uyduğunu kamuya açıklamalıdır. Elbette kaynak kodun tamamı herkesin eline verilemeyebilir; fakat denetlenebilirlik olmadan güven, pazarlama broşüründen ibaret kalır. İkincisi, ayrımcılık kesin biçimde yasaklanmalıdır. Araç insanların gelir düzeyini, kıyafetini, etnik görünümünü ya da tahmini yaşamsal değerini hesaplayan bir kasta dönüşmemelidir.

Üçüncüsü, sorumluluk buharlaştırılmamalıdır. Kaza olduğunda üretici, yazılım geliştirici, veri sağlayıcı, araç sahibi ve düzenleyici kurum arasında herkesin suçu birbirine pasladığı sisli bir tiyatro kurulmamalı. Otonom sistemler için kara kutu kayıtları, bağımsız denetim ve açık hukuki sorumluluk haritaları zorunlu olmalıdır. Çünkü hesap veremeyen teknoloji, ne kadar parlak olursa olsun karanlık üretir.

Dördüncüsü, bu kararlar yalnızca şirket laboratuvarlarında alınmamalıdır. Toplumun etik tercihleri, uzman kurulları, hukukçular, mühendisler, engelli bireyler, yayalar, sürücüler ve farklı kültürlerden yurttaşlarla tartışılmalıdır. Çünkü yol, yalnızca aracı satın alanın değil, herkesindir. Otonom araç kamusal alanda hareket eden özel bir makinedir; bu yüzden ahlakı da kamusal denetime açık olmalıdır.

Sonuçta trol vagonu problemi bize şunu fısıldar: Geleceğin arabaları yalnızca direksiyonu değil, kararın ağırlığını da devralıyor. Fakat bu ağırlığı makinenin metal gövdesine atıp kaçamayız. Otonom araç kimi feda edecek sorusu, aslında bizim nasıl bir toplum olmak istediğimizi sorar. Cevap bir satır kodda değil; o kodu yazdıran değerler, denetleyen kurumlar ve susmayıp soru soran insanlar arasındadır.

Her Tıklamada Yeni Bir Evren: Karar Ağaçlarıyla Kaderi Kodlamak

Paralel evrenler fikri genellikle laboratuvar önlüğü giymiş fizikçilerin, kahvesini soğutmuş filozofların ve bilimkurgu yazarlarının ortak masasında dolaşır. Fakat yazılım açısından bakınca konu bir anda daha tanıdık hale gelir: Her seçim, bir dallanma noktasıdır. Her dallanma, farklı bir durum uzayı üretir. Yani evren dediğimiz şey, belki de devasa bir karar ağacının o an çalışmakta olan dalıdır.

Bir yazılımcı için bu düşünce romantik olmaktan çok yapısaldır. Karar ağacı, belirli bir başlangıç durumundan yola çıkarak olası seçimleri dallara ayıran bir modeldir. Bugün kırmızı gömlek mi giydin, siyah mı? Mesaja cevap verdin mi, erteledin mi? Bir yatırım yaptın mı, vazgeçtin mi? Her karar, sistemin durumunu değiştirir. Eğer tüm olası sonuçları saklayabilseydik, elimizde yalnızca bir hayat hikayesi değil, dallanan bir hayat grafı olurdu.

Evreni Bir Veri Yapısı Gibi Düşünmek

Yazılımda bir evreni temsil etmek için önce durum tanımı gerekir. Bir oyunda karakterin konumu, can puanı, envanteri ve ilişkileri bir durumdur. Gerçek hayatta ise durum; biyoloji, bellek, ekonomi, çevre, sosyal bağlar ve rastlantıların korkutucu derecede karmaşık birleşimidir. Bu yüzden paralel evren simülasyonu dediğimiz şey, aslında şu soruyla başlar: Neyi yeterince önemli sayıp modelleyeceğiz?

Bu noktada karar ağaçları sahneye çıkar. Kök düğüm başlangıç anıdır. Her kenar bir eylemi, her düğüm yeni bir dünyayı temsil eder. Basit bir örnek düşünelim: Sabah alarm çaldı. Kalkarsan bir dal, ertele dersen başka bir dal açılır. Kalktığın evrende toplantıya erken yetişebilir, ertelediğin evrende otobüsü kaçırabilirsin. Fakat her dalın altında yeni dallar oluşur. Birkaç karar sonra ağaç, sevimli bir şemadan çıkar, kozmik bir spagettiye dönüşür.

Buradaki temel problem patlamadır: Olasılık patlaması. Her seçim iki seçenekli olsa ve günde yalnızca yüz anlamlı karar verdiğini varsaysak, ortaya çıkan dal sayısı akıl almaz büyür. Bu nedenle yazılımsal yaklaşım, tüm evrenleri saklamaya çalışmaz; önemli dalları seçer, düşük olasılıklı yolları budar, benzer durumları birleştirir. Tıpkı satranç motorlarının her hamleyi sonsuza kadar hesaplamayıp sezgisel değerlendirme fonksiyonları kullanması gibi.

Git, Oyun Motorları ve Kaderin Sürüm Kontrolü

Paralel evrenleri anlamak için Git dallarını düşünmek eğlenceli olabilir. Ana dalda yaşarsın; sonra bir karar verirsin ve alternatif bir branch açılır. Birinde işi kabul edersin, diğerinde şehir değiştirirsin, üçüncüsünde radikal biçimde çömlek kursuna yazılırsın. Bazı dallar merge edilebilir; bazıları geri dönülmez çatışmalar üretir. Yazılım geliştirmede bu kontrol edilebilir görünür, fakat hayatta commit geçmişi çoğu zaman sisli, yorum satırları eksik ve testler başarısızdır.

Oyun motorları bu fikri daha somut uygular. Save dosyaları, checkpoint sistemleri ve senaryo dallanmaları küçük paralel evren makineleridir. Oyuncu bir karakteri kurtardığında dünya başka tepki verir; kurtarmadığında hikaye kararır. Modern anlatı oyunları, aslında çok evrenli dramaturji yazar. Burada evren, fiziksel gerçeklik değil, kurallar ve durumlar toplamıdır. Kod açısından bakıldığında kader, if-else bloklarının şiirsel bir adıdır.

Daha ileri düzeyde, Markov karar süreçleri ve pekiştirmeli öğrenme devreye girer. Bir ajan, bir ortamda eylem seçer, ödül alır, yeni duruma geçer. Ajanın amacı tüm dalları yaşamak değil, en iyi politikayı öğrenmektir. Bu da paralel evren fikrine pratik bir cevap verir: Her olasılığı deneyimleyemeyiz, ama olası gelecekleri simüle ederek daha iyi karar kuralları geliştirebiliriz.

Yine de dikkatli olmalıyız. Yazılımsal modeller, gerçekliğin kendisi değil, gerçekliğe atılmış ağlardır. Ağın delikleri büyüktür; bazı balıklar kaçar. İnsan kararları yalnızca mantıkla değil, korkuyla, arzuyla, travmayla, tesadüfle ve bazen öğle yemeğinde yenilen ağır bir börekle şekillenir. Bu nedenle karar ağacı, hayatı tamamen açıklayan kutsal şema değil; karmaşaya bakarken elimizde titreyen ama işe yarayan bir fenerdir.

Sonuçta her seçimin yeni bir evren yaratıp yaratmadığını kesin olarak bilmiyoruz. Fakat yazılım bize güçlü bir düşünme biçimi sunuyor: Olasılıkları düğümlere, eylemleri kenarlara, sonuçları durumlara dönüştürmek. Böylece kader sisli bir kehanet olmaktan çıkıp analiz edilebilir bir yapı kazanıyor. Belki de özgür irade, sonsuz ağacın tamamına hükmetmek değil; bulunduğumuz düğümde hangi dala bilinçle geçeceğimizi seçebilmektir.

Kodun Gülümsemesi: Sentaktik Şeker Neden Toplumu da Ayakta Tutar?

Programlamada sentaktik şeker, makinenin aslında ihtiyaç duymadığı ama insanın zihnini rahatlatan küçük lütuflardır. Bir dilde for döngüsü varken her şeyi while ile de yazabilirsiniz; nesne yönelimli bazı yapılar daha ilkel fonksiyon ve veri düzeneklerine indirgenebilir; hatta birçok modern kolaylık, derleyicinin arka odasında daha kaba, daha çıplak talimatlara çevrilir. Bilgisayar açısından fark yoktur. İnsan açısından ise dünya değişir. Çünkü mesele yalnızca çalışmak değildir; anlaşılmak, sürdürülebilmek ve hata yapmadan ilerleyebilmektir.

Toplumsal nezaket de buna şaşırtıcı biçimde benzer. Birine kapıyı tutmak, mesajın sonuna teşekkürler yazmak, rica ederim demek, toplantıya başlarken nasılsınız diye sormak; bunların çoğu çıplak işlev açısından gereksiz görünür. Ekmek almak için fırıncıyla varoluşsal bağ kurmanız gerekmez. Bir dosya istemek için de lütfen demek zorunda değilsiniz. Fakat insan toplumu, yalnızca veri alışverişinden oluşan bir ağ değildir. İnsan, anlamın yanında niyet de okur. Nezaket, niyetin biçimlendirilmiş arayüzüdür.

Makineye gerekmez, insana gerekir

Sentaktik şekerin güzelliği, karmaşıklığı yok etmesinde değil, onu daha katlanılır bir biçime sokmasındadır. Kodun altında hâlâ aynı işlem vardır; fakat geliştirici artık daha az zihinsel yük taşır. Nezaket de çatışma olasılığını tamamen ortadan kaldırmaz; ama iletişimin üzerindeki sürtünmeyi azaltır. Lütfen kelimesi, karşı tarafın özgürlüğünü tanıyan minik bir protokoldür. Teşekkür ederim ise işlemin tamamlandığını ve ilişkinin bozulmadığını bildiren sosyal bir kapanış parantezidir.

Burada tehlikeli bir yanlış anlama var: Bir şeyin temel işlev için zorunlu olmaması, onun değersiz olduğu anlamına gelmez. Yazılımda okunabilirlik, performans kadar dramatik görünmeyebilir; ama yıllar sonra sistemi ayakta tutan şey çoğu zaman okunabilirliktir. Toplumda da nezaket, adaletin yerini tutmaz; fakat adaletin konuşulabileceği iklimi hazırlar. Kaba bir hakikat, bazen hakikat olmaktan çok saldırı gibi işitilir. İyi biçimlendirilmiş bir hakikat ise zihne daha az savunma duvarı kurdurur.

Bir fonksiyon adını düşünün: x() de çalışır, kullaniciYetkisiniKontrolEt() de. Makine ikisini de çağırır. Ama ikinci isim, insana bir harita verir. Toplumsal davranışta da aynı şey geçerlidir. Günaydın demek, atmosferin değişkenlerini başlatır. Özür dilemek, hatayı geri almaz; fakat sistemin çökmek yerine iyileşme moduna geçmesini sağlar. Başsağlığı dilemek ölümü iptal etmez; ancak acının yalnız taşınmadığını bildirir. Bunlar işlevsiz değildir; yalnızca işlevleri mekanik değil, ilişkisel düzeydedir.

Şekerin fazlası da zehirdir

Elbette sentaktik şekerin kötüye kullanımı vardır. Aşırı süslenmiş bir dil, gerçekte ne olduğunu saklayabilir. Zincirleme soyutlamalar, geliştiriciyi sistemin maliyetlerinden koparabilir. Nezakette de benzer bir karanlık taraf bulunur: Yapmacıklık, pasif saldırganlık, kurumsal cilalama, içi boş iyi dilekler. Bazen nazik cümleler, gerçeği yumuşatmak için değil, gerçeği görünmez kılmak için kullanılır. Bu durumda şeker artık iletişimi kolaylaştırmaz; çürükleri maskeler.

Demek ki mesele şekeri reddetmek değil, onun neye hizmet ettiğini bilmektir. İyi sentaktik şeker, niyeti daha açık yapar; kötü sentaktik şeker, niyeti gizler. İyi nezaket, insanı korur; kötü nezaket, güç ilişkilerini parfümler. Bir kod parçası daha okunabilir hale geliyorsa şeker faydalıdır. Bir cümle muhatabın onurunu koruyarak anlamı taşıyorsa nezaket değerlidir. Ama ikisi de yalnızca vitrini parlatıp içerideki karmaşayı büyütüyorsa, artık sorun çözmüyor, borç biriktiriyordur.

Belki de uygarlık, büyük ölçüde sentaktik şekerdir. Hukuk, tören, selamlaşma, akademik atıf, masa adabı, e-posta dili… Bunların hepsi çıplak hayatta kalma açısından fazla gelebilir. Fakat insan, çıplak komutlarla yaşayacak kadar basit bir varlık değildir. Biz yalnızca ne söylendiğini değil, nasıl söylendiğini de duyarız. Çünkü nasıl, çoğu zaman neyin gerçek anlamını belirler.

Sonuçta hem kodda hem toplumda amaç aynı: Daha az gürültüyle daha çok anlam taşımak. Sentaktik şeker derleyiciye değil geliştiriciye saygıdır. Nezaket de biyolojik varlığımıza değil, sembolik kırılganlığımıza gösterilen saygıdır. Makine komutu alır ve yürütür; insan ise komutun tonunda kendisine biçilen yeri arar. Bu yüzden bazen küçük bir lütfen, devasa bir mimari karardır.

Git Evreninde Schrödinger’in Kedisi: Her Commit Yeni Bir Dünya mı Açıyor?

Bir yazılımcı yeni bir dal açtığında görünüşte sıradan bir işlem yapar: Mevcut kod tabanının belirli bir anına işaret eden yeni bir geliştirme yolu oluşturur. Fakat biraz geri çekilip baktığımızda sahne tuhaflaşır. Ana dalda kullanıcı arayüzü mavi kalırken başka bir dalda kırmızıya döner; birinde hata düzeltilir, diğerinde yeni bir hata doğar; üçüncüsünde ise proje bütünüyle terk edilir. Aynı geçmişten çıkan farklı gelecekler, Git deposunun içinde yan yana yaşamayı sürdürür. Bu manzara, kuantum mekaniğinin çoklu dünyalar yorumunun şaşırtıcı derecede kullanışlı bir dijital maketini andırır.

Commit, ölçüm ve ayrılan gelecekler

Çoklu dünyalar yorumuna göre kuantum ölçümü, olasılıklardan yalnızca birini seçip diğerlerini yok etmez. Bunun yerine evrenin kuantum durumu, farklı sonuçların gerçekleştiği ve birbirleriyle etkin biçimde etkileşemeyen dallara ayrılır. Teknik olarak burada gündelik anlamda yeni evrenler üreten kozmik bir fotokopi makinesi yoktur; evrensel dalga fonksiyonunun üniter evrimi ve dekoherens vardır. Git dalı da benzer biçimde yoktan bir proje yaratmaz. Bir commit’e yeni bir referans ekler ve bundan sonra yapılacak değişikliklerin ayrı bir tarih oluşturmasına izin verir.

Benzetmenin en güçlü yanı, olasılıkla gerçekleşmiş durum arasındaki farkı görünür kılmasıdır. Bir özellik yalnızca ekip toplantısında tartışılıyorsa henüz olasıdır. Dal açılıp kod yazıldığında bu gelecek çalıştırılabilir hâle gelir. Test ortamı, alternatif dünyanın laboratuvarıdır: Uygulama derlenir, kullanıcı davranışları taklit edilir ve seçimin sonuçları gözlenir. Böylece yazılım geliştirme, karşı-olgusal düşünmeyi somutlaştırır. “Başka türlü yapsaydık ne olurdu?” sorusu felsefi bir hayal olmaktan çıkar; indirilebilir, ölçülebilir ve gerektiğinde silinebilir bir yapıya dönüşür.

Birleşebilen dünyalar

Ancak analojinin kırıldığı önemli bir nokta vardır: Kod dalları birleşebilir. Bir özellik dalındaki değişiklikler ana dala taşınabilir, iki ayrı tarih ortak bir commit’te buluşabilir. Çoklu dünyalar yorumundaki makroskobik dalların yeniden girişim göstermesi ise dekoherens nedeniyle pratikte olağanüstü derecede zordur. Evrenin “merge conflict” çözüm ekranı bulunmaz. Yazılım dünyasında bile birleşme sihirli değildir; aynı satır farklı biçimlerde değiştirildiyse insan kararı gerekir. Çatışma, alternatif geleceklerin mantıksal olarak uyumlu olmasının, teknik olarak birlikte var olabilecekleri anlamına gelmediğini gösterir.

Bu fark, programlama açısından değerli bir ders üretir. Her dal korunmaya değmez. Deneysel yollar çoğaldıkça test yükü, güvenlik riski ve bakım maliyeti artar. Sonsuz dijital evren fikri romantik görünse de pratikte depo karmaşası yaratır. İyi bir ekip, dallanmayı özgürlük; birleştirmeyi ise seçim disiplini olarak görür. Kısa ömürlü dallar geri bildirim süresini azaltır, otomatik testler hangi dünyanın yaşanabilir olduğunu belirler, kod incelemesi de seçilen geleceğin ortak akla dayanmasını sağlar.

Versiyon kontrolü bir zaman makinesi midir?

Git yalnızca alternatif gelecekleri değil, geçmişin yeniden yorumlarını da saklar. Bir commit’e dönmek zamanda yolculuğa benzer; fakat geçmişi gerçekten değiştirmez, ondan yeni bir tarih başlatır. Rebase işlemi ise tarihin anlatısını yeniden düzenler: Olaylar aynı değişiklikleri taşısa bile daha temiz bir sıraya yerleştirilir. Bu durum, kimliğin yalnızca mevcut koddan mı, yoksa o koda ulaşan tarihçeden mi oluştuğu sorusunu doğurur. İki dal sonunda aynı dosyalara sahipse aynı yazılım mıdır? İşlevsel açıdan belki; denetlenebilirlik, güven ve sorumluluk açısından hayır.

Sonuçta Git, çoklu dünyalar yorumunun fiziksel bir kanıtı değildir. Kuantum dallanması doğanın matematiksel betimlenmesine, kod dallanması ise insanların tasarladığı veri yapılarına dayanır. Yine de bu dijital simülasyon güçlü bir düşünme aracıdır. Bize tek bir geleceği tahmin etmeye çalışmak yerine birden fazla geleceği ucuzca üretmeyi, sınamayı ve karşılaştırmayı öğretir. Belki de iyi yazılım geliştirme, doğru evreni ilk seferde bulma sanatı değildir; kötü evrenleri erken keşfedip yaşanabilir olanı dikkatle ana dala birleştirme sanatıdır.

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.