Urutan pembelajaran bahasa pemrograman yang ideal? [Tutup]

17

Bagaimana menurut anda? Apa urutan pembelajaran bahasa pemrograman ideal yang akan mencakup sebagian besar bahasa dan paradigma yang banyak digunakan saat ini serta membantu untuk memahami dasar-dasar, ide, dan praktik pemrograman umum? Anda bahkan dapat menyarankan urutan pembelajaran untuk paradigma daripada bahasa.

NB: Ini adalah port dari pertanyaan yang saya ajukan di stackoverflow dan ditutup karena bersifat subyektif dan argumentatif.

Gulshan
sumber
Pertanyaan bagus Mana yang akan menjadi jawaban jika pertanyaan ini berorientasi pada kinerja? Saya ingin tahu: programmers.stackexchange.com/questions/16323/… : D
JoeBilly
4
Saya sangat terkejut dan senang bahwa Lisp muncul secara umum pada pertanyaan-pertanyaan tingkat tinggi.
Inaimathi
1
Pertanyaan ini juga ditanyakan di sini (walaupun saya pikir ini yang lebih dulu): programmers.stackexchange.com/questions/41720/…
oosterwal
Harus menyimpan tautan ini di sini- streamhead.com/what-programming-language-to-learn-next
Gulshan

Jawaban:

26

Python, Lisp, C, Haskell

Dengan asumsi pertanyaan adalah tentang urutan pembelajaran yang ideal untuk pendatang baru untuk pemrograman (karena tangan lama di pemrograman akan memiliki urutan belajar mereka sendiri (kemungkinan tidak disengaja)), saya sarankan membaca esai Norvig tentang cara belajar pemrograman dalam 10 tahun , kemudian:

  1. Python : Mulai dengan bahasa yang dinamis, tingkat tinggi, OO & fungsional. Karena sangat penting bagi pemula untuk merasa ASAP produktif, dan tidak dimatikan oleh sintaksis asing, kurangnya perpustakaan, kurangnya multi-platform, kurangnya sumber belajar, dan kurangnya komunitas. Python sangat mudah dibaca, memiliki banyak perpustakaan yang bagus (terutama perpustakaan ilmiah - ilmuwan / insinyur modern harus tahu cara memprogram), mudah dijalankan dari sebagian besar OS, memiliki banyak tutorial dan seluruh buku gratis, dan umumnya ramah pengguna - semuanya masih cukup kuat untuk tumbuh bersama Anda saat Anda menjadi programmer canggih yang mengerjakan masalah besar. Penting juga untuk memperkuat + konvensi penting yang bermanfaat bagi seorang pemula: keterbacaan kode sangat berharga, dan Anda harus menulis kode untuk diri sendiri dan orang lain agar mudah dipahami.

  2. Lisp: Khususnya, paling tidak membaca Struktur dan Interpretasi Program Komputer atau menonton video SICP , dan membuka mata seseorang dengan sangat lebar dengan melihat fondasi dan kekuatan pemrograman yang ekspresif - orang dapat melakukan banyak hal dengan sedikit saja. Pelajari bagaimana Lisp dapat mengekspresikan tidak hanya paradigma fungsional, tetapi OO, logis / deklaratif, dan banyak lagi - seperti pembuatan bahasa baru khusus domain. Baca PAIP Norvig untuk menyaksikan apa yang dapat dilakukan oleh seorang master dengan bahasa tersebut. Kemudian lihat Clojure , dialek Lisp modern yang bisa menjadi salah satu Hal Besar Berikutnya.

  3. C: Hanya karena itu adalah lingua-franca komputasi. :) Mungkin opsional hari ini jika seseorang terutama seorang programmer dalam domain non-software tertentu. Saya merasa jelek tapi perlu diketahui untuk mendapatkan penghargaan untuk perangkat keras yang mendasarinya. Pergilah dengan K&R , tentu saja.

  4. Haskell : Kekuatan fungsional murni. Di mana Com.Sci saat ini. teori dan kekuatan ekspresif praktis bertemu. Lihat Haskell di Dunia Nyata .

Setelah tur di atas, orang akan sangat mahir dalam menangani masalah dan mengekspresikan solusi dalam kode, dan benar-benar nyaman dengan paradigma di sini :

teks alternatif

limist
sumber
Saya (secara alami) akan mengganti Smalltalk untuk Python sebagai # 1, tetapi saya mengatakan bahwa mengetahui bahwa Python (a) sangat populer daripada Smalltalk dan bahwa (b) membuat Smalltalk untuk berbicara dengan bahasa lain sama sulitnya dengan di Jawa Yang artinya cukup sulit untuk membuat frustrasi seorang pemula. "Kesucian" Python terlihat seperti keuntungan yang cukup besar.
Frank Shearar
Saya setuju dengan pernyataan produktivitas Anda. Saya pikir belajar C sebagai bahasa pertama mutlak adalah beban bollocks. Tapi itu pasti harus di tumpukan di suatu tempat.
Mark Canlas
+1 Saya tidak yakin apakah Haskell harus berada di atas, tetapi untuk bersikap adil, saya belum mengetahuinya dan ini ada di daftar saya, jadi ini mungkin akan menjadi bahasa terakhir yang saya pelajari.
Inaimathi
2
1-klik ke diagram ukuran penuh @ i54.tinypic.com/168ity1.jpg
Mike Clark
Saya akan memberi ini +1 jika C tidak ada dalam daftar
Balog Pal
28

