Yapay Zeka ve GAWK

0
FZ

Neden Yapay Zekâ için GAWK?

YZ programlama sınıfında kullandığımız programlama dilinin GAWK olduğunu duyan insanların çoğu epey şaşırıyor. Bunu anlayabiliyorum. Evet, GAWK kullanıyoruz. GAWK, Aho, Weinberger ve Kerninghan tarafından geliştirilmiş ve pek çok kişi tarafından programlama dili olarak bile kabul edilmeyen şu eski kalıp tanıma dilinin Gnu versiyonudur. PERL veya TCL örneklerinde olduğu gibi pek çok kişi bu dili "scripting dili" olarak ele alır. İçinde nesneler yoktur, fonksiyonel değildir, gömülü olarak mantık programlama öğelerini barındırmaz. İnsanların şaşkınlığı şunları duyunca tam bir kafa karışıklığına dönüşüyor: (a) her ne kadar öğrenciler projelerinde istedikleri dili kullanma hakkına sahip olsalar da; (b) sadece tek bir istisna hariç, en iyi sonuca ulaşan öğrenciler GAWK ile proje geliştirenler (not: söz konusu istisnanın sahibi PASCAL kullanmış olan bir programcı, kendisi şu anda NSF bursu ile Harvard'da matematik doktorası yapıyor.) C, C++ ve LISP programcıları GAWK ile çalışanların performanslarına yaklaşamadılar (PROLOG ve JAVA kullanarak proje yapan bir öğrencimiz çıkmadı henüz).

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.

Görüşler

0
FZ
Yapay zekâ ile alakası yok ama: awk gibi basit (!) bir scripting dili ile nasıl TETRIS yazılır merak edenler http://igor2.mcomp.hu/gpl/tetris.sh/ sayfasına baksınlar, hatta üşenmeyip kendi sistemlerine çeksinler ve çalıştırsınlar. Ben Debian GNU/Linux 3.0 ortamında denedim ve gözlerim yaşardı ;-)

Not: CYGWIN'de çalışmaz, bu CYGWIN'in problemi!
0
FZ
Yukarıdaki adresten beni haberdar eden sundance arkadaşıma da saygılarımı sunarım ;-)
0
FZ
Hem yukarıdaki yazı bağlamında hem de genel olarak FZ cümle aleme AWK (gawk, mawk, nawk artık elinizde hangi versiyonu var ise) programlama diline şöyle bir ciddi ciddi göz atmasını tavsiye ediyor. Hayır ben dinozor değilim :) Hayır, Perl'in yerini tutar da demiyorum. Evet, çok pratik ve ciddi ciddi iş yapabileceğiniz bir dil olduğunu iddia ediyorum (el atacağınız her tür UNIX ortamında da bulunması cabası). Hazır programlama dili anketi yapıyor iken bunları da belirteyim dedim.
Görüş belirtmek için giriş yapın...

İlgili Yazılar

ClusterKnoppix İle Kendi Süperbilgisayar Kümenizi Kolayca Kurun

FZ

Büyük bir okul ya da şirket ağınız var, ya da bir yerden ucuza düşük model bir sürü ikinci el bilgisayar buldunuz (40$'a Pentium 166 MMX, 32 MB ana hafıza falan) ve bunların atıl kalmasına gönlünüz el vermiyor. Sağda solda "clustering" diye de tabir edilen kümeleme diye bir kavram duyuyorsunuz ancak bir sürü bilgisayarı paralel olarak belli bir problem üzerinde çalıştırmanın uzmanlık derecesinde bilgi gerektirdiğini düşünüyorsunuz... ve... yanılıyorsunuz! Her derde deva ClusterKnoppix ile çok güçlü paralel bilgi işlem merkezi kurmanız işten bile değil ;-)

Hala tereddüt edenlerin iştahını kabartmak için şu ekran görüntülerine bakmalarını tavsiye ederim: 12 adet bilgisayarın merkezi kontrolü, openMosixview, 12 meşgul bilgisayarın gözetlenmesi, openMosixmigmon.

Editörün Notu: Bildiğim kadarı ile İzmir´li üyemiz decaf (aka realist) bu konu ile ilgileniyordu, kendisinden en kısa sürede konu ile ilgili lezzetli bir makale beklediğimizi belirtmeme gerek yok sanırım ;-)

http://www.temizyazilim.org/

ieski

İnternet katlanarak artan büyüme hızıyla ve sağladığı özgürlükle büyük bir bilgi çöplüğüne dönüşüyor.

Bilinçsiz internet kullanıcıları ve art niyetli kullanıcıların yarattığı anarşi internet aracılığıyla coğrafyadan bağımsız olarak hepimizin hayatını olumsuz yönde etkiliyor.

Sun ve Microsoft Web Servisleri İçin Kapışırken Borland Yapacağını Yaptı

FZ

Sun Microsystems ve Microsoft firmaları en hızlı, en güzel web servisi geliştirme araçlarını ben sunarım şeklinde kapışadursunlar, efsanevi Borland firması gene yapacağını yaptı ve web servisi geliştirmek için araçlar içeren Delphi 6 adlı ürününü piyasaya sürdü.

Python 2.4

tongucyumruk

18 aylık uzun bir bekleyişin ardından Python 2.4 çıktı. Yenilikler arasında özellikle dekoratörler, geliştirilmiş üreteç desteği ve long veri itipi ile integer veri tipinin birleştirilmesi göze çarpıyor. Özellikle MS Windows kullanıcılarını ilgilendiren bir diğer yenilik ise bu sürümden başlayarak Python'un MS Windows platformunda msi paketleri kullanılarak dağıtılacak olması. Yeni sürümdeki yeniliklerin bir özetini buradan okuyabilir, daha detaylı bilgiyi ise A. M. Kuchling'in dökümanından okuyabilirsiniz. Yeni sürümü indirmek içinse buraya

HTML kodunun içine C++ yazabilir misiniz?

FZ

COMDEX etkinliğinde dikkate değer bir çıkış yapan ve "Best of COMDEX Awards Internet Software Finalist" ünvanını kazanan Rivar Technologies "CODE: NEO" adlı ürünü ile dinamik web sayfası geliştirme kavramına yeni ve radikal bir boyut getirmeye hazırlanıyor.