İdeal programlama dili öğrenme dizisi? [kapalı]


17

Ne düşünüyorsun? Günümüzde yaygın olarak kullanılan dil ve paradigmaların çoğunu kapsayacak ve aynı zamanda ortak programlama temellerini, fikirlerini ve uygulamalarını kavrayacak ideal programlama dili öğrenme dizisi nedir? Dil yerine paradigmalar için öğrenme dizisi bile önerebilirsiniz.

Dikkat: Stackoverflow'da sorduğum sorunun limanı ve öznel ve tartışmacı olduğu için kapatıldı.


Harika bir soru. Bu soru performans odaklı olsaydı hangisi cevap olurdu? Merak ediyorum: programmers.stackexchange.com/questions/16323/… : D
JoeBilly

4
Lisp'in üst sıralarda yer alan sorularda sıkça karşılaştığı için çok şaşırdım ve çok mutluyum.
Inaimathi

1
Bu soru da burada sorulmuştur (bunun ilk geldiğini düşünüyorum): programmers.stackexchange.com/questions/41720/…
oosterwal

Yanıtlar:


26

Python, Lisp, C, Haskell

Sorunun yeni başlayanlar için programlama için ideal bir öğrenme dizisi olduğunu varsayarsak (programlamadaki eski eller kendi (muhtemelen yanlışlıkla) öğrenme dizisine sahip olacağından), 10 yıl içinde Norvig'in programlamayı nasıl öğreneceğine dair denemesini okumanızı öneririm :

  1. Python : Dinamik, üst düzey, OO ve işlevsel bir dille başlayın. Çünkü yeni başlayanlar için en kısa sürede üretken hissetmek gerçekten önemlive yabancı sözdizimi, kütüphane eksikliği, çoklu platform eksikliği, öğrenme kaynaklarının eksikliği ve topluluk eksikliği yüzünden kapatılamaz. Python son derece okunabilir, tonlarca iyi kütüphaneye sahiptir (özellikle bilimsel kütüphaneler - modern bir bilim adamı / mühendis nasıl programlanacağını bilmelidir), çoğu işletim sisteminden kolayca çalıştırılabilir, tonlarca öğretici ve tüm ücretsiz kitaplara sahiptir ve genellikle kullanıcı dostudur - büyük sorunlar üzerinde çalışan gelişmiş bir programcı olduğunuzda, sizinle birlikte büyüyecek kadar güçlü olmasına rağmen. Yeni başlayanlar için önemli + yararlı kuralları güçlendirmek de önemlidir: kod okunabilirliği bir LOT sayar ve kendinizin ve başkalarının kolayca anlayabilmesi için kod yazmalısınız.

  2. Lisp: Özellikle, en azından Bilgisayar Programlarının Yapısını ve Yorumunu gözden geçirin ya da SICP videolarını izleyin ve programlamanın temellerini ve etkileyici gücünü görerek gözlerini çok geniş açın - çok az şeyle çok şey yapabilirsiniz. Lisp'in yalnızca işlevsel paradigmayı değil, aynı zamanda yeni etki alanına özgü dillerin oluşturulması gibi OO, mantıksal / bildirimsel ve daha fazlasını nasıl ifade edebileceğini öğrenin. Bir ustanın dil ile neler yapabileceğini görmek için Norvig'in PAIP'ini okuyun . Ardından , Next Big Things'lardan biri olabilecek modern bir Lisp lehçesi olan Clojure'a göz atın .

  3. C: Sadece bilgi işlemin lingua-franca olması nedeniyle. :) Belirli bir yazılım dışı alanda öncelikle bir programcıysa, bu günlerde isteğe bağlı olabilir. Çirkin buluyorum ama altta yatan donanım için bir takdir almak için bilmeye değer. Elbette K&R ile git .

  4. Haskell : Saf işlevsel güç. Nerede mevcut Com.Sci. teorisi ve pratik ifade gücü buluşuyor. Bakınız Gerçek Dünya Haskell .

Yukarıdaki turdan sonra, sorunların üstesinden gelmek ve koddaki çözümleri ifade etmek konusunda çok yetenekli olacak ve buradaki paradigmalarla tamamen rahat olacaktır :

alternatif metin


(Doğal olarak) Python yerine Smalltalk'ı # 1 olarak değiştirirdim, ancak Python (a) 'nın Smalltalk'tan çılgınca daha popüler olduğunu ve (b) Smalltalk'ın diğer dillerle konuşmasını sağlamanın Java'daki kadar zor olduğunu söylüyorum , bir acemi hayal kırıklığına uğratacak kadar zor demek. Python'un "senaryosu" oldukça büyük bir avantaj gibi görünüyor.
Frank Shearar

Verimlilik beyanınıza katılıyorum. C'nin mutlak birinci dil olarak öğrenilmesinin bir sürü kilitlenme olduğunu düşünüyorum. Ama kesinlikle yığında bir yerde olmalı.
Mark Canlas

+1 Haskell'in en üstte olması gerekip gerekmediğinden emin değilim, ama adil olmak gerekirse, henüz bilmiyorum ve listemde bir sonraki, bu yüzden henüz öğrendiğim son dil olabilir.
Inaimathi

2
Tam boy şemasına 1-tıklayın @ i54.tinypic.com/168ity1.jpg
Mike Clark

C listede olmasaydı + 1'leyebilirdim
Balog Pal

28

