Genel olarak programlama becerinizi geliştiren programlama dilleri? [kapalı]


27

Hangi dilleri öğrenmek için bir programcı önerirsiniz, çünkü dili çok fazla kullanacaklar (fakat sahip olabilirler), fakat genel olarak bir kişinin programlama becerisini geliştirecekleri ve birisinin farklı düşünmeleri (ve muhtemelen daha iyi düşünmeleri) nedeniyle ) yol?


12
Tek bir tane değil. Aksine: Her biri diğerlerinden mümkün olduğu kadar farklı, mümkün olduğu kadar çok.

Yanıtlar:


27

"normal" programlama ve algoritmalar için:

  • python, öğrenmesi iyi, kullanımı kolay, okunması güzel.
  • C ++, size bir bilgisayarın GERÇEKTEN ne olduğunu öğretir.

Düşünce değişen bir deneyim için:

  • Haskell
  • Prolog

aklını mahvetmek ve padawan ve Jedi Master arasındaki çizgiyi geçmek için:

  • Ortak LISP

3
evet, chrisaycock, C ve assembly ile aynı fikirde olmak size bir bilgisayarın GERÇEKTEN ne olduğunu öğretecektir, C ++ yukarı doğru çok küçük bir adımdır, ancak yine de bellek işaretçileri ve yüksek performans sorunları gibi konuları ele
almanızı sağlar

mh. Prolog harika, ancak genel programlama becerilerini geliştirmenin nasıl ilginç olabileceğini göremiyorum. Bunu, programlama dillerine benzemeyen yapıları sorgulayabileceğiniz alternatif bir matematik / mantık gösterim sistemi olarak görüyorum (prosedürü değil stati tanımlar). Düzenleme: Bir şey hakkında düşünme şeklinizi değiştirdiğinden emin olabilirsiniz, ancak bir şey programlama değildir.
cbrandolino

Prolog elbette programlama yapıyor. Bildirimsel programlama ve mantık temelli (ve dolayısıyla göreceli olarak matematik), evet. Ama yine de programlama. Son noktaya gelince, sizce başka bir Lisp (yani, Scheme) de yapar mı?

3
Prolog, mantık paradigmasının en bilinen dilidir. Aklınızı ele alabileceğiniz tüm paradigmalar etrafında bükmek önemlidir, eğer bir programcı olarak daha iyi olmak istiyorsanız, zihinsel çeviklik elde etmenize yardımcı olur, size yeni araçlar verir. Her Lisp lehçesinin yapacağını tahmin ediyorum, Common Lisp'te gördüğüm, benim için en çok kullanılan Lisp gibi gözüküyor.
Lacrymology,

1
Common Lisp'ten Scheme'e oy verirdim - sanırım üretimde bir Lisp kullanacağınızı düşünüyorsunuz. Eğer değilse, Şemaya gidin.
Skilldrick

13

Javascript'i unutma .

Her zamanki OO özellikleriniz olmayan OO özelliklerine sahiptir. Üst düzey işlevler ve kapanışlar için çok uygundur ve bunları rutin olarak kullanıyorsunuz. Birçok fonksiyonel programlama püf noktaları için izin verir. Son derece esnektir.

Ve pratiktir, çünkü her ciddi tarayıcıda vardır.

(Tabii ki, bazı hoş olmayan tuhaflıklar da var. Birkaç pratik dil yok)


1
JS'de Java'nın bulunmadığı OO özellikleri var mı?
Mahmoud Hossam

3
@Phobia: JS, OO'yu tamamen farklı bir şekilde yapar. Sınıf yok. Kalıtım prototipler aracılığıyla yapılır - temelde bir nesne başka herhangi bir nesneden miras alabilir. İşlevler birinci sınıf değerlerdir; Onları sadece geçiremezsiniz, aynı zamanda mevcut nesnelere kolayca yeni yöntemler atayabilirsiniz. JS'nin veri gizlemeyi yapma yöntemi de Java'dan oldukça farklıdır: bir nesnenin gösterdiği her şey herkese açıktır, bu nedenle kapanışları kullanarak verileri ve yöntemleri gizlersiniz. 'Kanonik OO' olmadığını unutmayın; JS, Smalltalk'ın örneğin C ++ 'dan icat ettiği' orijinal 'OO'ya biraz daha yakın, ancak Java'nın OO'su şimdi de' kanonik '.
9000

