← Previous · All Episodes · Next →
Ortalamanın Üstünde Kalmanın Yolu: Lisp Programlama Dili ve Startup'larda Teknoloji Seçimi Üzerine Bir İnceleme (Beating the Averages) Episode 20

Ortalamanın Üstünde Kalmanın Yolu: Lisp Programlama Dili ve Startup'larda Teknoloji Seçimi Üzerine Bir İnceleme (Beating the Averages)

· 32:40

|
"Paul Graham'ın 2001’de yazdığı bu makale, programlama dillerinin gücünün ve etkisinin önemini inceliyor. Kendi geliştirdiği web tabanlı uygulama Viaweb'in başarısını Lisp adlı programlama dilini kullanmalarına bağlıyor. Graham, Lisp'in diğer dillerden daha güçlü olduğunu ve bu gücünün yazılım geliştirme sürecini hızlandırdığını belirtiyor. Ayrıca, bir dilin gücünün, programcıların bu dili ne kadar iyi anladıkları ve kullandıklarıyla doğrudan ilişkili olduğunu vurguluyor. Bu essay, Lisp gibi güçlü dillerin kullanımının, teknolojik avantaj sağlayarak rekabette üstün olmayı mümkün kılacağı fikrini okuyucuya sunuyor.

---

# Ortalamanın Üstünde Kalmanın Yolu: Lisp Programlama Dili ve Startup'larda Teknoloji Seçimi Üzerine Bir İnceleme (Beating the Averages)

Nisan 2001, rev. Nisan 2003

Bugün size, 2001 yılında Franz Geliştirici Sempozyumu'nda verdiğim bir konuşmadan ilham alan bir hikaye anlatmak istiyorum. Hikayemiz, 1995 yazında, ben ve arkadaşım Robert Morris'in Viaweb adlı bir girişim başlatmamızla başlıyor. Planımız, son kullanıcıların online mağaza oluşturmalarına yardımcı olacak bir yazılım geliştirmekti. Bu yazılımın o dönem için alışılmadık ve yenilikçi yanı, normal web sayfalarını arayüz olarak kullanarak kendi sunucumuzda çalışmasıydı.

Tabii ki, bu fikri aynı anda birçok kişi bulmuş olabilir ama bildiğim kadarıyla, Viaweb ilk web tabanlı uygulamaydı. Bu fikir bize öyle yenilikçi geldi ki, şirketimizi bile bu fikrin adıyla isimlendirdik: Viaweb. Çünkü yazılımımız, masaüstü bilgisayarınızda çalıştırılacak bir program olmaktan ziyade, web üzerinden çalışan bir uygulamaydı.

Bu yazılımı farklı kılan bir diğer özellik, çoğunlukla Lisp adlı bir programlama dili kullanılarak yazılmış olmasıydı. Bu, Lisp ile yazılmış ilk büyük son kullanıcı uygulamalarından biriydi. O zamana kadar Lisp genellikle sadece üniversiteler ve araştırma laboratuvarlarında kullanılıyordu.

**Gizli Silah**

Eric Raymond, ""Hacker Nasıl Olunur?"" adlı bir makale yazdı ve bu makalesinde, hacker olmayı hedefleyenlerin hangi dilleri öğrenmeleri gerektiğini anlattı. Python ve Java ile başlamalarını önerdi çünkü bu dillerin öğrenilmesi oldukça kolay. Gerçekten ciddi bir hacker olmayı düşünenler C'yi öğrenmeli çünkü Unix'i hacklemek için bu dili bilmek gerekiyor. Ayrıca sistem yönetimi ve CGI scriptleri için Perl öğrenmeye değer. Ve son olarak, kesinlikle ciddiye alan bir hacker, Lisp öğrenmeyi düşünmelidir.

> Lisp'i öğrenmeye değer, çünkü bir gün onu tam anladığınızda yaşayacağınız o aydınlanma anı, sizi bir programcı olarak bambaşka bir noktaya taşıyacak. Hatta belki Lisp'i çok fazla kullanmazsınız ama emin olun ki bu deneyim, sizi hayatınızın geri kalanında daha yetenekli bir programcı haline getirecek.

Bu, genellikle Latince öğrenme fikrini savunanların sunduğu argümana çok benziyor. Size belki bir klasikler profesörü dışında bir iş kapma şansı sunmayabilir ama zihninizi keskinleştirir ve İngilizce gibi kullanmayı tercih ettiğiniz dillerde daha iyi yazmanıza yardımcı olur.