Ben böyle yapardım:

  1. Python (veya Ruby veya Lua): Yorumlanmış bir dil, tür yok, birkaç satırda iş yapabilirsiniz. Büyük kütüphane (Python bunun için en iyisi sanırım). Dikkat dağıtıcı olmadığı için algoritmaların derinliklerine gidebilirsiniz. Derlemeye gerek yok, sadece koş. Bunun üzerine, Python ile örtük olarak iyi bir stil öğretiyorsunuz, çünkü Python'daki girinti zorunludur. Nesne Yönelimi'ni de öğretebilirsiniz (Lua'da daha çok bir problemdir). Buradaki amaç çok eğlenmek ve öğrenciye neler yapılabileceğini göstermektir.

  2. C ++ (veya belki de Java): Yazılı, hızlı bir dil. Nesne Yönelimi'ne ihtiyacınız varsa, zaten bazı kavramları biliyorsunuzdur. Ana fikir, Python'da yaptıklarınızı "çevirmek" ve bunu yeni kısıtlamalarla (çoğunlukla türler) yapmaktır. Şimdi doğru kavramlara sahipseniz, tür eklemek böyle bir sorun değildir. Bir sonraki adım, daha düşük seviyeyi düşünmek (Java burada yardımcı olmaz) ve işaretçileri iyi öğretmektir . Bununla, programın altında görmeye başlayabilmeniz için adres alanı, CPU, işletim sistemi, biraz açıklamak istiyorum. Derlenmiş bir dil, yorumlama ve derleme arasındaki farkı ortaya koyar, makine dilinin ne olduğunu açıklamak için çok yararlıdır.

  3. Meclis : Son olarak, sihir yok, sadece makineyle konuşuyorsun. Intel ve GAS sözdizimi hakkında bir tartışma var, önemli değil. MIPS'iniz varsa, öğretim için daha iyi olduğuna inanıyorum, ancak x86'nın daha yaygın olduğu için daha uygun olduğunu düşünüyorum (x86_64 daha fazla kayıt ve güzelliğe sahip olduğundan daha iyi). Sadece bazı karmaşıklığı kaldırmanız ve öğrencilerin istedikleri takdirde daha fazla araştırma yapmasına izin vermeniz gerekir.

(Bu ilk 3 "derinlik" dir. Şimdiye kadar, diyelim ki "metale yakın" olan tabana değene kadar aşağı iniyoruz. Bence bu çok önemli, programlamada birçok soru Ne olduğu hakkında net bir fikriniz olduğunda çözülür. Bunu bildiğinizde, daha fazla bilgiyi güvenle edinebilirsiniz.)

  1. Şema (veya Ortak Lisp veya Clojure): @dukeofgaming'in söylediği gibi, Lisp dilleri özyinelemeyi iyi öğretmenize izin verir (bu Şema için en iyisidir, çünkü açık döngüler yoktur). Ama gidip iki şey daha öğreteceğim: kapanışlar ve makrolar. Makrolar Lisp dillerini diğerlerinden ayıran şeydir. Şahsen Scheme makrolarını sevmiyorum ama bu çok önemli değil. Örneğin, Clojure makrolarının güzel olduğunu düşünüyorum (ancak JVM'de kuyruk özyinelemesi olmadığı için Clojure'da özyineleme o kadar temiz değil). Kapaklar çok önemli bir kavramdır, onları bir kez okuduğunuzda Javascript'i anında "görürsünüz". C ++, Python ve Lisp üzerinde çalıştıktan sonra Javascript "önemsiz" hale gelir.

  2. Haskell : İşlevsel bir dil için Haskell'i yenebileceğinizi düşünmüyorum. Lisp ve Scheme işlevsel olarak kabul edilir, ancak fonksiyonel programlamayı vurgulamak için öğrencileri devletsiz düşünmeye zorlamanız gerekir. Haskell'in ayrıca, körükleme ve "yıkım" için desen eşleştirme gibi başka çok güzel şeyleri de var. Haskell'i çok bilmiyorum, ama yazabileceğiniz kodun kısalığı çok güzel. Haskell'i iyi bilmek, Erlang'ı anlamanın yolunu kolaylaştırır.

  3. Dördüncü : Bir yığın dili. Tamamen mantığınızı tamamen kırar (Lisp ve Haskell yeterli değilse). Montajı bildikleri için Jones'un Forth'ı öğretmeye kadar giderdim ve sonra neler olduğunu tamamen anlayabilirsiniz. (Forth'ı bilmek örneğin PostScript'i açar.)

(Yani bu son 3, söylediğiniz genişlik. Benim için bu diller, düşünme biçiminizi değiştirecek kadar tuhaf. En azından benim için yaptılar. Ve bence, yeni bir dil öğrenmek için yeterli paradigmaları anlıyorsunuz. çok çabuk.)

İsteğe bağlı olarak, bunları inceleyebilirsiniz:

  1. SmallTalk : Tamamen Nesneye Yönelik bir dil. Nesne Yönelimini ciddiye aldığınızda ne olacağını görmek için, dilin "if", "için" gerekmez. Her şey bir mesajdır: yine büyük aydınlanma. (Bu Objective-C'yi artık kolaylaştıracaktır.)

  2. Git : Eşzamanlılığa vurgu yapan (güzel) bir dil. Go'yu programlamak için çok güzel ve rahat buluyorum.

  3. Prolog : Başka bir programlama paradigması. Herhangi bir Prolog yazmadım ama bunun başka bir zihin bükücü dil olduğunu anlıyorum.


6
Python ve Ruby (Lua hakkında bilmiyorum) güçlü yazılan dillerdir. Sanırım statik olarak yazılmak yerine dinamik olarak yazıldığını kastediyorsunuz.
Daniel Roseman

13
Lütfen C ve C ++ 'ya iki ayrı dil olarak davranın.
David Thornley

1
Bjarne diyor ki : "C / C ++" diye bir dil yok. İfade genellikle programlama hakkında ipucu olmayan kişiler tarafından kullanılır (örneğin İK personeli ve fakir yöneticiler). Alternatif olarak, C ++ 'ı tanır (ve genellikle C değil). "
fredoverflow

1
Birisinin meclisin C ++ 'dan önce olup olmayacağını tartışmasını istiyorum. Bu noktada, basit kavramlar ve sağlanan küçük bir araç seti nedeniyle montaja yaklaşmak oldukça kolay olurdu, ancak ham bellek ve ham bellek referanslarıyla çalışmak, her iki keyfi de ele almak için nominal referansların kullanıldığı C ++'a yaklaşırken çok yardımcı olmalıdır. bellek konumları ve değerleri çoğu insanın kafasını karıştırır.
Filip Dupanović

1
İki CS öğrencisime bir montaj görevlisinde hafta boyunca bir kurs verdim. temelde minimal bir komut seti bilgisayar icat ettim ve yorumlayayım. Sonra zamanlama ile birlikte çok basit rutinler yazabilirler (ve koşmayı görürler). Sonra veri önbellekleme ve ön getirme gibi şeyler ekledim, böylece mimari özelliklerin performansla nasıl etkileştiğini görebiliyorlardı. Yapay bir montajcı ve bilgisayarın, amaç didaktik olması durumunda, kullanabilecekleri bir şeyin edinilmesinden ziyade, daha fazla esnekliğe ve öğrenme verimliliğine izin verebileceğinden şüpheleniyorum.
Omega Centauri

12
  • Şimdi ihtiyacın olan
  • Bir sonraki ihtiyacın olan
  • Bundan sonra ihtiyacın olan

Cidden, zamanımda BASIC, COBOL, Fortran, Forth, Pascal ve Prolog'u öğrenmiş olabilirim, ancak bunları özellikle kullanmam gerekmedi ve diğerlerini kullanmamı gerçekten etkilemedikleri bir yol göremiyorum belki de paradigmaları birbirinden yanlış uygulama dışında. Aslında, yapılandırılmış Pascal'ı yazacak kadar TEMEL'i öğrenmem uzun zaman aldı, C'de Pascal kodunu yazmayı durdurmak için birkaç yıl ve Objective-C ve Java'yı kullanmaya başladığımda OOP'u gerçekte yakalamak için birkaç yıl daha. Öte yandan, (neredeyse) yalnızca OO dillerinde çalıştığımdan beri, OO dillerini kullanımımı geliştirmeye konsantre oldum, onları Şema veya PostScript gibi göstermeye çalışmadan.


4
Sen seni bile yeni bir dil öğrenmenin bazı değer olduğuna inanıyorum, biliyorum gerek ancak bunu sen onu bulacağını düşünüyorum çünkü bir dil öğrenmek genellikle daha iyi olduğunu genel açıklamalarla hemfikir ... bunu yararlı ziyade çünkü öğrenmeniz gerektiğini düşündüğünüz şey bu.
Tim Goodman

8

Herhangi bir dizinin ideal olduğunu iddia etmek zor, ama haklı çıkarabileceğim bir plan hazırlayacağım:

  1. C

    Öğrenme C sabır ve titizlik ister ve bilgisayarların verilerle başa çıkmalarını ve bir programcının böyle bir makine ile başa çıkmak için kabul edebileceği neredeyse en geniş sorumlulukları size göstermesi için temel yolları tanıtacaktır.

  2. Perl

    C'nin gerektirdiği sertliğe bir panzehir olarak, inanılmaz derecede affedici Perl'i deneyin. C'de yazmak için bir hafta süren Perl'de bir saat içinde yazabilirsiniz. Programlamada bulunacak farklı bir zevk sunar ve belirli endişelerin ve ayrıntıların hariç tutulmasının programcıyı farklı şeylere odaklanmak için nasıl özgürleştirdiğini gösterir.

  3. C ++ veya belki Java

    Daha sonra, C'nin programlamanın düşük seviyeli ve ilkel yönlerine odaklanmasının, soyutlama seviyesine yükselirken ticaretin verimlilikte yaptığı işlemlere dikkat çekerek soyutlama seviyesini yükseltmek için bir temel oluşturduğunu görün. Programınız için önemli olan verimlilikleri koruyabilecek soyutlamaların nasıl oluşturulacağını keşfedin.

  4. Ortak Lisp

    Bu önceki slog için ödül. Önceki tüm dillerde öğrendiklerinizin yankılarını bulacaksınız ve Lisp'de programlama yaparken önceki tavizlerin ne kadar aptalca göründüğünü göreceksiniz. C'nin önişlemcisi ve C ++ 'ın şablonları Lisp'in makro sistemini takdir etmeye hazırlanıyor. Perl'den ifade kolaylığını, C'den düşük seviye optimizasyon fırsatlarını, C ++ veya Java'nın soyutlama yeteneklerini yeniden kazanacak ve hepsini geçeceksiniz. Önceki üçünün hiçbiri - belki de Perl hata ayıklayıcısı hariç), sizi yetenekli bir REPL ("okuma, değerlendirme, yazdırma döngüsü") ile etkileşimli programlama deneyimine hazırlamamıştır . Bir görüntüyle çalışmakaynak kodunuz ile "yürütülebilir program" fikri arasındaki ilişkiyi değiştiren temelli ortam - bir program oluşturmanın ne anlama geldiğine dair tüm fikrinizi değiştirecektir.

Bu dördünün ötesinde, Haskell'deki fonksiyonel programlama veya Prolog'daki mantık programlama gibi diğer programlama stillerini keşfetmek, eğer yapacaksanız, programlama çapında bilgi yelpazesini daha kapsamlı bir şekilde anlamayı sağlar - ancak bu noktada zamanınıza daha iyi hizmet edilir zanaatınızı - derin bilgi - bildiğiniz herhangi bir dille geliştirerek.

Yeterince farklı dilleri taradıktan sonra, görüşünüz bunlardan herhangi birini aşan fikirlere odaklanmak için artacaktır. Bu, babanızın arabasını kullanmayı öğrenmek ve herhangi bir arabayı nasıl kullanacağınızı bilmek arasındaki fark gibidir : Birkaç gün boyunca kiralık mini vanı sürmek zorunda kalmayabilirsiniz, favori bir spor araba kullanmanın zevklerini tam olarak bilebilirsiniz, ancak bunu nasıl çalıştıracağınızı anlayacaksınız ve mutlaka bir amatörden daha fakir canavardan daha fazla koaksiyel olacak.


4
C ve Common Lisp için +1, ancak ikinci dil olarak Perl ?? :) Python, programın ilk yazılmasından sonraki haftalar, aylar veya yıllar içinde kodun kendiniz ve diğerleri için çok okunabilir olması gibi iyi programlama alışkanlıklarını teşvik ederken mükemmel bir dinamik dil olarak hizmet eder.
Limist

1
Perl tavsiyesi ile ilgili olarak: bu sadece yaşımı gösteriyorum. Elbette, bugün, Python veya Ruby yakın ikameler olurdu, ancak her ikisi de Perl'den daha dogmatik ve C'den çıkan yeni bir programcının çıkardığı yöntem tipi bir çanta tarzı nesne yönüne daha eğilimli henüz gerek yok. Perl'i öğrendiğimde, hemen ürkütücü bir şekilde üretken olduğumu ve daha sonra uzun bir süre için nesne yönelimli tesislerini kullanmaya başladığımı hatırlıyorum. Çok sık, tüm OO odağı sadece dikkat dağıtıcı ve gereksiz bir tören.
seh

Ben "bir soyutlama hareket ederken verimlilikte yaptığı esnaf" görüşünüze katılmıyorum. C ++ temel direklerinden biri, C ++ 'ın olanaklarını kullanan bir programın asla eşdeğer bir C programından daha yavaş olmamasıdır . Örneğin, C ++ sanal işlevlerini kullanmak hiçbir zaman C sanal işlevlerini simüle etmekten daha yavaş değildir
fredoverflow

Doğru, Fred ve demek istediğim şey: nasıl çalıştıklarını düşünmeden özelliklerden faydalanmak maliyetleri getirebilir - özellik yeteneğinden de kaçınarak daha önce kaçmış olabileceğiniz maliyetler, çünkü bu yasaklayıcı veya sadece yetersiz deyimsel olurdu elle uygulamak. Örneğin, RTTI'nın "çok yavaş" olduğundan şikayet etmek, sorunu başka nasıl çözeceğiniz sorusunu hemen gündeme getirir .
seh

6

1. Smalltalk

Başlangıçta en azından kısmen çocukların bilgisayarları öğrenmek için kullanmaları için bir yol olarak tasarlanmıştır. Sözdizimi bir paragrafta açıklanacak kadar basittir. LOGO gibi, "girişe düşük engel, yüksek tavan" ilkesini örneklemektedir.

Smalltalk "her şeyin bir nesne olduğu" anlamında saf bir OO dili .

Ayrıca özellikle Koleksiyon API'sında birçok işlevsel teknik öğretir: zincirleme mesajlar, yüksek dereceli fonksiyonlar, harita, azaltma vb.

Squeak topluluk canlı ve konuksever olduğunu. Ayrıca, gelişmiş tekniklerle ilgili birçok tartışma göreceksiniz: lisp topluluğu gibi, posta listesinde bilgilerini paylaşmak isteyen çok deneyimli Smalltalker'lar var . (Squeak topluluğunun geniş bir profesyonel eğitimci popülasyonuna sahip olması acı vermez.) Yeni başlayanlar için başka bir liste daha var.

2. PROLOG

Hemen hemen tüm diğer diller için çok farklı bir hesaplama görünümü sağlayacak bir mantık programlama dili. Prolog da son derece açıklayıcıdır (ancak tamamen öyle değildir: !ya da kes operatörü bir yüklem üzerinde önemli bir anlamsal etkiye sahip olabilir).

3. Ortak Lisp

İsterseniz Şemayı buraya yazın. Common Lisp , özellikle OO ve fonksiyonel olmak üzere birçok paradigmayı destekler. Ayrıca uzun bir geçmişi var (Lisp hala yaygın olarak kullanılan ikinci en eski dildir: sadece FORTRAN'ın eski).

4. Haskell

(Dikkat: Öğrenmeye yeni başladım.) Muhtemelen gezegendeki en saf işlevsel dil. Çok gelişmiş bir statik tip sistemine sahiptir. Kullanışlı giriş kitapları var.

5. C veya Delphi

Bilgisayarların nasıl çalıştığını bilmeniz gerekir. Bellek ve CPU'nun gerçekte nasıl çalıştığını bilmeniz gerekir. Bunların her ikisi de geleneksel olarak "metale yakın" dır ve dillerinin montaj için nasıl derlendiğini düşünmeyi teşvik eden topluluklara sahiptir.

Neden bu emir?

Smalltalk'ın öğrenmesi çok kolay, böylece bir derleyici ile savaşmak yerine hızlı bir şekilde problemleri çözmeye başlayabilirsiniz ("girişe düşük engel"). Programlamaya başladıktan sonra, yapabilecekleriniz konusunda yapay bir sınır yoktur - "yüksek tavan".

OO'nun nasıl çalıştığı hakkında adil bir fikriniz olduğunda (ve - "OO" nun ne anlama geldiğine dair ÇOK farklı anlayış olması şartıyla - OO'nun pazara hakim olduğunu söylemek adil olur), Prolog'a geçmek başlamamanızı sağlar OO'nun tek yol olduğunu düşünmek. Prolog çoğu dilden çok farklıdır ve zihinsel kaslarınızı gerecek, böylece her şeyi bildiğinizi düşünmeye başlamıyorsunuz.

Sıradan Lisp ise yetişkin bir dil. Olgun bir standarda sahiptir, onlarca yıldır (Smalltalk ile birlikte) dil tasarımında lider olmuştur - en sevdiğiniz dilin yeni kazandığı tüm bu yeni özellikler? Şans, Lisp veya Smalltalk'ta inkübe edilen fikirlerdir. Ortak Lisp de biraz siğil ve gittiğiniz her yerde siğillik bulacaksınız.

Haskell'in listede dördüncü olduğu için (söyledim: Öğrenmeye yeni başladım) saflığı, çok yaygın bazı şeylerin (G / Ç gibi) daha az işlevsel dillerden daha zor yapılması anlamına geliyor. Haskell halkı da oldukça egzotik bazı terminolojiler kullanır ("katamorfizm" gibi kelimeler) ve muhtemelen mücadele etmeden önce kemerinizin altında bazı programlama deneyimleriyle daha iyi olur. (Ama tekrar etmeliyim, yeni öğrenmeye başladım! Bu düşünceyi bir tutam tuzla al!)

Ve neden C / Delphi sürüyor? Çünkü gömülü sistemlerde çalışmadığınız sürece, manuel bellek yönetiminin tek şey olduğunu düşünerek programlama öğrenmeniz gerekmemelidir. Çöp toplama 1980'lerin seviye makine için yeterince iyi çalıştı. Sizin telefon o güçlü!

Son olarak, gerçekten yapsam da, Erlang'ı yukarıdaki listeye koymadım .


2
Bu bir öğrenme sırası mı?
Wizard79

Açıkça bir dizi (uzunluk 1).
Frank Shearar

Daha az ciddiyetle: Dizide bir adım atacağım, diğerini de sağlarsınız ve topluluk söz konusu dizinin sırasına oy verir, tamam mı?
Frank Shearar

3
@Frank demek istemedim. Tam diziler bekliyordum. Ve bence, sıralama oylama ile yapılamaz.
Gulshan

Lütfen millet: inecek olursanız, nedenini açıklayınız .
Frank Shearar

5
  1. Python. Programlamaya mükemmel bir giriş. Bu aynı zamanda daha önce programlamaya maruz kalmayla da bağlantılı olacaktır.

  2. Şema. Ayrıca programlamaya mükemmel bir giriş. Programlama acemileriyle uğraşıyorsanız, bunu önce Python'a ve ikinci olarak öğretmek isteyebilirsiniz. Bir alternatif önce Python ve sonra Scheme yerine Common Lisp olacaktır: daha fazla iş, ancak daha fazla ödül.

  3. C. Silikonun yakınında kalan düşük seviyeli bir dil. Bir bilgisayarın neler yapabileceğini öğrenmek için iyi. Bir çeşit montajcı dili kullanabilirsiniz, ancak C temellere oldukça yakın ve çalışmak çok daha kolay.

  4. Prolog. Alternatif olarak, hoşunuza giden birini bulabiliyorsanız, herhangi bir bildirim tarzı genel amaçlı dili değiştirin.

  5. Haskell. Başka bir şey yoksa, tip sistemi ve saf işlevsellik için.

  6. Burada birçok aday var, çünkü tüm kavramları altı dille kapsamak imkansız. Ortak Lisp, sadece makro sistem ve nesne sistemi için (gördüğüm diğerlerinden farklı) öğrenmeye değer. Dördüncüsü, Tcl ve APL, bazı başarılar gören tuhaf dillerdir ve bunlardan biri, öğrencinin her şeyi öğrendiği gibi hissetmesini önlemek için iyi olacaktır. Erlang eşzamanlılık için iyi olurdu.


"Programlama acemileriyle uğraşıyorsanız, bunu önce Python'a öğretmek isteyebilirsiniz." Çok kabul etti. Eski üniversitem şimdi benimsediğim bir yaklaşım ve çok iyi çalışıyor gibi görünüyor.
pyvi

Bu oldukça iyi bir liste, muhtemelen Haskell ve Prolog'daki siparişi tersine çevirirdim. Öğrenci özellikle tecrübesiz olsaydı, altı tanesini keserdim, listeyi çarpardım ve daha basit bir şeyle başlardım.
Orbling

4

Birçok iyi yanıt verilmiştir, ancak SQL sunan kimseyi görmedim. Listelenen diğerlerinin çoğundan tamamen farklı bir hayvandır ve veritabanlarıyla uğraşmak zorunda olan herhangi bir programcı için çok önemlidir.

Ayrıca, Batch, grep, awk, vb. Gibi işletim sistemi düzeyinde komut dosyası 'dilleri' de düşünebilirsiniz. 'Marka' da bu kategoriye girebilir.

Düşünmek isteyebileceğiniz diğer bir dil (henüz tamamen ölmemişse) COBOL'dur. Biraz bahsetmeyi hak ettiği diğer prosedür dillerinden yeterince farklıdır. C, Fortran, Basic, vb. Varyasyonları o kadar benzer hale geldi ki, bir kez aşina olduğunuzda, diğerine geçmek büyük bir sorun değil, ancak COBOL diğerlerinde verilen yapıların çoğundan yoksundur. (COBOL ile herhangi bir şey yaptığımdan bu yana en az 20 yıl geçti, bu yüzden gözlemlerim artık bu dilde geçerli olmayabilir.)

APL'den sadece tarihsel bir bakış açısıyla bahsetmek ya da huzur içinde dinlendirmek isteyebilirsiniz. Senin seçimin.


1
SQL'i önermememin nedeni, genel amaçlı bir dil olmamasıdır. Öğrencilere Prolog gibi daha açıklayıcı ve daha genel bir şeyle vurmayı tercih ederim. İşletim sistemi düzeyinde kodlama dilleri, Python veya Perl gibi daha genel bir dilin sunmayacağı hiçbir şey sunmaz. COBOL'a en son dokunduğumda, diğer dillerde iyileşemeyeceğiniz hiçbir konsept sunmadı. APL önerisini seviyorum, tarihsel değer için çok farklı değil, çok farklı bir dil.
David Thornley

@David Thornley: SQL'in genel amaçlı bir dil olmadığını kabul ediyorum. SQL'in bazı ilginç mantıksal ve teorik kavramları, diğer birçok dilde gelmeyen temel işlemler olarak ayarlanmıştır. veritabanlarıyla uğraşan herkes için kayda değer bir birlik, birleştirme, gruplandırma vb.
oosterwal

Görmek istediğim her şey bir öğrenciye öğretildi, ancak bazılarının tarihsel bir hissi var. Senaryo dillerini öğrenmek çok önemlidir, ancak diğerlerinin yanında yapılabilir, SQL'de olduğu gibi, primerlere bir hizmet dilidir. Öğrenci matematikte çok güçlüyse, APL ile başlamak güzel olabilir (veya belki de R, okunması çok daha kolay, ancak benzer şekilde kullanılabilir).
Orbling

2

İlk önce Eric Raymonds "Nasıl bir hacker olunur" okumanızı öneririm , çünkü "kod veri ve veri koddur" kavramına sahip Lisp de dahil olmak üzere nasıl başlayacağına dair bazı ilginç noktalar vardır.

Programlama için Haskell, Prolog, SQL ve montaj dilini de öneririm.

Öğrenmek istediğiniz şey ne olursa olsun, doğru bir şekilde öğrenmek için zaman ayırın ve önemsiz miktarda kod yazın. Bisiklete binmek gibidir - bir kitaptan öğrenemezsiniz.


2

Önce> Programlamaya başladığınızda ne yapmak istiyorsunuz? Bir oyun programcısı olmayı öğrenmek bir işletme için veritabanı programcısı olmayı öğrenmek ... web tabanlı bir programcıdan farklı ...

İkincisi> Öğrenmeye başladığınızda, yükseklerden başlamak ve aşağı inmek ister misiniz? Ya da düşük başlayın ve yukarı çıkın. C # (yüksek seviye) öğrenmek, Assembly (Düşük seviye) öğrenmekten çok farklıdır.

Büyük bir seçim ne yapmak istediğinize bağlı olacaktır. Bir sürücünün programlanması büyük olasılıkla C veya Montaj'ı içerecektir ... Bir web sitesinin programlanması PHP, C #, asp vb. Olacaktır ... Web programlama için montaja dokunmayacaksınız ... vb ...

Temel olarak ... ne yapmak istediğinize karar verdiğinizde, bir dil seçmek daha kolay. Örneğin, bir hastanede veri analisti oldum. Yani benim dil seçimi "veri erişimi için SQL / TSQL / DB2, Windows istemcileri için C # WPF, web istemcileri için Silverlight, IBM arka uç mantığı için bazı RPG / CL ...

Şahsen iyi bir kitaba bağlı kalıyorum + dili uygulamak için kendi programınızı oluşturuyorum. APress'i seviyorum ve C # öğrenirken C # 2008 Illustrated okumayı sevdim. Öğrenilmeyenlerin ve uzmanların temellerini kapsayan başka kitapları da var.


2

Yeni gelen bir kişinin başlamak için sadece bir dile ihtiyacı vardır, ikinci dili öğrendikten sonra, rakip birçok geliştiricinin ötesine geçiyorlar. Aşağıdaki sırayla öğrenirim:

  • Smalltalk - bu OO'nun aldığı en iyi şeydir ve basit pozlama, işlerin yapılması gerektiği şekilde gözlerinizi açacaktır. OO kavramlarını öğrenmek için en iyisi.
  • Java veya C # - statik olarak kontrol edilen türleri sunarken OO'ya daha mimari ve planlı bir yaklaşım sağlar.
  • Ruby veya Python - Java veya C # hissedene kadar takdir edemezsiniz
  • Erlang - eşzamanlılık kolay görünecek şekilde yapılır. OO dilleriniz veya C'nin yapabileceğinden çok daha iyi.
  • Lisp, Haskell veya diğer işlevsel dil - sorunların çözümünde farklı bir yaklaşımdır.
  • C - Java için yerel uzantılar oluşturarak veya daha düşük düzeyli algoritmalar uygulayarak, bu, derleyici yazana kadar bir kişinin ihtiyaç duyduğu kadar derlemeye yakındır

"C ++ nerede?" Peki ya X? Dürüst olmak gerekirse, birden fazla dil öğrenmek birkaç şey yapar: deneyiminizi zenginleştirir ve daha fazla dil öğrenmek için bir sürücü sağlar. İyi bildiğim dillerin listesi (Java, C #, Ruby, C ++, Javascript) tamamen nesne yönelimli - ama öncelikle her gün işte yapmam gereken şey bu. Karşılaştığım dillerin listesi (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) bana değerli dersler verdi. En azından bu dillerle ilgili neler olduğunu anlayabiliyorum. Keşfetmediğim çok şey var, ama gelecekte çok iyi olabilir. Birkaç biçimlendirme dili de var: HTML, XSL: FO, XSLT, CSS, XML, SGML, web ile herhangi bir şekilde çalışacaklarsa maruz kalmaları gerekiyor.

En az iki farklı dil öğrendikten sonra, gerçekten öğrenme arzusu olan birinin bir dahaki sefere almaya karar verdiğini kısıtlamanız gerektiğini düşünmüyorum. Öğrenme organik bir deneyim olmalı ve süreçteki çok fazla yapı tam olarak aynı şekilde düşünen bir grup insan yaratıyor. Yani bir tek kültür.


2

Bu cevapların çoğu kabaca aynı görünüyor, bu yüzden farklı bir görüş sunacağım. Uzun zamandır en iyi ilk dilin Tcl olduğuna inanıyorum.

Neden? Birincisi, öğrenmesi çok kolay. Dilin çok fazla sözdizimi yoktur, böylece öğrenci programlama kavramlarına daha fazla, belirli bir dilin sözdizimsel özelliklerine daha az odaklanabilir. Bu yazı itibariyle Tcl, tüm dili yöneten tam 12 kurala sahiptir (son birkaç on yılda on birden fazla).

Bir diğeri için, Tcl harika bir yerleşik GUI dili ile birlikte gelir, böylece nispeten anlık bir memnuniyet elde edebilir ve olay odaklı programlamanın temellerini öğrenebilirsiniz.

Üçüncüsü, genişletilebilir. Tekrar döngüsünü öğretmek ister misiniz? Tekrar döngüsünü yapan bir komut yazabilirsiniz, böylece tekrarı nasıl kullanacağınızı öğrenemezsiniz.

Ayrıca, genişletilebilir olduğundan C'ye kolay bir selam var. C temellerini öğrenebilir ve a) başka bir dilde yazılmış yeni komutlarla Tcl'yi nasıl genişleteceğinizi veya b) yazılmış bir programa nasıl bir komut dosyası dilinin ekleneceğini öğrenebilirsiniz. C.

Tcl ve C'yi öğrendikten sonra, diğer birçok dil bu iki uç arasında bir yerde bulunur ve alınması nispeten kolaydır. Listem, Tcl ve C'den sonra öğreteceğim dört kişiyle:

  1. Tcl
  2. C
  3. Python - OO kavramları için, artı diğer dillerle zıtlık göstermek için girinti blokları tanımlar.
  4. Ruby - OO'yu farklı bir şekilde ele almak için artı çerçeveler hakkında bilgi edinmek için raylar
  5. java - her yerde kullanılır, bilmeniz gerekir ve JVM hakkında bilgi edinmeniz gerekir
  6. groovy - dinamik dillere geri dön

1

Montaj Dili, C, SQL, C #

Biliyorum, sıkıcı ve yaşlı skool. Ve tüm soru, problem çözme, etki alanı modelleme ve algoritma oluşturma gibi programlamanın gerçekten zor kısmını yok sayar. Ama işte nedeni:

  1. montaj dili ile yolunuzu taklit edemezsiniz; ya anlarsınız ya da anlamazsınız. derleyici sizi kurtaramaz, ek bir çerçeve veya kütüphane yükü yoktur ve makine mimarisinden gizlenemezsiniz; saf programlama (yeni başlayanlar için iki sayılar düzeyinde)

  2. birkaç yüzden fazla satırdan oluşan birkaç montaj dili programı yazdıktan sonra, işaretçiler ve bellek yönetimi artık gizemli değildir ve koddaki kalıpları (if, anahtar, dizi, döngüler vb.) fark etmeye başlamalısınız. ). C bu desenleri güneş ışığına çıkarır ve parlamasına izin verir. Standart kütüphane muazzam olmadan yararlıdır, ancak makrolar / şablonlar / vb. bu aşamada.

  3. şimdi SQL ile veritabanlarına atlayın. Saklı yordamlar ile aşırıya kaçmayın, sadece tablo ve sorguların temellerini alın.

  4. birkaç yüzden fazla satırdan oluşan birkaç C programı yazdıktan sonra, işaretçiler, yapılar ve bellek yönetimi ikinci doğadır ve prosedürel yapılar eski dostlardır. Daha üst düzey kalıpları fark etmeye başlayacaksınız: bu fonksiyonlar her zaman bu veri yapısıyla devam eder, kodun bu kısmı, X, Y ve Z yöntemleri hariç kodun bu kısmı gibidir. Buna ilişkisel verileri kavrayın ve şimdi nesne yönelimli bir dile hazırsınız. Büyük bir çerçeve ve genel olarak kapsamlı belgeler ile. Gerçek dünyaya hoş geldin! GUI'leri keşfedin, masaüstü uygulamaları yazın, web siteleri yazın, web hizmetleri yazın, istediğinizi yazın. Eğer bu kadar meyilliysen bir iş bul.

