Bence sorun düşündüğünüzün tam tersi. Lisp'i anlatabilmek için önce XML, C# vs öğretmek gerekmiyor. Kendimden bir örnek vererek anlatabilirim sanırım. İlkokulu gecekondu semtindeki 50 küsur kişilik sınıflarda okuduğum için öğretmenlerin teker teker öğrencilerle ilgilenme şansı yoktu. İlk yazmaya başladığımda kimse kalem nasıl tutulur göstermediği için, kalemi normal şekilde değil bütün parmaklarımla kavrayarak tutmaya alışmışım farkında olmadan, tabi bu şekilde tutunca iki satır yazı yazınca parmaklarım yoruluyordu. İnsanların kalemi benden farklı tuttuğunun farkına vardıktan sonra, normal şekilde tutmaya alışmak hiç bilmeyen birisinin öğrenmesinden daha uzun sürdü benim için. Programlamaya benim gibi C,Pascal vs ile başlamış birisi için Lisp'i anlamak için gereken zihin dönüşümünü veya linkini verdiğim yazıda yazarın dediği gibi aydınlanmayı yaşamak için alışkanlıklarınızdan vazgeçmeniz gerekiyor, sorun burda.
Yazıdan çevirerek alıntı yapıyorum. "Lisp'in doğasında zeki ve deneyimli programcıların anlamasını zorlaştıran birşey mi vardı ? Hayır, yoktu. Nihayetinde ben anlamıştım, ben anladıysam herkes anlayabilirdi. O zaman Lisp'i anlamayı bu kadar zorlaştıran neydi ? Cevap, böyle şeylerde her zaman olduğu gibi beklenmedikti. Tabi ki ! Birisine birşey öğretmek zaten bildikleri kavramlar üzerine daha gelişmiş kavramları inşa etmeyi gerektiriyordu. Eğer süreç ilginç kılınırsa ve konular doğru yolla anlatılırsa yeni kavramlar, anlaşılmalarını sağlayan asıl kavramlar kadar sezgisel hale geliyordu. Problem buydu. Meta programming, kod ve verinin aynı şekilde temsil edilmesi, kendi kendini değiştiren programlar, sahaya özgü mini diller; bu kavramlar için yapılan açıklamaların hiçbirisi insanlara tanıdık gelmiyordu. Nasıl anlamalarını beklerdim ki ! İnsanların açık örnekler istemeleri şaşırtıcı değildi. Marsça konuşsam da aynı şeydi."
Sonuç olarak , bazen Marsça konuştuğunuzun farkında olmuyorsunuz, insanlar anlamayınca da kızıyorsunuz. Bir de benzer şeyleri başka durumlarda ben de yaşadım. İnsanlar anlattığınız en basit şeyleri bile anlamayınca ister istemez "salak mıdır nedir, ne var bunda anlaşılmayacak" şeklinde şeyler geçiyor aklınızdan. Oysa anadilini iyi bilen bir insana başka bir dili öğretmek için "sizin kalem dediğiniz şeye İngilizce'de pencil denir" demeniz veya kalemi gösterip "This is a pencil" demeniz gerekiyor. İlk aşamada "pencil" ın İngilizce'de küçük resim fırçası anlamına da gelmesi beni ilgilendirmiyor. Elbette kalemin Türkçe'deki anlamı ve çağrışımları başka bir dil ile örtüşmeyecek, ama siz (pencil != kalem) diye düşünüp "kalemi unut, pencil başka birşey" derseniz insanlara üzerinde düşünebilecekleri/uğraşabilecekleri birşey vermemiş oluyorsunuz, üstelik yazdığınız şeyler Tao'cu koanlara benziyor, onların da yıllarca uğraşırsanız Nirvaya'ya ulaştırma potansiyelleri var belki ama, kaç kişi gözle görülür bir ilerleme kaydetmeden Nirvanaya ulaşmak için o kadar beklemeyi göze alır bilmiyorum. En azından ben o kadar sabırlı değilim.
Not: Linki gönderen benim, şifremi hatırlamadığım ve "Şifremi unuttum" un yanıtı uzun süre gelmediği için anonim olarak gönderdim.
Size de ayni eziyeti edeyim: evvelce manasiz buldugunuz hangi kavram tam yerine oturdu bu yazi sayesinde? Bir iki kolay ornek akliniza geliyorsa yazabilir misiniz?
Öncelikle henüz Lisp'e elimi sürmediğimi söylemeliyim. Ancak bu yazı Lisp'in neden diğer programlama dilleri ile aynı kategoriye girmediğini anlamam için bir fikir verdi ve şu alıntıların
Lisp programlanabilir bir programlama dilidir.
"Lisp is a programmable programming language."
- John Foderaro, CACM, September 1991
Lisp bir dil değil, bir inşaat malzemesidir.
"Lisp isn't a language, it's a building material."
- Alan Kay
(Kaynak : paulgraham.com/quotes.html)
işaret ettiği özelliğe Lispte nasıl ulaşıldığını ve neden aynı işlevselliğe diğer programlama dilleriyle ulaşılamadığını kestirebilmeme yardımcı oldu.
Maalesef henüz Lisp'e elini sürmemiş biri olarak ben de net örnekler veremiyeceğim, çünkü ben de henüz pratiğini yapmış değilim ancak ne anladığımı anlatmaya çalışayım.
Lispin gücü bir anlamda syntax'ının basitliğinden (veya syntax'ının olmamasından) kaynaklanıyor. Yani daha önce başka yerlerde insanların "Niye Lisp kodu derleyicilerin parse ettiği şekilde (AST = Abstract Syntax Tree = Soyut Sözdizim Ağacı) yazılıyor ki. Bu insanlar için doğal bişey değil" diye şikayet ettiklerini okuduğumu hatırlıyorum. İşte Lisp'in gücü tam da bundan kaynaklanıyor. Tabi burada önemli olan kodun AST şeklinde yazılması değil, bu sayede dilin sözdiziminin programcı tarafından kontrol edilebilmesi. Ancak bu sayede, Lisp'te program yazmaktan kurtulup derleyiciyi programlama aşamasına geçmiş oluyorsunuz. Yani Lisp'te yaptığınız iş program yazmak değil, diğer dillerdeki gibi bir kod yazıp bunu derleyicinin önüne atmıyorsunuz, Lisp'te derleyici ile konuşuyorsunuz.
Örneğin benzer işlevselliğe C++ ile ulaşmaya çalıştığınızı ve bu yüzden C++ derleyicisi ile yazdığınız kod içinden etkileşime girecek bir yöntem oluşturduğunuzu varsayalım. C++ derleyicisinin derleyip AST halinde tuttuğu kodu nasıl işleyeceksiniz ki, C++'nın, derleyici ile etkileşime geçerek bile değiştiremeyeceğiniz bir sürü sabit özelliği var, üstelik C++'nın sözdizimi bir sürü ayrıntı içerdiği için derleyicinin AST haline getirdiği ağaç üzerinde değişiklik yaparak kodu sizin istediğiniz başka bir şekilde ele almasını/derlemesini sağlamak C++ derleyicisini baştan yazmaktan çok da kolay olmaz.
Umarım benim yazdıklarım koanlardan daha anlaşılır olmuştur.
Baska yeni meraklananlar ne der? Bir de onlardan duysak birseyler?
Dediginiz seyler dogru seyler, yalniz bu propgramlanabilir programlama dili kismini yeni baslayanlara cok soyleyince bazen hemen programlama dili programlamaliymislar gibi oluyor. Bu da cok dogru degil, ozellikle hem lisp hem programlama hem genel bilgisayar bilimi gorgusu ayni adna edinmekte olanlar icin belki basladiklari yolda biraz yurudukten sonra dusunmeleri veya tesebbus etmeleri gereken seyler macrolar filan. Ayni sekilde CLOS'un gucu ve MOP da ancak islere biraz hakim olduktan sonra kiymeti anlasilabilecek seyler. Bunu biraz eksik soyluyoruz gibime geliyor.
Aman Naggum duymasın! ;-) Kendisi konuya şöyle giren bir adam olduğu için:
Robbery, Rape, Torture and XML: Classic Naggum article on markup and s-exps.