Neden GAWK?
Basit cevaplar genellikle lisans seviyesindeki programlama pragmatiği ile ilişkili. Biraz daha detaylı cevap arayanlar programlama paradigmalarına veya YZ dilleri tarihine göz atabilirler. Ve daha derin, felsefi cevaplar ise akıl yürütme ve sembolik YZ ile ilgili. Bence cevaplar, özellikle sonuncu kategorideki cevaplar YZ programlamada GAWK kullanımının etkin olduğunun gözlemlenmesinden çok daha şaşırtıcı.Öncelikle şunu belirtmek istiyorum ki PERL programcıları da yapay zekâ projelerinin altından güzelce kalkıyorlar. GAWK'ın çekiciliği PERL içinde büyük oranda mevcut ve PERL'in popülaritesi GAWK'ın başarısının düşünülmesini biraz perdeliyor. Her ikisi de çok güçlü dizi-işleme dilleri ve UNIX ortamından sonuna dek faydalanması için programcıya gerekli araçları sunuyorlar. Her ikisi de çok çeşitli tipteki veri yapıları programcının kolayca başa çıkabilmesini sağlıyor. Her ikisi de derlenmek yerine yorumlanarak çalıştırıldıkları için geliştirme süresi bir hayli kısalabiliyor. Her ikisini de öğrenmek çok fazla vakit istemiyor. GAWK kılavuzu tek bir laboratuvar seansında okunabilir ve ortalama bir öğrenci bir iki gün içinde bu dilde ustalaşmaya başlayabilir. GAWK'ın otomatik olarak değişken ilklendirmesi, veri tiplerini birbirine dönüştürmesi, G/Ç desteği ve işaretçi (pointer) içermemesi gibi özellikleri pek çokgenç programcının yapabileceği hataları daha baştan engelliyor. C dilini gören ama ustalaşamamış olanlar ise GAWK dilindeki söz diziminin C dilindekini andırmasından memnunluk duyuyorlar. Bazı kişiler PERL'in fonksiyonalitesinin çok daha üstün olduğunu iddia edebilirler ancak hızlıca geliştirilmesi gereken YZ uygulamaları için ekstra fonksiyonalite çok da önemli değildir. Aslında PERL'in garip söz dizimi düzenli ifadeler (regular expressions) ve HTML, WWW adresleri veya kabuk (shell) komutları içeren karakter dizileri çoğalınca biraz daha garipleşir. PERL bir şeyleri yapmanın yeni yöntemlerini sunar ancak bu yeni şeyler yapmanın yöntemlerini sunduğu anlamına gelmez.
Sonuç olarak ufak tefek farklarla birlikte hem PERL hem de GAWK programcı zamanını minimize ederler. Her ikisi de programcının, programın çalışması esnasında ortaya çıkabilecek detaylı çalışma-zamanı hatalarına maruz kalmasını engeller.
Başlıktaki soruya verilebilecek başka basit cevaplar da vardır. Belki de en iyi bilineni lisans seviyesindeki YZ programlamada Internet'in öneminin giderek artıyor olması gerçeğidir. Oren Etzioni (University of Washington, Seattle) "softbot" kavramının makine mühendislerinin robot kavramına tekabül ettiğini ve YZ uygulamaları için en önemli test alanı haline geldiğini iddia etmektedir. Eğer davranışları zekice kontrol edilmesi gereken şey bir yazılım ajanı ise (software agent) bu durumda yazılım ortamını kontrol edecek şey de uygun bir dil olacaktır. Bu bir "scripting dili" demektir. Eğer robot KAREL ise o zaman doğru dil dil şöyle komutları içerecektir "turn left; turn right." Eğer robot Netscape ise o zaman doğru dil elan ile "netscape -remote 'openURL(http://cs.wustl.edu/~loui)'" gibi dizileri üretecektir.
Elbette daha derin cevaplar da mevcuttur. Jon Bentley, GAWK dilinde iki inci bulmuştur: düzenli ifadeler (regular expressions) ve çağrışımlı dizilier (associative arrays). GAWK, veri organizasyonu için dosya sisteminin, hata ayıklama ve diğer alt seviye fonksiyonlar içinse işletim sisteminin kullanılmasını ister programcıdan. Kullanıcı arabirimi diye bir mesele yoktur. Bu da programcıyı programın nasıl göründüğüne değil özüne yani ne yaptığına yöneltir. Mesela binsort diye bir şey programlamak yerine programcı bu işi sistemde standart olarak bulunan /bin/sort yazılımına havale eder ve bunun için vakit harcamaz (not: IBM'de çalışan dostum Ben Grosof'un Palo Alto ile ilgili tavsiyesi aklıma geldi: 101. mi yoksa 280. otoyol mu olduğunu boşver. Kuzeydeki bir giriş için güneye gitmen gerektiği durumunu dert etme. Tek yapman gereken bir an önce otoyola çıkabilmek.)
GAWK ile LISP arasında da bazı benzerlikler vardır ve bunlar aydınlatıcıdır. Her ikisi de güçlü ve tek tip bir veri yapısı sunar (GAWK örneğinde harman (hash) tablosu kullanılarak geliştirilmiş çağrışımlı diziler ve LISP örneğinde S-ifadesi veya listeleri içeren listeler). Her ikisi de kendi ortamlarında ciddi desteğe sahiptir (GAWK UNIX'in çocuğudur ve LISP de lisp makinalarının merkezinde yer alır). Her ikisinin de söz dizimi (syntax) basittir ve her ikisi de gücünü, basit parçaları bir araya getirerek karmaşık yapıları kurmaya çalışan programcının iradesinden alır.
Bütün bunlardan daha derinde yer alan şey ise YZ programlamanın doğasıdır. YZ işlevsellik ve keşfedici programlama mantalitesi üzerine kuruludur. Mesele aşağıdan yukarı (bottom-up) doğru tasarım yapmak ve daha karmaşık davranışları modellemektir. "Bu alt rutin cümleyi parçalarına ayırır" gibi düşük seviye eklemelerini gerçekleştiremeyeceğini gören ve yukarıdan-aşağı (top down) çalışan YZ programcısının işi zordur! Problemin yüksek seviyeli modeli yeniden düşünülüp elden geçirildiğinde, geliştirmiş olduğu veri yapısını heapsort için mükemelleştirmiş olan ama bunu çöpe atmak zorunda kalan programcının işi zordur.
YZ programlama yüksek seviyeli düşünmeyi gerektirir. Tabii ki yüksek seviyede düşünüp assembly dilinde yazabilen çok yetenekli programcılar her zaman olmuştur. Yine de çoğu kişi yüksek seviyede düşünebilmek için yüksek seviyeli ve soyut kavramlara ihtiyaç duyar.
Şimdi gelelim şaşırtıcı felsefi cevaplara. Öncelikle YZ disiplini kaba-kuvvet ile oluşturulan kombinasyon yöntemlerinin zeki davranışa yol açmakla birlikte genelde çözüme yol açmadığını gördü. Satranç, yapay sinir ağları ve genetik programlama kaba hesaplamanın limitlerini gösterir. Bunun alternatifi akıllıca program organizasyonudur (not: bazıları önceki YZ yaklaşımlarının çalıştığını ama kolayca göz ardı edildiğini söyleyebilirler: Bunlar genelde işe yarayan yaklaşımlardır ancak özelde değil çünkü akıllıca düzenleme dediğimiz şey zaten bir problem alanından diğerine değişen bir şeydir). Yani YZ programcılar programlarının içeriğini genişletmeye çalışırlar, yaklaşımlarını optimize etmeye değil. İstedikleri akıldır, bir yığın zeki gibi görünen böcek değil. Büyük arama uzaylarını tek tek saymak yerine arama yapabilecekleri alanı akıllıca daraltmaya çalışırlar, eldeki göreve uygun bilgi alanlarını kullanmak isterler. Sonuç olarak programcının erişmeye çalıştığı hedeflerde binbir spesifik kontrol sağlayan değil bu hedeflere ulaşmada programcının işini kolaylaştıran bir dildir YZ dili olarak aranan.
Yukarıdaki gerekçelere ek olarak: Mantıksal çıkarım dediğimiz şeynotasyonun açık olarak yazılmasından öte bir şey değildir. Elimizdeki YZ programının merkezindeki mantığın bulanık, probabilistik, deontik veya dedüktif olması mesele değildir. Mantık dediğimiz şey bir karakter dizisinden diğerine nasıl geçiş yapacağımızı tanıyan kurallardan ibarettir. Karakter dizileri ile işlem yaparken bize en geniş ve sağlam desteği sunan dil sonuç olarak mantık için de, değişik mantık dizgelerinin keşfedilmesi için de en iyi desteği sunar ve zaten pek çok durumda "çıkarım yapma" dediğimiz şey nihai olarak "mantık"tır. Bu da şunu getirir: YZ programcısını bir birleştirici yazmaktan kurtaran PROLOG (belki bir GAWK programcısının bunun için 20-25 satır kod yazması gerekir) bunu başka herhangi bir yaklaşımın mantığının ve sembolik temsilinin göz ardı edilmesi pahasına gerçekleştirir.
Bahsi geçen bu son iki noktanın sadece programlama camiası için değil aynı zamanda son 10 yılın deneyimlerinden pek de ders çıkarmayan YZ camiası için de haber değeri taşıdığını düşünüyorum.
Aho, Weinberger ve Kernighan tarafından en fazla bir grep veya bir sed kadar önemli olduğu düşünülen GAWK dilinde, ben, YZ eğilimleri, YZ tarihi ve YZ temelleri üstüne bazı dersler çıkarıyorum. Şaşırtıcı olmakla kalmayıp aynı zamanda ümit verici bulduğum bir başka nokta da şu ki benzer konuşmaları halen programlamaktan zevk alan YZ uzmanları ile yaptığımda dediklerimi hiç de şaşırtıcı bulmamakta ve doğal karşılamaktalar.
(c) 1996, Ronald P. Loui
R. Loui (loui@ai.wustl.edu), St. Louis'deki Washington Üniversitesi, Bilgisayar Bilimleri bölümünde profesör olarak çalışmaktadır. Katkıda bulunduğu yayınlar arasında: AI Journal, Computational Intelligence, ACM SIGART, AI Magazine, AI and Law, ACM Computing Surveys Symposium on AI, Cognitive Science, Minds and Machines, Journal of Philosophy gibi dergiler vardır.
===================================================================
Orjinalinden (izin alarak ;) tercüme eden: FZ
FZ'nin notu: FZ Gnu ile gönül bağı olmakla birlikte gene de Debian GNU/Linux ile standart olarak gelen mawk isimli awk uygulamasını tavsiye ediyor herkese.
Not: CYGWIN'de çalışmaz, bu CYGWIN'in problemi!