Inilah yang akan saya lakukan:

  1. Python (atau Ruby atau Lua): Bahasa yang ditafsirkan, tanpa jenis, Anda bisa menyelesaikannya dalam beberapa baris. Perpustakaan besar (Python adalah yang terbaik untuk ini saya kira). Anda dapat masuk ke dalam algoritma karena tidak ada gangguan. Tidak perlu kompilasi, jalankan saja. Selain itu, dengan Python Anda secara implisit mengajarkan gaya yang baik, karena lekukan dalam Python adalah wajib. Anda dapat mengajarkan Orientasi Obyek juga (dalam Lua lebih merupakan masalah). Tujuannya di sini adalah untuk bersenang-senang, dan menunjukkan kepada siswa apa yang dapat dilakukan.

  2. C ++ (atau mungkin Java): Bahasa cepat yang diketik. Jika Anda membutuhkan Orientasi Objek, maka Anda sudah tahu beberapa konsep. Gagasan utamanya adalah "menerjemahkan" apa yang Anda lakukan dengan Python dan melakukannya dengan batasan baru (terutama tipe). Sekarang jika Anda memiliki konsep yang benar, menambahkan tipe bukanlah masalah. Langkah selanjutnya adalah berpikir lebih rendah (Java tidak membantu di sini), dan mengajarkan petunjuk dengan baik . Maksud saya menjelaskan tentang ruang alamat, CPU, OS, sedikit sehingga Anda dapat mulai melihat di bawah program Anda. Bahasa yang dikompilasi memperkenalkan perbedaan antara interpretasi dan kompilasi, sangat berguna untuk menjelaskan apa itu bahasa mesin, dll.

  3. Majelis : Akhirnya, tanpa sihir, Anda hanya berbicara dengan mesin. Ada perdebatan tentang sintaks Intel dan GAS, itu tidak penting. Jika Anda memiliki MIPS, saya percaya lebih baik untuk mengajar, tetapi saya kira x86 lebih nyaman karena lebih luas (x86_64 lebih baik karena memiliki lebih banyak register dan basa-basi). Anda hanya perlu menghapus beberapa kerumitan dan membiarkan siswa menyelidiki lebih lanjut jika mereka mau.

(Ini 3 pertama adalah "kedalaman". Sampai sekarang, kami sudah turun sampai Anda menyentuh bagian bawah, yang "dekat dengan logam", seperti yang mereka katakan. Saya pikir ini sangat penting, banyak pertanyaan dalam pemrograman adalah dipecahkan ketika Anda memiliki gagasan yang jelas tentang apa yang terjadi. Ketika Anda mengetahui hal ini, Anda dapat memperoleh pengetahuan lebih lanjut dengan percaya diri.)

  1. Skema (atau Common Lisp atau Clojure): Seperti yang dikatakan @dukeofgaming, bahasa Lisp memungkinkan Anda mengajar rekursi dengan baik (untuk Skema ini yang terbaik, karena tidak memiliki loop eksplisit). Tetapi saya akan pergi dan mengajarkan dua hal lain: penutupan dan makro. Macro adalah apa yang memisahkan bahasa Lisp dari yang lain. Secara pribadi saya tidak suka skema makro tetapi ini tidak terlalu penting. Saya pikir makro Clojure bagus, misalnya (tetapi rekursi di Clojure tidak bersih, karena JVM tidak memiliki rekursi ekor). Penutupan adalah konsep yang sangat penting, setelah Anda grok, Anda "melihat" Javascript secara instan. Setelah mempelajari C ++, Python, dan Lisp, Javascript menjadi "sepele".

  2. Haskell : Untuk bahasa fungsional, saya tidak berpikir Anda bisa mengalahkan Haskell. Lisp dan Skema dianggap fungsional, tetapi untuk menekankan pemrograman fungsional, Anda harus memaksa siswa untuk berpikir tanpa status. Haskell juga memiliki hal-hal lain yang sangat bagus, seperti kari, dan pencocokan pola untuk "perusakan". Saya tidak tahu banyak tentang Haskell, tetapi keringkasan kode yang dapat Anda tulis sangat indah. Mengenal Haskell dengan baik membuat jalan untuk memahami Erlang jauh lebih mudah.

  3. Keempat : Bahasa tumpukan. Ini benar-benar merusak logika Anda lagi (jika Lisp dan Haskell tidak cukup). Saya akan mengajarkan Jones's Forth karena mereka tahu perakitan dan kemudian Anda benar-benar dapat memahami apa yang sedang terjadi. (Mengetahui Keempat membuka PostScript, misalnya.)

(Jadi 3 yang terakhir ini adalah keluasan yang Anda katakan. Bagi saya, bahasa-bahasa ini cukup aneh sehingga mereka mengubah cara berpikir Anda. Mereka setidaknya melakukannya untuk saya. Dan saya pikir dengan ini, Anda cukup memahami paradigma untuk belajar bahasa baru sangat cepat.)

Secara opsional, Anda dapat mempelajari ini:

  1. SmallTalk : Bahasa murni Berorientasi Objek. Untuk melihat apa yang terjadi ketika Anda menganggap serius Orientasi Objek, bahasanya tidak perlu "jika", "untuk". Semuanya adalah pesan: realisasi besar lagi. (Ini akan membuat Objective-C mudah sekarang.)

  2. Go : Bahasa (indah) dengan penekanan pada konkurensi. Saya menemukan Go sangat bagus dan nyaman untuk diprogram.

  3. Prolog : Paradigma pemrograman lain. Saya belum menulis Prolog apa pun, tetapi saya mengerti bahwa ini adalah bahasa lain yang menggugah pikiran.

Pau Fernández
sumber
6
Python dan Ruby (saya tidak tahu tentang Lua) adalah bahasa yang sangat diketik. Saya pikir maksud Anda bahwa mereka secara dinamis daripada diketik secara statis.
Daniel Roseman
13
Harap perlakukan C dan C ++ sebagai dua bahasa terpisah.
David Thornley
1
Bjarne mengatakan : "Tidak ada bahasa yang disebut" C / C ++ ". Ungkapan ini biasanya digunakan oleh orang-orang yang tidak memiliki petunjuk tentang pemrograman (misalnya personil SDM dan manajer yang buruk). Atau, digunakan oleh orang-orang yang sederhana tidak kenal C ++ (dan seringkali juga bukan C). "
fredoverflow
1
Saya ingin seseorang berdebat apakah perakitan harus mendahului C ++. Pada saat itu akan cukup mudah untuk mendekati perakitan, karena konsep sederhana dan satu set kecil alat yang disediakan, namun bekerja dengan baku memori dan baku referensi memori harus sangat membantu ketika mendekati C ++, di mana menggunakan referensi nominal untuk mengatasi kedua sewenang-wenang lokasi dan nilai memori membingungkan sh * out dari kebanyakan orang.
Filip Dupanović
1
Saya memberi dua siswa CS kursus selama seminggu di assembler yang dibuat-buat. pada dasarnya saya menemukan set instruksi komputer minimal, dan interpreteor. Kemudian mereka dapat menulis (dan melihat menjalankan) beberapa rutinitas yang sangat sederhana, lengkap dengan pengaturan waktunya. Lalu saya menambahkan hal-hal seperti data caching, dan pengambilan awal sehingga mereka bisa melihat bagaimana fitur arsitektur berinteraksi dengan kinerja. Saya menduga assembler dan komputer artifisial memungkinkan lebih banyak fleksibilitas dan efisiensi pembelajaran, jika tujuannya didaktik, daripada akuisisi sesuatu yang mungkin mereka gunakan.
Omega Centauri
12
  • Yang kamu butuhkan sekarang
  • Yang Anda butuhkan selanjutnya
  • Yang Anda butuhkan setelah itu

