Jika seseorang ingin mempelajari bahasa pemrograman baru setiap tahun, daftar apa yang harus dibuat? [Tutup]

19

Dalam bab satu dari "Programmer Pragmatis" tujuan pembelajaran pertama adalah:

Pelajari setidaknya satu bahasa baru setiap tahun. Bahasa yang berbeda menyelesaikan masalah yang sama dengan cara yang berbeda. Dengan mempelajari beberapa pendekatan yang berbeda, Anda dapat membantu memperluas pemikiran Anda dan menghindari gangguan dalam kebiasaan. [...]

Untuk mencapai ini selama karir, daftar bahasa cenderung menjadi sangat panjang (terutama jika Anda tidak ingin "maju" ke manajemen). Jelas pendidikan seorang programmer (atau bentuk apa pun) akan membantu Anda memulai dengan inti bahasa yang berguna secara komersial (daftar yang biasa dari posting pekerjaan: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Selain itu program pembelajaran formal atau informal kemungkinan telah mencakup pendekatan fungsional (melalui sesuatu seperti Haskell, LISP atau bahasa yang diturunkan ML)

Tetapi begitu suatu subset yang masuk akal dari daftar itu dipelajari - apa selanjutnya, dan mengapa ?

Richard
sumber
3
Dalam jawaban ini saya mencantumkan beberapa paradigma bahasa yang dapat dipelajari untuk memperluas kemampuan Anda. Saya akan mulai dengan mencoba mempelajari semua paradigma ini (daripada berfokus pada bahasa), jadi tandai semua yang digunakan bahasa Anda saat ini, lalu pilih bahasa yang memiliki banyak perbedaan dari apa yang Anda terbiasa. Tidak banyak gunanya memulai di C # lalu Java, coba diversifikasi lebih awal. Setelah Anda membahas semua tipe dasar, maka Anda dapat memilih bahasa umum lainnya.
Simon P Stevens
@Simon: Mengapa tidak membuat ini menjadi jawaban di sini?
Richard
1
Anda akan belajar banyak dari Jawa ke C #, tetapi tidak begitu banyak sebaliknya
Casebash
@Richard. Saya tidak berpikir itu membenarkan jawaban penuh, saya hanya merujuk Anda ke sesuatu yang relevan yang saya tulis di tempat lain.
Simon P Stevens
1
Kebanyakan orang belajar bahasa setahun akan menjadi "jack of all trades tetapi master of nothing" hingga Anda fokus pada beberapa selama beberapa tahun. Saya percaya, berdasarkan banyak pengalaman bahwa gagasan programmer 'full-stack' adalah salah kecuali untuk 1% - 5% dari pengembang. Kebanyakan orang backend hard-core yang saya tahu tidak memiliki keterampilan front end yang hebat dan sebaliknya.
Junky

Jawaban:

19

Buat itu menarik dan habiskan setiap tahun menulis juru bahasa atau kompiler untuk bahasa pemrograman Anda sendiri yang mengisi ceruk yang belum pernah Anda gunakan untuk bahasa pemrograman. Setiap tahun, tulis kompiler / juru bahasa Anda berikutnya menggunakan bahasa yang Anda tulis tahun sebelumnya.

alternatif
sumber
7
Bolehkah saya minta tanda tangan Anda? :-)
Christian Davén
1
+1 Jawaban yang brilian, bahkan jika itu mungkin dimaksudkan dengan cara yang lucu.
Joe D
1
@ Jo D Tidak dimaksudkan dengan cara yang benar-benar lucu. Jika Anda bisa melakukan ini, Anda telah menguasai semua ceruk.
alternatif
-1 karena tidak bermaksud dengan cara yang benar-benar lucu. (seperti kami tidak memiliki cukup bahasa semi-setengah / implementasi terletakan)
ZJR
2
@ZJR Jadi 99% Humoris, 1% Tidak lucu itu buruk? Ayo. Juga, mengapa Anda menurunkan jawaban berdasarkan komentar?
alternatif
13

Anda harus memaksimalkan "relevansi marjinal", yaitu selalu menjelajah ke area baru yang belum Anda kuasai. Variasikan bahasa pemrograman dan konsepnya . Jika Anda tidak tahu bahasa berorientasi objek apa pun, coba Java dan beberapa kerangka kerja abstraksi tinggi seperti Hibernate. Kemudian tulis beberapa hal administrasi sistem dalam bahasa skrip seperti Python atau Perl. Kemudian mengambil beberapa keterampilan tingkat rendah dalam C atau C ++, menulis kode server multithreaded kinerja tinggi. Jika Anda tidak tahu pemrograman fungsional, cobalah Haskell dengan beberapa masalah teori grafik seperti memecahkan Peg Solitaire , dll. Sangat layak untuk melakukannya sehingga semua yang Anda pelajari memiliki nilai pasar langsung, sampai Anda mencapai masalah ilmiah atau keperluan khusus seperti sebagai keamanan objek-kemampuan ,Prolog atau VHDL .

