Kodun İçindeki Kör Nokta: Usta Programcılar Neden Kendi Hatalarını Göremez?

Bir programcının en tehlikeli cümlesi çoğu zaman şudur: “Bu kodun çalışması lazım.” Bu cümle, teknik bir tahminden çok zihinsel bir sözleşmedir. Yazılımcı, çözümü tasarlarken belli varsayımları görünmez biçimde doğru kabul eder; sonra da hata ayıklarken dünyayı bu varsayımları doğrulayacak şekilde okumaya eğilim gösterir. Loglar, test sonuçları ve kullanıcı raporları önündedir ama zihin çoktan bir hikâye yazmıştır: sorun veritabanındadır, ağ gecikmesindedir, kullanıcı yanlış girdi yapmıştır. Oysa hata, çoğu kez o hikâyenin ilk cümlesindedir.

Metakognisyon: Düşünceyi İzleyen Düşünce

Metakognisyon, en yalın hâliyle, ne düşündüğümüzü değil nasıl düşündüğümüzü fark edebilme becerisidir. Bir algoritmanın karmaşıklığını hesaplamak başka, “Neden bu algoritmayı seçmeye bu kadar istekliyim?” diye sormak başkadır. İlk iş teknik yetkinliktir; ikincisi zihinsel denetimdir. Deneyimli programcılar ilkinde genellikle çok iyidir. Fakat uzmanlık arttıkça ikinci beceri otomatik olarak güçlenmez. Hatta paradoksal biçimde, uzmanlık zihinsel kör noktaları daha iyi gizleyebilir.

Kodun Gizli Politikası: Nesneler mi Yönetir, Fonksiyonlar mı Özgürleştirir?

Programlama paradigmaları ilk bakışta yalnızca teknik tercihler gibi görünür: sınıf mı yazacağız, saf fonksiyon mu? Fakat kod yazma biçimimiz, dünyayı düzenleme biçimimiz hakkında da ipuçları taşır. Nesne yönelimli programlama ile fonksiyonel programlama arasında kurulabilecek siyasi benzetme, elbette “bir paradigma doğrudan şu ideolojidir” kadar kaba değildir. Yine de her ikisinin de güç, sorumluluk, değişim ve sınır kavramlarını farklı biçimde ele alması dikkat çekicidir.

Nesne yönelimli dünya: Yetki, sınır ve hiyerarşi

Nesne yönelimli programlamada dünya, kimliği olan varlıklardan oluşur. Bir BankaHesabı nesnesinin bakiyesi vardır; bu bakiye dışarıdan gelişigüzel değiştirilemez. Para yatırma ya da çekme gibi işlemler, nesnenin kendi kuralları içinden geçmelidir. Bu yaklaşımın temel kavramları olan kapsülleme, kalıtım ve çok biçimlilik; yetkinin belirli merkezlerde toplanmasını, sorumluluğun rollere bölünmesini ve üst-alt ilişkilerinin modellenmesini mümkün kılar.

Kodunuzdaki Deprem Hattı Nerede? Dallanma, Birleştirme ve Biriken Gerilim

Yerkabuğu tek parça değildir: Dev levhalar, görünmez ama durmaksızın hareket eden bir sistem içinde birbirlerine yaklaşır, uzaklaşır ya da yan yana sürtünür. Yazılım projeleri de şaşırtıcı biçimde buna benzer. Ana dal, özellik dalları, acil düzeltmeler ve deneysel kollar; aynı ürünün farklı yönlere hareket eden parçalarıdır. Çoğu zaman bu hareket sessizdir. Geliştiriciler kod yazar, testler geçer, görev panoları güncellenir. Fakat alttan alta bir şey birikir: değişim.

Tektonik plakalar sınırda takıldığında hareket bütünüyle durmaz; enerji, kayaçların esnekliği içinde depolanır. Yazılımda da iki dal aynı modülü farklı niyetlerle değiştirdiğinde benzer bir gerilim oluşur. Bir ekip ödeme akışını sadeleştirirken, başka bir ekip güvenlik katmanını sıkılaştırabilir. Her iki değişiklik kendi bağlamında doğrudur. Ancak uzun süre ayrı kalan dallar, ortak tarihten uzaklaştıkça farklı gerçeklikler üretir. Birleştirme anı geldiğinde Git’in gösterdiği çatışma işaretleri, aslında sistemin küçük sismograflarıdır.

Altın Oran Gerçekten Güzel mi, Yoksa Gözümüzü Kandıran En Şık Mit mi?

1,618… Altın oran denince zihinde hemen aynı sahne canlanır: Ayçiçeğinin spiralleri, deniz kabukları, Piramitler, Leonardo da Vinci’nin tabloları ve sanki evrenin tasarım masasından düşmüş kusursuz bir cetvel. Bu sayı, matematikte phi olarak bilinir; bir doğru parçasının bütüne oranının, büyük parçanın küçük parçaya oranına eşit olduğu özel bölünmeden doğar. Matematiksel olarak zariftir, evet. Fakat zarif olması, doğanın ve sanatın her köşesinde zorunlu olarak saklandığı anlamına gelir mi? Kısa cevap: Hayır. Daha uzun ve eğlenceli cevap ise, altın oranın biraz matematik, biraz tarih, bolca da insan zihninin desen avcılığı olduğudur.

Gerçek olan: Matematiksel bir akrabalık

Altın oran Fibonacci dizisiyle yakından ilişkilidir. Dizide ardışık iki sayının oranı büyüdükçe 1,618’e yaklaşır. Bitkilerde yaprakların gövde etrafındaki dizilişi, tohumların spiral örüntüleri ve bazı çiçek başları, kaynakların daha verimli kullanılmasına yardım eden açılarla oluşabilir. Bu düzenlerden bazılarında Fibonacci sayıları gerçekten görülür. Ancak burada dikkat edilmesi gereken nokta şudur: Doğa, “güzel görünmek” için phi hesaplamaz. Bitki; ışık alma, tohumları sıkıştırmadan yerleştirme, büyüme kısıtları ve evrimsel avantajlar gibi fiziksel süreçlerle şekillenir. Altın orana yakın sonuçlar, çoğu zaman bu süreçlerin bir yan ürünü olabilir.

Sınıf Ormanında Kaybolmak: OOP Beynimizi Ne Zaman Yorar?

Nesne yönelimli programlama, yazılım tarihinin en parlak fikirlerinden biri olarak sahneye çıktı: Dünyayı nesnelerle modelleyelim, sorumlulukları dağıtalım, kodu daha anlaşılır hale getirelim. Kâğıt üzerinde şahane. Bir kahve makinesi nesnedir, bir kullanıcı nesnedir, bir ödeme işlemi nesnedir. Fakat iş büyüyüp de AbstractPaymentProcessorFactoryProvider gibi varlıklar belirmeye başlayınca, insan zihni sessizce sandalyesinden kalkar ve kapıya yönelir.

Buradaki temel sorun OOP’nin kendisi değil, onun kontrolsüz hiyerarşi üretme eğilimidir. İnsan beyni sınırsız bir RAM değildir. Çalışma belleğimiz aynı anda sınırlı sayıda kavramı aktif tutabilir. Bir geliştirici bir metodu anlamak için beş sınıf, üç arayüz, iki soyut sınıf, bir kalıtım zinciri ve bir bağımlılık enjeksiyon konteyneri arasında zıplıyorsa, artık kod okumuyordur; zihinsel engelli parkurunda koşuyordur.