Serius, saya mungkin telah mempelajari BASIC, COBOL, Fortran, Forth, Pascal dan Prolog di waktu saya, tetapi saya tidak pernah secara khusus perlu menggunakannya dan saya tidak dapat benar-benar melihat cara di mana mereka telah mempengaruhi penggunaan saya terhadap orang lain. bahasa, kecuali mungkin salah menerapkan paradigma dari satu ke yang lain. Butuh waktu lama bagi saya untuk melupakan BASIC cukup untuk benar-benar menulis Pascal terstruktur, beberapa tahun untuk berhenti menulis kode Pascal dalam C, dan beberapa tahun lagi untuk benar-benar grok OOP ketika saya mulai menggunakan Objective-C dan Java. Di sisi lain, karena saya telah bekerja (hampir) secara eksklusif dalam bahasa OO saya dapat berkonsentrasi pada peningkatan penggunaan bahasa OO saya, tanpa mencoba membuatnya terlihat seperti Skema atau PostScript.

pengguna4051
sumber
4
Anda tahu, saya pikir ada beberapa nilai belajar bahasa baru bahkan jika Anda tidak membutuhkannya ... namun saya setuju dengan sentimen umum bahwa sering kali lebih baik untuk belajar bahasa karena Anda pikir Anda akan menganggapnya berguna daripada karena itulah yang Anda pikir Anda "harus" pelajari.
Tim Goodman
8

Sulit untuk mengklaim bahwa urutan apa pun ideal, tetapi saya akan membuat rencana yang dapat saya benarkan:

  1. C

    Belajar C menuntut kesabaran dan ketekunan, dan akan memperkenalkan Anda pada cara-cara dasar bahwa komputer menangani data dan menunjukkan kepada Anda serangkaian tanggung jawab terluas yang dapat diterima oleh seorang programmer untuk menangani mesin seperti itu.

  2. Perl

    Sebagai penangkal kekakuan yang dibutuhkan oleh C, coba Perl yang luar biasa memaafkan. Apa yang memakan waktu satu minggu untuk menulis dalam C Anda dapat menulis dalam satu jam dalam Perl. Ini memperkenalkan jenis kesenangan yang berbeda yang dapat ditemukan dalam pemrograman, dan menunjukkan bagaimana mengecualikan perhatian dan detail tertentu membebaskan programmer untuk fokus pada hal-hal yang berbeda.

  3. C ++ , atau mungkin Java

    Selanjutnya lihat bagaimana fokus C pada aspek pemrograman tingkat rendah dan primitif berfungsi sebagai dasar untuk meningkatkan tingkat abstraksi, mencatat perdagangan yang dilakukan orang dengan efisiensi ketika bergerak maju dalam abstraksi. Jelajahi cara membentuk abstraksi yang masih dapat mempertahankan efisiensi yang penting bagi program Anda.

  4. Gangguan umum

    Ini adalah hadiah untuk kerja keras sebelumnya. Anda akan menemukan gaung dari apa yang Anda pelajari dalam semua bahasa sebelumnya, dan melihat betapa konyolnya begitu banyak dari konsesi sebelumnya ketika memprogram di Lisp. Preprocessor C dan templat C ++ menyiapkan satu untuk menghargai sistem makro Lisp. Anda akan mendapatkan kembali kemudahan berekspresi dari Perl, peluang untuk optimasi tingkat rendah dari C, kemampuan membangun abstraksi C ++ atau Java, dan melewati semuanya. Tak satu pun dari tiga sebelumnya - mungkin kecuali debugger Perl - akan mempersiapkan Anda untuk pengalaman pemrograman interaktif dengan REPL yang mampu ("baca, evaluasi, cetak lingkaran"). Bekerja dengan gambarberbasis lingkungan - yang mengubah hubungan antara kode sumber Anda dan gagasan "program yang dapat dieksekusi" - akan mengubah seluruh gagasan Anda tentang apa artinya membangun sebuah program.

Di luar keempatnya, mengeksplorasi gaya pemrograman lain, seperti pemrograman fungsional di Haskell, atau pemrograman logika dalam Prolog, membuat pemahaman yang lebih komprehensif tentang berbagai pengetahuan pemrograman, jika Anda mau - tetapi pada saat itu waktu Anda lebih baik dilayani dengan meningkatkan keahlian Anda - pengetahuan yang mendalam - dengan bahasa apa pun yang Anda tahu.

Setelah mencicipi bahasa yang cukup berbeda, pandangan Anda akan meningkat untuk fokus pada ide-ide yang melampaui salah satu dari mereka. Ini seperti perbedaan antara belajar mengendarai mobil ayah Anda dan mengetahui cara mengendarai mobil apa pun : Anda mungkin tidak menikmati mengendarai mini-van sewaan selama beberapa hari, mengetahui sepenuhnya kenikmatan mengendarai mobil sport favorit, tetapi Anda akan mengetahui cara mengoperasikannya, dan pasti akan membujuk lebih banyak dari binatang buas itu daripada seorang amatir.

