3 Mart 2026 Salı

Devrim Dersleri - 2: Yazılımın Temelleri

Hiç daha önce, detaylarına hâkim olmadığınız bir konuyla alakalı bir soru sorulduğunda kendi kendinize çıkardığınız sonucu sanki teyit ederek edindiğiniz doğru bir bilgiymiş gibi, gayet kendinizden emin bir şekilde cevap namına söylediniz mi? Hatta belki soru sormaya bile gerek kalmadan, ilgili konuya tamamen hâkim olduğunuzu ya da sanki başkasının bilmediğini bildiğini gösterme adına durduk yere yaptınız mı bunu?

“Evet yaptım. Ve bunu çok yapıyorum” diyorsanız, bilgisayar bilimlerinde yapılanı görmeden kendinize bu kadar haksızlık etmeyin derim. Çünkü doğası gereği bilgisayar bilimleri kendi kendine sonuçlar çıkarıp bunu başkasına doğru bir bilgiymiş gibi anlatmanın doruk noktasında yaşandığı bir alandır. Neden doğası gereği?

Çünkü bilgisayar bilimlerinde uzmanlaşma tamamen bilgi birikim üzerine dayanır, beden gücüne ya da aile bağlarına ya da ne bileyim, fiziksel görüntüye değil. Ve çalışan bir mekanizmayı ortaya çıkarmanın da korkunç bir bilgi birikim istiyor olmasından kaynaklı en fazla soru sorulan ve aynı oranda cevap verilmeye çalışılan yani yardımlaşmanın, etkileşimin olduğu alan da burasıdır. Onun için çıkardığı sonucu doğru bir bilgiymiş gibi söyleme doğal olarak en fazla bu alanda görülür.

Elbette cevabını bilmese de iyi niyetli bir şekilde çıkardığı yanlış sonucu cevap namına verebilir insan. Çoğunlukla da böyle oluyordur. Hatta çıkarılan sonuçlar illaki yanlış olacak diye bir kural da yoktur. Doğru da olabilir. Doğru ise ne güzel yardımcı da olunmuştur. Fakat bazen insanlar bilmediğini söylemek yerine, soru sorulmasını “daha fazlasını bilen” insan görüntüsü verme fırsatı olarak görüp, çıkardığı yanlış sonucu doğru bir bilgiymiş gibi söyleyebilmektedir. Ya da aslında kendisinin de anlamadığı, daha önceden verilmiş ama aslında yanlış olan cevabı, aynı öncekilerin yaptığı gibi kendisinden son derece emin bir şekilde tekrarlayabilmektedir. Bu durum için elbette iyi niyetten bahsedemeyiz ama sorun bu değil. Çünkü ne olursa olsun, ister iyi niyetli olunsun, isterse de olunmasın eğer verilen bilgi yanlışsa ve bu doğru gibi söylenmişse, her iki durum için de cevap arayan insanların yanlış yönlendirildiği gerçeği değişmez.

Sonucunda da bu kadar farklı kaynaktan aynı yanlış cevabı duyan insan da sorunun kendisinde olduğunu, herkesin anlamayı başardığı şeyi kendisinin anlayamadığını düşünebilmektedir, büyük bir moral bozukluğu ile. Bunun sonucunda da ya vazgeçen olmaktadır ya da verilen cevaplar karşısında anlamış gibi yapan insan topluluğu bir kişi daha kazanmaktadır. Hatta, belki, o da zamanla yanlış cevapları tekrarlayarak başkalarını yanlış yönlendirecektir. Ama sanıyorum o topluluk bu fakiri kazanamadı, çok şükür.

Devrim Dersleri – 2: Yazılımın Temelleri serisinin hikayesi şöyledir:

