Kod Yazarken Tanrı mı Oluyoruz, Bürokrat mı?

Kod Yazarken Tanrı mı Oluyoruz, Bürokrat mı?

Programlama dili seçtiğimizi sanırız; çoğu zaman seçtiğimiz şey bir dünya görüşüdür. Bir dil bize yalnızca döngü, değişken, sınıf ya da fonksiyon vermez; gerçekliğin nasıl bölüneceğine, zamanın nasıl akacağına, kimlerin kimlere emir vereceğine dair sessiz bir anayasa sunar. Fonksiyonel programlama ile nesne yönelimli programlama arasındaki eski tartışma da bu yüzden sadece teknik değildir. Bir tarafta neredeyse statik, matematiksel, değişmez bir evren; diğer tarafta kimlikleri, rolleri, mirasları ve mesajları olan hiyerarşik bir toplum vardır.

Fonksiyonel evren: Zamanın üzerinde duran kristal

Fonksiyonel programlama, özellikle saf fonksiyonlar ve değişmez veri yapılarıyla çalıştığında, dünyayı Platoncu bir geometri gibi görür. Bir fonksiyon aynı girdiye daima aynı çıktıyı verir. Bugün de, yarın da, üretim ortamında saat üçte panik halinde çalışırken de. Bu, yazılımcıya garip bir huzur verir: Evrenin bir köşesi en azından deterministtir. Değişkenler değişmez, sadece yeni değerler doğar. Geçmiş silinmez; onun üzerine yeni katmanlar eklenir.

Kodun Zen’i: Geçmişi Kurcalamadan Geleceği Bozmayan Programlama

Bir programın evrenini küçük bir laboratuvar gibi düşünün. Masanın üzerinde girdiler var: sayılar, metinler, listeler, belki biraz kullanıcı verisi. İşlevsel programlama bu laboratuvara beyaz önlükle girer ve şöyle der: Bana ne verdiysen, ona karşılık ne üreteceğimi söyleyeyim; ama deney tüplerini gizlice değiştirmem, rafları karıştırmam, geçmişi yeniden yazmam, geleceğe mayın döşemem. Kulağa ahlaki bir manifesto gibi geliyor, fakat aslında son derece pratik bir mühendislik tavrıdır.

İşlevsel programlamanın merkezinde saf fonksiyon fikri durur. Saf fonksiyon, aynı girdiye her zaman aynı çıktıyı verir ve bunu yaparken dış dünyada hiçbir şeyi değiştirmez. Matematikteki f(x) gibi: f(2) her çağrıldığında başka bir ruh hâline bürünüp bazen 4, bazen 7, bazen de veritabanındaki kullanıcıları silmez. Bu sadelik, kodun tahmin edilebilir olmasını sağlar. Tahmin edilebilir kod ise gecenin üçünde kahveyle hata ayıklayan geliştiricinin sinir sistemine yapılmış bir iyiliktir.

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.