seh
sumber
4
+1 untuk C dan Common Lisp, tetapi Perl sebagai bahasa kedua ?? :) Python akan berfungsi luar biasa sebagai bahasa yang dinamis sementara juga mendorong kebiasaan pemrograman yang baik - seperti kode yang sangat mudah dibaca untuk diri sendiri dan orang lain, dalam minggu, bulan, atau tahun setelah penulisan awal program.
limist
1
Mengenai rekomendasi Perl: itu hanya saya yang menunjukkan usia saya. Tentu, hari ini, Python atau Ruby akan menjadi pengganti dekat, tetapi keduanya lebih dogmatis daripada Perl, dan lebih condong ke arah orientasi objek gaya kelas-as-a-bag-of-metode-metode bahwa programmer baru keluar dari C tidak masih perlu. Saya ingat bahwa ketika saya belajar Perl, saya segera menjadi sangat produktif, dan tidak lama kemudian saya mulai menggunakan fasilitas berorientasi objek. Terlalu sering, semua fokus OO hanya mengganggu dan tidak perlu upacara.
seh
Saya tidak setuju dengan tampilan "perdagangan yang Anda buat dalam efisiensi ketika bergerak naik dalam abstraksi". Salah satu pilar C ++ adalah bahwa program yang menggunakan fasilitas C ++ tidak pernah lebih lambat dari program C yang setara . Misalnya, menggunakan fungsi virtual dalam C ++ tidak pernah lebih lambat daripada mensimulasikan fungsi virtual dalam C.
fredoverflow
Benar, Fred, dan itulah yang saya maksudkan: mengambil keuntungan dari fitur tanpa memikirkan bagaimana mereka bekerja dapat menimbulkan biaya - biaya yang mungkin Anda hindari sebelumnya dengan menghindari kemampuan fitur juga, karena itu akan menjadi sangat rumit atau tidak cukup idiomatis untuk mengimplementasikan secara manual. Misalnya, mengeluh bahwa RTTI "terlalu lambat" segera menimbulkan pertanyaan tentang bagaimana lagi Anda akan menyelesaikan masalah.
seh
6

1. Smalltalk

Awalnya dirancang setidaknya sebagian sebagai cara bagi anak-anak untuk menggunakan komputer untuk belajar. Sintaksnya cukup sederhana untuk dijelaskan dalam paragraf. Ini, seperti LOGO, mencontohkan prinsip "penghalang rendah untuk masuk, langit-langit tinggi".

Smalltalk adalah bahasa OO murni dalam arti bahwa "semuanya adalah objek".

Ini juga mengajarkan banyak teknik fungsional, terutama dalam API Pengumpul: pesan rantai, fungsi tingkat tinggi, peta, pengurangan, dan sebagainya.

The Squeak komunitas bersemangat dan menyambut. Anda juga akan melihat banyak diskusi tentang teknik-teknik canggih: seperti komunitas lisp, ada banyak Smalltalker yang sangat berpengalaman di milis yang bersedia berbagi pengetahuan mereka. (Tidak ada salahnya bahwa komunitas mencicit memiliki sub-populasi besar pendidik profesional.) Ada juga daftar lain untuk pemula.

2. PROLOG

Sebuah logika pemrograman bahasa yang akan memberikan pandangan yang sangat berbeda dari perhitungan untuk hampir semua bahasa lainnya. Prolog juga sangat deklaratif (tetapi tidak sepenuhnya: !operator memotong atau dapat memiliki efek semantik yang signifikan pada predikat).

3. Gangguan Umum

Skema Pengganti di sini jika Anda suka. Common Lisp mendukung banyak paradigma, terutama OO dan fungsional. Ini juga memiliki sejarah panjang (Lisp adalah bahasa tertua kedua yang masih banyak digunakan: hanya FORTRAN yang lebih tua).

4. Haskell

(Peringatan: Saya baru saja mulai mempelajarinya.) Mungkin bahasa fungsional paling murni di planet ini. Ini memiliki sistem tipe statis yang sangat canggih. Buku intro berguna ada.

5. C atau Delphi

Anda harus tahu cara kerja komputer. Anda perlu tahu bagaimana sebenarnya fungsi memori dan CPU. Keduanya secara tradisional "dekat dengan logam" dan memiliki komunitas yang mendorong pemikiran tentang bagaimana bahasa mereka dikompilasi untuk berkumpul.

Kenapa memesan ini?

Smalltalk sangat mudah dipelajari, sehingga Anda dapat dengan cepat mulai berkonsentrasi untuk menyelesaikan masalah daripada melawan kompiler ("penghalang masuk yang rendah"). Setelah Anda memulai pemrograman, tidak ada batasan buatan tentang apa yang dapat Anda lakukan - "langit-langit tinggi".

Setelah Anda memiliki gagasan yang adil tentang cara kerja OO (dan - dengan ketentuan bahwa ada banyak pengertian berbeda tentang apa arti "OO" - wajar saja untuk mengatakan bahwa OO mendominasi pasar), pindah ke Prolog memastikan bahwa Anda tidak memulai berpikir bahwa OO adalah satu-satunya cara. Prolog sangat berbeda dengan kebanyakan bahasa, dan akan meregangkan otot mental Anda sehingga Anda tidak mulai berpikir bahwa Anda tahu segalanya.

Lisp umum, pada gilirannya, adalah bahasa orang dewasa. Ini memiliki standar yang matang, telah memimpin desain bahasa selama beberapa dekade (bersama dengan Smalltalk) - semua fitur baru yang mewah yang baru saja diperoleh bahasa favorit Anda? Peluang adalah ide yang diinkubasi dalam Lisp atau Smalltalk. Lisp umum juga agak berkutil, dan Anda akan menemukan kutil ke mana pun Anda pergi.

Haskell keempat dalam daftar karena (saya diberitahu: Saya baru saja mulai mempelajarinya) kemurniannya berarti beberapa hal yang sangat umum (seperti I / O) lebih sulit dilakukan daripada dalam bahasa yang kurang murni fungsional. Orang-orang Haskell juga menggunakan beberapa terminologi yang cukup eksotis (kata-kata seperti "catamorphism", katakan), dan Anda mungkin akan lebih baik dengan beberapa pengalaman pemrograman di bawah ikat pinggang Anda sebelum menanganinya. (Tapi aku harus mengulanginya, aku baru saja mulai mempelajarinya! Ambil pendapat ini dengan sedikit garam!)