1999 sonu 2000 başı... Her mahalleye birer ikişer internet kafe açılmış ve biz de ilk defa klavyenin tuşlarına dokunmuşuz, web sitesi tıklamayı öğreniyoruz. Paralelinde de Matrix filmi çıkmış onu izlemişiz. Kendi aramızda da hacker efsaneleri anlatmaya başlamışız. Ve bu gazla üniversiteye başlamış, programlama dersine de girmişiz. Gizemli bir hacker olmamız an meselesi derken, hoca kara tahtanın önünde bir grup sayıyı küçükten büyüğe sıralamayı gösteriyor. Bu ne yahu?

Aslında işin özü oydu ama bunu bilebilmek ne mümkündü o dönemde. Kara tahta önünde hiç kategorize etmeden yapılan anlatım tekniği sebepli, bunları anlamak ne kadar zordu. Daha yolun çok başında olduğumu ve yolun çok uzun olacağını anlamıştım.

İnternete ulaşmanın pek de kolay bir şey olmadığı, ulaşılsa bile günümüzde erişilebilen bilgi birikiminin milyonda birinin dahi olmadığı o yıllarda, internet kafelerde bir şeyler okumaya çalışıyorduk. Ama C ile biraz biraz kod yazmaya da başlamıştım. Konsoldan kullanıcının 2 sayı girmesini istemek ve toplamını konsola basmak... C Programlama dili ile ilk böyle başladık programlamaya. Koşullamalar yazmam gerektiğini anlamıştım en azından. Sonra C++ diye bir şey duyduk. Allah Allah farkı neydi ki? “C++ dili nesneye yönelik bir dildir”. Cevap buydu. Peki nesneye yönelik dil ne demek, nesne ne demekti?

Bir hocaya sordum. Mantığını sorduğumu anladı, geçiştirdi. Zaten dünya üzerinde kime sorsam geçiştirecekmiş. Çünkü bunu anlamanın yolu zekâ kavramını anlamaktan ve zekânın nesne kavramı ile bağını keşfetmekten geçiyordu ki sanıyorum Dünya Tarihinde, -biraz da yanlış isimlendirilen- nesneye yönelik programlama denilen programlama tekniğini zekânın tam tanımlarını verip o tanımlarla uyumlu olacak şekilde anlatan ilk çalışma Devrim Dersleri – 2: Yazılımın Temelleri: Kod adı altında encodeum kanalında 2026 yılında yayınlanmış oldu.

Sormaya devam ettim. Programlama bildiği düşünülen başka bir kişiye sordum bu nesneye yönelik programlama denilen şeyi. Efsane bir cevap vermiş o zaman: “Hani, görsel programlama var ya”, kullanıcı arayüzü olan Windows uygulamalarından bahsediyor, “İşte nesneye yönelik programlama o” dedi. Şimdi düşündüğümde, “Vay canına neyi nereye bağlamış” diyorum. Doğru kabul etsem ve yıllarca üzerine gitmesem, sözde hem nesneye yönelik programlamanın hem de kullanıcı arayüzü hazırlamanın ne demek olduğunu anlamış gibi yapacağım. Bir iki kişi ile daha konuştum onlar da ezbere cevap verdi. Baktım anlayamıyorum, konuyu erteledim. Vazgeçmedim ama erteledim. Ta ki 2006 yılına kadar. 2006 yılından sonra internet bağlantısına kavuşmam ve sonrasında da korkunç bir okuma sürecine girmem ile bir şeyler belirmeye başladı. Tam mantığını ise “COM” diye kısaltılan Component Object Model konusunu anlamam ile çözmüş oldum.