Şimdi bir programlama Jedi misiniz? Kod ninja mı? Hayır , şimdi sadece yetkinsin. Ancak, parlak yeni eğlenceli şeyleri keşfetmek için dayanacak sağlam bir temeliniz var.


1

Temel bilgilere ihtiyacınız var:

  1. Makine kodu
  2. Montaj dili
  3. C
  4. yanlış telaffuz

Ondan sonra muhtemelen önemli değil.


0

Tamam, bu ödülün son günü. Ve cevabımı ekliyorum. Benim önerdiğim sıra

C, C ++, JAVA / C #, Python / Ruby, Başka bir dil (Assembly / Lisp / Prolog vb.)

  • İlk dilin en kolay dil olması gerektiğini düşünmüyorum. Aksine, bilgisayarın bir soyutlamayı koruyarak nasıl çalıştığı hakkında genel bir fikir vermesi gerektiğini düşünüyorum.
  • C'den C ++ 'ya geçiş daha kolay olacaktır. Bu günlerde en çok kullanılan paradigma OOP olacak.
  • C ++ 'dan C # / Java'ya geçiş daha kolay olacaktır. Fonksiyonel programlama gibi birçok paradigmayı içerdiğinden C # 'ı tercih ederim.
  • Birisi şimdi Python veya Ruby gibi dinamik dillere geldiğinde, bir " WoW " olacaktır. Dinamik yazmanın güzelliğini hissetmek daha kolay olacaktır. Ama önce dinamik dilleri sonra da statik dilleri öğrenmek, " Ah! Neden bunları eklemeliyim? "
  • Şimdi, en çok kullanılan paradigmalar ve diller neredeyse bitti. Yani, ne istersen keşfet. Meclis'ten Lisp, Prolog veya Haskell'e. Ve çeşitli programlama dillerinin yeni özelliklerini ve özelliklerini keşfedin.