Dan mengapa C / Delphi bertahan? Karena kecuali Anda bekerja di sistem embedded, Anda benar-benar tidak perlu belajar pemrograman berpikir bahwa hanya ada manajemen memori manual. Pengumpulan sampah bekerja cukup baik untuk mesin level 1980-an. Anda telepon sekuat itu!

Akhirnya, saya tidak memasukkan Erlang di daftar di atas meskipun saya benar-benar harus.

Frank Shearar
sumber
2
Apakah ini urutan pembelajaran ?
Wizard79
Ini jelas urutan (panjang 1).
Frank Shearar
Kurang ceroboh: Saya akan memberikan satu langkah dalam urutan, dan Anda memberikan yang lain, dan komunitas akan memilih urutan urutan kata, oke?
Frank Shearar
3
@ Terus terang, aku tidak bermaksud begitu. Saya mengharapkan urutan penuh. Dan saya pikir, pemesanan tidak dapat dilakukan dengan memilih.
Gulshan
Tolong teman-teman: jika Anda akan downvote, jelaskan alasannya .
Frank Shearar
5
  1. Python. Pengantar pemrograman yang sangat baik. Ini juga akan terkait dengan paparan pemrograman sebelumnya.

  2. Skema. Juga merupakan pengantar yang bagus untuk pemrograman. Jika berhadapan dengan pemrograman pemula, Anda mungkin ingin mengajarkan ini terlebih dahulu dan Python kedua. Salah satu alternatif akan menjadi Python pertama dan kemudian Common Lisp alih-alih Skema: lebih banyak pekerjaan, tetapi lebih banyak hadiah.

  3. C. Bahasa tingkat rendah yang tetap dekat dengan silikon. Baik untuk mempelajari apa yang bisa dilakukan komputer. Anda bisa mengganti beberapa bentuk bahasa assembler, tetapi C cukup dekat dengan dasar-dasarnya dan lebih mudah untuk dikerjakan.

  4. Prolog. Sebagai alternatif, ganti bahasa tujuan umum gaya deklaratif, jika Anda dapat menemukan yang Anda sukai dengan lebih baik.

  5. Haskell. Untuk sistem tipe dan fungsionalitas murni, jika tidak ada yang lain.

  6. Ada beberapa kandidat di sini, karena tidak mungkin untuk mencakup semua konsep dengan enam bahasa. Lisp umum layak untuk dipelajari, jika hanya untuk sistem makro dan sistem objek (yang berbeda dari kebanyakan yang pernah saya lihat). Keempat, Tcl, dan APL adalah semua bahasa aneh yang telah melihat beberapa keberhasilan, dan salah satunya akan baik untuk mencegah siswa dari merasa seperti dia telah mempelajari semuanya. Erlang akan bagus untuk konkurensi.

David Thornley
sumber
"Jika berhadapan dengan pemrograman pemula, Anda mungkin ingin mengajarkan ini terlebih dahulu dan Python kedua." Sangat setuju. Ini adalah pendekatan yang diambil universitas saya sebelumnya dan tampaknya bekerja dengan sangat baik.
pyvi
Ini adalah daftar yang cukup bagus, saya mungkin akan membalik urutan di Haskell dan Prolog. Jika siswa tersebut sangat tidak berpengalaman, maka saya akan mengalahkan enam, menumpuk daftar dan mulai dengan sesuatu yang lebih sederhana.
Orbling
4

Banyak jawaban bagus telah disediakan, tetapi saya tidak melihat ada yang menawarkan SQL. Ini adalah binatang yang sama sekali berbeda dari yang lain yang terdaftar dan sangat penting bagi setiap programmer yang harus berurusan dengan database.

Anda mungkin juga ingin mempertimbangkan beberapa 'bahasa' skrip tingkat OS, seperti Batch, grep, awk, dll. 'Make' juga termasuk dalam kategori ini.

Satu bahasa lain yang mungkin ingin Anda pertimbangkan (jika belum sepenuhnya mati) adalah COBOL. Ini cukup berbeda dari bahasa prosedural lain yang layak disebutkan. Variasi C, Fortran, Basic, dll telah menjadi sangat mirip sehingga setelah Anda terbiasa dengan satu, pindah ke yang lain bukanlah masalah besar, tetapi COBOL tidak memiliki banyak konstruksi yang diterima begitu saja oleh yang lain. (Sudah setidaknya 20 tahun sejak saya melakukan sesuatu dengan COBOL sehingga pengamatan saya mungkin tidak lagi valid tentang bahasa ini.)

Anda mungkin ingin menyebut APL hanya dari sudut pandang historis - atau membiarkannya beristirahat dengan tenang. Pilihanmu.

oosterwal
sumber
1
Alasan saya tidak menyarankan SQL adalah bahwa itu bukan bahasa tujuan umum. Saya lebih suka memukul siswa dengan sesuatu yang bersifat deklaratif dan lebih umum, seperti Prolog. Bahasa skrip tingkat OS tidak menawarkan apa pun yang bahasa yang lebih umum seperti Python atau Perl tidak. Terakhir saya menyentuh COBOL, ia tidak menawarkan konsep yang tidak dapat Anda peroleh lebih baik dalam bahasa lain. Saya suka saran APL, bukan karena nilai historisnya karena itu bahasa yang sangat berbeda.
David Thornley
@ David Thornley: Saya setuju bahwa SQL bukan bahasa tujuan umum. SQL memang memiliki beberapa konsep teori logis dan teori yang menarik sebagai operasi dasar yang tidak muncul dalam banyak bahasa lain, misalnya. persatuan, bergabung, dikelompokkan berdasarkan, dll. yang perlu diperhatikan bagi siapa saja yang mungkin berurusan dengan basis data.
oosterwal
Semua hal yang ingin saya lihat diajarkan kepada seorang pelajar, meskipun beberapa di antaranya memiliki nuansa historis. Mempelajari bahasa skrip agak penting, tetapi bisa dilakukan bersamaan dengan yang lain, sama untuk SQL, ini adalah bahasa layanan untuk pendahuluan. Jika siswa sangat kuat dalam matematika, maka memulai dengan APL mungkin menyenangkan (atau mungkin R, karena jauh lebih mudah dibaca, tetapi dapat digunakan dengan cara yang sama).
Orbling
2