Hatta şöyle olmuştu: Bir gün yolda yürüyorum aynı zamanda bu konuyu düşünüyorum: “Bir fonksiyona bir arayüzü parametre olarak geçiriyoruz. O arayüzün metodunu fonksiyon içinde çağırıyoruz. Ve çalışma zamanında, o arayüzden türetilen hangi nesne gelirse gelsin kod o nesnenin metodunu çağırmış oluyor. Çünkü derleyici her sınıf için ‘v-table’ denilen fonksiyon işaretçilerini içeren bir tablo hazırlıyor. Ve aslında fonksiyona onu geçirmiş oluyoruz. Yani nesnenin geçirildiği o fonksiyon, aynı arayüzden türeyen nesnelerin içindeki fonksiyon işaretçileri üzerinden dinamik metot çağırımı ile nesneleri birbiri yerine kullanmış oluyor. Derleyici metot çağırımı için metodu adrese bağlama işini derleme anında yapmıyor. Dinamik olarak yapıyor dolayısıyla çalışma zamanında gelebilecek farklı nesneleri birbiri yerine kullanmış oluyor. ‘Birbiri yerine kullanma’ mı dedim az önce?  Aaa bir saniye, zekâ da alet kullanabilme yeteneğiydi. Ha nesneler ile zekâyı gerçekleşmişler yahu. O zaman zekâ da aslında alet kullanma değil, aletleri yani nesneleri birbiri yerine kullanma yeteneği. Hah tamam şimdi oldu” demiştim o zaman. Bütün taşlar yerine oturmuştu.

Fakat süreç burada değil, çok ilginç bir yerde bitti.

Askere gittim 2009 Aralık’ta. Bir sabah içtimadayız. Sağ olsun, tabur komutanımız askerlere nasihat ederken zekânın o zamana kadar ilk defa duyduğum farklı bir tanımını söyleyip, ardından kendi çıkardığı yanlış sonucu söyledi. Şu minvaldeydi söyledikleri: “Arkadaşlar zekâ çevreye uyum sağlama yeteneğidir. Burada ortama, arkadaşlarınıza uyum sağlayacaksınız”. Muhtemelen zekânın tanımını bir yerde okudu. O tanımın orijinalinde geçen “environment” ifadesinin Türkçeye “çevre” olarak çevrilmesini birçok insan gibi yanlış anlayarak bunun arkadaş çevresi, insanın bulunduğu ortam olduğunu falan sanmış ve bunu doğru bilgiymiş gibi insanlara aktarıyordu. İyi niteliydi ama insanları yanlış yönlendiriyordu. Ama bir kişi hariç, yine bu fakir. Ben o anda, zekâ için söylenen “çevreye uyum sağlama” tanımını, “aletleri birbiri yerine kullanma yeteneği” tanımı ve nesneye yönelik programlama kavramları ile eşleştirip, ikinci uyanmayı yaşamıştım. Ve o tanımı da izlemiş olduğunuz gibi, 2026 yılında yayınladığım Devrim Dersleri – 2: Yazılımın Temelleri: Kod isimli videoya ekledim.

İşte onun için, “Bu ders neden bir devrim dersi?” diyecek olursanız, “Bu ve bunun gibi açıklamaları içerdiği için devrim dersidir” derim.

Zaten encodeum çatısı altında yayınlanan çalışmaların kalitesinin ne seviyede olduğunun farkında olan encodeum’un sıkı takipçileri, mevcut Matematik müfredatının yanlış olduğunu anlattığımız Devrim Dersleri – 1: Matematiğin Temelleri isimli çalışmadan 13 yıl sonra, Yazılım Temelleri serisinde klasik bir anlatım yapacağımızı düşünmemiştir. Sıra dışı bir şeyler bekliyordur.

Bu kadar mı peki yazılım konusunun anlatımı ile ilgili yapacaklarımız?

Tabii ki de hayır. Yeni başladık yahu. Daha neler neler işleyeceğiz. Bitirmemin yıllar sürdüğü bu devasa şekli adım adım tamamlayacağız inşallah.

Yazılımın Temelleri

Merak etmeyin arkadaşlar anlamış gibi yaptığınızı ama en temel konularda dahi eksiğiniz olduğunu ama itiraf da edemediğinizi biliyorum. Senior Developer’dan tut da Software Architect’e kadar bir dolu unvanınız olduğundan sormaya da cesaret edemiyorsunuz. Değil mi? Biz bizeyiz burada. Yabancı yok. Ondan böyle yazıyorum. 

Merak etmeyin, sessiz sedasız hepsini işleyeceğiz mantıklarını anlata anlata.