Burada C sadece başlamak içindir.
Gulshan

C # 'ın java yerine tercihi, her ikisinin de neredeyse eşit olduğunu söyleyeceğim birçok faktöre bağlıdır.
prasonscala

0

Şema, C, C ++

Önyargılı olacağım ve üniversitemin temel Bilgisayar Bilimi müfredatı için kullandığı modeli kullanacağım. İlk yılımda buna karşıydım, ancak sonraki yıllarda buna minnettarım. Model, herhangi bir programlama deneyimi gerektirmemekle birlikte öğrenme yeteneği gerektirmektedir.

  1. Şema
    Biz ilk olarak programlamayı öğreniyorsunuz, ne kadar az sihir, o kadar iyi. Şema'nın öğretim dili, bir dilin açık ve makul bir tanımını, üzerine inşa edebileceğiniz ve genişletebileceğiniz gerçekten küçük bir aksiyom seti ("büyü") sunar. Matematikteki fonksiyonları anlayabilen herkes, Program programlarını izleyebilir ve akıl yürütebilir. Şema ile başlamak, dile özgü ayrıntılar hakkında endişelenmeden hesaplamayı düşünmek için temiz ama güçlü bir yol sağlar.

  2. C
    Şemadan C'ye geçiş çok zor bir yöntemdir, ancak üst düzey dillerin düşük düzey dillerin çok önemli eşleştirilmesi hakkında bilgi edinmenizi sağlar. Bellek modelini (işaretçiler, yığın, yığın vb.) Ve programların nasıl derlendiğini ve çalıştırıldığını, işaretçilerin, yığınların ve yığınların nasıl çalıştığını öğrenmek temel becerilerdir. Bu düşük seviye anlayışla programları daha yüksek bir seviyede (Big O) analiz etmeye başlayabilirsiniz. Farklı uygulamalarla oynayarak kendi soyut veri türlerinizi yuvarlamaya başlayabilirsiniz (basit bir karma tabloya karşılık bir küme için ikili ağaç diyelim).

  3. C ++
    C ve Scheme öğrenerek farklı programlama dilleri paradigmalarını ve farklı problemlere nasıl uygulanabileceğini görmeye başlarız. Artık programlamanın en korkutucu yönlerine yaklaşabilirsiniz: seçim ve takaslar. Dil seçiminin programlanması performansı, okunabilirliği, sürdürülebilirliği, sağlamlığı vb. Etkileyebilir. Kafanızda tutabileceğiniz şeylerden daha büyük sorunları çözmek için bu seçim harika ama aynı zamanda tehlikelidir. C ++, programcı için mümkün olduğunca az seçenek yapmaya çalışır. C ++ öğrenerek bu takasları nasıl yapacağınızı öğreneceksiniz ve sorunlarınızı çözmek için kendiniz seçeceksiniz.

