Refik ARKUT

Yansımalar

Pascal’dan Python’a

Bilgisayarla (o zamanlar, elektronik beyin deniliyordu) ilk tanışmam, 1968 yılında İTÜ’de aldığım bir Fortran kursu sonucu olmuştu. Yüksek seviyeli bir programlama dili olan Fortran’la yazılan programınızı denemek için, cam duvarlı büyük bir odada bulunan devasa (korkutucu) bilgisayara yaklaşmak için o zaman çok beklemek ve cesaret istiyordu. Bilgisayar, erişilmesi çok güç ve gizemli bir nesne gibi korunuyor ve saklanıyordu. Daha sonra mesleğim telekomünikasyon alanına da bilgisayarın gireceği belli olunca, bu konuda ‘yüksek lisans’ yapıp bu işi öğrenmeye karar verdim (1982). Mühendislik mesleğinde tutunmanın ve güncel kalmanın, teknolojik gelişmenin acımasızlığı karşısında, devamlı öğrenmekten başka çare olmadığına inanıyordum. (Yıllar sonra bugün, başka bir seçenek, mühendislikten kaçış yolu daha olduğunu – MBA – kabul ediyorum). Mikroişlemciler, çevirici (assembly) lisanları derken, Niklaus Wirth’in yapısal programlama için geliştirmiş olduğu Pascal yüksek seviyeli programlama lisanını öğrendim. Güçlü şekilde tiplenmiş olan Pascal, yazılımcıya, elmalarla armutları toplama gibi, hata yapma olanaklarını önlüyordu. Uzun yıllar Pascal, bilgisayar programlamayı ve ‘iyi’ program yazmayı öğreten bir yüksek seviyeli lisan olarak akademik çevrelerde kullanıldı. Aslında, herhangi bir yüksek seviyeli lisanı öğrenmek o kadar zor bir iş değildir. Şayet lisanın söz dizim (syntax) kurallarını biliyorsanız, o lisanı biliyor kabul edilebilirsiniz. Ancak, İngilizce dilbilgisini bilmenizin bir ‘Shakepeare’ eseri yaratmanız için yeterli olmaması gibi, herhangi bir yüksek seviyeli lisana ilişkin söz dizin kurallarını bilmeniz, iyi bir ‘bilgisayar programı’ yaratmanız olanağını vermez. Çokça karıştırılan ve çok önemli olan, matematikteki ‘gerek koşul – yeter koşul’ meselesi! Bu yüzden, bilgisayar programlama eğitiminin en önemli kısmını algoritmalar ve veri yapıları oluşturur. Hatta, Niklaus Wirth’in önemli kitabının (1975) adı: ‘Algorithms + Data Structures = Programs’’dır.

Moore kanunu verimsizliği teşvik ediyor
1980’li yıllarda, bir oyun programı yazma işiniz olduğunu düşünelim. İşin sonunda oyun programınızın konumlanacağı donanım 64KB’lık tüm yongalar. Şayet geliştirdiğiniz oyun programın 64KB + 1Bayt belleğe gereksinimi varsa – hapı yuttunuz – ister istemez iki adet 64KB’lık bellek kullanacaksınız! Rakibiniz benzer programı 64KB’lık belleğe yerleştirecek tarzda geliştirmiş veya ‘eniyilemiş’ ise, sizin pazardaki işiniz bitmiş demektir. İşte bu yüzden, eniyileme yapan derleyiciler için yüksek seviyeli bir lisanla yazılmış programlar, veya çevirici lisanı, hatta ‘makina dili’ kullanma zorunluğu ortaya çıkar. Çok zahmetli bir iş, ancak yapacak birşey yok. Hayat memat meselesi! N. Wirth’in güzel özdeyişleri var. Bunlardan iki tanesi şöyle. ‘Yazılım hızı, donanımın hızının artış hızından daha hızlı artar’ ve ‘Şayet bir bitlik boş bellek varsa, yazılım onun mutlaka doldurur’. Öte yandan, bilinen Moore kanunu bize iki yılda bir donanım maliyeti yarıya, kapasitesi ikiye çıkar diyor. Böyle olunca, yazılımcılar; kullanılan lisanlar, yöntemler, algoritmalar fazla eniyileme olmasa da olur diyorlar. Bilgisayar kullananlar bilir, her bir iki yılda bir işlemci hızı artar bellek kapasitesi artar (fiyat azalmaz, belki sabit kalır), yine de yeni bilgisayarlar satın alırız. Kullandıklarımız yeterli olmaz. Bu ‘Moore kanunu’ dedikleri bir pazarlama taktiği olmasın?