Hatta en temel konularda dahi eksiklerinizin olması durumunu hemen şimdi bi test edebilirsiniz de, biliyor musunuz? Az önce ilk bu konuları öğrenmeye başladım zamanlarda, edindiğim bir bilgi olarak, C++ Programlama Dilinin C Programlama Dilinden farkı bağlamında “C++’ın nesneye yönelik programlama dili” olduğunu söyledim. Siz de okudunuz. Ve bu bilgiyi yadırgamadınız, değil mi? Oysa ki o da doğru bir bilgi değildi.

Durun, bir meydan okuma yapayım o zaman, heyecan katsın Devrim Dersleri – 2 sürecine.

Basit(!) 2 soru:

1. İlk soru şu olsun: C ile C++ programlama dilinin farkı nedir? (İpucu: İşletim Sistemi çekirdeğinin çalışma mekanizması ve programlama dillerinin neleri soyutladığı konusuna bakın.)

2. Sınıf içine koyduğumuz erişim belirleyiciler ne işe yarar? Hani “public”, “protected”, “private” erişim belirleyiciler var ya. En temel konular. Bunlar ne işe yarar? (İpucu: Bu ders için yayınladığımız şekilde nereye koyduğumuza dikkat edin.)

Siz bunların cevaplarını düşünürken ben bir de bu konun teolojik boyutuna gireyim. Çünkü buraya kadar anlattıklarım, bu konunun teknik kısmıydı. Bu konu o kadar derin ki, işin bir de teolojik boyutu var. Şimdi bir de işin teolojik boyutunu konuşalım.

Hatırlarsanız, “Müslüman Olmak Nedir? Ne Değildir?” yazısında insanı oluşturan teolojik parçaları ve yine etkileşim halinde olduğu teolojik varlıkları çizmiş ve 2 parçanın eksik olduğunu söylemiştik. O parçalardan biri zekâ idi. Zekâyı ekleyememiş olmamın nedeni, yazıyı yayınladığım zaman henüz Devrim Dersi – 2’yi yayınlanmamış olmamdı. Devrim Dersleri – 2 sürecini başlattığımıza göre artık ekleyebilir ve üzerine konuşabiliriz. Yazının linkine tıklayarak şeklin en güncel haline ulaşabilirsiniz.

Sadece Türkiye için değil, tüm dünyada genel bir kanı olarak söylüyorum bunu: akıl ve zekâ sözcükleri birbiri yerine kullanılıyor ve anlaşılıyor olsa da bu kesinlikle doğru değildir.

Zekâ, akıldan farklıdır. Hem ilgili yazıdaki şekilde gördüğünüz hem de ikinci Devrim Dersi serisinin ilk çalışmasında işlediğimiz gibi zekâ aklın dışında farklı bir işleve sahip başka bir parçadır. Akıl mantık kurma işini yapar. Dolayısıyla hayvanlarda da çok basit olmak durumuyla akıl vardır. Onlar da mantık kurabilirler. Zekâ ise alet kullanabilmemizi hatta aletleri birbiri yerine kullanabilmemizi sağlar. Bu ise sadece insanda vardır. Onun için akıl ve zekâ sözcüklerini birbiri yerine kullanılamayacak 2 farklı şeyi ifade etmektedir.

İngilizcede zekâ için “Intelligence” sözcüğü kullanılırken, akıl için “Mind”, “Reason” gibi sözcükler kullanılıyor ama bunlar çok fazla birbiri yerine de kullanılıyor. Mind veya Reason sözcüklerinden birini kullanma konusunda kararsız kaldığım için akıl için İngilizce sözcük kullanmadım. Buradan bir sonuç daha çıkıyor ki, encodeum çatısı altında anlattıklarımızı sadece Türklere değil, tüm dünyaya anlatmamamız gerekiyor sanıyorum.

Şeklimizde eksik olan son parçayı soracak olursanız, o da inşallah Devrim Dersi – 4’te.

0 comments :