LISP Hakkinda

Paul Graham’ın ufak bir yazısı, ileriseviye.org sitesinde Türkçe’ye çevirilmiş, hangi dili seçmeliyim ve LISP, programlama dilleri arasında nerede sorularına cevap veriyor. LISP ile ilgilenen, ilgilenmeyen herkesin okuması gereken güzel bir yazıdır. (ileriseviye.org sitesi suan erisilebilir olmadigindan dolayi cevirmenin affina siginaraktan yaziyi burada paylasiyorum.)

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-% 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 konudur.

Popular posts from this blog

Polya’nın Problem Çözme Teknikleri

Mikroislemci Temelleri