saya akan menyarankan pertama kali membaca Eric Raymonds "Bagaimana menjadi seorang hacker" karena ia memiliki beberapa poin yang sangat menarik tentang cara memulai, termasuk Lisp yang memiliki gagasan "kode adalah data dan data adalah kode".

Untuk pemrograman saya juga menyarankan Haskell, Prolog, SQL dan bahasa assembly (hanya beberapa).

Terlepas dari apa yang ingin Anda pelajari, luangkan waktu untuk mempelajarinya dengan benar dan menulis jumlah kode yang tidak sepele. Ini seperti naik sepeda - Anda tidak bisa mempelajarinya dari buku.

pengguna1249
sumber
2

Pertama> Apa yang ingin Anda lakukan saat memulai pemrograman? Mempelajari cara menjadi pemrogram game berbeda dengan mempelajari cara menjadi pemrogram basis data untuk sebuah bisnis ... berbeda dengan pemrogram berbasis web ...

Kedua> Begitu Anda mulai belajar, apakah Anda ingin mulai tinggi dan bekerja dengan cara Anda turun? Atau mulailah dari yang rendah dan terus maju. Belajar C # (tingkat tinggi) jauh berbeda dari belajar Majelis (tingkat rendah).

Pilihan besar akan tergantung pada apa yang ingin Anda lakukan. Memprogram driver kemungkinan besar akan mencakup C atau Majelis ... Memprogram situs web adalah PHP, C #, asp, dll ... Anda tidak akan menyentuh perakitan untuk pemrograman web ... dll ...

Sejauh dasar-dasar ... begitu Anda memutuskan APA yang ingin Anda lakukan, lebih mudah untuk memilih bahasa. Saya, misalnya, telah menjadi analis data di rumah sakit. Jadi "pilihan" bahasa saya adalah SQL / TSQL / DB2 untuk akses data, C # WPF untuk klien windows, Silverlight untuk klien web, beberapa RPG / CL untuk logika back-end IBM ...

Secara pribadi saya tetap berpegang pada buku yang bagus + membangun program Anda sendiri untuk berlatih bahasa. Saya suka APress dan suka membaca C # 2008 Illustrated ketika belajar C #. Mereka memiliki buku-buku lain yang mencakup dasar-dasar untuk yang tidak terpelajar serta ahli.

WernerCD
sumber
2

Seorang pendatang baru hanya perlu satu bahasa untuk memulai, setelah mempelajari bahasa kedua, mereka sudah maju melampaui banyak pengembang yang bersaing. Saya akan belajar dalam urutan sebagai berikut:

  • Smalltalk - ini adalah OO terbaik yang didapat, dan eksposur sederhana akan membuka mata Anda tentang cara melakukan sesuatu. Terbaik untuk mempelajari konsep OO.
  • Java atau C # - menyediakan pendekatan yang lebih arsitektural dan terencana untuk OO, sambil memperkenalkan tipe yang dicek secara statis.
  • Ruby atau Python - Anda tidak bisa menghargainya sampai Anda merasakan Java atau C #
  • Erlang - konkurensi dilakukan dengan cara yang membuatnya tampak mudah. Ini jauh lebih baik daripada bahasa OO Anda atau C bisa lakukan.
  • Lisp, Haskell, atau bahasa fungsional lainnya - ini adalah pendekatan yang berbeda untuk menyelesaikan masalah.
  • C - Entah dengan membangun ekstensi asli untuk Java, atau menerapkan algoritma tingkat rendah, ini sedekat perakitan seperti yang dibutuhkan seseorang sampai mereka menulis kompiler

Anda mungkin bertanya "di mana C ++?" dan bagaimana dengan X? Sejujurnya, mempelajari berbagai bahasa melakukan beberapa hal: memperkaya pengalaman Anda, dan memberikan dorongan untuk mempelajari lebih banyak bahasa. Daftar bahasa yang saya kenal dengan baik (Java, C #, Ruby, C ++, Javascript) semuanya berorientasi objek - tapi itu terutama karena itulah yang harus saya lakukan di tempat kerja setiap hari. Daftar bahasa yang saya gunakan (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) semuanya mengajari saya pelajaran yang berharga. Setidaknya saya bisa mengerti apa yang terjadi dengan bahasa-bahasa itu. Ada banyak hal yang belum saya jelajahi, tetapi mungkin saja di masa depan. Ada beberapa bahasa markup juga: HTML, XSL: FO, XSLT, CSS, XML, SGML yang membutuhkan paparan orang jika mereka akan bekerja dengan web dengan cara apa pun.

Setelah mempelajari setidaknya dua bahasa yang berbeda, saya benar-benar tidak berpikir Anda harus membatasi apa yang seseorang yang ingin pelajari memutuskan untuk mengambil berikutnya. Belajar harus menjadi pengalaman organik, dan terlalu banyak struktur dalam proses menciptakan sekelompok orang yang berpikir dengan cara yang persis sama. Jadi monokultur.

Berin Loritsch
sumber
2

Sebagian besar jawaban ini tampaknya kurang lebih sama sehingga saya akan menawarkan pendapat yang berbeda. Saya sudah lama meyakini bahwa bahasa pertama yang terbaik adalah Tcl.

Mengapa? Pertama, sangat mudah dipelajari. Tidak ada banyak sintaks untuk bahasa sehingga siswa dapat lebih fokus pada konsep pemrograman dan lebih sedikit pada keanehan sintaksis bahasa tertentu. Pada tulisan ini Tcl memiliki tepat 12 aturan yang mengatur seluruh bahasa (naik dari sebelas selama beberapa dekade terakhir).

Untuk yang lain, Tcl hadir dengan bahasa GUI built-in yang fantastis, sehingga Anda bisa mendapatkan kepuasan yang relatif instan dan dapat mempelajari dasar-dasar pemrograman yang digerakkan oleh acara.

Ketiga, bisa diperluas. Ingin mengajar tentang pengulangan? Anda dapat menulis perintah yang melakukan pengulangan sehingga Anda tidak hanya dapat belajar cara menggunakan pengulangan ... hingga, Anda dapat mempelajari bagaimana pengulangan itu berbeda dari pengulangan sementara karena Anda benar-benar menulisnya sendiri.

Selain itu, karena dapat diperluas, ada segue yang mudah ke C. Anda dapat mempelajari dasar-dasar C, dan mempelajari cara a) memperluas Tcl dengan perintah baru yang ditulis dalam bahasa lain, atau b) belajar bagaimana menambahkan bahasa skrip ke program yang ditulis dalam C.