Olah raga yang bagus! Ini akan mengajarkan Anda untuk berpikir secara lateral dan membayangkan masalah dalam istilah agnostik bahasa, alih-alih mengandalkan terlalu sedikit teknik spesifik platform. Misalnya, setelah Anda menguasai persamaan dan perbedaan dalam pengiriman metode virtual antara C ++ dan Python, Anda akan cukup banyak "mendapatkannya" secara instan untuk bahasa lain.

DomQ
sumber
9

Bahasa yang tidak memengaruhi cara Anda berpikir tentang pemrograman, tidak perlu diketahui. - Alan Perlis

Karena beberapa jawaban lain telah menyentuh, jika Anda belajar satu bahasa baru per tahun, mengapa? adalah untuk memperluas kemampuan Anda sebagai seorang programmer. Bagaimana? adalah dengan mempelajari bahasa dengan paradigma yang berbeda dari bahasa yang sudah Anda kenal, dan mempelajari paradigma yang sudah Anda ketahui menentukan bahasa apa yang akan dipelajari selanjutnya.

Apa paradigma ini? Buku lanjutan Konsep, Teknik, dan Model Pemrograman Komputer memberikan gambaran yang sangat baik dengan peta grafis .

Jadi, jika Anda hanya tahu bahasa imperatif seperti C, maka mempelajari Skema / Lisp sangat berguna. Jika Anda sudah tahu bahasa imperatif dan fungsional, maka mempelajari Prolog akan bermanfaat, dll.

Buku terbaru yang mencoba mengajarkan berbagai bahasa dan paradigma adalah Seven Languages ​​in Seven Weeks . Tentu saja, Anda tidak akan lancar dalam setiap bahasa setelah satu minggu belajar, tetapi hal itu tampaknya memberikan perspektif multi-paradigma yang dapat didekati dan berorientasi pada praktisi.

Ketika Anda melakukan grok paradigma lain, itu benar-benar momen Zen; beralih dari keharusan ke pemrograman fungsional membuat saya melihat dunia komputasi dalam cahaya yang sama sekali baru. Selamat belajar!

limist
sumber
Dan sebuah bahasa memengaruhi pemikiran Anda tidak hanya dari apa yang memungkinkan Anda untuk mengekspresikan, tetapi lebih pada apa yang memaksa Anda untuk mengekspresikan.
Florian F
9

C - sebagai penting, "mendasari segalanya", bahasa pemrograman sistem

Lisp (Skema) - bahasa-bahasa yang aneh tapi sangat kuat yang menurut peretas hebat

Smalltalk - karena inilah yang dimaksudkan OO

Erlang (atau bahasa Aktor lainnya) untuk memahami Aktor

Haskell - untuk memahami Monads

Javascript - karena ini ada di mana-mana dan penting untuk membuat skrip browser

Salah satu dari Python / Ruby / Perl (tapi itu benar-benar tidak masalah yang mana) - jadi Anda tahu seperti apa bahasa scripting yang populer, modern, tingkat tinggi dengan dukungan perpustakaan yang baik rasanya

SQL - sehingga Anda dapat berbicara dengan basis data relasional

Prolog - karena Anda masih perlu meledakkan pikiran Anda