Ama bir saniye durun. Bu metafor o kadar da uzağa gidemez. Latin'in size iş bulmada yardımcı olmamasının sebebi, kimse tarafından konuşulmamasıdır. Eğer Latince yazarsanız, kimse sizin ne dediğinizi anlamaz. Fakat Lisp bir bilgisayar dilidir ve bilgisayarlar sizin, yani programcının, onlara hangi dili kullanacaklarını söylediği dili konuşur.

Eğer Lisp sizi daha iyi bir programcı yapacaksa, dediği gibi, neden kullanmak istemezsiniz ki? Bir ressamın eline onu daha iyi bir ressam yapacak bir fırça verilse, bence onu her resminde kullanmak isterdi, öyle değil mi? Burada Eric Raymond'la alay etmeye çalışmıyorum. Genel anlamda verdiği tavsiyeler oldukça yerinde. Lisp hakkında söyledikleri genellikle kabul gören düşünceler. Ancak kabul gören bu düşüncede bir tutarsızlık var: Lisp sizi daha iyi bir programcı yapar, ama siz yine de onu kullanmazsınız.

Neden olmasın? Sonuçta programlama dilleri sadece araçlardır. Eğer Lisp gerçekten daha iyi programlar oluşturmanızı sağlıyorsa, neden kullanmayasınız ki? Eğer sağlamıyorsa, o zaman kimin ne diye buna ihtiyacı olabilir ki?

Bu sadece teorik bir soru değil, çok gerçek bir durum. Yazılım, doğal tekel oluşumuna eğilimli ve yoğun rekabetin yaşandığı bir sektör. Yazılımı daha hızlı ve daha iyi kodlayabilen bir şirket, diğer her şey eşit olduğunda, rakiplerini iş yapamaz hale getirir. Bir startup'ı kurarken bu durumu derinden hissedersiniz. Startuplar genellikle ya hep ya hiç mantığıyla yürür. Ya zengin olursunuz, ya da hiçbir şey kazanamazsınız. Bir startup'ta yanlış teknolojiye bahse girerseniz, rakipleriniz sizi ezerek geçer.

Robert ve ben, Lisp'i oldukça iyi bildiğimiz için içgüdülerimize güvenip Lisp'i seçmekte bir sakınca görmüyorduk. Herkesin yazılımlarını C++ veya Perl kullanarak yaptığının farkındaydık. Ancak, bunun aslında bir şey ifade etmediğini de çok iyi biliyorduk.Eğer teknolojiyi seçerken sadece başkalarının ne yaptığına bakıyor olsaydık, muhtemelen Windows kullanıyor olurduk. Ama unutmayın, teknoloji seçerken sadece popüler olanı değil, size en iyi sonuçları verecek olanı seçmelisiniz.

Bu durum özellikle bir girişim için çok daha önemli. Büyük bir şirkette, diğer büyük şirketlerin yaptıklarını yapabilirsiniz. Ama bir girişim, diğer tüm girişimlerin yaptığını yapamaz. Bu noktayı, ne yazık ki, birçok kişi tam anlamıyla kavrayamıyor, hatta girişimlerde bile.

Büyük şirketlerin ortalama büyüme oranı yılda yaklaşık yüzde ondur. Yani siz büyük bir şirketin başındaysanız ve her şeyi ortalama bir şirket gibi yürütüyorsanız, ortalama bir şirket kadar başarılı olabilirsiniz - yani, yılda yüzde on civarında büyüme bekleyebilirsiniz.

Tabii ki bir startup yönetirken de aynı durumla karşılaşırsınız. Eğer her şeyi ortalama bir startup'ın yaptığı gibi yaparsanız, ortalama bir performans beklemek zorundasınız. Ama buradaki problem, ortalama performansın çoğunlukla iflas etmek anlamına gelmesi. Startupların hayatta kalma oranı yüzde 50'nin çok altında. O yüzden eğer bir startup yönetiyorsanız, kesinlikle sıradışı bir şeyler yapmanız gerekiyor. Yoksa başınız belada demektir.

1995 yılında, rakiplerimizin anlamadığı ve hala birçok kişinin farkında olmadığı bir bilgiye sahiptik: Yazılımınız sadece kendi sunucularınızda çalıştırılacaksa, dilediğiniz her türlü programlama dilini kullanabilirsiniz. Masaüstü yazılımı söz konusu olduğunda, genellikle işletim sisteminin dilinde uygulamalar yazma eğilimi vardır. On yıl önce, uygulama yazmak, C dilinde uygulama yazmak demekti. Ama web tabanlı yazılımlar söz konusu olduğunda, özellikle hem dilin hem de işletim sisteminin kaynak koduna sahip olduğunuzda, istediğiniz herhangi bir dili kullanabilirsiniz.