Setelah Anda mempelajari Tcl dan C, sebagian besar bahasa lain berada di antara kedua ekstrem itu dan seharusnya relatif mudah diambil. Daftar lengkap saya, dengan empat yang akan saya ajarkan setelah Tcl dan C adalah:

  1. Tcl
  2. C
  3. Python - untuk konsep OO, plus itu mendefinisikan perilaku blok-by-indentasi untuk kontras dengan bahasa lain.
  4. Ruby - untuk pandangan berbeda tentang OO, plus rel untuk mempelajari kerangka kerja
  5. java - digunakan di mana-mana, Anda perlu mengetahuinya, dan perlu belajar tentang JVM
  6. groovy - lingkaran kembali ke bahasa yang dinamis
Bryan Oakley
sumber
1

Bahasa Majelis, C, SQL, C #

Aku tahu, membosankan dan skool-tua. Dan seluruh pertanyaan mengabaikan bagian yang sangat sulit dari pemrograman, yaitu pemecahan masalah, pemodelan domain, dan konstruksi algoritma. Tapi inilah alasannya:

  1. Anda tidak dapat memalsukan jalan Anda melalui bahasa assembly; Anda mendapatkannya atau tidak. kompiler tidak akan menyelamatkan Anda, tidak ada kerangka kerja atau overhead perpustakaan, dan Anda tidak dapat bersembunyi dari arsitektur mesin; ini adalah pemrograman murni (pada level add-two-number pemula)

  2. setelah Anda menulis beberapa program bahasa rakitan lebih dari beberapa ratus baris, petunjuk dan manajemen memori tidak lagi misterius, dan Anda seharusnya sudah mulai memperhatikan pola dalam kode (jika, switch, array, loop, dll. ). C membawa pola-pola itu ke dalam sinar matahari dan membuatnya bersinar. Pustaka standar berguna tanpa menjadi besar, tetapi jangan repot-repot dengan makro / templat / dll. di panggung ini.

  3. sekarang lompat ke database dengan SQL. Jangan berlebihan dengan prosedur tersimpan, cukup dapatkan dasar-dasar tabel dan kueri.

  4. setelah Anda menulis beberapa program C lebih dari beberapa ratus baris, petunjuk, struktur, dan manajemen memori adalah sifat kedua, dan konstruksi prosedural adalah teman lama. Anda akan mulai memperhatikan pola tingkat tinggi: fungsi-fungsi ini selalu sesuai dengan struktur data ini, bagian kode ini sama seperti bagian kode kecuali untuk metode X, Y, dan Z, dan seterusnya. Tambahkan ke ini pemahaman Anda tentang data relasional dan sekarang Anda siap untuk bahasa berorientasi objek. Dengan kerangka kerja yang besar dan dokumentasi yang umumnya tumpul. Selamat Datang di dunia nyata! Jelajahi GUI, tulis aplikasi desktop, tulis situs web, tulis layanan web, tulis apa pun yang Anda suka. Dapatkan pekerjaan jika Anda ingin.

Apakah Anda sekarang pemrograman Jedi? Ninja kode? Tidak , sekarang Anda hanya kompeten. Tetapi Anda memiliki dasar yang kuat untuk berdiri untuk menjelajahi hal-hal menyenangkan baru yang mengkilap.

Steven A. Lowe
sumber
1

Anda membutuhkan dasar-dasar:

  1. Kode mesin
  2. bahasa campuran
  3. C
  4. Pelat

Setelah itu mungkin tidak masalah.

Scott Whitlock
sumber
0

OKE, ini adalah hari terakhir untuk hadiah. Dan saya menambahkan jawaban saya. Urutan saya yang disarankan-

C, C ++, JAVA / C #, Python / Ruby, Bahasa lainnya (Assembly / Lisp / Prolog dll)

  • Saya tidak berpikir bahasa pertama yang paling mudah. Sebaliknya saya pikir itu harus memberikan ide keseluruhan tentang bagaimana komputer bekerja menjaga abstraksi.
  • Transisi dari C ke C ++ akan lebih mudah. Akan ada OOP, paradigma yang paling banyak digunakan saat ini.
  • Transisi dari C ++ ke C # / Java akan lebih mudah. Saya lebih suka C # karena menggabungkan banyak paradigma seperti pemrograman fungsional.
  • Ketika seseorang sekarang datang ke bahasa dinamis seperti Python atau Ruby, akan ada " WoW ". Akan lebih mudah merasakan keindahan pengetikan dinamis. Tetapi mempelajari bahasa dinamis terlebih dahulu dan yang statis nantinya akan menyebabkan, " Oh! Kenapa saya harus menambahkan semua ini? "
  • Sekarang, paradigma dan bahasa yang paling banyak digunakan hampir selesai. Jadi, jelajahi apa pun yang Anda inginkan. Dari Assembly ke Lisp, Prolog atau Haskell. Dan temukan konteks baru dan fitur berbagai bahasa pemrograman.
Gulshan
sumber
Di sini C hanya untuk memulai.
Gulshan
preferensi C # lebih dari java tergantung pada banyak faktor saya akan mengatakan keduanya hampir sama.
prasoncala
0

Skema, C, C ++