interstar
sumber
2
Alasan saya mempelajari Haskell adalah karena saya ingin belajar bahasa fungsional (berbeda dengan semua yang prosedural yang saya tahu sebelumnya), dan bagi saya Haskell seperti anak poster untuk bahasa fungsional. Alasan saya menyukai Haskell sekarang adalah karena ini adalah bahasa tingkat tinggi, memiliki dukungan perpustakaan yang baik, dan cepat (sekitar 50% secepat C, tetapi tergantung pada apa yang Anda lakukan). Juga, saya suka bisa menulis banyak kode dan semuanya bekerja pertama atau kedua kalinya (setelah mengkompilasi).
Joey Adams
Pasti penting apakah Anda mempelajari Perl, Python, atau Ruby. Sebagai contoh, Python memiliki daftar pemahaman, yang tidak ada di Ruby, dan Ruby memiliki modul, yang tidak ada di Python. Anda dapat menduplikasi hasil dari kedua hal dalam kedua bahasa, tetapi mempelajari salah satu dari keduanya akan memengaruhi pemikiran Anda dengan cara yang sangat berbeda.
philosodad
1
Prolog - karena Anda masih harus meledakkan pikiran Anda - Komentar terbaik yang pernah ada +1
Zachary K
1
Saya pikir manfaat utama dari belajar haskell tidak selalu mendapatkan pegangan pada abstraksi monad, tetapi untuk mempelajari manfaat dari sistem tipe NYATA yang kuat dan kuat. Jika ide seseorang tentang "sistem tipe statis" adalah sesuatu seperti Java, maka haskell akan mengambil napas Anda.
sara
4
  • Go (bahasa pemrograman level sistem baru dengan dukungan yang baik untuk konkurensi dan konsep yang tidak terlalu tradisional)
  • Lua (bahasa scripting sederhana, ekspresif, paradigma yang sangat fleksibel dan seimbang imperatif, fungsional dan pemrograman meta, memungkinkan OOP)
  • D (C / C ++ dilakukan dengan benar)
  • Groovy (Ekspresifitas dan pemrograman meta di dunia Jawa)
  • Eiffel (Desain Dengan Kontrak dan pendekatan berbeda untuk OOP)
  • Prolog (bahasa pemrograman logika)
bigown
sumber
1
Mengapa seseorang harus mempelajari ini? ( Mengapa sedikit menarik di sini, ada beberapa bahasa pemrograman yang benar-benar unik: setiap paradigma telah diimplementasikan lebih dari satu kali.)
Richard
Menarik untuk melihat bahwa Anda berpikir D adalah C dilakukan tepat. Secara pribadi ketika saya menggunakan C, saya kebanyakan menggunakannya untuk hal-hal tingkat rendah di mana saya tidak ingin abstraksi OOP sama sekali.
Jonas
@Jonas: Kita masih membutuhkan bahasa sederhana yang dilakukan dengan benar, sementara bahasa ini tidak datang D dapat digunakan dengan baik hanya dengan cara imperatif. Bagi Anda, D2 lebih fungsional, ketika selesai mungkin akan menjadi implementasi terbaik dari paradigma ke bahasa yang sangat penting.
Maniero
dilakukan dengan benar adalah subyektif. Bagi saya Erlang adalah bahasa yang sangat kecil dan sederhana yang dilakukan dengan benar. Bagian yang hilang adalah kerangka kerja GUI yang hebat, dan jika Anda melakukan sistem yang kompleks mungkin Anda ingin lebih banyak mengetik bahasa statis.
Jonas
@Jonas: Erlang adalah bahasa yang baik tetapi tidak C / C ++ dilakukan dengan benar, itu hal yang sama sekali berbeda.
Maniero
2

1) Prolog: Ini benar-benar berbeda dengan semua bahasa penting yang telah Anda gunakan sejauh ini, dan itu akan mengubah cara Anda berpikir tentang masalah

2) Lisp: tanpanya, Anda mungkin menggunakan Vi

3) Erlang: Sekali lagi, ini benar-benar berbeda, juga, tampaknya cukup modis.

4) Sesuatu dari Turing Tarpit (misalnya Brainfuck), dan mungkin menulis kompiler atau juru bahasa untuk itu: Saya tidak bisa memikirkan alasan untuk melakukan ini, tetapi rasanya ide yang bagus.

Paul Butcher
sumber
1
"tanpanya, Anda mungkin menggunakan Vi". Saya terkejut tidak ada yang mengambilnya :)
Gauthier
Saya menggunakan vi! (Yah gvim)
Zachary K
1

Selain yang Anda daftarkan,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Objective C.

grokus
sumber
1

Meskipun saya setuju bahwa belajar bahasa baru itu baik (dan bahkan sangat penting melalui karier yang panjang), saya pikir satu tahun terlalu banyak melewati lima-sepuluh tahun pertama. Yang saya lebih suka lihat adalah seseorang dengan tingkat pengalaman belajar hal-hal baru tentang bahasa yang sudah mereka ketahui. Pada titik tertentu Anda membutuhkan pengetahuan yang mendalam dan luas. Jadi, Anda dapat menulis konstruk If dalam 12 bahasa, wah. Saya lebih suka melihat seseorang yang benar-benar menggali dan menjadi ahli dalam setidaknya satu hal. Dan kemudian beberapa tahun berikutnya menjadi ahli dalam hal lain. Lebih dari 30 + tahun karir, saya ingin seseorang memiliki pengetahuan mendalam bukan hanya dasar-dasar dalam banyak hal.

HLGEM
sumber