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ı kavramaya yardımcı olacak ideal programlama dili öğrenme dizisi nedir? Dil yerine paradigmalar için öğrenme dizisi bile önerebilirsiniz.
N.B. : Bu sorduğum sorunun limanı stackoverflow ve öznel ve tartışmacı olduğu için kapatıldı.
Sorunun yeni başlayanlar için programlama için ideal bir öğrenme dizisi olduğunu varsayarsak (programlamadaki eski eller kendi (muhtemelen kazara) öğrenme dizisine sahip olacağından) okumayı öneririm Norvig'in 10'da programlama öğrenmeye ilişkin makalesi yıl , sonra:
Python : Dinamik, yüksek seviyeli, OO ve fonksiyonel bir dil ile başlayın. Çünkü yeni başlayanların üretken hissetmesi gerçekten önemlidir ASAP ve yabancı sözdizimi, kitaplık eksikliği, çoklu platform eksikliği, öğrenme kaynaklarının eksikliği ve topluluk eksikliği yüzünden kapatılmamalıdır. 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ı olarak sizinle birlikte büyüyecek kadar güçlü olsa da, yeni başlayanlar için önemli + yararlı sözleşmeleri güçlendirmek de önemlidir: kod okunabilirliği bir LOT sayar ve kendiniz ve diğerleri için kod yazmalısınız kolayca anlamak için.
LISP: Özellikle, en azından yağsız Bilgisayar Programlarının Yapısı ve Yorumlanması veya SICP videoları 'ı izleyin ve temelleri ve ifade gücünü görerek gözlerini çok geniş açın. programlama - çok az şeyle çok şey yapılabilir. LISP'nin 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 bölümünü okuyun. Sonra Clojure , Sonraki Büyük Şeylerden biri olabilecek modern bir LISP lehçesi göz atın.
C: Sadece bilgi işlemin lingua-franca olması nedeniyle. :) Belirli bir yazılım dışı alanda öncelikle bir programcı ise, bu gün isteğe bağlı. Ben çirkin ama temel donanım için bir takdir almak hakkında bilmek değer buluyorum. Elbette K&R ile git.
Yukarıdaki turdan sonra, sorunların üstesinden gelmek ve koddaki çözümleri ifade etmek konusunda çok yetenekli olacak ve buradaki paradigmalar ile tamamen rahat olacaktır.
Ben böyle yapardım:
Python (veya Ruby veya Lua): Yorumlanmış bir dil, tür yok, birkaç şey yapabilirsiniz Büyük kütüphane (Python bunun için en iyisidir). Dikkat dağıtıcı olmadığı için algoritmaların derinliklerine gidebilirsiniz. Derleme gerekmez, sadece çalıştırın. Bunun üzerine Python dolaylı olarak iyi bir stil öğretin, çünkü Python girintisi zorunludur. Nesne Yönelimi'ni de öğretebilirsiniz (Lua'da daha çok bir problemdir) Burada amaç çok eğlenmektir ve öğrenciye neler yapılabileceğini göster.
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) içinde yaptığınız şeyi “çevirmek” ve bunu yeni kısıtlamalarla (çoğunlukla türler) yapmaktır.Şimdi kavramlarınız doğru ise, tür eklemek böyle bir sorun değildir. Bir sonraki adım, daha düşük seviyeyi düşünmektir (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.
Montaj : 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 yeterlidir.
(Bu ilk 3 "derinlik" dir. Şimdiye kadar, diyelim ki "metale yakın" olan tabana değene kadar aşağı iniyoruz. Sanırım bu çok önemli, ne olduğuna dair net bir fikriniz olduğunda programlamadaki birçok soru çözülür. Bunu bildiğinizde, güvenle daha fazla bilgi edinebilirsiniz.)
Şema (veya Ortak LISP veya Clojure): @dukeofgaming'in dediği gibi, LISP dilleri özyinelemeyi iyi öğretmenizi sağlar (çünkü bu Şema için en iyisi, çünkü açık döngüler var). Ama gidip iki şey daha öğreteceğim: kapanışlar ve makrolar. LISP dillerini diğerlerinden ayıran makrolardır. Ş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'yi inceledikten sonra Javascript "önemsiz" hale geliyor.
Haskell : İşlevsel bir dil için Haskell'i yenebileceğinizi sanmıyorum. LISP ve Şema işlevsel olarak kabul edilir, ancak işlevsel programlamayı vurgulamak için öğrencileri devletsiz düşünmeye zorlamanız gerekir. Haskell'de ayrıca "yıkım" için körelme ve desen eşleştirme gibi çok güzel şeyler de var. Haskell'i çok bilmiyorum, ama yazabileceğiniz kodun kısalığı çok güzel. Haskell'i iyi tanımak Erlang'ı anlamanın yolunu kolaylaştırır.
Dördüncü : Bir yığın dili. Tamamen mantığınızı tamamen kırar (eğer LISP ve Haskell yeterli değilse). Meclisi bildikleri için öğretime kadar gidebilirim Jones's Forth 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üşünce tarzınızı değiştirecek kadar garip. 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:
Smalltalk : Tamamen Nesneye Yönelik bir dil. Nesne Yönelimi'ni ciddiye aldığınızda ne olacağını görmek için dilin "if", "için" gerekmez. Her şey bir mesaj: yine büyük farkındalık. (Bu Objective-C'yi artık kolaylaştıracaktır.)
Git : Eşzamanlılığa vurgu yapan (güzel) bir dil. Go'yu programlamak için çok güzel ve rahat buluyorum.
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.
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 öğrenmemi yaşlandırdım, Pascal kodunu C'de yazmayı bırakmak birkaç yıl ve Objective-C ve Java'yı kullanmaya başladığımda birkaç yıl daha OOP elde etmek . Öte yandan, (neredeyse) yalnızca OO dilde çalıştığım için, OO dillerini daha iyi kullanmaya odaklanabildim. Şema veya PostScript gibi görünebilir.
Herhangi bir dizinin ideal olduğunu iddia etmek zor, ama haklı çıkarabileceğim bir plan hazırlayacağım:
[~ # ~] 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ı göstermesini temel yöntemlerle tanıştırır.
Perl
C'nin gerektirdiği titizliğ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 dışlanmasının programcıyı farklı şeylere odaklanmak için nasıl özgürleştirdiğini gösterir.
C++ veya belki Java
Daha sonra, C'nin programlamanın düşük seviyeli ve ilkel yönlerine odaklanmasının, soyutlamada 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.
Ortak LISP
Bu önceki slog'un ödülü. Önceki tüm dillerde öğrendiklerin 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'nin makro sistemini takdir etmeye hazırlar. 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 üçünden hiçbiri - belki de Perl hata ayıklayıcısı hariç - sizi yetenekli [~ # ~] repl [~ # ~] ("okuma, değerlendirme, yazdırma döngüsü"). Kaynak kodunuz ile "yürütülebilir program" fikri arasındaki ilişkiyi değiştiren resim tabanlı bir ortamla çalışmak, bir program oluşturmak ne demektir.
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ı sürmeyi öğrenmekle herhangi bir arabayı sürmeyi bilmek arasındaki fark gibidir: En sevdiğiniz spor arabayı kullanmanın zevklerini tam olarak bilerek birkaç gün boyunca minibüsünüz, ancak nasıl çalıştırılacağını anlayacaksınız ve mutlaka bir amatörden daha fakir canavardan daha fazla koaksiyel olacak.
Başlangıçta en azından kısmen çocukların bilgisayarları öğrenmesi için kullanmanın bir yolu olarak tasarlanmıştır. Sözdizimi bir paragrafta açıklanacak kadar basittir. LOGO gibi "girişe düşük engel, yüksek tavan" ilkesini örneklendirir.
Smalltalk "her şey bir nesnedir" 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 topluluğu canlı ve misafirperver. Ayrıca, gelişmiş tekniklerle ilgili birçok tartışma göreceksiniz: LISP topluluğu gibi, bilgilerini paylaşmak isteyen posta listesinde çok deneyimli Smalltalker'lar var. (Squeak topluluğunun geniş bir profesyonel eğitimci popülasyonuna sahip olması acı vermez.) Ayrıca yeni başlayanlar için başka bir liste var.
A mantık programlama hemen hemen tüm diğer diller için çok farklı bir hesaplama görünümü verecek dil. Prolog da bildirici (ama tamamen öyle değil:
! veya kesim operatörü yüklem üzerinde önemli bir anlamsal etkiye sahip olabilir).
İsterseniz Şemayı buraya yazın. Ortak LISP birden fazla paradigmayı, özellikle OO ve işlevseldir. Uzun bir geçmişe sahiptir (LISP hala yaygın olarak kullanılan en eski ikinci dil: sadece FORTRAN'ın eski).
Bilgisayarların nasıl çalıştığını bilmeniz gerekir. Bellek ve CPU'nun gerçekte nasıl çalıştığını bilmeniz gerekir. Her ikisi de geleneksel olarak "metale yakındır" ve dillerinin Meclise nasıl derlendiğini düşünmeyi teşvik eden topluluklara sahiptir.
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 nasıl çalıştığına dair adil bir fikriniz olduğunda (ve - "OO" nun ne anlama geldiğine dair ÇOK farklı anlayış olması şartıyla - OO pazara hükmeder), Prolog'a geçmek OO tek yol olduğunu düşünmeye başlamamanızı sağlar. Prolog çok çoğundan farklıdır ve zihinsel kaslarınızı gerecek, böylece her şeyi bildiğinizi düşünmeye başlamıyorsunuz.
Ortak LISP, sırayla, yetişkinlerin dilidir. Olgun bir standarda sahiptir, on yıllardır (Smalltalk ile birlikte) dil tasarımında lider olmuştur - en sevdiğiniz dilin yeni kazandığı tüm bu yeni özellikler? Şans ya LISP ya da Smalltalk'ta kuluçka yapılan 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ığı, bazı çok yaygın şeylerin (G/Ç gibi) daha az işlevsel dillerden daha zor yapılması anlamına geliyor. Haskell halkı da oldukça egzotik bazı terminolojiler kullanıyor ("katamorfizm" gibi kelimeler) ve muhtemelen mücadele etmeden önce kemerinizin altında bazı programlama deneyimleriyle daha iyi olur. (Ama tekrar etmeliyim, sadece öğrenmeye başladım! Bu görüşü 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 mevcut olduğunu düşünerek programlama öğrenmeniz gerekmez. Çöp toplama 1980'lerin seviye makine için yeterince iyi çalıştı. telefon o kadar güçlü!
Son olarak, gerçekten listelememe rağmen Erlang'ı yukarıdaki listeye koymadım.
Python. Programlamaya mükemmel bir giriş. Bu aynı zamanda önceden programlamaya maruz kalmayla da bağlantılı olacaktır.
Şema. Ayrıca programlamaya mükemmel bir giriş. Programlama acemileriyle uğraşıyorsanız, bunu önce ve Python saniye öğretmek isteyebilirsiniz. Alternatiflerden biri, önce Python ve ardından Şema yerine Ortak LISP: daha fazla çalışma, ancak daha fazla ödül olacaktır.
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.
Prolog. Alternatif olarak, hoşunuza giden birini bulabiliyorsanız, herhangi bir bildirim tarzı genel amaçlı dili değiştirin.
Haskell. Başka bir şey yoksa, tip sistemi ve saf işlevsellik için.
Burada birçok aday var, çünkü tüm kavramları altı dille kapsamak imkansız. Ortak LISP, sadece makro sistem ve nesne sistemi (eğer gördüğüm diğerlerinden farklı) için öğ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.
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.
Yeni başlayan 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:
"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.
Bu cevapların çoğu kabaca aynı görünüyor, bu yüzden farklı bir fikir 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 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ı öğrenmekle kalmaz, aynı zamanda bir döngüden nasıl farklı olduğunu da öğrenebilirsiniz, çünkü aslında kendiniz yazdınız.
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 dillerin çoğu 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:
Ben ilk okuma Eric Raymonds "nasıl bir hacker olmak" çünkü "kod veri ve veri kodu" nosyonu olan LISP de dahil olmak üzere, nasıl başlamak için bazı ilginç noktaları vardır.
Programlama için Haskell, Prolog, SQL ve Assembly dilini de öneririm (sadece bazıları).
Öğ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.
Önce> Programlamaya başladığınızda ne yapmak istiyorsunuz? Bir oyun programcısı olmayı öğrenmek, bir işletme için bir 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 Montaj'a 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.
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:
meclis dilinde 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)
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, switch, array, döngüler, vb.) fark etmeye başlamış olmalı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.
şimdi SQL ile veritabanlarına atlayın. Saklı yordamlar ile aşırıya kaçmayın, sadece tablo ve sorguların temellerini alın.
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ür 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. Devasa 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.
Temel bilgilere ihtiyacınız var:
Ondan sonra muhtemelen önemli değil.
Metale yakın başlayın:
Şimdi böylesine geniş bir yaklaşımla ilgili sorun, hiç kimsenin yıllarca çalışma yapmadan bu dillerde uzaktan bile yetenekli olamayacağıdır.
Amacınız onlara "Merhaba dünya" öğretmek değilse, 6 kişi için yaklaşık bir ay sürmelidir.
Ö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 minnettarım. Model, herhangi bir programlama deneyimi gerektirmemekle birlikte öğrenme yeteneği gerektirmektedir.
Şema
Bizler ilk önce 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 ("büyü") seti sunar. Matematikteki işlevleri 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.
[~ # ~] c [# ~ ~]
Şema'dan C'ye geçmek çok zor bir şey ama üst düzey dillerin düşük seviyeli dillere çok önemli bir şekilde eşleştirilmesi hakkında bilgi edinmenizi sağlıyor. 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).
C++
C ve Scheme öğrenerek farklı programlama dilleri paradigmalarını ve farklı problemlere nasıl uygulanabileceklerini görmeye başlıyoruz. 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 problemleri çö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 Shell 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.). Bu nedenle, sadece bu dilleri öğrenmek, programlama konusunda yetkin olmak için yeterli değildir.
Temel bir dilden üst seviyeye bir dil olmak, gitmenin yoludur. Böylece arkada neler olduğu hakkında hala bir fikriniz olur.
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.)
Python. İşleri yapmak için sıradan programlama yapın. Prosedürel, OO ve (bir ölçüde) fonksiyonel.
Düzenli ifadeler. Python kitaplığındalar, ancak ayrı bir DSL.
Kabuk (BASH veya her neyse). "&", "|", ";" işlemleri birleştiren operatörler Python'da kritik ve nahoştur.
SQL. Bu - şimdilik - veri erişimi için lingua franca.
XHTML. Bu - şimdilik - veri sunumu için lingua franca.
CSS.
Belki de C gerekliyse.