Bir lisan bir adam, iki lisan iki adam (mı?)
Her ne kadar mesleğim telekomünikasyon olmuşsa da, uzun zamandır ‘yarı zamanlı’ öğretim görevlisi olarak gençlere verdiğim dersler arasında, bilgisayar programlama, algoritmalar ve veri yapıları da olmuştur. Öğrencilerin, dersler başlar başlamaz sordukları ilk soru ‘hocam ne zaman bilgisayarda program yazacağız?’ olmuştur. Onlara, önce bilgisayar başına oturmadan yazdığınız programın doğru olduğundan emin olmanız gerekir’ yoksa bilgisayar ‘söz dizim hatalarınızı düzelten bir araç değildir, hatta söz dizin hatalarınız olmasa da, programınız doğru olmayabilir’ diye cevap versem de, onlar bir an önce bilgisayar başına oturmaya acele etmişlerdir. Diğer bir öğrenci yorumu, ‘hocam Pascal eski bir lisan şimdi kullanılmıyor!’ olmuştur. Bu yorum doğru olabilir ,fakat haklı değildir. İyi bir programlama dersinin amacı öğrenciye herhangi bir lisanı nasıl öğreneceklerini ve nasıl doğru olarak kullanacaklarını öğretmektir. Bilindiği gibi iki tür bilgisayar lisanı vardır. Biri derleyici kullanan tip, diğeri yorumlanan tip. Derlenen tip, size daha hızlı çalışacak bir hedef kodu üretir ve program geliştirirken daha az hata yapmanıza izin verir. Yorumlayıcı tipi ise, yavaş çalışır ve dikkat etmezseniz çok kolaylıkla hata yapabilirsiniz. Ancak kullanılması göreceli olarak kolaydır. Üstelik bilgisayarda hızlı işlemciler varsa, bunlar sorun gibi gözükmez. İşte, eğitim için ‘eski’ Pascal yerine seçilen yeni bilgisayar programlama dilinin adı yorumlayıcı tipinden ‘Python’. Ben de Python öğrenmeye karar verdim. İnternet’de o kadar çok kaynak var ki – kendinizi ciğerci dükkanına düşmüş bir kedi gibi hissedebilirsiniz - , bir iki hafta içinde Python’nun ne olduğunu öğrendim diyebilirim. MIT’nin (ocw.mit.edu) açık dersler sitesinden, ‘introduction to computer science and programming’ video derslerini de takip ettim. Python basitmiş. Aslında değişen birşey yok. Sadece, yeni bilgisayar yazılım ortamına / teknolojilerine uyumlaşma var. Eskiden bir söz vardı:’bir lisan bir adam, iki lisan iki adam’. Doğru mu bilmiyorum, ancak doğruysa, ‘ben şimdi iki buçuk adam oldum!’. Bana şans dileyin, bu yıl dersi Python’la anlatacağım!

Mesele lisan bilmek değil!
Tabi ki, lisan bilmek o lisana vakıf olmak, ister bilgisayar lisanı ister doğal lisan olsun önemlidir. Fakat yeterli değildir. Önemli olan, bilgi, yaratıcılık, yenilikçilik ve cesaret sahibi olmaktır. Bunlar ve söyleyecek sözünüz yoksa, lisan bilseniz ne olur bilmeseniz ne olur? 1968’de Fortran, 2011’de Python. Umarım, öğrencilerimin de, 40 yıl sonra başka bir bilgisayar lisanı öğrenecek cesaretleri olur.