Matematik öğrenmeyi analitik becerilerinizi geliştirecek ve latin / klasik edebiyatı öğrenmeyi yazma becerilerinizi geliştirecek gibi.
Bu dilleri tasarlayan insanlar, bir program yazmanın ne anlama geldiğini düşünmüşlerdir. Ve bu diller bu araştırmaların sonucudur.
Bununla birlikte, Java'yı öğrenmek sizi daha iyi bir programcı yapacak. Ve öğrenme C. Asıl faydaları, farklı felsefelerle dil öğrenmekten gelir. O zaman bir programın yazılması gerektiği hakkında kendi fikriniz olabilir.
Düzenle
Bu cevabın henüz haskell ve / veya lisp öğrenmemiş insanlar için çok faydalı olmadığını fark ettim. İşte ne demek istediğimi daha fazla açıklamak için bazı örnekler
LISP
Lisp, sözdiziminin minimum olması gerektiğine ve her şeyin bir liste veya ilkel olması gerektiğine inanmaktadır (Lisp, Liste İşleme anlamına gelir). Programlar bile çoğunlukla diğer listeleri ve sembolleri içeren listedir. Lisp, programları liste halinde değiştirmenize ve anında yeni programlar oluşturmanıza olanak sağlar. Dolayısıyla tüm code is data and data is code
slogan.
Sonuç, Lisp dillerinin istediğiniz herhangi bir arayüzü tanımlamanıza izin vermesidir. Güzel bir örnek, bir clojure web çerçevesi olan birleşiktir. İşte bir yönlendirme işlevi neye benziyor
(defroutes app-routes
(GET "/" [] view/page)
(GET "/api" [] (wrap-aleph-handler api/socket-handler))
(route/resources "/static")
(route/not-found "page not found"))
Bir başka güzel örnek hıçkırık şablonlama çerçevesidir:
(html [:ul
(for [x (range 1 4)]
[:li x])])
Gördüğünüz gibi, sonuç bıyık gibi DSL kadar özlü, ancak gibi dil özelliklerini kullanmanıza izin veriyor (for [x (range 1 4)] block)
. Daha iyi bile olsa, kodunuzu tasarlamak ve yapılandırmak için tüm araçlara sahipsiniz.
Diğer dillerde, sözdizimi daha karmaşık. Bir Java programını liste halinde okuyamazsınız. Ancak Lisp'i kullanarak ideal bir arayüzün neye benzemesi gerektiği ve kodunuzda veri olarak soyutlanabileceği hakkında daha iyi bir fikir edinebilirsiniz. Ayrıca en sevdiğiniz dili büyük bir veri yapısı olarak görmenize ve anlamını daha iyi anlamanıza yardımcı olur.
Haskell
Haskell, güçlü statik yazım ve saflığa inanır. Saf fonksiyonlar matematiksel fonksiyonlara benzer: bir değer kümesinde tanımlanırlar ve bunları başka bir kümede eşler. Fonksiyonun yan etkileri yoktur ve değerler değişmezdir. Saflık ilginç çünkü çok paradigma bir dilin sahip olabileceği bir şey değil. Bir dil ya saf ya da değil.
Bunun bir sonucu, istediğiniz zaman GÇ eylemini gerçekleştirememenizdir (haskellers bunun iyi bir şey olduğuna inanmaktadır). IO eylemleri, kendileri saf değerler olan işlemler olarak tanımlanır. main
Bir haskell programının değeri program çalıştırdığınızda yürütülen bir IO işlemidir.
Programınızdaki veri akışı ile açıkça ilgilenmeniz gerekir. Global bir değişkene bir şeyler yazıp okuyarak iki bileşenin iletişim kurmasını sağlayamazsınız. Değerler inşa etmek ve geçmek zorundasınız.
Jimmy Hoffa'nın bahsettiği bir diğer özellik ise zengin tip sistem. Diğer diller statik yazarken, haskell'de şöyle şeyler olabilir:
length :: [a] -> Int
(Bir 's listesinden bir int' ye işlev)
map :: (a -> b) -> [a] -> [b]
(bir a to b
dönüşümü ve bir 's bir listesini alır ve b' s bir listesini döndürür)
İşin güzel yanı, bu işlevin gerçekte ne yaptığını açıklamaya ihtiyacım olmaması: onların davranışlarını zaten anlıyorsunuz. Dahası, bu imzalara sahip fonksiyonlar gerçekten hiçbir şey yapamaz, bir listenin uzunluğunu hesaplar ve listedeki bir dönüşümü eşler.
Yazılan diğer dillerde, değişkenlikle birleştirilmiş sınıf hiyerarşileri bu tiplerle başa çıkabilmek bir kabustur. Dil perspektifinden (yani basit, güçlü ve güvenli) doğru olarak elde edilmesi imkansız olan kovaryans ve kontravaryans gibi şeyleri anlamanız gerekir.
Ya güvenli yoldan (skala gibi) geçersiniz ve gerçekten karmaşık bir dille karşılaşırsınız ya da basit yolu izlersiniz ve ya sınırlı olan bir şey alırsınız (ya da her zaman listelenen google go jenerikler) ya da güvensiz (dart jenerikler bildirdiğinden).
Haskell kullanarak, çoğunlukla saflığın faydalarını ve saf kodun nasıl yazılacağını öğrenirsiniz.