Temel olarak, harika bir programcı olmak için birçok programlama dili öğrenmek istiyorum. Ben sadece bir avuç derinlik biliyorum ve Birisi kaç sınıf veya üzerinde ayrıntılı umuyordum programlama dillerinin türleri vardır. Gruplar halinde öğrenmek zorunda olsaydınız, onları nasıl toplayacağınız gibi.
Bir Java arka plandan geliyor, statik yazmayı biliyorum, ancak dinamik yazmanın yanı sıra, kategorik bir arıza görmek isterim mevcut dillerde çok çeşitli olması gerektiğini biliyorum Eğer mümkünse.
Dilleri nasıl sınıflandırmak istediğinize bağlıdır. Temel olarak, diller iki türe ayrılabilir: zorunl bilgisayara talimat verdiğiniz diller ve bildirici bilgisayara ne yapacağınızı söylediğiniz diller . Deklaratif diller ayrıca bir programın fonksiyonlar oluşturduğu fonksiyonel dillere ve mantık programlama dilleri olarak ayrılabilir. mantıksal bağlantılar. Zorunlu diller bir sorunu çözmek için atılan adımların bir listesi gibi, daha çok bir tarif gibi okunur. Zorunlu diller arasında C, C++ ve Java; fonksiyonel diller arasında Haskell; mantık programlama dilleri Prolog'u içerir.
Zorunlu diller bazen iki alt gruba ayrılır: prosedürel C gibi diller ve nesneye yönelik diller. Nesne yönelimli diller, gruplara göre biraz diktir, ancak nesne yönelimli fonksiyonel diller vardır (OCaml ve Scala örneklerdir).
Dilleri ayrıca şunu yazarak gruplayabilirsiniz: statik ve dinamik. Statik olarak yazılan diller, programı çalıştırmadan önce (tipik olarak bir derleme aşamasında) yazmanın kontrol edildiği (ve genellikle zorlandığı) dillerdir; dinamik olarak yazılan diller, tür denetlemesini çalışma zamanına erteler. C, C++ ve Java statik olarak yazılan dillerdir; Python, Ruby, JavaScript ve Objective-C dinamik olarak yazılan dillerdir. Ayrıca türsüz diller, Bu da Forth programlama dilini içerir.
Dilleri yazarak disipliniyle : zayıf yazarak, örtük tür dönüşümlerini destekleyen ve güçlü) yazarak, örtük tür dönüşümlerini yasaklar. İkisi arasındaki çizgiler biraz bulanık: Bazı tanımlara göre, C zayıf yazılmış dillerdir, diğerleri ise güçlü yazıldığını düşünmektedir. Disiplin yazmak, dilleri gruplandırmak için gerçekten yararlı bir yol değildir.
Bunlar ana olanlar, ama orada başka birçok paradigma var ve aralarında çok fazla çakışma var.
Bakmalısınız Dummies için Programlama Paradigmaları: Her Programcının Bilmesi Gerekenler Peter Van Roy. Bu, dışarıda nasıl devam ettiği hakkında bir genel bakış sunar.
Daha ileri gitmek isterseniz Bilgisayar Programlama Kavramları, Teknikleri ve Modelleri bölümünü okuyabilirsiniz. Bu şekilde bir dil bannını öğrenmeyeceksiniz, ancak farklı dil türlerinin arkasında yatan paradigmaları öğreneceksiniz. Böylece, yeni bir dil öğrenmek sizin için daha kolay olacaktır.
Prosedür: Montaj, Java, C #, F #, LISP, Fortran.
Küme temelli: SQL.
Desen tabanlı: Perl, Regex, Snobol.
Ağaç temelli: XSLT.
Dizi tabanlı: APL.
Buna cevap vermenin farklı yolları vardır, ancak bunlar açısından şu şekilde kategorize edilebilir:
Makine dili: Makine dili, düşük seviyeli bir programlama dilidir. Bilgisayarlar tarafından kolayca anlaşılır, ancak insanlar tarafından okunması zordur. Bu yüzden insanlar daha üst düzey programlama dilleri kullanırlar. Üst düzey dillerde yazılmış programlar, bilgisayarların bunları yürütebilmesi için makine dilinde de derlenir ve/veya yorumlanır.
Montaj dili: Montaj dili, makine dilinin bir temsilidir. Diğer bir deyişle, her bir Montaj dili talimatı bir makine dili talimatına çevirir. Meclis dili ifadeleri okunabilir olsa da, ifadeler hala düşük seviyededir. Montaj dilinin bir dezavantajı, taşınabilir olmamasıdır, çünkü her platform belirli bir Montaj Dili ile birlikte gelir.
Üst düzey dil: Üst düzey diller, günümüzde çoğu programcının kullandığı dildir. C, C++ ve Java) dillerinin tümü üst düzey dillerdir.Yüksek düzey dillerin avantajları çok okunabilir ve taşınabilir olmalarıdır.Yüksek düzey dillerin dezavantajı Montaj dillerinden daha az güçlü çünkü yüksek seviyeli bir dilde tek bir ifade birçok makine dili deyimine çevrilir.
Üst düzey diller ayrıca şu şekilde de sınıflandırılabilir:
İşlevsel diller: İşlevsel dilde, bir program işlev tanımlarına ayrılmıştır. İşlevsel diller bir tür bildirici dildir. Çoğunlukla sabitleri olan tipli lambda kalkülüsüne dayanırlar. Ünlü İşlev dillerinden bazıları Scala, F #, Clojure ve LISP'dir.
Yordamsal diller: Yordamsal Diller'de, bir program sonuç elde etmek için izlenmesi gereken adımlar dizisi halinde yazılır. COBOL, FORTRAN ve C bazı Prosedür dilleridir.
Nesneye Yönelik Programlama dilleri: OOP dillerinde, bir program veri içeren nesnelerin yanı sıra yöntemleri içeren nesneye bölünür Java, C # ve C++ OOP dilleridir.
Mantık Programlama dilleri: Mantık Dilleri, bilgisayarın mantıksal akıl yürütmesini sağlayan programlar oluşturmak için kullanılır. ör .: Mantık dili
Derinlemesine çalışma için şunlara göz atın:
Özellikler açısından düşünme eğilimindeyim:
dizimi:
C-Tabanlı ya da ne var. Java C tabanlı bir sözdizimine sahiptir. Python veya Ruby) sözdizimi ve belirli bir dilin nasıl çalıştığının temelleri açısından daha fazla düşünmek .. Hiçbir sözdiziminin C-tabanlı olmaktan daha hantal hale gelmesi ve beyaz boşluk etrafında herhangi bir sorun oluşturması gerekmediğine inanıyorum.
Derleme ve Yorumlama w. Oluşturma Süreci ve Yorumlanan/Konsol:
Derleme zamanı ve çalışma zamanı çevre kaygıları hakkında çok az bilgim var, ancak nadiren düşündüğüm bir sürü endişe var.
Benzer şekilde, Java gibi) bir sanal makinenin içinde çalıştırmak için derleme işleminden hala bir şey olan birçok yorumlanmış dil vardır. Yine de şeylerdeki değişiklikleri görmek için yeniden oluşturmanız gerekir.
Ve bir de JavaScript ve Python canlı bir ortamda bir konsolda komut ile komut, anında yürütmek vardır.Tüm üçü çok farklı kod yazma yollarına yol açabilir.
Dinamik ve Sıkı yazma:
İkisini tasarım ödünçleri olarak görme eğilimindeyim. Çok daha düşük bir seviyedeyseniz ve performans kritik olduğunda, statik yazma çok mantıklıdır. Birinin bir şekilde diğerinden "daha güvenli" olduğu fikrini hiç anlamadım, ancak yazım sisteminin nasıl çalıştığını ve temelde ne bekleyeceğinizi öğrendiğiniz çok plastik/dinamik bir dilde geldim. Tip maskaralık nadiren JS benim için bir endişe. Bazı yönlerden esneklik, işleri daha sağlam hale getirebilir, ancak dilde bazı pot delikleri bilmiyorsanız, daha fazla Jr. seviyesi geliştirici için daha fazla dokunaklı olmasına rağmen.
Blok Düzeyi Kapsamı ile İşlev Kapsamı Karşı mı ?:
Blok Düzeyi en yaygın olanıdır (çoğu c tabanlı sözdizimi dilinde {} arasında herhangi bir şey). JavaScript kapsamı işlevler üzerine inşa edilmiştir (nesneler de bu kadar etkili nesneler oluşturmak için kullanılır). Ayrıca, iç kapsamdan dış kapsama ne tür erişime sahip olduğunuzda da büyük farklılıklar vardır. Diğer kapsam belirleme programlarına aşina değilim ama eminim varlar.
Klasik OOP vs Prototypal OOP vs Neredeyse OOP (C'deki yapılar) ve OOP Olmayanlar:
Sınıf tabanlı OOP bile varyasyon için çok fazla alan var. Birden fazla miras (ew, çok fazla, ew) yapıp yapamayacağınız, vb.
JavaScript'te bir tür bodur hibrit prototipimiz var OOP nesnelerin çok daha basit, son derece değişkendir, ancak yine de arayüzü IMO'nun önemli olan iç endişelerden ayırma yeteneğine sahibiz. kapsülleme.
OOP ile ilgili şey, teknik olarak OOP olmadan esas olarak OOP odaklı olan çekebileceğiniz bir çok şeyin gerçekten olması. Tabii ki sade ama var, ama günün sonunda, Tasarım Kalıpları, belirli durumlarda iyi çalışan belirli soyutlamalara ulaşmakla ilgilidir OOP tabanlı bir dilden fikirlerin daha usule yönelik bir şeyde faydası olmadığını varsaymak için çok hızlı olmayın ve JavaScript'ten bahsetmiyorum. OOP paradigma tabanlı) bir prototipin aptal versiyonu ile sınırlı değil.
Birinci Sınıf İşlevler:
Bunları bir dilde olmamak vazgeçmek benim için zor bir şey. İşlevleri, diğer bağlamlarda kullanım için veriymiş gibi iletebilirsiniz. Bu, özellikle olay işleme şemalarının uygulanmasını çok kolay hale getirir, ancak aynı zamanda dili istediğiniz şekilde çalıştıracak şekilde uyarlamayı da kolaylaştırır. Şüphelendiğim her şeyden çok, JavaScript'i nihai başarısı yapan şey, iki hafta içinde tasarlanmasına ve Java-yaklaşık sözdiziminin bir pazarlama şeması olarak tokatlanmasına rağmen olmuştur.
Kapaklar:
Java için tartışmanın nerede olduğundan emin değilim, ama bir sürü Java devs bir veya iki yıl önce bu özellik için yaygaracı olduğunu biliyorum. işlev kapanırsa, bir şekilde bu işlevin içinden bir şeyler referans gösterebilen herhangi bir şey, çöp toplandığı için ona erişemez. Bir kapanışta, yürütme bağlamı, bu kapalı içindeki öğelere başvurabileceğiniz şekilde işlevi döndürülen bir nesne veya fonksiyon gibi başka bir kapsamdan temelde bu fonksiyon kapandığı zamanki gibi vars alırsınız. yönlendiren kuruluşun yerel değişkenleri.
Katı/Sıkı/Güvenli vs Size İstediğiniz Tüm Halatı Vermek:
JS devs ve Java devs birbirlerini hiç anlama eğilimindedir ve bu özel tasarım spektrumunun birbirine yakın taraflarına düşen iki dil ile ilgisi olduğunu düşünüyorum. Beni kendimden veya takımımdaki diğer geliştiricilerden korumanızı istemiyorum.Çok daha az kodda çok daha fazlasını yapmak ve duruma bağlı olarak hepsini çok farklı (ancak belirli bir alan için tutarlı) şekilde yapmak istiyorum Her ikisine de kesinlikle ödünleşimler vardır ve birçok dil ortada daha fazla düşme eğilimindedir.
Tüm bunlara bir kısa yol, bazı yarı yararlı şeyler yapmak için yeterli LISP öğrenmek olduğunu düşünüyorum. Bu paradigmaların çoğu LISP kullanmanın bir yolu olarak başladı, bu yüzden bir şeyler denemek için basit bir yol.
Etrafta bir dizi "tür" vardır, ancak yeni diller her zaman görünebilir. Temel olarak, bir dilin amacı, fikirlerin, kavramların veya gereksinimlerin mümkün olduğunca doğrudan kodlanmasına izin vermektir. Bu amaçla, mevcut paradigmaların istendiği durumlar olabilir ve yeni bir paradigmaya ihtiyaç duyulabilir.
Bakmanın bir yolu yüzey yapısıdır. Fikirleri kısaca kodlamanıza nasıl izin verir, böylece istediğiniz şeyle ilgili fikrinizi değiştirirseniz, koda karşılık gelen değişiklik de hataları tanıtmak için çok az şansla kolaydır.
Ona bakmanın bir başka yolu da kontrol yapısıdır. Dil yürütüldüğünde (eğer öyleyse), istediğinizi başarmak için işlerin gerçekleşme sırası nedir? Örnekler: basit düz yürütme, özyineleme, geriye dönüş, paralellik. Keşfedilen bir I (mütevazı öksürük) diferansiyel yürütme idi.
Bir başka yararlı bakış açısı, bir veri yapısı tasarlandığında, bir dilin doğmasıdır. Veriler, bir program tarafından bir şeyler yapmak için bir yorumlayıcı tarafından kullanılan bir grup veri (bayt kodları gibi) üzerinden taranan ve bir şeyler yapan uygulama programları tarafından "yürütülür".
Belirli uygulamalar için programlama dilleri olduğunu eklemeliyim. Akla gelen, APT (Otomatik Programlanmış Araç) takım tezgahları imalatında kullanılan bir dildir.