Programlamanın Yedi Prototip Dili (2022)
(madhadron.com)- Tekil sözdizimlerinden çok temel örüntü kümeleri arasındaki farklar daha önemlidir; programlama dilleri yineleme, özyineleme ve yapılandırma biçimlerine göre yedi prototip dile ayrılır
- ALGOL, Lisp, ML, Self, Forth, APL, Prolog temel sınıflandırmayı oluşturur; her aile, diğer dillerin soyunu değerlendirmek için temsilî bir dili referans örnek olarak alır
- Aşina olunan bir prototip dili paylaşan yeni bir dili öğrenmek kolaydır, ancak yabancı bir prototipe geçildiğinde yeni düşünme yolları ve hatırı sayılır öğrenme süresi gerekir
- ALGOL atama, koşul ve döngü merkezli işlev organizasyonuyla; Lisp makrolar ve liste olarak kod ile; ML birinci sınıf fonksiyonlar ve özyineleme ile; Self mesajlaşan nesneler ile; Forth yığın tabanlı sözdizimi ile; APL n boyutlu diziler ile; Prolog ise olgular ve arama yapısıyla öne çıkar
- Tüm programcılar için önce ALGOL ailesi dillerde yetkinleşmek önceliklidir; ardından SQL öğrenmek ve sonrasında yabancı prototip dilleri düzenli olarak edinmek uzun vadede daha avantajlıdır
Programlamanın Yedi Prototip Dili
- Programlama dili seçerken, tekil sözdizimi farklarından çok temel örüntüleri edinmek daha önemlidir; benzer ailelerde dizi dolaşımı ya da kombinasyon dolaşımı gibi temel yapılar neredeyse aynı biçimdedir
- Farklı dil aileleri yineleme, özyineleme ve programı kurma biçimi açısından büyük ölçüde ayrılır; bu temel örüntü kümeleri de birbirinden farklı prototip dilleri oluşturur
- Aşina olunan bir prototip dili paylaşan yeni bir dili öğrenmek görece kolay bir geçiştir, ancak yabancı bir prototip dile geçerken ciddi zaman ve yeni düşünme yolları gerekir
- Yazılım alanında tanınan prototip diller yedi tanedir: ALGOL, Lisp, ML, Self, Forth, APL, Prolog
- Her prototip dil, belirli bir temsilî dili referans örnek olarak alarak sınıflandırılır; diğer diller de bu örnekle karşılaştırılarak hangi soya ait olduklarına göre değerlendirilir
-
ALGOL
- Program, atamalar, koşullu ifadeler ve döngülerden oluşan bir dizi halinde kurulur ve işlevler etrafında örgütlenir
- Birçok dil buna modül sistemleri, yeni veri türü tanımlama yolları, çok biçimlilik, istisnalar veya coroutine gibi alternatif denetim akışı yapıları ekler
- Günümüzde yaygın kullanılan programlama dillerinin çoğu bu prototip dil soyuna aittir
- ALGOL’ün kendisinde ALGOL 58, ALGOL 60, ALGOL W, ALGOL 68 bulunur
- Assembly language, Fortran, C, C++, Python, Java, C#, Ruby, Pascal, JavaScript ve Ada bu soya bağlanır
- En eski prototip dildir; soy ağacı Ada Lovelace’ın Babbage’ın Analitik Makinesi için programları biçimselleştirmesine kadar uzanır
- EDVAC ve ilk Univac’a uzanan Eckert-Mauchly mimarili bilgisayarların makine dili ve assembly dilleri ile Grace Hopper’ın A-0’ından Fortran ve COBOL’a giden ilk yüksek seviye dil denemeleri bu biçimdedir
- 1960’larda akademide yapısal programlama gelişerek bu dilleri daha yönetilebilir hale getirdi; bunun sonucu ALGOL 60 oldu ve daha sonra aile üyelerinin çoğu buradan türedi
- Zamanla diğer prototip dillerin özelliklerini bünyesine katma eğilimi gösterdi
- 1980’lerde Self ailesi kavramları sınıf biçiminde eklemlenerek veri türü tanımı ve çok biçimliliği gerçekleştirme aracı olarak kullanıldı
- 2010 sonrasında ML ailesi kavramları da görünmeye başladı
-
Lisp
- Parantez içine alınmış önek ifadeler ile liste gösterimini birleştiren bir sözdizimine sahiptir
(+ 2 3)(defun square (x) (* x x))(* (square 3) 3)
- Boşlukla ayrılmış öğeleri parantez içine alan liste gösterimi dile gömülüdür; bu yüzden kodun kendisi de liste biçimindedir
- Makrolar listeleri alıp değiştirdikten sonra değiştirilmiş kodu derleyiciye verebildiğinden, programcılar dilin anlamını yeniden tanımlayabilir
- Çoğu kod yazımında diğer prototip diller gibi, genellikle ALGOL ya da ML gibi davranma eğilimindedir; ancak ayırt edici nokta makro sistemidir
- Common Lisp’teki
loopsözdizimi de dilin yerleşik bir özelliği değil, makroyla tanımlanmış bir yapıdır - Başlangıçta birçok Lisp türevi vardı, ancak topluluk Common Lisp üzerinde uzlaştı
- Sussman ve Steele, fonksiyonlarla nelerin yapılabileceğini araştırarak Scheme’i yarattı
- Sayısal hesaplama için Lush, AutoCAD betik dili AutoLISP, Emacs düzenleme davranışlarını gerçekleştiren Emacs Lisp gibi özel amaçlı Lisp’ler kullanıldı
- Son dönemde Clojure, Lisp ailesinin üçüncü büyük dalı olarak yükseldi
- Fortran’dan yaklaşık bir yıl sonra ortaya çıkan ve bugün hâlâ kullanılan en eski ikinci dil ailesidir
- Çıkış noktası, kendi ifadelerini değerlendirebilen bir matematiksel yapının nasıl gösterileceğine dair matematiksel bir soruydu
- John McCarthy 1958’de buna bir yanıt verdi ve ardından bilgisayarda uygulandı
- İlk Lisp’ler, matematiksel kökenleri nedeniyle dönemin makineleriyle iyi uyuşmuyordu; bellek ve CPU çevrimi sorunları matematikte olmayan konulardı ve garbage collection gibi teknikler gerekli hale geldi
- 1970’lerin sonu ile 1980’lerin başında, yalnızca Lisp çalıştırmak için sıfırdan tasarlanmış makineler vardı
- Bugünkü tümleşik geliştirme ortamlarının birçok ögesi o makinelerde icat edildi
- Aynı dönemde yapay zeka araştırmalarının ana aracı Lisp’ti; 1980’lerde yapay zeka heyecanı sonuç vermeyince alanla birlikte Lisp de AI Winter içine düştü
- Buna rağmen hayatta kaldı; bilgisayarların güçlenmesi ve diğer dillerin özelliklerini benimsemesiyle uygulama zorlukları azalmış durumda
- Parantez içine alınmış önek ifadeler ile liste gösterimini birleştiren bir sözdizimine sahiptir
-
ML
- Fonksiyonlar birinci sınıf değerlerdir ve çeşitli fonksiyonları ve etiketli birleşimleri ifade edebilen Hindley-Milner ailesi tür sistemine sahiptir
- Tüm yineleme özyineleme ile yapılır
sum [] = 0sum (x:xs) = x + sum xs
- Yineleme örüntülerini kapsülleyen fonksiyonlar tanımlanır ve başka fonksiyonlar alarak davranışı uygulayan yapılar da kullanılır
map _ [] = []map f (x:xs) = (f x) : (map f xs)
- Miranda ve Haskell gibi bazı diller varsayılan olarak tembel değerlendirme kullanır
- Başka diller tür sistemini farklı yönlere genişletmiştir
- OCaml, Self prototip dili kavramlarıyla birleşmeyi denedi
- Agda ve Idris, değerlerle türleri karıştıran bağımlı tür sistemlerini benimsedi
- 1ML, modüllerle türleri birleştirir
- ML’den CaML, Standard ML, OCaml türedi
- Miranda, Haskell, Agda, Idris gibi ilişkili soylar da devam etti
- ML, İngiltere Cambridge’de geliştirilen bir ispat denetleyici programının metalanguage’i idi; adı da buradan gelir
- Daha sonra bu bağlamın dışına çıkarak bağımsız bir dil olarak yayıldı ve özellikle İngiltere ile Fransa merkezli olarak Avrupa’da popülerlik kazandı
-
Self
- Program, birbirine mesaj gönderen nesneler kümesi olarak kurulur ve tüm davranışlar bu yolla gerçekleştirilir
- Yeni nesneler, mevcut nesnelere mesaj gönderilerek oluşturulur
- Koşullu ifadeler bile true nesnesi ile false nesnesinden birine başvuran bir değişken aracılığıyla gerçekleştirilir
- Bu iki nesne, doğru olduğunda çalıştırılacak bir fonksiyonla yanlış olduğunda çalıştırılacak başka bir fonksiyonu parametre olarak alan bir mesaj alır
- true nesnesi ilk fonksiyonu, false nesnesi ise ikinci fonksiyonu çalıştırır
- Çağıran kod hangi nesne olduğunu bilmez; yalnızca mesaj gönderir
- Döngüler de aynı şekildedir; uygun nesneler oluşturulup uygun yerlere konursa dilin tüm anlamı yeniden tanımlanabilir
- Bu tür dillerde kaynak kod genellikle metin dosyalarında değil, canlı bir ortamda saklanır
- Programcı canlı sistemi değiştirir ve dosyaları derleyip sistemi kurmak yerine o durumun kendisini kaydeder
- Önemli örnekler Smalltalk ve Self’tir
- Birçok dil bu ailenin mesaj geçirme tarzını kısmen benimser; buna genellikle nesne yönelimli programlama denir
- Bunların çoğu Smalltalk temellidir; yalnızca JavaScript, Self’in sınıfsız nesne sisteminden türemesiyle istisna oluşturur
- Common Lisp’in nesne sistemi, çalışma zamanının çalıştırılacak kodu yalnızca mesaj alan tek nesneye göre değil tüm parametrelere göre seçmesine izin verecek şekilde genellenmiştir
- Erlang, yürütme akışının nesneler arasında dolaşması yerine, paralel yürütme iş parçacıklarının açıkça mesaj dinleyip gönderdiği bir yöne döner
- Özgün dil Smalltalk’tır ve 1970’lerin sonu ile 1980’lerde Xerox Parc’ta geliştirildi
- 1980’lerde çeşitli ticari Smalltalk sistemleri vardı; IBM, başka diller için programlama araçları olan VisualAge koleksiyonunu geliştirmede Smalltalk kullandı
- Günümüzde Smalltalk başlıca açık kaynak Pharo Smalltalk biçiminde yaşamını sürdürür
- Smalltalk’ı hızlı ve verimli çalıştırma üzerine çok araştırma yapıldı; bunun zirvesi Strongtalk projesiydi
- Strongtalk’ın bulgularının Java’nın HotSpot JIT compiler temelini oluşturması tarihsel açıdan önemlidir
- Smalltalk, önceki dillerin değer ve tür kavramlarını devralarak sınıfları gerçekleştirdi; her nesnenin onu türlendiren bir sınıfı vardı ve sınıf da o türden nesneleri üretiyordu
- Self, sınıf kavramını çıkarıp yalnızca nesnelerden oluşur
- Daha saf bir biçim sunduğu için bu prototip dilin referans örneği olarak Self seçilir
-
Forth
- Yığın dilleri, Lisp’in ters görüntüsü gibidir ve Hewlett Packard’ın ters Polonya gösterimli hesap makineleriyle sözdizimini paylaşır
- Bir veri yığınına sahiptir;
42gibi bir sabit yazıldığında bu değer yığına itilir ve fonksiyon adları açık parametreler olmadan yığın üzerinde çalışır - Basit aritmetik bile
2 3 + 5 *gibi ters çevrilmiş görünür - Fonksiyon tanımı da son derece özlüdür
- Forth türevlerinin çoğunda
:yeni bir sözcük tanımlar square,dupve*çağrılarıyla aynı anlama gelirdupyığının tepesini çoğaltır,*ise en üstteki iki öğeyi çarpar
- Forth türevlerinin çoğunda
- Ayrıştırıcı ele geçirilebilir ve kendi kodunuzla değiştirilebilir; böylece tüm sözdizimi değiştirilebilir
- Forth programlarında, Fortran alt kümeleri, paket yerleşimleri ya da durum makinesi geçişlerini gösteren ASCII diyagramlarını doğrudan ayrıştıran küçük diller tanımlamak yaygındır
- Forth’ün çeşitli türevleri, PostScript, Factor ve Joy buna dahildir
- Joy, yığın yerine bileşimin matematiksel biçimselliğini kullanan saf işlevsel bir dildir
- Forth ilk kez 1970’te radyo teleskop kontrolü için yazıldı
- Sonrasında gömülü sistemlerin geneline geniş ölçüde yayıldı
- Forth sistemlerini bootstrap etmek yeterince kolay olduğundan, farklı programcıların kendi amaçlarına göre yaptığı onlarca türev ortaya çıktı
- PostScript, 1980’lerde yazıcılarda belgeleri tanımlamanın esnek bir yolu olarak ortaya çıktı
- PostScript birçok bakımdan Forth’tan daha kısıtlıdır, ancak grafik yerleşime ilişkin temel işlemleri dilin içine tanımlar
-
APL
- Dildeki her şey n boyutlu dizilerdir
- İşleçler bir ya da iki simgeden oluşur ve tüm dizi üzerinde yüksek seviyeli işlemler uygular
- İfade son derece sıkıştırılmıştır; simge dizisinin kendisi, başka adlar verilmeden de işlemin göstergesi olur
- Örneğin
xdeğişkeninin ortalaması(+⌿÷≢) xbiçiminde hesaplanır - APL, J, K başlıca örneklerdir
- Diziler üzerindeki yüksek mertebeli işlemler MATLAB, NumPy ve R gibi birçok ortama kısmen aktarılmıştır
- APL, 1960’larda Kenneth Iverson’ın geliştirdiği matematiksel bir gösterimden doğdu ve sonra bilgisayarda uygulandı
- Yoğun hesaplama yapan insanlar arasında o zamandan beri niş bir destekçi kitlesini korudu
- Soyundan gelen K dili özellikle finans ortamlarında çok popülerdi
-
Prolog
- Program, olgular kümesinden oluşur
father(bob, ed).father(bob, jane).
- Değişkenler kullanılarak başka olgulardan olgu türeten topraklanmamış olgular da kullanılır
grandfather(X, Y) :- father(X, Z), father(Z, Y).
- Prolog çalışma zamanı bu olguları ve sorguyu alır, sonucu bulmak için arama yapar
- Olgu tanımlama yapısı uygun seçilirse Turing tamlığı elde edilir
- Prolog’daki olguları oluşturan terimler başlı başına özgün veri türleridir ve oluşturulup çalışma zamanına geçirilebilir
- Bu yönüyle Lisp’teki makrolara ya da Forth’taki ayrıştırıcı değiştirmeye benzer bir konumdadır
- Prolog programı özünde bir arama olduğundan, veritabanı sorgularında olduğu gibi çoğunlukla arama sırasını ayarlama ve verimsiz yolları erken kesme etrafında ayarlanır
- Prolog, Mercury, Kanren buna dahildir
- Bu prototip dil ailesindeki gerçek programlamanın büyük kısmı Prolog’un kendisinde yapılır; topluluk da oldukça birleşiktir
- 1970’lerde Fransa’daki mantıkçılar, programların birinci dereceden mantık ile ifade edilebileceğini fark edip bunu uygulamaya çalıştı
- 1980’lerde Japonya’nın beşinci nesil bilgisayar projesi Prolog’a büyük yatırım yaptı; ancak projenin başarısızlığıyla birlikte Prolog’un itibarı da geriledi
- Buna rağmen, onlarca yıl boyunca Prolog çalışma zamanını çoğu durumda verimli hale getirmek ve yeni özellikler eklemek için araştırmalar sürdü
- Sayısal kısıtlar gibi özelliklerin eklenmesiyle kısıt mantık programlamasına doğru uzandı
- Prolog niş alanlarda ortaya çıkmayı sürdürür
- Java’nın tür denetimi uzun yıllar Prolog ile gerçekleştirildi
- Facebook’un ilk kaynak kod arama aracı da Prolog tabanlıydı
- Program, olgular kümesinden oluşur
Nasıl yararlanmalı
- Çoğu programcı için bu dil ailelerinin bir kısmı ya da tamamı oldukça yabancı görünebilir; ancak her birinin açtığı düşünme yolları ve yeni olanaklar için belli bir zaman yatırımı yapmaya değer
- ALGOL bakış açısından tamamen farklı görünen iki şeyin, başka bir bakış açısından önemsiz bir karşılaştırma haline gelmesi çok sık rastlanan bir durumdur
-
Öncelik
- Her programcı ALGOL ailesinden bir dili iyi bilmelidir
- Bundan sonra Prolog ailesinden bir dil olan SQL öğrenilmesi önerilir
- Kariyerde ALGOL’den sonra en büyük faydayı sağlayan konumdadır
-
Sonraki genişleme
- Bu iki aile öğrenildikten sonra, her yıl yabancı bir prototip dil ailesinden yeni bir dil öğrenmek uzun vadede kazanç sağlar
- Her aile için önerilen dil ve sıra şu şekildedir
- Lisp: PLT Racket
- ML: Haskell
- Self: Self
- Prolog: Prolog
- Forth: gForth
- APL: K,
oküzerinden kullanılarak
-
Sırayı ayarlama
- Çok sayısal hesap yapıyorsanız K’yi daha erken öğrenmek uygundur
- Çok gömülü programlama yapıyorsanız gForth’u daha erken öğrenmek uygundur
- Ancak sıranın kendisi ya da tam olarak hangi dili seçtiğiniz o kadar da önemli değildir
- Haskell yerine Standard ML ya da OCaml, PLT Racket yerine Common Lisp, gForth yerine Factor öğrenmek de uygundur
-
Dipnotlardaki ekler
- SQL öğrendikten sonra bile Prolog’un kendisini öğrenmek hâlâ gereklidir
- Çünkü gerçek kullanım biçimi SQL’den oldukça farklıdır
- Forth’u derinlemesine anlamak için bir Forth uygulamasını doğrudan yazmanın yaygın bir yaklaşım olduğuna dair okur görüşü de yer alır
- Forth’un, tek bir kişinin görece kısa sürede sıfırdan uygulayabileceği kadar küçük olduğu belirtilir
- gForth, ANS Forth öğrenmek için iyi bir uygulamadır
- Öğrenme kaynağı olarak McCabe’in FORTH Fundamentals, Volume 1 kitabı anılır
- Birlikte bakılabilecek başka Forth’ler olarak PygmyForth, eForth, colorForth anılır
- SQL öğrendikten sonra bile Prolog’un kendisini öğrenmek hâlâ gereklidir
5 yorum
Eğlenceliymiş.
Üniversitedeyken ALGOL ailesi, Lisp ve Prolog ile bölüm dersleri görüp ödevler yapmıştım; anıları tazeledi.
Bu diller modern ana akım programlama dillerine çok şey bıraktı,
ama bunların arasında yalnızca Forth'un etkisi daha az gibi görünüyor.
Ön ek gösterimini bilmeseniz bile, son ek gösterimiyle kod yazmak gerçekten fazla kullanışsız.
Hacker News görüşleri
Tufts’taki PL dersinde emirsel, Lisp, ML, Smalltalk öncesindeki 4 dil ailesinin her biri için mini bir sürüm bizzat yapmıştım; o sürecin şimdi ders kitabı olarak da çıkmış olması sevindirici. Eskiden bir Prolog bölümü de vardı, onun çıkarılmış olması üzücü
Bu yazının sınıflandırmasında tek bir şeyi düzeltecek olsam, Ruby’yi Algol ailesinden ziyade açıkça nesne yönelimli bir dil olarak görürdüm. Smalltalk etkisi büyük ve standart kütüphane adlarında bile
mapyerinecollectgibi izleri kalmış. Ruby’de baştan sona her şey nesnedir ve metot çağrılarını da nesnelere mesaj gönderme kavramıyla anlamak daha doğaldır. Python ile sık sık karşılaştırılsa da evrim yolları epey farklıydı; bugünse benzer bir ekosistem noktasında yakınsamış gibiler. Bana göre Ruby, Python’dan daha sıcakkanlı bir alpaka gibi hissettiriyorHello Worldseviyesinde çok belli olmasa da, temel tiplerin tamamı da nesne oldu. OOP’yi sevmeyenleretype(42)vedir(42)göstermek, tamsayıların bile nesne olduğunu vurgulamak için iyi oluyorDil soy ağacına kanıt ifade dilleri diye bir sınıf daha eklemek isterdim. Curry-Howard bağıntısıyla programların aynı zamanda kanıt olduğu aile; Lean bunun tipik örneği. Bunu işlevselin alt sınıfı olarak da görebiliriz ama asıl amacın çalıştırmadan çok doğrulama olması nedeniyle ayrı bir eksen olarak ele alınmayı hak ettiğini düşünüyorum
Yakın zamanda dil karşılaştırma projesine tekrar baktım; 10 karakter için 3,715,891,200 signed permutation’ı paralel olarak cycle decomposition yapan bir benchmark’tı. “Prototip diller”den çok, her paradigmanın modern uygulamaları içinde araştırma amaçlı programlama için gerçekten seçilebilir dilleri bulmak istiyordum. Yalnızca performansa değil, yapay zeka yardımıyla çalışmanın ne kadar kolay olduğuna ve kodu okuyup düşünmenin bana ne kadar uygun geldiğine de baktım; yapay zeka sayesinde her dili epey derin optimize ederek bir tür turistik gezi yapmak da mümkün oldu. Sonuçları burada topladım; özellikle F#’ın en üste çıkması oldukça şaşırtıcıydı
Ben de benzer bir yazıyı burada yazmıştım. Algol, Lisp, Forth, APL, Prolog’a katılıyorum; ama yenilikçi işlevsel dil olarak ML’den biraz daha eski olan SASL’ı ekledim, nesne yönelimli temsilci olarak da Self’ten önce gelen Smalltalk’ı seçtim. Buna ek olarak Fortran, COBOL, SNOBOL ve Prograph’ı da kendi yöntemleriyle oyunu değiştiren diller olarak dahil ettim
Bu tartışmaya anlamsal aileler de eklemek isterim. Verilog, Petri nets, Kahn process networks, dataflow machines, process calculi, reactive, term rewriting, constraint solver/theorem prover ailesi, probabilistic programming gibi şeyler. Ayrıca mevcut 7 sınıfa tam oturmayan ama fiilen üretim aşamasına yaklaşmış Unison, Darklang, temporal dataflow, DBSP gibi diller de akla geliyor. Biraz hile gibi görülebilir ama bunların çoğu von Neumann tarzı makine modeline paralel hesaplama modelleri. Uzun süredir “Bildiğimiz tüm hesaplama biçimleri, von Neumann’ın ötesinde” gibi bir yazı yazmak istiyorum
1+1ifadesiniADD(1,1)benzeri bir biçime yeniden yazarak bildiğim şekilde parse edebileceğimi fark ettim. Üstelik regex öğrenmeye inatla direndiğim için kod oldukça tuhaflaşmıştı ve bir takım arkadaşımın “Andy çalıştırabiliyorsa dokunmayalım” dediği laf hâlâ aklımda. Başka ekipten biri regex ile benim kodun yaklaşık 20’de 1’i uzunluğunda bir çözüm yazmıştıTU Delft’te aldığım “Concepts of programming languages” dersi bilgisayar mühendisliğinde en sevdiğim dersti. C, işlevsel tarafta Scala ve prototip kavramı için JavaScript öğrendik; bu sayede birkaç yıl sonra Elixir öğrenmek çok daha kolay oldu. Ayrıca Unreal Tournament ajanlarını GOAL adlı Prolog tabanlı bir dille yazdığımız bir ders de vardı. Uzun süre Prolog’u nerede kullanacağımı kestirememiştim ama sonunda, LLM’in ürettiği kötü Papiamentu cümlelerini tekrar tekrar düzeltmeye zorlayan bir spellcheck yapmakta kullandım
“Farklı sınıflardan diller öğrenmek gerekir” görüşüne katılıyorum. OCaml öğrendikten sonra fonksiyonlar bana ilk kez gerçekten matematiksel fonksiyonlar gibi hissettirdi; Mathematica ise ifadelerin kendisini girdi olarak görme alışkanlığı kazandırdı. PostScript’in ters Polonya gösterimi, basit aritmetiğin ötesinde düşünme biçimimi resmen yeniden kabloladı. Ama Java, C#, C++, Python, Ruby arasında hangisini seçersen seç fark etmez iddiasına katılmıyorum. Amaç quicksort uygulamaksa benzer olabilirler ama gerçekten bir şeyler üretmek isteyen biri için dil seçimi geceyle gündüz kadar büyük bir fark yaratıyor. 3D oyun yapmak isteyen birine Ruby’yi, keşif odaklı veri bilimi veya derin öğrenme yapmak isteyen birine de önce Java’yı verirsen hevesini kırabilirsin
Bu yazı bana Bruce Tate’in 7 languages in 7 weeks kitabını hatırlattı. Ben de Erlang ile ilk kez o kitap sayesinde tanışmıştım. Ama tarihsel olarak COBOL ve Fortran’ı Algol ailesine koymak bana biraz zorlama geliyor; yine de tarihin doğası gereği belli ölçüde indirgemeci özetler içerdiğini hatırlatıyor
Bununla ilgili daha önce bir HN tartışması da vardı. Önceki tartışma da birlikte okunursa bağlamı anlamaya yardımcı olur