it-swarm-id.com

Urutan pembelajaran bahasa pemrograman yang ideal?

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.

N.B. : Ini adalah port dari pertanyaan yang saya tanyakan stackoverflow dan ditutup karena bersifat subyektif dan argumentatif.

17
Gulshan

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 bagaimana belajar pemrograman dalam 10 tahun , lalu:

  1. Python : Mulai dengan dinamis, tingkat tinggi, OO & bahasa fungsional. Karena itu sangat penting bagi pemula untuk merasa produktif ASAP , dan tidak dimatikan oleh sintaksis alien, 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 - semua sementara masih cukup kuat untuk tumbuh bersama Anda ketika Anda menjadi programmer canggih yang bekerja pada masalah besar. Ini juga penting untuk memperkuat + konvensi penting yang berguna untuk pemula: keterbacaan kode terhitung BANYAK, dan Anda harus menulis kode untuk diri sendiri dan orang lain untuk mudah mengerti.

  2. LISP: Secara khusus, setidaknya skim Struktur dan Interpretasi Program Komputer atau menonton video SICP , dan membuka mata lebar-lebar dengan melihat fondasi dan kekuatan ekspresif dari pemrograman - seseorang dapat melakukan banyak hal dengan sedikit sekali. 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 periksa 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 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 :

alt text

26
limist

Inilah yang akan saya lakukan:

  1. Python (atau Ruby atau Lua): Bahasa yang ditafsirkan, tanpa jenis, Anda bisa menyelesaikan beberapa hal dalam beberapa baris .Perpustakaan besar (Python adalah yang terbaik untuk ini saya kira) .Anda dapat masuk jauh dalam algoritma karena tidak ada gangguan. Tidak perlu kompilasi, jalankan saja. Di atas 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) .Tujuan di sini adalah untuk bersenang-senang, dan perlihatkan 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 untuk "menerjemahkan" apa yang Anda lakukan di 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 pointer well. 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, tidak ada sihir, Anda hanya berbicara dengan mesin. Ada perdebatan tentang sintaks Intel dan GAS, itu tidak penting. Jika Anda memiliki MIPS, saya percaya ini 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 telah turun sampai Anda menyentuh bagian bawah, yang "dekat dengan logam", seperti yang mereka katakan. Saya pikir ini adalah sangat penting, banyak pertanyaan dalam pemrograman diselesaikan 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 LISP atau Clojure Umum): Seperti kata @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, begitu 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 stack. Ini benar-benar merusak logika Anda lagi (jika LISP dan Haskell tidak cukup). Saya akan pergi sejauh mengajar Jones's Forth karena mereka tahu Majelis 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 concurrency. 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.

28
Pau Fernández
  • 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 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 OO bahasa saya dapat berkonsentrasi pada peningkatan penggunaan OO bahasa, tanpa mencoba membuatnya terlihat seperti Skema atau PostScript.

12
user4051

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 untuk ditemukan dalam pemrograman, dan menunjukkan bagaimana tidak termasuk masalah 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. LISP Umum

    Ini adalah hadiah untuk pekerjaan keras sebelumnya. Anda akan menemukan gema dari apa yang Anda pelajari dalam semua bahasa sebelumnya, dan melihat betapa konyolnya begitu banyak dari konsesi sebelumnya ketika memprogram dalam 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 yang mampu [~ # ~] ganti [~ # ~] ("read, eval, print loop"). Bekerja dengan lingkungan berbasis gambar - yang mengubah hubungan antara kode sumber Anda dan gagasan "program yang dapat dieksekusi" - akan mengubah seluruh gagasan Anda tentang apa artinya membangun program.

Di luar keempatnya, menjelajahi 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 mengemudi mobil ayah Anda dan mengetahui cara mengemudi mobil apa saja : Anda mungkin tidak suka mengendarai mobil sewaan mini- van selama beberapa hari, tahu betul kesenangan mengendarai mobil sport favorit, tetapi Anda akan mengetahui cara mengoperasikannya, dan pasti akan membujuk lebih banyak binatang buas yang malang daripada seorang amatir.

8
seh

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 murni bahasa OO dalam arti bahwa "semuanya adalah objek".

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

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

2. PROLOG

A pemrograman logika bahasa yang akan memberi Anda pandangan komputasi yang sangat berbeda dengan bahasa lainnya. Prolog juga sangat deklaratif (tetapi tidak sepenuhnya: the ! atau operator potong dapat memiliki efek semantik yang signifikan pada predikat).

3. LISP umum

Skema Pengganti di sini jika Anda suka. Common LISP mendukung banyak paradigma, terutama OO dan fungsional. Ia juga memiliki sejarah panjang (LISP adalah bahasa tertua yang masih banyak digunakan tertua kedua: 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. Handy introbuk ada.

5. C atau Delphi

Anda perlu 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 ke Majelis.

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 bagaimana OO bekerja (dan - dengan ketentuan bahwa ada BANYAK pemahaman yang berbeda tentang apa arti "OO") - cukup adil untuk mengatakan bahwa OO mendominasi pasar), pindah ke Prolog memastikan Anda tidak mulai berpikir bahwa OO adalah satu-satunya cara. Prolog adalah sangat berbeda dengan kebanyakan bahasa, dan akan meregangkan otot mental Anda sehingga Anda tidak mulai berpikir bahwa Anda tahu segalanya.

LISP yang umum, pada gilirannya, adalah bahasa orang dewasa. Ini memiliki standar yang matang, telah memimpin desain bahasa selama beberapa dekade (bersama dengan Smalltalk) - semua fitur mewah yang baru saja diperoleh oleh 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. telepon Anda sekuat itu!

Akhirnya, saya belum memasukkan Erlang dalam daftar di atas walaupun saya benar-benar harus.

6
Frank Shearar
  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 alternatifnya adalah Python pertama dan kemudian Common LISP alih-alih Skema: selengkapnya bekerja, 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.

5
David Thornley

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' scripting 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 biarkan APL itu tenang. Pilihanmu.

4
oosterwal

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 yang terbaik OO didapat, dan eksposur sederhana akan membuka mata Anda pada cara melakukan sesuatu. Terbaik untuk belajar OO konsep pada.
  • 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 merasa Java atau C #
  • Erlang - konkurensi dilakukan dengan cara yang membuatnya tampak mudah. Ini jauh lebih baik daripada yang bisa Anda lakukan dengan OO bahasa atau C).
  • LISP, Haskell, atau bahasa fungsional lainnya - ini adalah pendekatan yang berbeda untuk menyelesaikan masalah.
  • C - Baik dengan membangun ekstensi asli untuk Java, atau menerapkan algoritme tingkat rendah, ini sedekat dengan Assembly yang dibutuhkan seseorang hingga 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 memerlukan 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.