11

Bilgisayarın nasıl çalıştığını gösteren C ve montaj

Hem işlevsel programlama hem de metaprogramlama için Haskell ve LISP

Vektör ve kısa programlama için APL

Bir bilgisayarın programsal olarak nasıl yönetileceği için bash veya tcsh


4
APL yerine, J'yi aynı yazar tarafından kullanabilirsiniz.
9000

Montajda +1. Herhangi bir kayda değer gelişme yaptıktan sonra, yüksek seviyedeki dillere asla aynı şekilde bakmazsınız. Gerçekten farklı bir şekilde kodlama hakkında düşünmenize neden olacak bir şey arıyorsanız, ASM bunu yapacak.
Kurtis

9

Scheme'i öneririm.

Lisp'ten türetilmiş işlevsel bir programlama dilidir (aslında bir lehçe olduğunu düşünür). Common Lisp ile ana fark, yaklaşımı çok minimalist - son derece öyle. Örneğin, normal bir Şema dağılımında (herhangi bir <R5 şeması ya da Mit / GNU / Şema) bir döngü uygulaması bulamazsınız: kendi özyinelemesini kullanarak kendiniz yapmak zorundasınız.

Bu gerçekten etkileyici ve sözdizimi, programlama hakkında yeni bir şeyler öğrenmek için harika, şunun gibi: sadece koda bakarak derleyicinin / tercümanın bu konuda nasıl çalışacağı hakkında bir fikir edinebilirsiniz.

Ayrıca, MIT'nin web sitesinde serbestçe indirilebilir olan Şimdiye Kadarki En İyi Programlama Kitabı , Bilgisayar Programlarının Yapısı ve Yorumlanması ile birlikte gelir .

İşte, umarım, hemen bu büyüleyici dille ilgilenmenizi sağlayacak bir video dersi var - konuşmacılar SICP'nin yazarları: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- dersler /


Teşekkür ederim. Yine de sizi uyarmak zorundayım, dersler tutkulu programcıları gözyaşlarına taşımak için kolay.
cbrandolino

@cbrandolino - Doğru, fonksiyonel programlama sınıfımız bilgisayar bilimi programından birçok insanı etkiledi.
jmort253

1
Şema oldu minimalist, ama R5 içinde bazı siğilleri büyümüştü ve R6 ile bu kesinlikle büyük. Yazık, çünkü çok güzeldi. Gerçekten minimalist ama yine de pratik bir dil için Lua
Javier

@Javier, haklısın. Uygulamaları belirtmek için cevabı düzenleyeceğim.
cbrandolino

Üniversitede bir program yapıyorum ve bundan nefret ediyorum. İşlevsel bir dil olmadığı için, uzun zamandır bunun içine girmek istiyorum. Ancak, sözdizimi beni gerçekten öldürüyor. Klavyede üç farklı parantez türü vardır (dört köşeli ayraçlar sayarsanız) ve yalnızca parantez kullanıyorsunuzdur. Niye ya? Diğerlerini kullanmanın sorunu nedir?
Femaref

4

LISP, tercihen Abelson & Sussman'ın "Bilgisayar Programlarının Yapısı ve Yorumlanması" ile birlikte şema, C / C ++ tarafından uygulananlar dışında düşünmeyi size öğretecektir.

FORTH, özellikle blok yönelimli bir FORTH, dosya yönelimli değil (D85 gibi), konuşkanlığınızı frenlemenizi öğretir. Hiçbir koşul altında, 16 karakterden 64 karakterden daha uzun bir rutin yazmadığınız zaman, soyut ve etkene zorlanırsınız.


4

