Elinize hiç bakımını yapmanın imkânsız olduğu bir yazılım geçti mi? Kod orada: binlerce satır. Çalışıyor gibi. Ama bir satırı değiştirince domino taşları gibi devrileceğinden korkuyorsunuz. Bir şeyler eksik. Eksik olan, kodun içinde değil; ruhunda.
Bu fikir yeni değil. 1985 yılında, yani bugün kullandığımız birçok teknolojinin hayal bile edilemediği bir dönemde, bilgisayar bilimci Peter Naur, “Programming as Theory Building” (1985) başlıklı manifestosunu yayınladı. Naur, bir programın asıl değerinin kaynak kodunda değil, o kodu geliştiren ekibin zihnindeki kolektif anlayışta, yani “teoride” yattığını savundu.
Bu “teori”, sadece kodun ne yaptığını değil, aynı zamanda neden o şekilde yapıldığını, hangi gerçek dünya problemlerini çözdüğünü ve gelecekteki değişikliklere nasıl uyum sağlayabileceğini kapsayan derin, yaşayan bir zihinsel modeldir.
Naur’un Kehaneti: Modern Yazılım Pratiklerinin Kökeni
Naur’un 40 yıl önce ortaya attığı bu fikir, bugün yazılım dünyasının en ileri pratiklerinin temelini oluşturuyor. Farkında olmadan, hepimiz Naur’un “teorisini” arıyoruz:
- Çevik Manifesto (Agile Manifesto): 2001’de “süreçler ve araçlardan ziyade bireyler ve etkileşimlere” değer verdiğini ilan ettiğinde, Naur’un “teoriyi taşıyan ekip” vurgusunu yankılıyordu.
- Alan Odaklı Tasarım (Domain-Driven Design — DDD): DDD’nin kalbindeki “Ubiquitous Language” (Ortak Dil) kavramı, Naur’un teorisinin somut bir uygulamasıdır: herkesin aynı paylaşılan zihinsel model üzerinde çalışmasını sağlar.
- DevOps ve Sahiplenme: “You Build It, You Run It” felsefesi, Naur’un “programın yaşamı, teoriyi bilen ekibin kontrolüne bağlıdır” fikrinin doğrudan bir sonucudur. Teoriyi bilmeyen bir ekibe devredilen yazılım, “ölmeye” başlar.
- Teknik Borç (Technical Debt): Naur, teoriyi anlamayanların yaptığı değişiklikleri “orijinal yapıyı şekilsiz eklemelerle etkisiz hale getiren” müdahaleler olarak tanımlar. Bu, teknik borcun nasıl biriktiğinin mükemmel bir tarifidir.
- Yazılım Ustalığı (Software Craftsmanship): Bu hareket, programcıları “kolayca değiştirilebilir bileşenler” olarak değil, teorinin sorumlu ve kalıcı koruyucuları olarak görür.
Naur bize şunu gösterdi: Değerli olan, üretilen eser (kod) değil, o eseri üreten kolektif anlayıştır. Naur’un fikirleri en iyi pratiklerimizin kalbinde yer alıyorsa, neden günlük rutinlerimizin çoğu bu kadar ruhsuz ve sığ hissettiriyor?
En Büyük Yanılsama: Görünenin Esiri Olmak
Çoğumuz, yazılım geliştirmeyi bir tür teknolojik fetişizme indirgemiş durumdayız. Günlerimiz, en “idyomatik” kodu yazma, en son çıkan framework’ü kullanma, kişisel tercihler, boşluk ve parantezlerin yerini tartışan anlamsız Pull Request yorumları ve süreçleri harfiyen takip etme ritüelleriyle geçiyor.
Çoğu zaman bir program ürettiğimizi sanıyoruz. Oysa yaptığımız şey, bir ‘anlamın’ harfler ve semboller dünyasında görünür olmasına aracılık etmektir. Asıl mesele kod yazmak değil, o kodu var eden ‘birleşik bilinci’ bir ekip içinde canlı tutmaktır. Araçlara, süreçlere, hatta kodun kendisine tapınmak, görünenin (suretin) esiri olup anlamı (ruhu) unutmaktır. Ve bu, mesleğimizin en büyük yanılsamasıdır.
Her program, onu yazanların kolektif bilincinin bir aynasıdır. Biz ise aynayı parlatmak yerine, yansımanın üzerindeki tozları tartışıyoruz.
Sahneye Yapay Zeka Giriyor: Mükemmel Kâtip, Ruhsuz Öğrenci
İşte tam bu noktada, sahneye yapay zeka giriyor ve bu yanılsamayı yüzümüze çarpıyor. ChatGPT gibi büyük dil modelleri, kodun “görünen” yüzünü, yani suretini, insan aklının sınırlarını zorlayan bir seviyede analiz edebilir.
Yapay Zekanın Yapabildikleri:
- Yapıyı Anlamak: Milyonlarca satır koddan öğrendiği desenleri tanır, projenin mimarisini anında kavrar ve mevcut stile mükemmel uyum sağlar.
- Niyeti Tahmin Etmek: Değişken ve fonksiyon isimlerinden yola çıkarak kodun ne yapmaya çalıştığını büyük bir isabetle tahmin eder.
- Mevcut Formu Genişletmek: Sistemdeki on rapora benzer on birinci bir raporu, sıfır hatayla, saniyeler içinde yazabilir.
Ancak Yapamadığı Bir Şey Var:
Naur’un “teorisi”, yani o ruh, kodun içinde değildir. O, kodun dışındaki dünyadadır ve yapay zekanın erişimi olmayan yer tam olarak burasıdır:
- Yazılmamış “Neden”: Üç yıl önce kredi risk motoruna eklenen o karmaşık istisna kuralının, hukuk ve satış departmanları arasındaki kırılgan bir uzlaşmanın ürünü olduğunu bilemez. Çünkü o ‘neden’, insanlar arası bağlam ve hafızadadır.
- İnsan Deneyimi ve Sezgi: Bir özelliğin teknik olarak doğru çalışmasının, kullanıcı için “doğru hissettirmesiyle” aynı şey olmadığını kavrayamaz. O, “ne olduğunu” bilir ama insan “nasıl olduğunu hisseder”.
- Gerçek Yaratıcılık: Keşifsel varyasyonlar üretebilir, ancak mevcut “montaj hattı” metaforunun artık işe yaramadığını fark edip problemi yeniden çerçeveleme inisiyatifini ve hesap verebilirliğini üstlenemez.
- Ahlaki ve Stratejik Yargı: “Bu özellik, kullanıcı gizliliğinden ödün vermeye değer mi?” gibi kararlar veremez. Bu kararlar, teorinin en derin katmanıdır: Programın sadece ne olduğu değil, ne olması gerektiği ile ilgilidir.
Peki ya yapay zekayı tüm kurumsal bilgi tabanımıza (Confluence, ADR’ler, Slack arşivleri) bağlarsak? O zaman “teoriye” yaklaşmaz mı? Yaklaşır, ama ona sahip olamaz. Bu, bir kütüphanedeki tüm kitaplara erişimi olan birinin, o kitapları yazan yazarların yaşadığı hayatı ve tecrübeyi anladığını iddia etmesi gibidir. Yapay zeka bilgiye erişir, insan ise teoriyi yaşar ve taşır.
Anlamın Koruyucuları Olmak: Ne Yapabiliriz?
Yapay zeka, yazdığımız kodun suretini kusursuzca analiz eden, hatta bizim yerimize yazabilen dahi bir kâtiptir. Ama ruhsuzdur. Bu durum, biz yazılımcılar için bir tehdit değil, bir aydınlanma fırsatıdır. Eğer yapay zeka giderek artan bir şekilde “kodu” yazacaksa, bize ne kalıyor?
Bize, en önemli şey kalıyor: Anlam. Görevimiz, bu dahi ama ruhsuz kâtibe ne yazacağını söylemek, yaptığı işin arkasındaki “niyeti” ve “hikmeti” korumaktır. İşte “anlamın koruyucuları” olmak için atabileceğimiz bazı pratik adımlar:
- Yaşayan Belgeler Yaratın: Sadece “ne” olduğunu değil, “neden” öyle olduğunu anlatan Mimari Karar Kayıtları (ADR) tutun. Alan Odaklı Tasarım’daki gibi Bağlam Haritaları (Context Maps) ile sistemin büyük resmini çizin.
- Anlam Ritüelleri Oluşturun: Haftalık “domain brownbag” oturumlarıyla iş alanını öğrenin. Önemli kararların alındığı anlara geri dönüp “Neden böyle yapmıştık?” diye soran karar tekrarı (decision replay) seansları düzenleyin.
- Ortak Dili Kutsayın: Ürün ve teknik ekiplerin birlikte yönettiği, yaşayan bir “Ubiquitous Language” sözlüğü oluşturun.
- Niyeti Koda İşleyin: Commit mesajlarınızı “Ne değişti?” yerine “Neden değişti?” sorusuna cevap verecek şekilde yazın. Her modülün kök dizinine, o modülün varoluş amacını anlatan bir “WHY.md” dosyası ekleyin.
- Teoriyi Yeni Gelenlere Aktarın: Yeni ekip üyelerine sadece kod tabanını değil, “teoriyi” de aktaracak bir “teori mentoru” atayın.
- Yapay Zekayı Bir Kâtip Olarak Kullanın: Ekip olarak, “AI’ya neyin delege edileceği ve neyin asla edilmeyeceği” üzerine bir ilke seti belirleyin. Rutin kod üretimini ona bırakın, stratejik kararları kendinize saklayın.
Gelecek, daha az tuş vuruşunda değil; daha iyi paylaşılan niyette. Kodu yazan eller değişebilir; anlamı taşıyan topluluk değişmemeli.



