Bir programcı gece yarısı ekrana bakarken şunu düşünür: Bu fonksiyonu ben mi icat ettim, yoksa zaten bir yerlerde bekleyen doğru biçimi nihayet bulabildim mi? Matematiksel Platonizm tam bu noktada kapıyı aralar. Bu görüşe göre sayılar, geometrik nesneler, teoremler ve belki de algoritmalar, insan zihninden bağımsız bir varlık alanında zaten mevcuttur. Biz onları üretmeyiz; keşfederiz. Tıpkı bir dağcının zirveyi yaratmaması, yalnızca oraya ulaşması gibi.
Kodlama genellikle pratik bir zanaat gibi görünür: klavye, hata mesajı, kahve, teslim tarihi ve bir yerlerde ağlayan bir sunucu. Fakat yüzeyi kazıdığımızda kodun tuhaf bir metafizik parıltısı vardır. Bir sıralama algoritması düşünelim. Bubble sort, quicksort ya da merge sort yalnızca insanların yazdığı metinler midir? Yoksa belirli bir problemi çözmenin mantıksal yolları olarak, bizden önce de mümkün olan yapılar mıdır? Eğer tüm insanlar yok olsaydı, iki listenin birleşerek sıralanması fikri de yok olur muydu?
Algoritma: İcat mı, keşif mi?
Bir algoritma, sonlu adımlarla tanımlanmış bir dönüşüm yoludur. Girdi alır, işlem yapar, çıktı üretir. Bu haliyle algoritmalar, fiziksel bilgisayarlardan daha soyut görünür. Bilgisayarlar bozulur, diller eskir, frameworkler moda olur ve unutulur. Ama asal sayı testi fikri, bir Python dosyasına muhtaç değildir. Python yalnızca onun giysisidir. Aynı mantık C ile de, Haskell ile de, kağıt kalemle de ifade edilebilir. Bu yüzden Platoncu bakış şunu söyler: Kod dediğimiz şey, aslında soyut bir formun belirli bir dildeki gölgesidir.
Ancak burada dikkatli olmak gerekir. Yazdığımız her kod parçasını ilahi bir matematik tapınağından inmiş gibi görmek fazla romantik olabilir. Bir ödeme sisteminin kötü yazılmış kullanıcı doğrulama modülü, sonsuzlukta parlayan saf bir ideadan çok, aceleyle kapatılmış bir sprint maddesine benzer. Kodun bir kısmı zorunlu mantıktan, bir kısmı tarihsel tesadüften doğar. Neden noktalı virgül var? Neden bazı dillerde girinti kaderdir? Bunlar evrensel hakikatlerden çok kültürel evrim, mühendislik tercihi ve insan alışkanlıklarıdır.
Yine de en derin katmanda, programlama matematiksel bir iskelete yaslanır. Veri yapıları kümelere, fonksiyonlar dönüşümlere, tip sistemleri mantıksal önermelere, hesaplama kuramı ise neyin hesaplanabilir olduğuna dair kadim bir sınıra uzanır. Turing makinesi yalnızca bir akademik oyuncak değildir; düşüncenin mekanikleşebilen kısmına tutulmuş bir aynadır. Bu aynada gördüğümüz şey bazen rahatsız edicidir: Belki de yazılımcı, sıfırdan yaratan bir tanrı değil, soyut zorunlulukları dünyaya indiren bir aracı figürdür.
GitHub, idealar aleminin bodrum katı mı?
Şaka gibi gelebilir ama açık kaynak depoları, Platoncu bir rüyayı andırır. Aynı problem için binlerce çözüm, aynı soyut yapının farklı bedenlere bürünmüş halleri gibidir. Bir kütüphane, daha önce keşfedilmiş bir yolu paketler. Bir API, soyut bir ilişkiyi kullanılabilir bir yüzeye dönüştürür. Refactoring ise sanki çamura bulanmış bir heykeli yıkayıp altındaki formu ortaya çıkarma çabasıdır. İyi kodun bize güzel gelmesi de tesadüf değildir. Sadelik, tutarlılık ve zarafet, yalnızca estetik değil, ontolojik bir sezgi uyandırır: Bu böyle olmalıydı.
Karşı tarafta ise nominalist itiraz durur. Ona göre algoritmalar ve matematiksel nesneler bağımsız bir evrende yaşamaz; onlar insan zihninin ve dilinin kurduğu kullanışlı araçlardır. Kodun varlığı, onu yazan topluluğun pratikleriyle anlam kazanır. Bir değişken adı, bir tasarım deseni, hatta temiz kod ilkeleri bile toplumsal anlaşmalarla ayakta durur. Bu bakış bize alçakgönüllülük öğretir: Evren belki de bizim sınıflarımızı, metodlarımızı ve mimari karar kayıtlarımızı umursamıyordur.
Benim tavrım iki uç arasında savaşçı bir denge arar. Kodun derin mantıksal çekirdeği keşfedilir; fakat onun somut biçimi icat edilir. Quicksort fikri, insan zihninden bağımsız bir olasılık alanında bekliyor olabilir; ama onu okunabilir, güvenli, ölçeklenebilir ve bakım yapılabilir hale getirmek insani bir sanattır. Yani programcı hem arkeolog hem mimardır. Bir eliyle gömülü yapıları bulur, diğer eliyle onlara yaşanabilir evler kurar.
Bu tartışmanın pratik sonucu da vardır. Eğer kodu yalnızca metin sanırsak, derin yapıyı kaçırırız. Eğer onu yalnızca kutsal form sanırsak, kullanıcıyı, bağlamı ve hatayı unuturuz. İyi yazılımcı, Platoncu bir sezgiyle zorunlu yapıyı arar; mühendis aklıyla onu dünyaya uyarlar. Belki de en doğru cümle şudur: Kodlarımız bizden bağımsız bir evrende tamamen yazılmış halde beklemiyor; ama onları mümkün kılan mantıksal yollar, biz gelmeden önce de sessizce oradaydı. Bizim işimiz, o sessizliği çalıştırılabilir hale getirmek.