Fazlamesai Fazlamesai.net · Kare · Galaksi
    Haber Yolla Hesabınız İletişim SSS İstatistik Arama Konular

Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü
FZ, Salı, 7 Aralık 2004 (14:30 TSI) (12193 okuma)
1990'lı yılların ortasında Lisp ile geliştirdiği e-ticaret sistemini Yahoo şirketine 40.000.000$'a satan Paul Graham'ın Beating The Averages başlıklı makalesini FM üyeleri ile paylaşıyor ve faydalı olmasını, olabildiğince geribesleme üretmesini ümit ediyoruz. Çeviriye önayak olan, sponsorluğu üstlenen değerli FM üyesi bm'ye ve çevirinin ilk halini gerçekleştiren İstanbul Bilgi Üniversitesi, Bilgisayar Bilimleri Bölümü öğrencilerinden Çağıl Uluşahin'e teşekkürlerimizi sunuyoruz. Bu belgenin orjinal adresine buradan erişebilirsiniz.

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.

Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

Ansugo @ Salı, 7 Aralık 2004 (16:14 TSI) (#11375)

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.


Onermeyi kendime uyguladim ve true dondurgunu gordum. Cok hosuma giden bir paragraf oldu.

Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

lifesdkver0_1 @ Salı, 7 Aralık 2004 (16:43 TSI) (#11376)
Lisp makrolarıyla gerçekleştirilip, diğer dillerde zorlukla gerçekleştirilecek örnek aranıyor[ ki yazı anlamlı olsun ]

Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

MultiServis @ Salı, 7 Aralık 2004 (17:21 TSI) (#11377)
Aslında konu ile ilgili ama Lisp ile ilgisiz bir yorumum olacak. Uzun zaman önce başalttığımız bir e-ticaret mağaza sistemi olan ComArge müteakip adresden ziyaret edilebilir.
http://www.comarge.com [www.comarge.com]

Yazıda bahsedilen Yahoo Store gibi çalışan sistemimiz OsCommerce üzerinde geliştirildi ve tahmin edileceği üzerede birçok özelliği ile etkili çözüm sunmakta. Şimdi bu yazı biraz reklam gibi oldu ama arkadaşlar kusura bakmasın. Bu çalışma tamamen özgür yazılım mantığı ile ve herhangi bir firma desteği olmadan hazırlandı. Bu nedenle de sizden destek bekliyorum. Teşekkürler.

Ferhat Kurt

Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

FZ @ Salı, 7 Aralık 2004 (17:23 TSI) (#11378)
Java programcıları da yavaş yavaş "language oriented programming", metaprogramming diyerek konuya giriş yapıyor, ısınma turları atıyorlar, Amerikayi yeniden keşfetmeleri güzel tabii, zararın neresinden dönülse kârdır şeklinde:

http://www.onboard.jetbrains.com/articles/04/10/lop/

Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

malkocoglu_2 @ Çarşamba, 8 Aralık 2004 (02:04 TSI) (#11379)
Guzel bir makale. Saniyorum bu teknolojinin secildigi zamanlar, 90 yillari sonlari, cunku web teknolojisinde o zamanlar daha kimin ustte cikacagi belli degildi, ve boyle egzotik secimler daha rahat kabul gorebiliyordu. Mesela, NeXtStep sirketinin (aziz Steve Jobs'in Apple'dan sonra kurdugu sirket) Objective C diliyle calisan, WebObjects adinda bir teknolojisi vardi. Hatta bir sure buyuk bir sukse yapti. Fakat kurumsal yazimlimci danisman sirketlerin bam telini yakalayamadilar. Insanlar belli bir sure sonra C/CGI'dan Java'ya gecti. O zaman icinde oldugum sirkette bu donusumu seyrettim.

Bir diger konu, Common LISP hakkindaki belgelerin hernedense nesnesel programciliktan fazla bahsetmiyor olmasi. Evet evet, fonksiyonel programcilik yapiyoruz, fakat kod duzenlemesi acisindan OO kavramlarinin dil ogretinde on plana getirilmesi iyi olur. CLISP cogunlukla "okulda ogrenilen bir sey" oldugu icin, algoritmik derslerin odevleri, yazilim muhendisligine fazla onem vermiyorlar. Bu normal. Fakat bu cocuk ileride sektorde calisirken bir kurumsal yazilima baslamak istediginde, CLISP'in "yazilim muhendisligi" kavramlarini tasimayan bir dil oldugunu dusunuyor zannediyorum. Halbuki Java, hersey mutlaka bir class icinde olmalidir mecburiyetinden baslayarak, cokyuzluluk, kalitim gibi teknikleri bir sicrama noktasi sagliyor. Belki bu acidan Ruby ve Phyton '"okuldan ise" daha rahat uyarlanabilir bir sey olacak, ve daha genis kurumsal uygulama alani bulacak.

Not: CLISP te yazilim muhendisligi kavramlari yoktur demiyorum, 10 yildir kullandigim GNU Emacs LISP dilinde yazilmistir, ve Stallman "LISP harikadir, tek cetrefil veri yapisi vardir, o da bir listeden ibarettir" der. Tabii ben faniler dunyasindan biri olarak cetrefil veri yapilarimi bir nesne agi (object graph) olarak gormeyi yeglerim, fakat ustadin dediklerini anliyorum. Herkesin anlamasini beklemek ve uygulamaya koymasini ummak, bos olabilir.

  • Object Reorientation, FZ @ Çarşamba, 8 Aralık 2004 (13:04 TSI)
  • Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    ttk @ Çarşamba, 8 Aralık 2004 (09:42 TSI) (#11387)
    Merhaba

    Bence harika ve isabetli bir seçim olmuş tercüme için bu yazının seçilmesi. Yamuk elbise dikip terzi kıtlığında bunu millete yutturanların kılıksız tercümelerine de hiç benzememiş, ne denilmek istenildiğini insan yazıyı okurken ister istemez anlıyor. Yazıyı seçen ve tercüme edenlerin tümünün ellerine sağlık, tabii kendilerine de.

    Geçen senenin sonlarında neler var diye bilgisayar kitaplarını karıştırırken sayın Mustafa Başer'in Python kitabını almış ve seneler sonra ilk defa bir programlama kitabını sonuna kadar okuyup bitirmiştim. Python ile yapılabilenleri görünce o zamana kadar gözüme gayet de yeterli gelen Delphi'nin balonu bir anda sönüverdi içimde. Özellikle de (kafam basmadığından da olabilir) Delphi'de bir türlü söküp anlayamadığım Class'ların Pythonda ne kadar kolay anlaşılır ve kullanılır olduğunu görünce Delphi'yi artık sadece mecburiyetten kullanıyor duruma düşmüştüm netekim.

    Lisp'e de az biraz buradaki daha önceki yazıların üzerine bakma fırsatım oldu, Lisp'de bir potansiyel var gibi geldi bana (pata küte - Lisp'severler üzerine saldırıp beş parmaklı fonksiyonlarla elemana girişir :)

    Karar verdim Lisp'çi olacam, dutmayın beniii .... Keloğlan gider perde kapanır.
    (Bunun adına Water'li feedback mi denir, neyse :)

    MySQL ve PHP kullananlar için Lisp makrolarına dair örnek

    FZ @ Çarşamba, 8 Aralık 2004 (13:00 TSI) (#11393)
    Aklıma gelmişken, zaman zaman öne sürdüğüm bir örnek vardır. Burada tekrarlayayım ve dilin içinde kalarak o dili genişletmek, makrolar, vs. ne demektir biraz daha iyi anlaşılsın.

    Malum çağımız bilgisayar çağı ve insanlar daha algoritma, sembolik mantık, veriyapıları mı o da ne filan demeden hoop gidiyorlar SQL'di, PHP idi falan iki üç "manual" okuyup mevzulara giriyorlar, site yapıyorlar. Hay hay yapılsın edilsin, piyasa hareketlensin, güzeldir :) Evrim sürüp gidiyor. Madem SQL bu kadar asgari müşterek o halde ondan örnek verelim:

    Bir veri tabanı tablomuz var, içinde de 50 alan (field, column, ya da her ne diyorsanız) var. Tüm alanları kapsayacak şekilde tüm satırları döndürmek istersem ne diyeceğim çoğunuzun malumu:

    SELECT * FROM BenimTablom

    Gayet güzel. Peki sadece birkaç alan istiyorsam? O da gayet basit değil mi:

    SELECT sütun1, sütun2, sütun3 FROM BenimTablom

    Bu da güzel. Şimdi şuna gelelim, eğer sadece bir alan hariç ya da iki üç alan hariç geriye kalan tüm alanları istiyorsam? Bir çözüm var mı evet, istemediğim sütunlar haricindeki tüm sütunları açık açık yazmak:

    SELECT sütun1, sütun4, sütun5, ..., sütun50 FROM BenimTablom

    İyi güzel de, yani neden bilgisayar benim yerime çalışmıyor ki? efsanevi Cowboy Bebop(*) çizgi filminin bir bölümündeki yaşlı ve huysuz uzay gemisi mühendisinin dediği gibi: Makinanın mı seni kullanmasını istiyorsun yoksa sen mi makinayı kullanmak istiyorsun?

    SELECT * EXCEPT sütun2, sütun3 FROM BenimTablom

    diyebilsem tam da düşüncemi doğal olarak kullandığım dile yansıtmış olmaz mıyım?

    DİKKAT! Yukarıda bahsettiğimiz şey SQL söz dizimini genişletmek. Bir tür metaprogramlama. Kullandığınız programlama dilini programlama yani. Hayır, üzgünüm, 21 günde MySQL ve PHP anlatan kitaplarda bu terimleri bulmanız mümkün değil.

    SORU: Bu genişletmeyi, bu işlevselliği SQL dışına çıkmadan yani sadece SQL'nin kendisini kullanarak yapabilir misiniz? (T-SQL ya da PL/SQL kullanarak string işlemleri yapan fonksiyon yazmaktan bahsetmiyorum, lütfen buna dikkat!)

    SERBEST ÇAĞRIŞIM: C programlama dili ile kendi SQL ayrıştırıcınızı (parser) yazıyorsanız evet bu tür bir söz dizim genişletmesi yapabilirsiniz. Gerçi öyle bir durumda da muhtemelen flex ve bison yani lex ve yacc yazılımlarının GNU muadillerini kullanıyor olursunuz. Bu da C, lex ve yacc gibi üç farklı sözdizimi ve semantik bilgisini başka bir deyişle üç farklı dili kullanmanız anlamına gelir.

    SONUÇ: Lisp ve makrolar derken işte yukarıdaki gibi şeylerden bahsediyoruz. Lisp'in dışına çıkmadan, Lisp'in kendisini kullanarak, tıpkı yukarıdaki örneğe benzer şekilde Lisp'i genişletebiliyorsunuz, sözdizimine eklemeler yapıyorsunuz ve sonra bunları kullanırken yabancı bir dil kullandığınız hissiyatına da kapılmıyorsunuz.

    Not: Kullandığınız SQL implementasyonunda (yani XYZ şirketinin çıkardığı ve kafasına göre, standartları bi tarafına takmayarak özellikler ekleyerek sunduğu somut veritabanı ortamında) bahsettiğim türde bir sözdiziminin varlığı (eğer varsa yani) bu örneğin açıklayıcılığını ve gücünü değiştirmez ;-)

    Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    tongucyumruk @ Çarşamba, 8 Aralık 2004 (15:17 TSI) (#11400)
    hmmm... http://www.gigamonkeys.com/book/ Böyle bir kitap var, ve bu kadar LISP konuşulan bir ortamda daha yeni anılıyor ha? Yakıştıramadım.. cık cık cık...

    Yok ama kendimi kontrol etmeliyim... Mor Kitap'ı tüm örneklerini çözerek bitirmeden diğer LISP kitaplarına geçmek yok!

    Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    skoylu @ Perşembe, 9 Aralık 2004 (09:04 TSI) (#11414)
    Ortada duran birisi, blox dilini kullansın. Aşağıya bakınca, BLOY dilini kullananları görürler. Bunlar X olmadan bu işi nasıl yapıyorlar diye böbürlenirler. Bu silsile böyle devam eder gider. LISP kullanan için Makro vay anam vay olmadan olmaz harikalar yaratan birşeydir. Python'un overload mekanizması da python'cuya öyledir.

    Bir gün bu grup biraraya gelip didinirlerken, yukarıdan gökgürültüsü gibi bir ses gelir:

    Titreyin ve kendinize gelin. Gercek mutluluk buradadır.

    Ve herkes C'yi görüp diz çöker..

    Olay budur. Adam vay LISP şöyle mükemmel diye ballandırır, ballandırır sonra da Biz o kodun bir bölümünü C ile yazmıştık der. Buyrun yakın buradan..

    Güçlü dil istiyorsanız C kullanırsınız. C kullanıcısı için LISP ve PYTHON ile oynamak anlık işlerdir. C Bir ordu gücü verir. Pyhon veya LISP ise ancak bir kuvvet olabilir (DEniz, kara, hava...)..

    Budur derim, Python ile COMAR Yazmaya giderim..

    Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    realist @ Perşembe, 9 Aralık 2004 (15:56 TSI) (#11417)
    Değerli arkadaşlarım;

    Maalesef birinin bunu söylemesi gerekiyor. Lisp kullanmakla 40 milyon dolar kazanmak arasında doğrudan bağlantı yoktur. Araç başka, amaç başkadır.

    Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    e2e @ Cuma, 10 Aralık 2004 (02:45 TSI) (#11418)
    Kaç gündür bu yazıyı ve yazılan yorumları imrenerek takip ediyorum. CL üzerine yürüyen, ya da öyle görünen bu tartışmadan çok şey aldığımı söylemeliyim.

    Fakat benim asıl merak ettiğim, aslında en çok tartışılan konulardan biri olan, "göreve göre dil" konusu. Örneğin, "Bir sistem yöneticisi şu dille ilgilenmeli", "programcılığa yeni başlayan fakat devam ettirmek isteyen şununla başlamalı", "kafayı ağlarla bozmuş biri şu dille mutlaka haşır-neşir olmalı", "hiçbir şeye ilgisi olmasa da, iyi bir bilgisayar kullanıcısı en azından şu dile bir gözatmalı" vb. gibi belirlemeler yapılabilir mi? Sizlerin bu konulardaki önerileri nelerdir?

    Online bir Common Lisp kitabı

    sundance @ Cuma, 10 Aralık 2004 (08:43 TSI) (#11421)
    http://cl-cookbook.sourceforge.net/

    Bu, meşhur O'Reilly Perl kitabı olan, Perl Cookbook'u model alan bir Lisp kitabı projesi.

    Benim hoşuma gitti bir bakmakta fayda var.
  • Re: Online bir Common Lisp kitabı, bm @ Cuma, 10 Aralık 2004 (08:55 TSI)
  • Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    Nightwalker @ Cuma, 10 Aralık 2004 (12:50 TSI) (#11425)
    Lisp FAQ türkçe için: http://www.paulgraham.com/lispfaq1.html

    Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    Nightwalker @ Cuma, 10 Aralık 2004 (12:50 TSI) (#11426)
    Lisp FAQ türkçe için: http://www.ceviz.net/index.php?case=article&id=345&catid=49

    Re: Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü

    FZ @ Pazar, 16 Ocak 2005 (09:38 TSI) (#12170)
    http://www.paulgraham.com/avg.html adresindeki özgün makalenin altında Türkçe çeviriye bağlantı veren Paul Graham'a teşekkürler.

    FM Kare:
    Schrödinger'in Kedisi


    8 yorum


    FM GİRİŞ

    Kullanıcı Adı:
    Şifre:

    Şifremi Unuttum Yeni Kullanıcı

    ORTAMDAKİLER (5 Dakika)

    • 32 ziyaretçi
    • Bugün, 18569 sayfa görüntüleme (651 unique)
    SON YORUMLAR

    ALEV ALEV (Son 15 gün)

    GEÇMİŞ MAKALELER

    FM TARİHİNDE BUGÜN




    Cuma, 3 Eylül 2010, 14:10 TSI