Ama bu yeni özgürlük, bir bakıma çift taraflı bir kılıç. Artık her dili kullanabileceğinize göre hangisini kullanacağınıza karar vermek durumundasınız. Hiçbir şeyin değişmediği yanılsamasını sürdüren şirketler, rakiplerinin bu durumu fark edip harekete geçmesi riskiyle karşı karşıya kalabilirler.

Herhangi bir dili kullanabileceğiniz durumda hangisini tercih edersiniz? Biz Lisp'i tercih ettik. Çünkü bu sektörde hızlı gelişimin çok önemli olduğunu biliyorduk. Hepimiz sıfırdan başlıyorduk ve eğer bir şirket, rakiplerinin önüne geçip yeni özellikler geliştirebilirse, bu büyük bir avantaj sağlardı. Lisp'in hızla yazılım geliştirmek için mükemmel bir dil olduğunu biliyorduk. Sunucu tabanlı uygulamalar, hızlı geliştirme etkisini daha da büyütüyor çünkü yazılımınızı geliştirdiğiniz anda hemen kullanıma sunabiliyorsunuz.

Eğer diğer şirketler Lisp'i kullanmak istemiyorsa, bu bizim için çok daha iyi. Bize teknolojik bir avantaj sağlayabilirdi ve elde edebileceğimiz her türlü yardıma ihtiyacımız vardı. Viaweb'i kurduğumuzda, iş dünyasında hiç deneyimimiz yoktu. Pazarlama, işe alım, fon toplama ya da müşteri bulma konusunda hiçbir fikrimiz yoktu. İkimizin de gerçek bir iş deneyimi hiç olmamıştı. Tek becerimiz yazılım yazmaktı. Umut ediyorduk ki, bu bizi kurtarır. Yazılım konusunda elde edebileceğimiz tüm avantajları kullanmaya hazırdık.

Lisp kullanmayı bir deney olarak değerlendirebiliriz. Hipotezimiz, yazılımımızı Lisp ile yazarsak, rakiplerimize göre özellikleri daha hızlı tamamlayabileceğimiz ve onların yapamadığı şeyleri yazılımımızda yapabileceğimiz yönündeydi. Ayrıca, Lisp'in yüksek seviyeli bir dil olması sebebiyle büyük bir geliştirme ekibine ihtiyaç duymayacağımız için maliyetlerimiz düşük olacaktı. Eğer bu doğruysa, daha az para karşılığında daha iyi bir ürün sunabilir, ve hala kar elde edebilirdik. Bu durumda tüm kullanıcıları biz kazanırdık, rakiplerimiz hiç kimseyi çekemez ve sonunda iflas ederlerdi. En azından, bizim beklentimiz buydu.

Bu deneyin sonucu ne oldu dersiniz? Şaşırtıcı bir biçimde, işe yaradı. Sonunda yirmi ila otuz arası rakibimiz oldu, ama hiçbirinin yazılımı bizimkine yetişemedi. Sunucuda çalışan, ama masaüstü uygulama gibi hissettiren bir online mağaza oluşturucumuz vardı. Rakiplerimiz ise sadece cgi betikleri sunabiliyordu. Bu, bizim teknoloji seçimimizin ne kadar önemli olduğunun bir kanıtıdır.Her zaman özellikler konusunda bir adım öndeydik. Rakiplerimiz, son çare olarak, bizde olmayan özellikler getirmeye çalışsalar da, Lisp'in bize sağladığı geliştirme hızı sayesinde genellikle bir iki gün içinde aynı özelliği çıkarırdık. Yani, bir rakibimiz yeni bir özelliği duyurduğunda, bizim de o özelliğimiz hazır olurdu. 

Rakiplerimiz, sanki elinde gizli bir silahı olan biriymişiz gibi düşünmüş olabilirler. Ya da onların Enigma trafiğini çözüyor gibi bir şey yapıyormuşuz gibi. Ancak gerçekten bir gizli silahımız vardı, ama onların sandığından çok daha basitti. Hiç kimse bizimle onların özelliklerini paylaşmıyordu. Biz sadece herkesin hayal bile etmediği bir hızda yazılım geliştirebiliyorduk.

Dokuz yaşlarındayken, Frederick Forsyth'ın _Çakalın Günü_ adlı kitabı elimden düşmezdi. Kitabın baş kahramanı, Fransa'nın başkanını öldürmekle görevlendirilen bir suikastçıdır. Suikastçının, başkanın geçeceği yolu gören bir apartmana ulaşabilmesi için polislerden sıyrılması gerekiyor. Fakat o, topal bir yaşlı adam kılığına bürünerek polislerin yanından sessizce geçip gidiyor ve kimse ondan şüphelenmiyor.

