İnsan Dili Bir Derleyici Hatasından mı Doğdu?

İnsan Dili Bir Derleyici Hatasından mı Doğdu?

Bir programcının ekranında beliren soyut sözdizim ağacı, ilk bakışta kuru bir mühendislik nesnesidir: düğümler, dallar, ifadeler, operatörler. Oysa biraz yakından bakınca bu ağaç, insan dilinin karanlık ormanına tutulmuş güçlü bir fener gibi davranır. Çünkü dil dediğimiz şey yalnızca kelimelerin arka arkaya dizilmesi değildir; kelimelerin birbirine hangi görünmez kurallarla bağlandığı, hangi parçanın hangi parçayı taşıdığı ve anlamın hangi dallardan süzülerek zihne ulaştığıdır.

Programlama dillerinde AST, kaynak kodun yüzeydeki yazım biçimini değil, derindeki mantıksal yapısını temsil eder. Mesela 3 + 4 * 5 ifadesi soldan sağa okunduğunda basit görünür; fakat AST bize çarpmanın toplamadan önce örgütlendiğini söyler. İnsan dili de benzer bir numara yapar. “Kırmızı şapkalı adam koştu” dediğimizde zihin, sözcükleri düz bir boncuk dizisi gibi saklamaz. “Kırmızı”nın şapkaya mı, adama mı ait olduğunu; “şapkalı adam”ın bir bütün olarak eylemin öznesi olduğunu çözer. Yani beynimiz, konuşurken farkında olmadan bir tür biyolojik ayrıştırıcı gibi çalışır.

Kod Çalışıyor Ama Neden? Eğitimin Asıl Sınavı Burada Başlıyor

Kod Çalışıyor Ama Neden? Eğitimin Asıl Sınavı Burada Başlıyor

Bir öğrencinin yazdığı programın ekranda doğru sonucu vermesi etkileyicidir; fakat tek başına yeterli değildir. Çünkü çalışan kod, bazen iyi düşünmenin değil, şanslı denemelerin, kopyalanmış bir parçanın ya da ezberlenmiş bir kalıbın sonucudur. Asıl öğretici an, öğrenciye şu soru sorulduğunda başlar: “Bu kodu neden böyle yazdın?” İşte bu soru, programlamayı tuşlara basma becerisinden çıkarır; gerekçelendirme, sorgulama ve bilinçli karar verme sanatına dönüştürür.

Kod yazmak bir tür inşa faaliyetidir. Değişkenler malzeme, koşullar kapı, döngüler ise tekrar eden merdivenler gibidir. Ancak bir binanın ayakta durması, mimarın her kararının iyi olduğu anlamına gelmez. Aynı işi yapan iki program arasında okunabilirlik, hız, bakım kolaylığı, hata dayanıklılığı ve etik etki bakımından büyük farklar olabilir. Öğrenci yalnızca “çalıştı” diyorsa, binanın kapısının açıldığını söylemektedir. “Neden bu yapıyı seçtim?” diyebiliyorsa, taşıyıcı kolonları da düşünmeye başlamıştır.

Neden Yazılım Dilleri Küçük Dinlere Dönüşüyor?

Neden Yazılım Dilleri Küçük Dinlere Dönüşüyor?

Bir yazılımcıya “en iyi programlama dili hangisi?” diye sorun; teknik bir değerlendirme beklerken kendinizi mezhep tartışmasına benzeyen canlı bir ritüelin ortasında bulabilirsiniz. Bir köşede “Python okunabilirliğin zirvesidir” diyenler, diğer köşede “Rust bellek güvenliğinin kurtarıcısıdır” diye cevap verir. JavaScript savunucuları internetin onsuz dönmeyeceğini hatırlatır; C programcıları ise bütün bu yüksek seviye rahatlıkların altında hâlâ kendi emeklerinin bulunduğunu ima eder. Tartışma çoğu zaman dilin araçlarından çıkar, kişiliğin ve aidiyetin savunusuna dönüşür.

Dil seçimi neden kimlik seçimine dönüşür?

Programlama dili, yalnızca bilgisayara talimat vermenin biçimi değildir. Bir dil; çalışma alışkanlığı, estetik tercih, kariyer yolu, arkadaş çevresi ve hatta kişinin “iyi mühendislik” anlayışıyla birlikte gelir. Lisp seven biri soyutlamanın zarafetine değer verebilir. Go kullanan biri sadeliği ve operasyonel netliği öne çıkarabilir. Ruby topluluğunda geliştirici mutluluğu daha görünür bir ideal olabilir. Bu tercihlerin hiçbiri yalnızca sözdizimi meselesi değildir; her biri, yazılım üretmenin nasıl bir hayat sürme biçimi olması gerektiğine dair sessiz bir iddia taşır.

Bir Değişkenin Hayatı: Scope Bittiğinde İnsan Ne Kaybeder?

Bir Değişkenin Hayatı: Scope Bittiğinde İnsan Ne Kaybeder?

Programlamada bazı gerçekler yalnızca doğdukları yerde geçerlidir. Bir fonksiyonun içinde tanımlanan yerel değişkeni düşünün: Değeri vardır, görevi vardır, hatta kısa ömrü boyunca bütün hesaplamanın kaderini değiştirebilir. Fakat fonksiyon sona erdiği anda o değişken dışarıdan erişilemez olur. Dış dünya için artık yoktur. Bu, basit bir teknik ayrıntı değil; bilginin, yetkinin ve anlamın bağlama bağlı oluşuna dair güçlü bir modeldir.

scope, yani kapsam, bir ismin nerede tanındığını belirler. Aynı değişken adı iki farklı blokta kullanılabilir; fakat bunlar aynı şey değildir. Bir döngüdeki i, başka bir fonksiyondaki i ile akraba bile olmayabilir. İsim aynıdır, kimlik farklıdır. İnsan zihni burada sık sık hata yapar: Kelimelerin aynı olmasının, deneyimlerin de aynı olduğu yanılgısına düşeriz. Oysa kod bize soğukkanlı bir ders verir: Bir kavramı anlamak için önce onun hangi blokta tanımlandığını sormalısınız.

Null Pointer Exception: Anlamın Olmadığı Adrese Dokununca

Null Pointer Exception: Anlamın Olmadığı Adrese Dokununca

Programlamada bazı hatalar vardır: Derleyici onları görür, kırmızıyla bağırır ve daha kahveniz soğumadan yakalanırlar. Bir de Null Pointer Exception vardır. O daha zariftir. Sistem çoğu zaman size inanır; elinizde bir nesne olduğunu, onun alanlarına erişebileceğinizi, bir değer taşıdığını varsayar. Sonra siz o nesnenin kapısını çalarsınız ve içeriden ses gelmez. Çünkü orada kimse yoktur. Değişken vardır, adres beklentisi vardır, çağrı vardır; ama referans edilen bir gerçeklik yoktur. Program bir anda durur.

Varoluşsal kriz de buna şaşırtıcı ölçüde benzer. İnsan, hayatın içinde bir anlam nesnesine işaret eder: kariyer, ilişki, inanç, başarı, gelecek planı, toplumun alkışı. Ardından bu nesnenin metotlarını çağırmaya başlar: mutlulukVer(), nedenDevamEtmeliyim(), kimim(). Fakat bazen işaret edilen yerde anlamın kendisi yoktur. Belki hiç kurulmamıştır; belki eskiden vardı ve sessizce silinmiştir; belki de bize ait olmayan bir değişkene fazla güvenmişizdir. İşte o anda zihnin çalışma zamanı istisnası yükselir: “Null Pointer Exception: anlam üzerinde işlem yapılamıyor.”