Sıradışılıkla Kazanmak *
Nisan 2001, rev. Nisan 2003
(Bu makale, 2001 Franz Geliştirici Sempozyumu'ndaki bir sunumdan
derlenmiştir. Hala Yahoo! Store olarak kullanımda olan ve şu sıralar
20,000 mağaza ile en popüler elektronik ticaret yazılımı olan Viaweb
Store'u, Lisp kullanarak nasıl yazdığımızı anlamaktadır.) [1]
1995 yazında, arkadaşım Robert Morris ile Viaweb isimli bir şirket
kurduk. Amacımız, son kullanıcının Internet üzerinden elektronik
mağazalar kurmasını sağlayacak bir yazılım geliştirmekti. Bu yazılımı
diğerlerinden farklı kılan ise arayüz olarak
web sayfalarını kullanarak kendi web sunucularımızda çalışmasıydı.
Bunu ilk düşünen biz değildik belki de ama ilk hayata geçiren biz
olduk. Bildiğim kadarıyla Viaweb, web tabanlı ilk uygulamaydı. Bu
fikir bize o kadar değişik gelmişti ki şirketin adını Viaweb koymaya
karar verdik çünkü yazılımımız "web yoluyla" (via web, ÇN:Latince "via": yolu ile,
aracılığıyla) çalışıyordu.
Bu uygulama hakkında alışılmamış olan diğer bir şey ise o zamana kadar
üniversiteler ve araştırma laboratuarları dışında pek kullanılmayan
Lisp isimli bir programlama diliyle yazılmış olmasıydı. Viaweb, Lisp
ile yazılmış, son kullanıcıya yönelik ilk büyük çaplı uygulamalardan
biriydi. Rakiplerimizin kullandıkları programlama dillerinden çok daha
etkili olduğu için Lisp bize büyük avantajlar getirdi.
Gizli Silah
Eric Raymond "Nasıl Hacker Olunur" isimli yazısında, hacker adaylarına
diğer konuların yanında hangi dilleri öğrenmeleri gerektiğini de
anlatır. Öğrenme kolaylığı bakımından Python ve Java'yı
önerir. Ciddi bir hacker ise, UNIX üzerinde çalışabilmek için C, sistem
yönetimi ve CGI komut dosyaları için Perl bilmeli diye devam
eder. Son olarak da gerçek bir "hacker"ın Lisp öğrenmesi gerekliliğini
şöyle açıklar:
Lisp, sırf size katacağı şeyler ve açacağı geniş ufuklar için bile
öğrenmeye değerdir. İleride hiç kullanmayacak olsanız bile size
kazandırdığı deneyimler sayesinde hayatınızın geri kalan kısmında daha
iyi bir programcı olmanızı sağlayacaktır.
Bunlar, Latince konusunda duyacaklarınızın aynısıdır. Latince
öğrenmek size bir iş imkanı sağlamayacaktır ama zekanızı
geliştirecek ve sizi istediğiniz herhangi bir dilde iyi bir yazar
yapacaktır.
Ancak bu, bir noktadan sonra çok da iyi bir benzetme değil. Latince
öğrenmenin sizi bir meslek sahibi yapmayacak olmasının sebebi kimsenin
Latince konuşmamasıdır. Latince konuşursanız kimse sizi anlamaz. Bu durumdan
farklı olarak Lisp bir bilgisayar dilidir ve bilgisayarlar programcıların
istediği her dili konuşabilir.
Öyleyse, Eric Raymond'ın da dediği gibi, Lisp sizin daha iyi bir
programcı olmanızı sağlayacaksa neden onu kullanmayasınız ki? Bence
mesela bir ressama onu daha iyi bir ressam yapacak bir fırça
teklif edilse, bütün resimlerinde o fırçayı kullanmak istemez miydi?
Eric Raymond'la dalga geçiyor falan değilim. Tavsiyelerini genel olarak
iyi buluyorum. Lisp hakkında söyledikleri ise alışılagelmiş sözler fakat
bu kalıplaşmış sözlerde bir çelişki var: Lisp sizin daha iyi bir
programcı olmanızı sağlayacak ve buna rağmen siz bu dili
kullanmayacaksınız!
Neden olmasın? Programlama dilleri sadece bir araç sonuçta. Lisp
gerçekten daha iyi programlar yazmanıza imkan tanıyorsa, bunu neden
değerlendirmeyesiniz? Ve eğer böyle değilse Lisp'i kim ne yapsın?
Bu sadece teorik bir soru değil. Yazılım dünyası şiddetli rekabetin
olduğu ve tabii tekellesmeye yatkın bir sektördür. Daha iyi ve daha
hızlı bir yazılıma sahip olan şirket, diğer tüm koşullar eşit olsa bile,
rakiplerini işsiz bırakır. Yolun başındayken bunu şiddetle
hissedersiniz, yanlış bir teknoloji seçerseniz rakipleriniz sizi ezer,
yok eder.
Viaweb'e başlarken, ikimiz de Lisp konusunda tecrübeliydik ve
içgüdülerimize güvenip Lisp ile yola çıkmamak için bir neden
göremiyorduk. Diğer herkesin C++ veya Perl kullandığını biliyorduk ve
bunun hiçbir şey ifade etmediğini de -- teknolojiyi böyle seçiyorsanız,
Windows kullanıyor olurdunuz. Kullanacağınız teknolojiyi belirlerken,
herkesin ne yaptığına bakmayıp, hangisinin en iyi olduğunu
ölçüt almalısınız.
En azından yolun başındaki şirketler böyle yapmak zorundadır. Büyük
bir şirket kendi ayarındaki diğer şirketler gibi hareket edebilir
fakat sektörde yeni şirketlerin böyle bir lüksü yoktur. Ne yazık ki
bir çok kişi bunun farkına varamıyor.
Büyük bir şirket normalde yılda ortalama %10 civarında bir büyüme
gösterir. Yani büyük bir şirket yönetiyorsanız ve her şeyi standart
yapıyorsanız ancak denginiz olan şirketler kadar iyi bir performans
göstermeyi bekleyebilirsiniz, bu da yılda %10 civarında bir büyümedir.
Aynı şey, yeni kurulan şirketler için de geçerlidir. Eğer her şeyi
ortalama bir düzeyde yapıyorsanız, ortalama bir başarıdan fazlasını
bekleyemezsiniz. Sorun şu ki ortalama bir başarının üzerine çıkamamak,
sektöre yeni adım atan şirketler için batmak anlamına gelir. Bu
şirketlerde ayakta kalma oranı %50'dir. Yani siz de onlardan
biriyseniz, alışılmışın dışında hareket etseniz iyi olur. Aksi
takdirde başınız belada demektir.
1995'te rakiplerimizin bilmediği bir şey biliyorduk. Kendinize ait
sunucularda çalışacak bir yazılımı geliştirmek,için istediğiniz dili
kullanmakta özgürsünüzdür. Bugün bile, birçok kişi bunu anlayabilmiş
değil. Masaüstü yazılımlarda, işletim sistemiyle aynı dili kullanmak
gerektiğine dair genel bir önyargı var. Tamam, on yıl önce uygulama
geliştirmek demek C dili demekti, ama web tabanlı yazılımlarla birlikte
bu anlayış ortadan kalktı. Özellikle de hem dilin hem de işletim
sisteminin kaynak kodları elinizdeyse, istediğiniz dili kullanmamanız
için hiç bir engel yok ortada.
Ancak bu yeni özgürlüğün avantajlarını olduğu gibi dezavantajlarını
da göz önünde bulundurmak gerekiyor. İstediğiniz dili kullanabilme
özgürlüğü beraberinde, karar vermeden önce iyice düşünme gerekliliğini
getiriyor. Bu değişime ayak uydurmak için herhangi bir girişimde
bulunmayan şirketler rakiplerinin değişime duyarlı olmaları durumunun
getireceği riski göze almış olur.
Peki seçme hakkınız olsaydı, siz hangi dili seçerdiniz? Biz kendi
adımıza Lisp'i tercih ettik, zira bu sektörde hızlı büyümenin ne kadar
önemli olduğu açık ve net bir biçimde ortada. Her birimiz sıfırdan
başlıyorduk. Yani yeni özellikleri rakiplerinden daha önce uygulamaya
koyabilenler büyük avantaj sağlayacaktı. Hızla yazılım geliştirmek
için Lisp'in ideal olduğunu biliyorduk. Sunucu tabanlı uygulamalarla
da bu avantajımızı ikiye katlayacaktık, çünkü bu uygulamalar sayesinde
yazılımı hazır olduğu an yayınlayabilecektik.
Diğer şirketlerin Lisp kullanmak istememesi bizim için çok daha
iyiydi. Bu bize teknolojik bir üstünlük sağlıyordu ve en ufak bir rekabet
avantajı bile bizim için önemliydi. Viaweb'e başladığımızda hiç bir iş
tecrübemiz yoktu. Ne eleman almak hakkında bir şey biliyorduk, ne
pazarlama, ne müşteri edinme, ne de para kazanma -- hatta hiçbirimiz
o zamana kadar adamakıllı bir işte çalışmamıştı. Tek iyi olduğumuz konu
yazılımdı ve bunun da bizi kurtarmasını umuyorduk. Yazılımda elde
edebileceğimiz bütün avantajlardan yararlanmalıydık.
Yani Lisp'i kullanmak bir denemeydi diyebiliriz. Planımız şöyleydi:
Lisp kullanarak rakiplerimizden çok daha çevik olacak ve yazılımımızda
onların yapamayacakları şeyleri yapacaktık. Lisp çok üst düzey bir dil
olduğundan, büyük bir geliştirme takımına ihtiyaç
duymayacaktık. Böylece maliyetimiz daha düşük olacaktı. Bu koşullarda
daha az paraya daha kaliteli bir hizmet verebilecek ve buna rağmen kâr
edecektik. Sonunda da bütün müşterileri toplayıp, rakiplerimizi işsiz
bırakacaktık. En azından böyle olmasını umuyorduk.
Bu denemenin nasıl sonuçlandığını soracak olursanız, biraz da
şaşırtıcı bir şekilde planımız işe yaramıştı. Bir çok rakibimiz oldu
ama hiçbirinin yazılım bizimkiyle yarışamadı. WYSIWYG ("What You See Is
What You Get") modunda çalışan bir çevrimiçi mağaza editörümüz vardı.
Sunucuda çalışmasına rağmen bir masaüstü uygulaması hissi
uyandırıyordu. Rakiplerimizin çoğu CGI komut dosyaları kullanıyordu ve her
zaman özelliklerimizle onlardan açık ara öndeydik. Bazen bizde olmayan
yeni özellikler yayınlıyorlardı. Ama Lisp sayesinde yazılım geliştirme
döngümüz o kadar hızlıydı ki onlar yayınladıkları yeni bir özelliğin basın
açıklamasını yaptıktan bir iki gün sonra aynı özelliği biz de eklemiş
oluyorduk.
Rakiplerimize, gizli bir silahımız olduğu izlenimini vermiş
olmalıyız. Aslında vardı, fakat sandıklarından çok daha basit bir
şeydi. Bilgi sızdıran bir ajanımız falan yoktu sadece kimsenin ihtimal
vermediği bir hızla yazılım geliştirebiliyorduk.
On yaşlarındayken Frederick Forsyth'ın "The Day of the Jackal" (BM bunu
Turkcesi vardir) isimli kitabı elime geçmişti. Ana karakter, Fransa
cumhurbaşkanını öldürmekle görevlendirilen bir suikastçıydı. Polisi
atlatıp cumhurbaskaninin rotası üzerindeki bir binaya girmesi gerekiyordu.
Koltuk değnekli yaşlı bir adam kılığına girip polislerin yanlarından
geçmişti ve bir kişi bile ondan şüphelenmemişti.
Bizim gizli silahımız da buna benzerdi. Yazılımımızı, parantezlerle
dolu, garip sözdizimi olan tuhaf bir yapay zekâ dilinde
geliştiriyorduk. Lisp hakkında söylenen bu tür şeyler yıllarca beni
çok rahatsız etmişti ama şimdi işimize yarıyordu. İş alanında,
rakiplerinizin anlayamadığı teknik bir üstünlükten daha iyi bir şey
olamaz. Savaşta olduğu gibi ticarette de akıllıca sürprizler kaba güç
kadar hatta bazen daha da değerlidir.
Biraz da utanarak itiraf ediyorum ki Viaweb'de çalışırken Lisp
hakkında alenen hiç konuşmadım. Basının önünde Lisp'in adını hiç
anmadık. Sitemizde Lisp'i arattırsaydınız tek bulacağınız
biyografimdeki iki kitabın isimleriydi. Bu bir tesadüf değildi. Yeni
kurulan bir şirket mümkün olduğunca az deşifre olmalıdır. Uygulamamızı
hangi dilde yazdığımızı bilmiyor veya umursamıyorlarsa, böyle kalması
daha iyiydi.[2]
Teknolojimizden en iyi anlayan müşterilerimizdi. Viaweb'in hangi dilde
yazıldığı umurlarında değildi ama gerçekten iyi çalıştığının
farkındaydılar. Kelimenin tam anlamıyla birkaç dakika içinde çevrimiçi
mağazalar kurmalarına imkan tanıyordu ve bu sayede kullanıcılarımız
hızla artıyordu. 1996 yılının sonlarına doğru 70 çevrimiçi mağazamız
olmuştu, 1997'nin sonunda 500 ve bundan altı ay sonra Yahoo bünyesine
katıldığımızda ise 1070 kullanıcıya ulaşmıştık. Bugün aynı yazılım Yahoo
Store olarak sektördeki egemenliğini sürdürüyor. 1999 yılında Yahoo'dan
ayrıldığım için şu an tam olarak bilmiyorum ama son duyduğumda 20,000
civarlarında kullanıcıları vardı.
Blub Paradoksu
Peki Lisp'i bu kadar iyi yapan ne? Ve eğer bu kadar mükemmelse neden
kimse Lisp kullanmıyor? Bunlar cevap beklenmeyerek sırf bir etki
yaratması için sorulmuş sorular değil, tam tersine çok açık ve net
cevapları var. Lisp sadece tutkunlarının bildiği, gizemli özellikleri
yüzünden değil, mevcut en etkili dil olduğu için bu kadar iyi. Lisp
kullananların sayısının fazla olmamasının nedeni ise programlama
dillerinin sadece teknolojiler değil, bir o kadar da zihin
alışkanlıkları olması. Kabul edersiniz ki alışkanlıktan daha yavaş
değişen bir başka şey de yoktur. Elbette bu iki cevap da açıklama
gerektiriyor.
Şaşırtıcı bir biçimde herkesin hemfikir olmadığı, hala tartışmalara
yol açan bir ifadeyle başlayacağım: Programlama dilleri güçlerine göre
sınıflandırılır.
Bir çok kişi, en azından, üst düzey dillerin makine dilinden daha
güçlü olduğunu kabul ediyor. Bugün çoğu programcı normal şartlarda
kimsenin makine diliyle programlama yapmak istemeyeceği konusunda
hemfikir. Bunun yerine üst düzey bir dilde programlama yapıp, onu
sizin için makine diline çevirecek bir derleyici
kullanmalısınız. Şimdi donanımda bile bu mantık gözetiliyor,
1980lerden beri komut kümeleri bile programcılardan ziyade
derleyiciler için dizayn ediliyor.
Herkes bütün programı makine dili kullanarak yazmanın ne kadar yanlış
olduğunu bilir. Daha genel fakat daha az bilinen bir prensip ise
şudur: Eğer önünüzde birkaç dil seçeneği varsa, diğer tüm özellikleri
eşit diller arasında en güçlü olanını seçmemek büyük bir hatadır.[3]
Bu kurala dair bir çok istisna vardır. Belli bir dille yazılmış bir
programla çok yakın çalışacak bir diğer program yazıyorsanız,
yazacağınız programı da aynı dille yazmak iyi bir fikir olabilir. Eğer
basit işlemler yapacak bir program yazıyorsanız, özelikle daha hızlı
çalışacağı için daha soyut bir dil kullanabilirsiniz. Kısa ve daha
sonra kullanmayacağınız bir program yazıyorsanız da, yapacağınız işe
en uygun kütüphanelere sahip dilde yazmanız en iyisi olur. Fakat
uygulama yazılımları için genelde mevcut olan en güçlü ve etkili dili
kullanmak varken başka bir dil kullanmak, aynı seviyede olmasa
da, makine diliyle programlama yapmakla aynı çeşit bir hata olacaktır.
Makine dilinin ne kadar düşük seviyeli bir dil olduğu ortada fakat
herkes en azından genel bir kanı olarak bütün üst düzey dillerin eşit
olduğunu düşünüyor, ama değiller. Teknik olarak "üst düzey dil" terimi
çok belirleyici bir ifade değil. Makine dillerinin bir yanda yüksek
seviyeli dillerin diğer tarafta olduğu belirli bir ayrım yok. Diller
kendi içlerinde en güçlü olanından başlayarak makine diline kadar
uzanan, soyut bir güç sıralamasına konulurlar.[4]
COBOL'u ele alalım, makine diline derlenmesi bakımından yüksek
seviyeli bir dildir. Ama hiç kimse COBOL'un Python gibi bir dil ile
kıyaslandığında eşit güçte olduğunu iddia edemez. Muhtemelen
COBOL güç sıralamasında makine diline Python'dan çok daha
yakındır.
Veya Perl 4'ü ele alalım. Perl 5 ile aralarındaki fark, sözcüksel
kuşatma ("lexical closure") özellğinin eklenmiş olmasıdır. Çoğu Perl
programcısı Perl 5'in Perl 4'ten çok daha güçlü olduğu konusunda fikir
birliğindedir. Ama bunu kabul etmek üst düzey bir dilin bir diğerinden
daha güçlü olabileceğini kabul etmektir ve bu da bütün üst düzey dillerin eşit
olmamasının yanısıra yazılımlarınız için mevcut en güçlü dili
kullanmalısınız tezine de örnek teşkil eder.
Ne yazık ki bunu hayata geçirmek o kadar da kolay
değildir. Programcılar belli bir yaştan ve belli bir tecrübe
edindikten sonra mecbur kalmadıkça alıştıkları dilden başka bir dil
kullanmak istemezler. İnsan bir kere hangi dile alışırsa o dilin
yeterince iyi olduğunu düşünmeye yatkınlaşır.
Programcılar favori dillerine büyük bir sadakatle
bağlıdırlar. Kimsenin duygularını incitmek istemiyorum. Bu yüzden bu
bölümü anlatırken Blub isimli hayali bir programlama dili
kullanacağım. Blub, dillerin güç sıralamasında
ortalarda bir yerlere denk düşüyor. En güçlü dil olamasa da COBOL ya
da makine dilinden daha güçlü bir dil.
Ve doğrusunu isterseniz bizim hayali Blub programcımız onların
hiçbirini kullanmaz. Elbette makine dilinde de programlama
yapmıyor. Bu derleyicilerin işi. COBOL'a gelince, X özelliği (Blub'un
özelliklerinden biri) olmadan istediklerinizi nasıl yapabilirsiniz ki?
Blub programcımız dilleri koyduğumuz güçlülük sıralamasında aşağılara
baktığında aşağıya baktığının farkında. Blub'dan daha az güçlü olan
diller açık bir biçimde daha güçsüz. Çünkü o
dillerde alışmış olduğu özelliklerin bir kısmı yok. Bunun yanında hayali
Blub programcımız sıralamada diğer yöne yani yukarılara baktığının
farkına varamıyor. Gördüğü sadece birkaç tuhaf dil -- muhtemelen bu dilleri
Blub ile eşit güçte görüyor. Bütün o müthiş özellikleriyle Blub onun
için yeterince iyi çünkü o Blub'da düşünüyor.
Sıralamada Blub'un yukarısında yer alan dillerden birini kullanan bir
programcının bakış açısıyla baktığınızda ise Blub aşağılarda kalıyor,
Y özelliği bile olmayan Blub'da istediklerinizi nasıl yapabilirsiniz
ki?
Bu durumda döngünün içinden sıyrılabilip, diller arasındaki güç
farklılıklarını ancak en güçlü dili anlayan/kullanan programcılar
görebilir. (Eric Raymond Lisp sizi daha iyi bir programcı yapar derken
büyük olasılıkla bunu kastediyordu.) Diğerlerinin görüşlerine
güvenemezsiniz. Blub paradoksunda olduğu gibi, onlar, kullandıkları
diller düşünce tarzlarını etkilediğinden bu dillerden memnundurlar.
Bunu BASIC kullanarak program yazdığım lise yıllarımdaki tecrübelerimden
biliyorum. BASIC özyinelemeyi (recursion) bile
desteklemiyordu. Özyineleme kullanmadan program yazmayı düşünmesi bile
zor ama o zamanlar bunun eksikliğini hissetmiyordum. BASIC'te
düşünüyordum ve bu işte uzmandım!
Eric Raymond'ın önerdiği beş dil güçlülük sıralamasındaki farklı
yerlere denk geliyor. Hangisinin daha üste hangisinin ise altlarda
olduğu hassas bir konu. Benim söylemek istediğim bence Lisp'in
en yukarda olduğu. Bu iddiamı diğer dört dile baktığımda eksik
olduğunu gördüğüm özelliklerden bir tanesini anlatarak
destekleyeceğim. Yapmak istediklerinizi makrolar olmadan nasıl
gerçekleştirebilirsiniz ki? [5]
Bir çok dilde makrolar vardır fakat Lisp makrolarının bir eşi daha
yok ve ister inanın ister inanmayın yaptıkları şey parantezlerle
yakından alakalı. Lisp'in tasarımcıları bütün o parantezleri sadece
değişik olsun diye koymamışlar. Blub programcısına göre Lisp kodları
tuhaf görünümlü fakat bu tuhaflığın bir anlamı var. Parantezler diğer
diller ile Lisp'in arasındaki temel bir farkın en açık örnekleri.
Lisp kodları, Lisp veri nesnelerinden oluşur. Bu yüzden kaynak
dosyalarının karakterler içermesi veya karakter dizilerinin dilin
desteklediği veri türlerinden biri olması boşu boşuna
değildir. Ayrıştırıcıdan (parser) geçen Lisp kodları istediğiniz
gibi kullanabileceğiniz veri yapılarına dönüşmüştür.
Derleyicilerin nasıl çalıştığını anlıyorsanız, bu olup bitenden
Lisp'in söz diziminin acayip değil namevcut olduğunu çıkartmışsınızdır.
Lıspte, diğer dillerde derleyicinin içinde oluşturulan ayrıştırma
ağaçlarını (parse tree) siz doğrudan program diye yazarsınız -- yani
programlarınız bu ağaçları kullanabilir. Onları değıştiren programlar da
yazabilirsiniz. Lisp'te bu program yazan programlar makro diye adlandırılır.
Program yazan programlar? Ne zaman böyle bir şey yapmak istersiniz ki?
COBOL'da düşünürseniz pek sık değil ama Lisp'te düşünürseniz her
zaman. Şimdi en uygunu güçlü bir makro örneği vererek ne demek
istediğimi anlatmak olurdu. Ama bu da Lisp bilmeyenler için bir şey
ifade etmezdi. ANSI Common Lisp[BM kıtaba referans CN)'te konuları
elimden geldiğince hızlı geçmeye çalışmama rağmen, makrolara gelmemin
160 sayfa sürdüğünü göz önünde bulundurursak, burada, sözünü ettiğim
şeyleri anlamanız için ihtiyacınız olan her şeyi açıklamama imkan yok.
Ancak sizi ikna edecek bir şeyden bahsedebilirim. Viaweb editörünün
kaynak kodları %20-%25 makro içeriyordu. Standart Lisp fonksiyonlarına
nazaran makroları yazmak çok daha zordur ve gerekmediği yerde makro
kullanmak kötü bir üslup olarak kabul edilir. Yani o koddaki her
makro, kullanılması gerektiği için yazıldı. Bu da, bu programdaki
kodların en az %20-25'inin diğer dillerde kolaylıkla yapamayacağımız
şeyler yaptığı anlamına gelir. Öte yandan Blub programcısı benim
Lisp'in gizemli güçleri hakkındaki sözlerimden şüphelenebilir ve bu
onu meraklandırabilir. Biz bu kodları eğlence olsun diye yazmıyorduk
küçük ve yeni yeni kurulan bir şirkettik ve rakiplerimizden bir adım daha
ileri bir teknoloji sunabilmek için çok sıkı bir şekilde çalışıyorduk.
Bu noktada şüpheci biri bu ikisi arasında bir bağlantı olup olmadığını
merak etmeye başlayabilirdi. Kodlarımızın büyük bir kısmı, diğer
dillerde yapılması çok zor şeyler yapıyordu ve ortaya çıkan yazılım da
rakip yazılımların yapamadıklarını -- arada bir bağlantı olma ihtimali
üzerine gitmenizi tavsiye ederim bunun arkasında yatan görülenden çok
daha fazlası olabilir.
Yeni Kurulan Şirketler İçin Aikido
Bu yazıyı yazmaktaki amacım insanların fikirlerini değiştirmek
değil. 25 yaş üstü kimsenin bu makaleyi okuduktan sonra gidip Lisp
öğrenmesini beklemiyorum. Amacım, daha çok Lisp'le zaten ilgilenen ve
ne kadar güçlü bir dil olduğunun farkında olan fakat geniş bir
kullanıcı kitlesi olmaması yüzünden endişeleri olan kişileri bu
endişelerinden kurtarmak. Rakiplerinizin Lisp kullanmıyor olması,
Lisp'in gücünü bir kat daha arttıran bir faktördür ve bu da rekabet
ortamında büyük bir avantajdır.
Eğer yeni kurulan bir şirkette Lisp kullanmak istiyorsanız Lisp'in çok
yaygın olmaması sizi endişelendirmemeli, hatta böyle kalmasını ümit
etmelisiniz. Kullanıcılarını memnun etmek bilgisayar dillerinin
doğasında vardır. Donanımlar kişisel alışkanlıklarınızı
değiştiremeyeceğiniz sıklıkta ve ayak uyduramayacağınız bir hızla
değişir. Örneğin programlama alışkanlıklarımız, mikroişlemcileri on yirmi
yıl geriden takip eder. MIT'de 1960'ların başlarından bu yana
üst düzey dillerle programlama yapılırken, bir çok şirket 1980'lerin
ortalarına kadar makine dilini kullanmaya devam etti. Muhtemelen bir
çok kişi de işlemciler, indirgenmiş komut kümesine (RISC)
geçip - bir an önce kapatıp eve gitmeye hevesli bir barmen edasıyla-
onları kapı dışarı edene kadar makine dilini kullanmaya devam etmiştir.
Teknoloji genellikle hızlı ilerler ama programlama dilleri
farklıdır. Onlar sadece teknoloji değil, programcıların düşünce
tarzlarını şekillendiren araçlardır. Yarı teknoloji yarı mezhep de
diyebiliriz yani. [6] Bundan dolayı yaygın diye adlandırabileceğimiz
ve standart programcının kullandığı standart dil bir buzdağının
erimesi kadar yavaş değişir. Lisp'in 1960'da ortaya çıkardığı hafıza
temizleme (garbage collection), bugün herkes tarafından kabul görmüş
durumda. Çalışma esnasında tip belirlemenin (runtime-typing) popülaritesi
gün geçtikçe artıyor. 1970'lerin başında Lisp'le gelen
sözcüksel kapalılık bugün herkesin takip
ettiği bir özellik. 1960'ların ortasında Lisp'in başlattığı makrolarsa
hala keşfedilmemiş bölge.
Standart dilin muazzam bir momentuma sahip olduğu açıkça ortada. Bu
büyük güce direnmek yerine bir aikido ustası gibi bu gücü kendi
lehinize kullanabilirsiniz.
Büyük bir şirkette çalışıyorsanız bu o kadar da kolay
olmayabilir. Patronunuz tam da bir yerlerde başka bir dil hakkında
etkili bir yazı okumuşken, onu Lisp kullanmanıza izin vermesi için
ikna etmeniz zor olabilir. Bunun yanında yeni bir şirkette
çalışıyorsanız, başınızda böyle bir patron yoktur ve siz de bizim
yaptığımız gibi Blub paradoksunu kendi lehinize
çevirebilirsiniz. Yaygın kullanılan ve reklamı yapılan
teknolojilere bağlı rakiplerinizin asla
yetişemeyeceği bir teknolojiden yararlanabilirsiniz.
Bir gün kendinizi böyle bir şirkette bulursanız, size rakiplerinizi
değerlendirmek için işe yarar bir ipucu: Verdikleri iş ilanlarını
okuyun. Web sitelerindeki diğer şeyler hiçbir şey ifade etmeyebilir
ama iş ilanları ne istedikleri konusunda kesin bir ipucu verir.
Viaweb'de çalıştığım yıllarda bir çok iş ilanı okudum. Hemen hemen her
ay yeni bir rakip ortaya çıkıyordu. Çevrimiçi bir demoları olup
olmadığına baktıktan sonra ilk işim verdikleri iş ilanlarını okumak
oluyordu. Bir kaç yıl sonra hangi şirketleri görmezden gelmemiz, hangisini
ciddiye almamız gerektiğini anlayacak hale gelmiştim. İlan
ne kadar fazla IT (BM: CN, burada yazar IT ile yarı-hazır diye reklamı
yapılan Bilişim Bilimcileri yahut Mühendislerden ziyade bilgi-işlem
müdürleri satıcılar vs.'nın alanı kabul edilen "moda" sistemlerin
"uzman"larının hakim olduğu alanı kastediyor) bilgisi istiyorsa, firma da o kadar zararsız
demekti. En cekinilmeyecek olanlar Oracle tecrübesi isteyenlerdi,
bunlardan korkmanıza hiç mi hiç gerek yoktu. Ayrıca Java ve C++
programcıları isteyenler de zararsızdılar. Eğer Perl veya Python
programcıları istiyorlarsa korkmaya başlayabilirdiniz, bu en azından
teknik departmanında gerçek hackerlar barındıran bir şirketin
habercisidir. Eğer Lisp hackerları arayan bir iş ilanı görseydim,
gerçekten endişelenirdim.
*: Paul Graham'ın
Beating the Averages
isimli makalesinin çevirisidir. Makalenin ilk çevirisi Istanbul
Bilgi Üniversitesi, Bilgisayar Bilimleri Bölümü öğrencilerinden
Çağıl Uluşahin tarafından yapılmıştır. Çeviri Emre Sevinç ve
Bülent Murtezaoğlu tarafından düzenlenmiştir. Çeviri sponsoru
Bülent Murtezaoğlu'dur.
Notlar
[1] Viaweb başta iki bölümden oluşuyordu. Kişilerin sitelerini
oluşturdukları editör Lisp ile yazılmıştı. Sipariş verme işlevselliğini
barındıran sipariş sistemi ise C ile. İlk sürüm çoğunlukla Lisp içeriyordu çünkü
sipariş sistemi küçüktü. Daha sonra iki modül daha eklendi. Çoğunluğu
C'de yazılmış bir imaj üretici ve Perl'de yazılmış bir arka ofis
yöneticisi.
2003 Ocak ayında, Yahoo editörün C++ ve Perl'de yazılmış yeni bir
versiyonunu yayınladı. Buna rağmen programın Lisp ile yazılmadığını
söylemek zor çünkü bütün programı C++'a çevirmek için bir Lisp
yorumlayıcı yazmak zorunda kaldılar. Bildiğim kadarıyla sayfa üretici
kalıplarının tüm kaynak kodları hala Lisp kodu.
[2] Robert Morris bu konuda, ketum olmaya çalışmadım çünkü rakiplerimiz
Lisp kullandığımızı bilse bile nedenini anlayamayacaktı, eğer bu kadar
zeki olsalar, çoktan Lisp'te programlama yapıyor olurlardı demişti.
[3] Bütün diller Turing'in "Turing makinası" kavramına
indirgenebildiği için aslında eşit güçte oldukları söylenebilir. Osya
bu programcılar için bir kıstas değildir çünkü hiç kimse bir Turing
makinesi programlamak istemez. Programcıların güç olarak ifade ettiği
şey aslında biçimsel olarak tanımlanabilecek bir şey değildir, ama
bunu açıklamanın bir yolu şu olabilir: Bir dilde kullandığınız
özellikleri diğer dile ancak ilk dil için bir yorumlayıcı yazarak
aktarabiliyorsanız bu ilk dil daha güçlüdür. Yani A dili karakter
dizilerindeki boşlukları yok edebilen bir operatöre sahip ve B değilse
bu A dilini B dilinden daha güçlü yapmaz çünkü bu açığı kapatmak için
bir alt program yazabilirsiniz fakat A özyinelemeyi destekliyor ve B
desteklemiyorsa bu bir kütüphane fonksiyonu yazarak kapatabileceğiniz
bir eksiklik değildir.
[4] Bilenler için not: Programlama dillerinin kesin bir sıralaması
yoktur ancak birbirlerine karşı üstünlükleri vardır. Bu sayede ancak
kısmi bir sıralama söz konusu olabilir.
[5] Makroları ayrı bir özellik olarak tanımlamak biraz yanıltıcı
olur. Pratikte, Lisp'in diğer özellikleriyle birlikte olunca
kullanışlı olurlar.
[6] Sonuç olarak, programlama dillerini karşılaştırmak, ya din
savaşları kadar taraflı ya da antropolojik çalışmalar kadar tarafsız
olur. Huzur isteyen biri bu konudan uzak durmalıdır. Ama özellikle
yeni diller tasarlamak istiyorsanız bu üzerinde çalışmaya değer bir
Yorumlar yazarlarına aittir. İçeriklerinden hiçbir şekilde sorumlu değiliz.