Bizim gizli silahımız da benzerdi. Yazılımımızı, bolca parantez içeren ve garip bir yapısı olan bir yapay zeka dilinde oluşturduk. Yıllarca Lisp dilinin bu şekilde anlatılması beni rahatsız etmişti. Ama şimdi bu durum bizim avantajımıza döndü. İş dünyasında, rakiplerinizin anlamadığı teknik bir avantajın değeri paha biçilemez. İş hayatında, tıpkı savaşta olduğu gibi, sürpriz her zaman güç kadar etkilidir.

Dolayısıyla, biraz utangaçlıkla itiraf etmeliyim ki, Viaweb üzerinde çalışırken Lisp hakkında hiçbir şey söylemedim. Hiçbir zaman bunu basına açıklamadık ve web sitemizde Lisp'i ararsanız, sadece biyografimdeki iki kitabın adlarını bulurdunuz. Bu hiç de tesadüf değildi. Bir startup'ın rakiplerine olabildiğince az bilgi vermesi gerektiğine inanıyorum. Eğer onlar yazılımımızın hangi dilde yazıldığını bilmiyorlarsa ya da umursamıyorlarsa, ben de öyle kalmasını isterim.

Teknolojimizi en iyi anlayanlar, müşterilerimiz oldu. Onlar da Viaweb'in hangi dilde yazıldığını umursamadılar, ancak programın işe yaradığını ve çok iyi çalıştığını hemen fark ettiler. Bu sayede onlar, harikulade görünümlü online mağazalarını adeta dakikalar içinde oluşturabiliyorlardı. Ağızdan ağıza yayılan bu haberlerle kullanıcı sayımız artmaya başladı. 1996'nın sonunda online 70 mağazamız bulunuyordu. 1997'nin sonuna gelindiğinde bu sayı 500'e ulaştı. Yahoo bizi satın aldığında, yani altı ay sonra, kullanıcı sayımız 1070'ti. Bugün, Yahoo Store adı altında bu yazılım, pazarını domine etmeye devam ediyor. Yahoo'nun en karlı bölümlerinden biri ve Yahoo Alışveriş'in temelini oluşturan mağazalar, bu platform üzerinden kuruldu. 1999'da Yahoo'dan ayrıldığımdan, şimdiki kullanıcı sayılarını tam olarak bilmiyorum ancak son duyduğuma göre, kullanıcı sayısı 20.000 civarında.

**The Blub Paradox**

Lisp neden bu kadar harika? Eğer Lisp gerçekten bu kadar harika ise, neden herkes onu kullanmıyor? Bu sorular ilk başta varsayımsal gibi görünebilir, ama aslında oldukça net ve basit cevapları var. Lisp'in harikalığı, sadece ona gönül vermiş olanların görebileceği bir sihirli özellikten değil, basitçe mevcut en güçlü dil olmasından kaynaklanıyor. Peki, herkesin Lisp'i kullanmamasının nedeni ne? Çünkü programlama dilleri sadece birer teknoloji değil, aynı zamanda birer zihin alışkanlığıdır ve hiçbir şey zihin alışkanlıkları kadar yavaş değişmez. Tabi ki, her iki cevabın da detaylı olarak açıklanması gerekiyor.

Biraz şaşırtıcı ve tartışmalı bir ifadeyle başlayayım: Programlama dilleri, güç noktasında değişiklik gösterir.

Az kişi, yüksek seviye dillerin, makine dilinden daha güçlü olduğunu tartışır. Bugünün programcıları genellikle, makine dilinde programlama yapmak istemezler. Onun yerine, yüksek seviye bir dilde kod yazmayı ve bir derleyicinin bunu sizin için makine diline çevirmesini tercih ederler.Bilgisayar programlama dünyasına hoş geldiniz! Bugün, programlama dilleri arasındaki güç farklarını ve bu farkların nasıl bir etkisi olduğunu konuşacağız. 

Bir programı baştan sona makine dilinde yazmanın hata olduğunu hepimiz biliriz. Ancak, daha az bilinen bir genel prensip var: Eğer birkaç dil arasında seçim yapma şansınız varsa, tüm diğer şeyler eşitken, en güçlü olan dışında bir dilde program yazmak hata olacaktır.

Tabii ki, bu kuralın da bir sürü istisnası var. Örneğin, belirli bir dilde yazılmış bir programla sıkı fıkı çalışacak bir program yazıyorsan, yeni programı da aynı dilde yazmak mantıklı olabilir. Ya da çok basit bir görevi olan bir program yazıyorsan, daha az soyut bir dil kullanmak daha iyi olabilir, çünkü biraz daha hızlı olabilirler. Kısa, bir defalık bir program yazıyorsan, işini en iyi yapan dilde yazmak daha iyi olabilir. Ama genelde, bir uygulama yazılımı yazarken, en güçlü ve makul derecede verimli dili kullanman gerekiyor. Başka bir dil kullanmak, makine dilinde programlama hatası yapmakla aynı cinsten hata olabilir, belki de daha az derecede.