Saya akan menjadi bias dan menggunakan model universitas saya saat ini digunakan untuk kurikulum inti Ilmu Komputer. Saya menentangnya selama tahun pertama saya tetapi di tahun-tahun berikutnya saya bersyukur karenanya. Model ini didasarkan pada tidak memerlukan pengalaman pemrograman tetapi membutuhkan kemampuan untuk belajar.

  1. Skema
    Kami adalah Anda yang pertama belajar pemrograman, semakin sedikit sihir, semakin baik. Bahasa pengajaran Skema menyajikan definisi bahasa yang jelas dan masuk akal, serangkaian aksioma yang sangat kecil ("sihir") yang dapat Anda bangun dan kembangkan. Siapa pun yang dapat memahami fungsi dalam matematika dapat melacak dan menalar program Skema. Memulai dengan Skema menyediakan cara yang bersih namun kuat untuk memikirkan komputasi tanpa khawatir tentang detail spesifik bahasa.

  2. C
    Bergerak dari Skema ke C adalah hal yang drastis tetapi memungkinkan Anda mempelajari tentang pemetaan bahasa tingkat tinggi yang sangat penting ke bahasa tingkat rendah. Mempelajari model memori (pointer, heap, stack dll) dan bagaimana program dikompilasi dan dijalankan, bagaimana pointer, stack dan pekerjaan heap adalah keterampilan yang penting. Melalui pemahaman tingkat rendah ini, Anda dapat mulai menganalisis program di tingkat yang lebih tinggi (Big O). Anda bisa mulai menggulirkan tipe data abstrak Anda sendiri, bermain dengan implementasi yang berbeda (katakanlah tabel hash sederhana vs pohon biner untuk satu set).

  3. C ++
    Melalui pembelajaran C dan Skema kita mulai melihat paradigma yang berbeda dari bahasa pemrograman dan bagaimana mereka dapat berlaku untuk masalah yang berbeda. Sekarang Anda dapat mendekati aspek pemrograman yang paling menakutkan: pilihan dan trade off. Memprogram pilihan bahasa dapat memengaruhi kinerja, keterbacaan, kemampuan pemeliharaan, ketahanan, dll. Untuk memecahkan masalah yang lebih besar daripada yang dapat Anda pikirkan, pilihan ini bagus tetapi juga berbahaya. C ++ mencoba membuat pilihan sesedikit mungkin untuk programmer sebanyak mungkin. Melalui belajar C ++, Anda akan belajar cara melakukan trade off dan memilih sendiri untuk menyelesaikan masalah Anda.

Anda mungkin tidak menggunakan bahasa-bahasa ini dalam industri atau menyentuhnya lagi, tetapi proses mempelajarinya membantu Anda memahami bahasa lain yang akan Anda gunakan. Aspek lain adalah Anda mempelajari alat-alat di sekitar bahasa tertentu. Menjalankan gcc melalui baris perintah, mempelajari Vim, melangkah melalui program menggunakan GDB, membuat File make, memeriksa kode menggunakan SVN, menulis skrip shell untuk mengotomatisasi pengujian dll.

Pikiran Anda kurikulum inti juga memiliki program lain (arsitektur komputer, struktur data dan algoritma, kompiler, sistem operasi, dll). Jadi hanya mempelajari bahasa-bahasa ini saja tidak cukup untuk menjadi mahir dalam pemrograman.

Kirk Fernandes
sumber
0

Beralih dari bahasa dasar ke bahasa tingkat tinggi adalah cara yang harus ditempuh. Dengan begitu Anda masih memiliki gagasan tentang apa yang terjadi di belakang.

  • C - Pointer & manajemen memori
  • C ++ - Dasar-dasar OO dan masih sangat populer
  • Java / C # - Bahasa paling populer
  • Beberapa perakitan dasar
  • Bahasa fungsional - Misalnya Haskell
  • Bahasa skrip - Misalnya Python
Carra
sumber
0
  1. Python. Untuk menyelesaikannya, lakukan pemrograman biasa. Prosedural, OO dan (sampai batas tertentu) fungsional.

  2. Ekspresi Reguler. Mereka berada di pustaka Python, tetapi ini adalah DSL yang terpisah.

  3. Shell (BASH atau apa pun). "&", "|", ";" operator untuk menggabungkan proses sangat penting dan tidak menyenangkan dengan Python.

  4. SQL Ini - untuk saat ini - lingua franca untuk akses data.

  5. XHTML. Ini - untuk sekarang - lingua franca untuk presentasi data.

  6. CSS.

Mungkin C jika itu perlu.

S.Lott
sumber
Anda tampaknya telah meninggalkan tahap " pencerahan mendalam ". Apakah itu nomor 7?
Mark C
@ Mark C: hanya mencoba untuk menutupi "sebagian besar bahasa dan paradigma yang banyak digunakan hari ini". Dalam pengalaman saya, ini "lain" atau DSL mungkin lebih banyak digunakan daripada bahasa pemrograman. Saya tidak yakin ini mengarah pada pencerahan mendalam - hanya paparan banyak bahasa yang benar - benar digunakan.
S.Lott
Anda benar, saya melihat dia mengatakan itu, kemudian saya perhatikan dia juga mengatakan "atau paradigma". Itu hanya dalam humor yang bagus.
Mark C
@ Mark C: Tapi SQL dan CSS adalah "paradigma lain" yang paling menarik. Memang Regular Expressions adalah paradigma yang menyebabkan banyak pertanyaan tentang Stack Overflow.
S.Lott
0

Mulai dekat dengan logam:

  1. Assembler
  2. C
  3. C ++
  4. C #
  5. Pelat
  6. Python atau Ruby

Sekarang masalah dengan pendekatan yang luas adalah bahwa tidak ada yang bisa menjadi sangat mampu dalam bahasa-bahasa ini tanpa belajar selama bertahun-tahun.

  1. Assembler: 3 bulan
  2. C: 6 bulan
  3. C ++: 2 tahun
  4. C #: 6 bulan
  5. Cuma: 3 bulan
  6. Python / Ruby: 3 bulan

Kecuali jika niat Anda adalah untuk mengajarkan mereka "Halo dunia", yang akan memakan waktu sekitar satu bulan untuk semua 6.

SnoopDougieDoug
sumber
-1

Mengapa tidak langsung masuk dan pelajari VB atau C #. Keduanya menurut saya adalah bahasa lengkap mulai dari pemula hingga mahir, imho.

TehMinumGeek
sumber
4
Karena itu bukan keluasan, dan karenanya bukan jawaban untuk pertanyaan. Selain itu, jika Anda berpikir satu (atau keduanya) dari itu mencakup semua yang harus Anda pelajari, Anda sendiri perlu belajar lebih banyak bahasa.
David Thornley