Bu dillerin hiçbirini endüstride kullanamaz veya onlara tekrar dokunamazsınız, ancak bunları öğrenme süreci, kullanacağınız diğer dilleri anlamanıza yardımcı olur. Başka bir yönü, araçları belirli bir dilde öğrenmenizdir. Komut satırında gcc çalıştırma, Vim öğrenme, GDB kullanarak bir programa adım atma, Dosya oluşturma, SVN kullanarak kodlama, testi otomatikleştirmek için kabuk komut dosyaları yazma vb.

Çekirdek müfredatın başka dersleri de olduğunu unutmayın (bilgisayar mimarisi, veri yapıları ve algoritmalar, derleyiciler, işletim sistemleri vb.). Dolayısıyla, sadece bu dilleri öğrenmek, programlama konusunda yetkin olmak için yeterli değildir.


0

Temel bir dilden üst seviyeye bir dil olmak, gitmenin yoludur. Böylece arkada neler olduğu hakkında hala bir fikriniz olur.

  • C - İşaretçiler ve bellek yönetimi
  • C ++ - OO temelleri ve hala çok popüler
  • Java / C # - En popüler diller
  • Bazı temel montajlar
  • İşlevsel dil - Ör. Haskell
  • Senaryo dili - Örn. Python

0
  1. Python. İşleri yapmak için sıradan programlama yapın. Prosedürel, OO ve (bir dereceye kadar) fonksiyonel.

  2. Düzenli ifadeler. Python kütüphanesinde, ama ayrı bir DSL.

  3. Kabuk (BASH veya her neyse). "&", "|", ";" işlemleri birleştiren operatörler Python'da kritik ve nahoştur.

  4. SQL. Bu - şimdilik - veri erişimi için lingua franca .

  5. XHTML. Bu - şimdilik - veri sunumu için lingua franca .

  6. CSS.