Makine dilinin oldukça düşük seviyede olduğunu görebilirsiniz. Ancak genelde, yüksek seviye diller bir tür toplumsal anlaşma gereği birbirlerine eşitmiş gibi kabul edilirler. Fakat gerçekte bu durum böyle değil. ""Yüksek seviye dil"" ifadesi teknik anlamda pek de net bir şey belirtmiyor. Makine dilleri bir yanda, tüm yüksek seviye dilleri diğer yanda olacak şekilde kesin bir ayrım çizgisi yok. Diller, en güçlülerinden en düşük seviyeye, yani makine dillerine kadar bir sürekli bir akış içindedir ve bu dillerin güç seviyeleri de birbirinden farklıdır.

Örneğin, Cobol'u düşünelim. Yüksek seviye bir dil olan Cobol, makine diline derlenebiliyor. Ama gerçekten kim Cobol'un, örneğin Python kadar güçlü olduğunu düşünür ki? Aslında Cobol, Python'a kıyasla makine diline daha yakındır.

Ya da Perl 4 hakkında ne düşünürsünüz? Perl 4 ve Perl 5 arasında, lexical closures (sözcüksel kapanışlar) dilin bir parçası haline geldi. Perl ile uğraşan çoğu kişi, Perl 5'in Perl 4'ten daha güçlü olduğunu kabul eder. Ancak bunu kabul ettiğinizde, bir yüksek seviye dilin diğerinden daha güçlü olabileceğini de kabul etmiş oluyorsunuz. Ve bu da, özel durumlar dışında, elinize geçirebileceğiniz en güçlü dili kullanmanız gerektiğini kesin bir şekilde gösteriyor.

Ama bu fikir genellikle sonuna kadar götürülmez. Bir yaştan sonra, programcılar nadiren kendi isteğiyle dil değiştirir. İnsanlar genellikle alıştıkları dili yeterince iyi bulurlar.

Programcılar, en sevdikleri programlama dillerine aşırı derecede bağlı olabiliyorlar ve ben kimsenin kalbini kırmak istemem. Bu yüzden, bu konuyu açıklarken Blub adında hayali bir dil kullanacağım. Blub, soyutlama derecesi açısından tam ortada yer alır. Yani en güçlü dil olmasa da Cobol ya da makine dili gibi dillerden daha etkilidir.

Aslında, varsayımsal Blub programcımız bu ikisini de kullanmaz. Tabii ki, makine diliyle kodlama yapmaz. İşte bunun için derleyiciler var. Cobol'la ilgili olarak, onunla nasıl bir şey yapabildiğini anlamıyor. Hatta, seçtiğiniz bir Blub özelliği olan 'x' bile içermiyor.

Varsayımsal Blub programcımız, gücü daha az olan dilleri incelediğinde, aşağıya baktığını bilir. Blub'dan daha zayıf dillerin, alışkın olduğu bazı özellikleri eksik olduğu bellidir. Ancak bu programcı, daha güçlü dillere baktığında, yukarıya baktığının farkında olamaz. Gördüğü şeyler, ona göre sadece garip dillerdir. Onları büyük ihtimalle Blub'la eşit güçte görür, ama ekstra karmaşık özelliklerle birlikte. Onun için Blub yeterlidir, çünkü o Blub dilinde düşünür.

Ancak, daha güçlü programlama dillerini kullanan bir programcının bakış açısına geçtiğimizde, onun da Blub'ı küçümsediğini görüyoruz. Blub ile nasıl bir şey başarabilirsiniz ki? Hatta 'y' özelliği bile yok.

Tümevarımsal bir bakış açısıyla, çeşitli diller arasındaki güç ayrımlarını tümüyle görebilen tek yazılımcılar, en güçlü dili anlayabilenlerdir. Bu yüzden, programlama dünyasında daima öğrenmeye, keşfetmeye ve gelişmeye açık olmak önemlidir. Her dilin kendi gücü ve zayıflığı vardır, ve bu dilleri doğru yerde ve doğru zamanda kullanmak, gerçek bir programcının işaretidir.(Bu belki de Eric Raymond'un Lisp'in sizi daha iyi bir yazılımcı yapacağını ifade ederken kastettiği şeydi.) Blub paradoksu sebebiyle, diğerlerinin görüşlerine güvenemezsiniz: onlar, kullandıkları dilde mutludurlar çünkü bu dil, programlar hakkında nasıl düşüneceklerini belirler.