2
Berin Loritsch

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 kurang 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 perbedaannya dari pengulangan sementara karena Anda benar-benar menulisnya sendiri.

Juga, karena dapat dikembangkan, ada segue yang mudah ke C. Anda dapat mempelajari dasar-dasar C, dan belajar bagaimana 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 - for OO konsep, plus itu mendefinisikan-blok-oleh-indentasi perilaku untuk kontras dengan bahasa lain.
  4. Ruby - untuk pandangan berbeda tentang OO, plus Rails 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
2
Bryan Oakley

Saya akan menyarankan pertama 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 bahasa Haskell, Prolog, SQL dan 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.

2
user1249

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 mencakup C atau Assembly ... Memprogram situs web adalah PHP, C #, asp, dll ... Anda tidak akan menyentuh Assembly 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.

2
WernerCD

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 Majelis; 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 Majelis 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. Perpustakaan 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 mengilap.

1
Steven A. Lowe

Anda membutuhkan dasar-dasar:

  1. Kode mesin
  2. Bahasa campuran
  3. C
  4. PELAT

Setelah itu mungkin tidak masalah.

1
Scott Whitlock

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. LISP: 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.

0
SnoopDougieDoug

Skema, C, C++

Saya akan menjadi bias dan menggunakan model universitas saya saat ini menggunakan 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-fungsi dalam matematika dapat melacak dan alasan program Skema. Memulai dengan Skema menyediakan cara yang bersih namun kuat untuk memikirkan komputasi tanpa khawatir tentang detail spesifik bahasa.

  2. C
    Pindah dari Skema ke C adalah hal yang drastis tetapi memungkinkan Anda belajar 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 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, pemeliharaan, ketahanan, dll. Untuk memecahkan masalah yang lebih besar daripada yang bisa Anda pikirkan, pilihan ini bagus tetapi juga berbahaya. C++ mencoba membuat pilihan sesedikit mungkin bagi programmer. Melalui belajar C++, Anda akan belajar cara melakukan pertukaran dan pilihan ini sendiri untuk menyelesaikan masalah Anda.

Anda mungkin tidak menggunakan bahasa ini di 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.

0
Kirk Fernandes

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

  • C - Pointer & manajemen memori
  • C++ - OO dasar-dasar dan masih sangat populer
  • Java/C # - Bahasa paling populer
  • Beberapa Majelis dasar
  • Bahasa fungsional - E.g. Haskell
  • Bahasa skrip - E.g. Python
0
Carra

OKE, ini adalah hari terakhir untuk karunia. 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 untuk merasakan keindahan pengetikan dinamis. Tetapi belajar Bahasa dinamis dulu dan yang statis nanti 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 Majelis ke LISP, Prolog atau Haskell. Dan temukan konteks baru dan fitur berbagai bahasa pemrograman.
0
Gulshan
  1. Python. Untuk menyelesaikannya, lakukan pemrograman biasa. Prosedural, OO dan (sampai batas tertentu) fungsional.

  2. Ekspresi Reguler. Mereka ada di pustaka Python, tapi ini DSL terpisah.

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

  4. SQL Ini - untuk sekarang - the lingua franca untuk akses data.

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

  6. CSS.

Mungkin C jika itu perlu.

0
S.Lott