Belki gerekli olursa C.


" Derin aydınlanma " aşamasını dışlamış görünüyorsunuz . Bu 7 numara mı?
Mark C

@ Mark C: "bugün çok kullanılan dil ve paradigmaların çoğunu" ele almaya çalışıyor. Deneyimlerime göre, bu "diğer" veya DSL'ler programlama dillerinden daha fazla kullanılıyor olabilir. Bunun derin bir aydınlanmaya yol açtığından emin değilim - aslında kullanılan birçok dile maruz kalma .
S.Lott

Haklısın, bunu söylediğini gördüm, sonra da "ya da paradigmalar" dediğini fark ettim. Sadece iyi bir mizah içindeydi.
Mark C

@ Mark C: Ancak SQL ve CSS en ilginç olan "diğer paradigmalar" dır. Gerçekten Düzenli İfadeler Stack Overflow ile ilgili birçok soruya neden olan bir paradigmadır.
S.Lott

0

Metale yakın başlayın:

  1. montajcı
  2. C
  3. C ++
  4. C #
  5. yanlış telaffuz
  6. Python veya Ruby

Şimdi böylesine geniş bir yaklaşımla ilgili sorun, hiç kimsenin yıllarca çalışma yapmadan bu dillerde uzaktan bile yetenekli olamayacağıdır.

  1. Birleştirici: 3 ay
  2. C: 6 ay
  3. C ++: 2 yıl
  4. C #: 6 ay
  5. Lisp: 3 ay
  6. Python / Ruby: 3 ay

Amacınız onlara "Merhaba dünya" öğretmek değilse, 6 kişi için yaklaşık bir ay sürmelidir.


-1

Neden doğrudan girip VB veya C # öğrenmiyorsunuz? Bence her ikisi de başlangıçtan ileriye kadar değişen tam diller, imho.


4
Çünkü bu herhangi bir genişlik değil ve bu nedenle sorunun cevabı değil. Dahası, bunlardan birinin (veya her ikisinin) öğrenmeniz gereken her şeyi kapsadığını düşünüyorsanız, daha fazla dil öğrenmeniz gerekir.
David Thornley
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.