Java, dünyadaki üniversitelerde en çok öğretilen dillerden biridir ve bunun bir nedeni vardır. Genellikle Dinozor gibi olmasına rağmen, modern programlama Kavramları hakkında herkese çok iyi bir genel bakış sunar. Bilgisayarın kendisinin Assembler veya hatta zaten çok daha soyut bir dilin C gibi çalıştığını göstermez, ancak Pilotlar uçabilmeli ve kendi başlarına Uçak Yapamamak zorundadır - git JAVA'yı öğren Herhangi bir Kod için iyi bir Temel olarak günümüzde en yaygın dilleri (reson için) yazacaksınız: Java, c ++, php, c #, ruby ​​(raylarda) python vb.

maksimum


3

LINQ ile C # 3.

İşlevsel programlama için harika bir giriş.

Bir program yazmayı (veya Project Euler'i çözmeyi) ve mümkün olduğunca çok sayıda döngüyü LINQ çağrılarıyla değiştirmeyi deneyin.
Fonksiyonel programlama ve tembel değerlendirme kavramlarında uzmanlaşır.

Oradan, kişi F # 'ya geçebilir


3

Eller aşağı, ben Haskell diyebilirim. Ve iki nedenden dolayı:

  • Fonksiyonel programlamayı öğrenmenin en iyi yolu budur. Hemen hemen her diğer dil varsayılan olarak yan etkilere izin verir, ancak işlevleri işlevsel olarak yapabilir (ve evet, bu ML'ler ve Erlang'ı içerir: daha fazla bilgi için bu konuşmaya bakın ). Haskell varsayılan olarak işlevseldir, ancak ihtiyaç duyduğunuzda yan etkileri kullanmak için yapılabilir.
  • Kesinlikle kodlamadan önce düşünmenizi teşvik eden bir dildir. Dürüst olmak gerekirse, bu benim için hiçbir zaman sorun olmadı (bir şey varsa, tam tersi). Azınlıkmış gibi göründüğümü söyledi. Karşılaştığım programcıların çoğu, "5 dakika içinde çözümü kodlamadan önce günlerce sorununuzu düşünmek" yerine zihniyetten ziyade "ilk önce kodla, sonra soru sor" zihniyetine benziyor. . Bu nedenle, bu tür bir dil çoğu programcının değerli deneyimini sağlayabilir.

3

Biri C / Java dünyasından gelirse Scala'yı öneririm.

Tamamen işlevsel bir programlama dili değildir, ancak bazı işlevsel programlama özelliklerini simüle etmek için OO'yu kullanır (örn. Birinci sınıf işlevi ve yüksek dereceli işlevi simüle etmek için nesneyi kullanma).

OO'ya aşina iseniz, Scala fonksiyonel dünyayı açıklamayı zaten bildiğiniz terimleri kullanır.

Haskell, List ... vb. Gibi daha işlevsel bir programlamaya dalmak yerine Scala'da işlevsel programlamayı anlamamın daha kolay olduğunu öğrendim.


2

İşlevsel diller, bugün olduğum yere getirmeme yardım ettiğimi gösteriyor. Web uygulaması geliştirme aşamasında olsam da, işlevsel dillerden öğrendiğim kavramlar, başka türlü göremediğim sorunların çözümlerini görmeme yardımcı oluyor. Üniversitemde birlikte çalıştığım diller:

  • C ++ (İşlevsel değil, ancak işaretçiler ve bellek yönetimi gibi kavramlar paha biçilmezdir)
  • Dr.
  • ML / Ocaml (ML / Ocaml! Kullanarak başka bir dil yazdık!)
  • JavaScript (Endüstride hem müşteri hem de sunucu tarafında çekiş sağlayan fonksiyonel dil)

Bu dilleri öğrenmek, soyutlamaların dünyasını anlamanıza ve diğer işlevleri barındıran kod bloklarının nasıl oluşturulacağına, alt düzeydeki ayrıntıları gizleyerek üst düzey iş hedeflerine odaklanmanıza yardımcı olacaktır.


1

Ruby, kullandığım en güçlü ve sezgisel test çerçevelerinden birine sahip. Yakutla testler yazmaya başlayana kadar alaycı ve inatçılığın nasıl doğru bir şekilde kullanılacağını gerçekten anlamadığımdan emin değilim. rSpec ve Salatalık harika araçlardır.


1

Bir problem hakkında yeni bir şekilde düşünmenizi gerektiren bazı programlama dilleri vardır (elbette alışkın olduğunuza göre). mantıksal dil, örneğin prolog ve lisp .

Bazı diller, ocaml ve Haskell gibi kategori teorisinden ağır şekilde etkilenir ve bazıları Curry gibi melez dillerdir. ( ) ve fonksiyonel (mantıklı) . Curry, muhtemelen Haskell'in mantıklı bir programlama ile bütün aklını şişirdiği için değil, aynı zamanda kısıtlamaya dayalı programlama ile bütünleşmesi nedeniyle bildiğim en akıl almaz dildir.

Diğer eğlenceli bir dil Occam-pi , eşzamanlılık açısından çok ağır olduğu için, fakat aynı zamanda son zamanlarda Arduino limanı nedeniyle olduğu için .


1

Çok yönlü bir programcının kılıfını kandıran birkaç çanta vardır ve bunlar şunları içerir:

  • Bir bilgisayarın cesaretinin nasıl çalıştığını öğrenmek için montaj.
  • C veya Pascal gibi bir prosedür dili.
  • Şema gibi işlevsel bir dil.
  • Squeak gibi bir OOP dili.

Bunların hepsi size problemler hakkında düşünmek ve yaklaşmak için biraz farklı yollar öğretiyor .


0

net bir hedef olmadan herhangi bir programlama dilini doğru öğrenemezsiniz. Bununla ne yapmak istediğinizi bilerek, hangi programa ihtiyacınıza uygun olduğuna karar verebilirsiniz.

Örneğin, c # hakkında diyelim.

C #, web programı, konsol programı, tek başına çalıştırılabilir, oyun programı, silverlight programı ve mobil program yapabilir. Sözdizimi hemen hemen her durumda eşittir, ancak her senaryoda farklı şekilde çalışır. Örneğin, tek başına bir çalıştırılabilir dosya, kaldırılıncaya veya program bitene kadar bilgilerini tutar, bir web programı, bir sayfayı her yüklediğinizde bilgileri imha eder ve Silverlight'ta çoğu zaman uğraşacaksınız. bir xml dosyası.

İkincisi, zamanınızı egzotik dillerle (örneğin Haskel), kurumsal konuşmayla harcamayın, çabalarınıza değer çok az program var: java (tepenin kralı), c # / vb.net, php ve sql.


0

Java Applet'leri yazmak için işlem denilen çok basit bir program var

Bu dil, eğer yeni başlıyorsanız, değişkenler, döngüler ve bu tür şeylerle ilgili çok temel bir anlayış verecektir.


0

Burada bazı harika öneriler. Muhtemelen şahsen C veya C ++ ile giderdim. Sizi, işlerin nasıl yürüdüğünü anlamada büyük ölçüde önemli olan birçok kavramla uğraşmaya zorlar, ancak bu diğer dillerde gizlenme eğilimindedir. İşlerin gerçekten nasıl yürüdüğünü anlamak, daha sonra kullandığınız dil bazı ayrıntıları gizlese bile, bir programcı olarak size yardımcı olacaktır.

Eğer bundan biraz daha düşük bir seviyeye kazmak istiyorsanız, montaj eğlencelidir, ancak bununla çok fazla şey yapmayı beklemeyin. :)


0

Ruby'yi tavsiye ederim. Ruby, paradigmaları değiştirmenizi istemez, ancak birden çok paradigmada çalışmanızı teşvik eder. Bunun avantajı, alıştığınız şekilde çalışamayacağınız için hayal kırıklığına uğramak yerine, alışkın olduğunuz şeyleri yapmanın sınırlamaları ile hayal kırıklığından farklı bir paradigma kullanmanızdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.