Kendi deneyimlerimden biliyorum bunu, lise yıllarımda Basic dili ile programlar yazarken. Bu dil bile özyinelemeyi desteklemiyordu. Özyinelemeyi kullanmadan program yazmanın ne kadar zor olduğunu düşünmek bile zor ama o zamanlar bana fark etmiyordu. Zihnim tamamen Basic dilinde çalışıyordu. Ve bu konuda gerçekten iyiydim. Kendi küçük dünyamın efendisi gibiydim.

Eric Raymond'ın hackerlara önerdiği beş dil, güç skalası üzerinde farklı yerlerde bulunuyor. Bu dillerin birbirine göre nerede durduğu hassas bir konu. Ben, Lisp dilinin en üstte olduğunu düşünüyorum. Bu iddiamı desteklemek için, diğer dört dilde bulamadığım ve bana göre eksik olan bir özelliği paylaşacağım. Makro olmadan, bu dillerle nasıl bir şey başarabilirsiniz ki? [5]

Birçok dilin 'makro' adında bir özelliği vardır. Ama Lisp makroları bambaşka bir seviyede. İnanın ya da inanmayın, bu makroların işlevi, o bolca kullandıkları parantezlerle doğrudan ilişkili. Lisp'in tasarımcıları, dili diğerlerinden farklı kılmak için değil, bir nedenle parantezleri bolca kullanmışlar. Blub dilini kullanan bir programcıya Lisp kodu belki garip gelebilir. Ancak o parantezlerin bir sebebi var. Bu parantezler, Lisp'in diğer dillerden farklı oluşunun dışa vurumudur.

Lisp kodu, Lisp'in veri objelerinden oluşur. Ve bu durum, sıradan bir şekilde, yani kaynak dosyaların karakterler barındırdığı ve karakter dizilerinin dil tarafından desteklenen veri türlerinden biri olduğu anlamında değil. Parser tarafından okunduktan sonra Lisp kodu, gezinilebilecek veri yapılarına dönüşür.

Derleyicilerin nasıl çalıştığını anlarsanız, aslında Lisp'in ilginç bir sözdizimi olması değil, hiç sözdizimi olmamasıdır. Programları, diğer dillerin ayrıştırıldığı sırada derleyicide oluşan ayrıştırma ağaçlarına yazarsınız. Fakat bu ayrıştırma ağaçları programlarınıza tamamen açıktır. Onları manipüle eden programlar yazabilirsiniz. Lisp'te bunlara 'makro' denir. Özetle, bunlar program yazan programlardır.

Program yazabilen programlar mı? Böyle bir şeye ne zaman ihtiyaç duyarsınız ki? Cobol dilinde düşünüyorsanız, pek de fazla ihtiyaç duymazsınız. Ama Lisp dilinde düşünüyorsanız, sürekli olarak bu tür bir şeye ihtiyaç duyarsınız. Burada güçlü bir makro örneği gösterebilir ve ""İşte böyle bir şey!"" diyebilir miydim? Ama eğer öyle yaparsam, Lisp'i bilmeyen biri için bu tamamen anlamsız bir karmaşa olarak görünebilir; ne demek istediğini anlamanız için bilmeniz gereken her şeyi burada açıklamaya yer yok. ""ANSI Common Lisp"" adlı kitabımda, konuları olabildiğince hızlı bir şekilde ilerlemeye çalıştım ve yine de 160. sayfada ancak makrolara gelebildim.

Ama sanırım sizi ikna edecek bir tür argüman sunabilirim. Viaweb editörünün kaynak kodu yaklaşık olarak %20-25 makro içeriyordu. Makrolar, normal Lisp fonksiyonlarına göre yazılması daha zor ve gereksiz yere kullanıldığında ise genellikle kötü bir stil olarak kabul edilir. Dolayısıyla, bu kodda yer alan her bir makro, orada olması gerektiği için orada. Bu, programın bu kısmındaki kodun, başka hiçbir dilde kolaylıkla yapılamayan işlemleri gerçekleştirdiğini gösteriyor. Ne kadar çok Blub programcısı Lisp'in gizemli güçleri konusunda benim iddialarıma şüpheyle yaklaşsa da, bu durum onların ilgisini çekecektir. Biz bu kodları kendi zevkimiz için yazmadık. Biz minicik bir startup'ız ve rakiplerimizle aramıza teknik engeller koyabilmek için var gücümüzle kod yazıyoruz.

Biraz meraklı biri burada bir ilişki olduğunu düşünmeye başlayabilir. Kodlarımızın büyük bir kısmı diğer dillerde yapılması oldukça zor işler yapıyordu. Bu kodların sonucunda ortaya çıkan yazılım, rakiplerimizin yazılımlarının yapamayacağı şeyleri yapabiliyordu. Belki de arada bir bağlantı vardı. Sizi bu düşünceyi izlemeye teşvik ederim.**Girişimler ve Aikido: Engelini Aşmaya Çalışan Yaşlı Adam**

Bir yaşlı adam düşünün. Belki de dışarıdan bakıldığında sıradan biri gibi görünüyor. Ama onun içinde bir ateş var, bir hırs, bir tutku. O, engelleri aşmaya çalışan bir girişimci. Ve belki de, onun hikayesinde, sıradan görünen birçok şeyin ötesinde bir potansiyel yatıyor.

**Lisp'in İtici Gücü**

Şimdi, kimseyi (özellikle de 25 yaşından büyükleri) Lisp öğrenmeye ikna etmeye çalışmıyorum. Bu yazının amacı, insanların fikirlerini değiştirmek değil. Lisp'in güçlü bir dil olduğunu bilen ancak yaygın olarak kullanılmaması sebebiyle endişelenen kişilere güvence vermek istiyorum. Bir rekabet ortamında, bu aslında bir avantaj olabilir. Çünkü rakiplerinizin Lisp'in gücünü tam anlamıyla kavrayamamaları, dilin gücünü katlıyor.

Eğer bir girişimde Lisp kullanmayı düşünüyorsanız, geniş çapta bilinmemesi konusunda endişe etmek yerine, bu durumun böyle kalmasını ummalısınız. Ve büyük olasılıkla da öyle kalacak. Programlama dillerinin özelliği, çoğu insanı kullandığı dil konusunda tatmin olmuş bir şekilde bırakmaktır. Bilgisayar donanımı kişisel alışkanlıklardan çok daha hızlı değiştiği için programlama alışkanlıkları genellikle işlemciden on ila yirmi yıl geridedir. MIT gibi yerlerde, 1960'ların başlarında bile yüksek seviyeli dillerle programlar yazılıyordu. Ancak birçok şirket, 1980'lere kadar kodları makine dilinde yazmaya devam etti. Eminim ki birçok kişi, işlemci sonunda bir RISC komut setine geçip onları 'dışarı atana' kadar, makine dilinde kod yazmaya devam etmiştir. İşlemci, eve dönmek için can atan bir barman gibidir ve sonunda sizi dışarı atar.

Teknoloji genelde hızlı bir şekilde değişir. Ancak programlama dilleri biraz daha farklıdır. Programlama dilleri sadece teknoloji değil, aynı zamanda programcıların düşünce yapısını şekillendirir. Yarı teknoloji, yarı inanç sistemidir. Yani, ortalama bir programcının kullandığı dil, bir buzdağı kadar yavaş hareket eder. 1960'larda Lisp tarafından tanıtılan çöp toplama özelliği, artık yaygın olarak iyi bir şey olarak kabul edilir. Aynı şekilde, çalışma zamanı yazımı da popüler hale gelmektedir. 1970'lerin başında Lisp tarafından tanıtılan sözcüksel kapatmalar, şimdi radarımıza girmeye başladı. Ancak, 1960'ların ortasında Lisp tarafından tanıtılan makrolar hala keşfedilmemiş bir alan.

Açıkçası, ortanca dilin büyük bir ivmesi var. Ben burada, bu güçlü güce karşı koyabileceğinizi söylemiyorum. Tam tersini öneriyorum: Aikido uygulayıcısı gibi, bu gücü rakiplerinize karşı kullanabilirsiniz.

Büyük bir şirket için çalışıyorsanız, bu pek kolay olmayabilir. Sivri saçlı patronunuzu, her şeyi Lisp dilinde yapmanıza izin vermesi için ikna etmek zor olabilir. Özellikle de patronunuz gazetede yeni bir dilin, yirmi yıl önce Ada'nın dünyayı ele geçirmeye hazırlandığı gibi, dünyayı ele geçireceğini okumuşsa... Ama eğer sivri saçlı patronları henüz olmayan bir startup'ta çalışıyorsanız, bizim yaptığımız gibi, bu Blub Paradoksunu size avantaj sağlayacak şekilde kullanabilirsiniz: Rakipleriniz orta yol diline sıkışıp kalmışken, siz onların asla ulaşamayacağı bir teknolojiyi kullanabilirsiniz.

Eğer bir gün kendinizi bir startup'ta çalışırken bulursanız, işte rakiplerinizi değerlendirmeniz için kullanışlı bir ipucu: iş ilanlarını okuyun. Web sitelerindeki her şey stok fotoğraf veya yazılı içerik olabilir ancak iş ilanları, istedikleri özellikleri net bir şekilde belirtmek zorunda. Aksi halde yanlış adaylarla karşılaşırlar.

Viaweb'de çalıştığım yıllar boyunca birçok iş ilanı okudum. Her ay neredeyse yeni bir rakip beliriyordu. İlk işim, canlı bir online demo olup olmadığını kontrol etmekten sonra, iş ilanlarına göz atmak olurdu. Birkaç yıl içinde hangi şirketlerin tehlike oluşturduğunu ve hangilerinin oluşturmadığını anlamaya başladım. İş ilanları ne kadar IT terimleriyle doluysa, şirket o kadar az tehlikeli olurdu. En güvenli olanlar, Oracle deneyimi isteyenlerdi. Onları hiç dert etmezdiniz. C++ veya Java geliştiricileri istediklerini söylediklerinde de güvendeydiniz. Ancak Perl veya Python programcıları istediklerinde biraz korkardım - işte bu, teknik ekibin en azından gerçek hackerlar tarafından yönetildiği bir şirket gibi görünmeye başlıyor.Eğer bir iş ilanında ""Lisp hackerları aranıyor"" diye bir ifade görseydim, doğal olarak biraz endişelenirdim. Ama neden mi? Çünkü Lisp, programlama dünyasının bazen biraz kafa karıştırıcı, bazen de bir o kadar da heyecan verici bir dilidir. 

#### İlginç Detaylar

[1] Lisp, Viaweb'in başlangıcında önemli bir rol oynamıştı. İlk versiyonunda, siteleri oluşturmak için Lisp dilinde yazılmış bir düzenleyici ve siparişleri işleyen C dilinde yazılmış bir sipariş sistemi vardı. Daha sonra C dilinde yazılmış bir resim oluşturucu ve çoğunlukla Perl'de yazılmış bir arka ofis yöneticisi eklediler. Bu, Lisp'in ne kadar esnek bir dil olduğunu gösteriyor, değil mi?

[2] Robert Morris'in de dediği gibi, Lisp'in gücünü anlamak biraz zor olabilir. Çünkü rakiplerimiz Lisp kullandığımızı bilseler bile, bunun neden önemli olduğunu anlamazlardı: ""Eğer onlar da bizim kadar zeki olsaydı, zaten Lisp ile programlamaya çoktan başlamış olurlardı.""

[3] Programlama dillerinin gücü, Turing eşdeğerliği anlamında belirlenmez. Programcılar için önemli olan, bir dilin ne kadar ""güçlü"" olduğunu belirleyen özellikleridir. Örneğin, bir dilde metinden boşlukları çıkarma gibi bir özellik varsa ve diğer dilde bu yoksa, bu durum ilk dili otomatik olarak daha güçlü yapmaz. Çünkü büyük olasılıkla ikinci dilde bir alt rutin yazarak bu özelliği elde edebilirsiniz. Ancak, diyelim ki bir dil özyinelemeyi destekliyor ve diğeri desteklemiyorsa, bu durumu kütüphane fonksiyonları yazarak düzeltmeniz pek mümkün olmayabilir.

[4] Teknik detaylara meraklı olanlar için bir not: Burada önemli olan, şekil değil, en azından belirli bir düzene sahip olduğumuz fikri.

[5] Makroları ayrı bir özellikmiş gibi ele almak biraz yanıltıcı olabilir. Aslında, onların faydası, lexical closures ve rest parameters gibi diğer Lisp özelliklerinin varlığıyla büyük ölçüde artar.

Sonuç olarak, programlama dillerinin karşılaştırılması genellikle ya dini savaşları andırır ya da o kadar tarafsız olmaya çalışan bir lisans ders kitabına dönüşür ki, bu kitaplar aslında birer antropoloji çalışması gibi okunur. Huzurlarını bozmak istemeyenler veya öğretim üyeliği peşinde olanlar bu konudan genellikle kaçınırlar. Ancak bu soru yalnızca dini bir yönü olan bir soru değil; özellikle yeni diller tasarlama hedefindeyseniz, incelenmeye değer bir tarafı da var.""""

---

İlişkili Konseptler: Lisp'in avantajları, Viaweb ve Lisp, programlama dillerinin gücü, startuplarda Lisp, Lisp diğer dillerle karşılaştırma, Lisp makroları, web tabanlı uygulamalarda Lisp, Lisp'in yazılım geliştirmeye etkisi, programlama dilleri ve startup başarısı, Lisp ve hızlı geliştirme, Blub paradoksu, programlama dilleri ve iş rekabeti, Viaweb'deki Lisp'in rolü."

Subscribe

Listen to Yiğit Konur'un Okuma Listesi using one of many popular podcasting apps or directories.

Spotify Pocket Casts Amazon Music YouTube
← Previous · All Episodes · Next →