Bahasa pemrograman yang meningkatkan keterampilan pemrograman Anda secara umum? [Tutup]

27

Bahasa apa yang Anda sarankan untuk dipelajari oleh seorang programmer, bukan karena mereka akan memiliki banyak penggunaan bahasa (tetapi mereka mungkin memiliki), tetapi karena itu akan meningkatkan keterampilan pemrograman seseorang secara umum dan membiarkan orang berpikir dengan cara yang berbeda (dan mungkin lebih baik) ) cara?

Anto
sumber
12
Bukan satu pun. Melainkan: Sebanyak mungkin dari mereka, masing-masing berbeda mungkin dari yang lain.

Jawaban:

27

untuk pemrograman dan algoritma "normal":

  • python, baik untuk dipelajari, mudah digunakan, cukup untuk dibaca.
  • C ++, mengajarkan Anda apa sebenarnya komputer itu.

untuk pengalaman yang berubah pikiran:

  • Haskell
  • Prolog

untuk menghancurkan pikiran Anda dan melewati batas antara padawan dan Jedi Master:

  • LISP umum
Lacrymology
sumber
3
ya, setuju dengan chrisaycock, C dan assembly akan mengajarkan Anda apa itu komputer BENAR-BENAR, C ++ adalah langkah yang sangat sangat sedikit ke atas, tetapi Anda masih akan memiliki masalah penanganan seperti penunjuk memori dan masalah kinerja tinggi
Lacrymology
mh Prolog memang hebat, tetapi saya gagal melihat bagaimana ini bisa menarik untuk meningkatkan keterampilan pemrograman umum. Saya melihatnya sebagai sistem notasi matematika / logika alternatif, yang konstruknya Anda dapat query, lebih dari seperti bahasa pemrograman (menggambarkan stati, bukan prosedur). Sunting: pasti mengubah cara Anda berpikir tentang sesuatu, tetapi sesuatu itu bukan pemrograman.
cbrandolino
Prolog tentu pemrograman. Pemrograman deklaratif dan berakar pada logika (dan karena itu relatif matematika-ish), ya. Tapi tetap pemrograman. Adapun poin terakhir, apakah menurut Anda Lisp lain (yaitu Skema) akan melakukan juga?
3
Prolog adalah bahasa yang paling terkenal dari paradigma logika. Adalah penting untuk membengkokkan pikiran Anda di sekitar semua paradigma yang dapat Anda tangani, jika yang Anda inginkan adalah menjadi lebih baik sebagai seorang programmer, itu akan membantu Anda mendapatkan ketangkasan mental plus itu akan memberi Anda alat baru. Saya kira dialek Lisp apa yang akan dilakukan, apa yang saya lihat dalam Common Lisp adalah sepertinya Lisp yang paling dapat digunakan untuk produksi bagi saya.
Lacrymology
1
Saya akan memilih Skema daripada Common Lisp - saya kira itu tergantung jika Anda berpikir Anda akan benar-benar menggunakan Lisp dalam produksi. Jika tidak, pilih Skema.
Skilldrick
13

Jangan lupa Javascript .

Ini memiliki fitur OO yang bukan fitur OO biasa Anda. Ini sangat cocok untuk fungsi dan penutupan tingkat tinggi, dan Anda secara rutin menggunakannya. Ini memungkinkan banyak trik pemrograman fungsional. Ini sangat fleksibel.

Dan ini praktis, karena setiap browser serius memilikinya.

(Tentu saja ia memiliki sejumlah kebiasaan yang tidak menyenangkan juga. Beberapa bahasa praktis tidak)

9000
sumber
1
Apakah JS memiliki fitur OO yang tidak dimiliki Java?
Mahmoud Hossam
3
@ Fobia: JS melakukan OO dengan cara yang sama sekali berbeda. Tidak ada kelas. Warisan dilakukan melalui prototipe - pada dasarnya suatu objek dapat mewarisi dari objek lain. Fungsi adalah nilai kelas satu; Anda tidak hanya dapat meneruskannya, Anda dapat dengan mudah menetapkan metode baru untuk objek yang ada. Cara JS menyembunyikan data juga sangat berbeda dari Jawa: semua yang diekspos objek adalah publik, jadi Anda menyembunyikan data dan metode menggunakan penutupan. Perhatikan bahwa tidak ada 'OO kanonik'; JS sedikit lebih dekat dengan OO 'asli' yang diciptakan oleh Smalltalk daripada misalnya C ++, tetapi Java OO sekarang juga 'kanonik'.
9000
11

C dan rakitan untuk cara kerja komputer

Haskell dan LISP untuk pemrograman fungsional dan metaprogramming

APL untuk pemrograman vektor dan singkat

bash atau tcsh untuk cara mengatur komputer secara terprogram

chrisaycock
sumber
4
Alih-alih APL Anda dapat menggunakan J oleh penulis yang sama.
9000
+1 pada perakitan. Anda tidak pernah benar-benar melihat bahasa tingkat tinggi dengan cara yang sama setelah melakukan pengembangan yang signifikan. Jika Anda mencari sesuatu yang akan membuat Anda berpikir tentang pengkodean dengan cara yang sangat berbeda, ASM akan melakukannya.
Kurtis
9

Saya akan menyarankan Skema.

Ini adalah bahasa pemrograman fungsional yang diturunkan (kebanyakan sebenarnya berpikir itu adalah dialek) dari Lisp. Perbedaan utama dengan Common Lisp adalah, pendekatannya sangat minimalis - sangat . Misalnya, dalam distribusi Skema normal (skema apa pun <R5, atau Mit / GNU / Skema) Anda tidak akan menemukan implementasi loop: Anda harus membuat sendiri menggunakan rekursi ekor.

Ini sangat ekspresif dan sintaksnya sangat bagus untuk mempelajari sesuatu yang baru tentang pemrograman, seperti pada: hanya dengan melihat kode, Anda mendapatkan ide tentang bagaimana kompiler / penerjemah akan bekerja dengan cara melewatinya.

Plus, ia datang dengan Buku Pemrograman Terbaik, Struktur dan Interpretasi Program Komputer , yang dapat diunduh secara bebas di situs web MIT.

Berikut adalah beberapa video pelajaran yang, saya harap, akan segera membuat Anda tertarik pada bahasa yang mempesona ini - para pembicara adalah penulis SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- kuliah /

rev cbrandolino
sumber
Terima kasih. Saya harus memperingatkan Anda, bahwa pelajaran mudah untuk membuat programmer yang bersemangat menangis.
cbrandolino
@cbrandolino - Benar, kelas pemrograman fungsional kami membuat banyak orang keluar dari program ilmu komputer.
jmort253
1
Skema itu minimalis, tetapi di R5 sudah tumbuh beberapa kutil, dan pada R6 itu jelas besar. Sayang sekali, karena itu sangat indah. Untuk bahasa yang benar-benar minimalis namun tetap praktis, lihat Lua
Javier
@ Javier, kamu benar. Saya akan mengedit jawaban untuk menentukan implementasi.
cbrandolino
Saya melakukan skema di atm universitas dan saya benci itu. Bukan karena ini adalah bahasa fungsional, saya ingin membahasnya dalam waktu yang lama. Namun, sintaksnya benar-benar membunuh saya. Ada tiga jenis kawat gigi pada keyboard (empat jika Anda menghitung kurung sudut) dan Anda hanya menggunakan paranthes. Mengapa? Apa masalah dengan menggunakan yang lain?
Femaref
4

LISP, lebih disukai Skema dalam kombinasi dengan "Struktur dan Interpretasi Program Komputer" dari Abelson & Sussman, akan mengajarkan Anda untuk berpikir dalam istilah selain yang diberlakukan oleh C / C ++.

FORTH, khususnya FORTH berorientasi blok, bukan yang berorientasi file (seperti D85) akan mengajarkan Anda untuk mengekang kecerobohan Anda. Ketika Anda tidak dapat dalam keadaan apa pun menulis rutin yang lebih panjang dari 16 baris 64 karakter, Anda dipaksa untuk abstrak dan faktor.

John R. Strohm
sumber
4

Java adalah salah satu bahasa yang paling banyak diajarkan di universitas-universitas di seluruh dunia dan ada alasannya. Meskipun sering seperti Dinosaurus, ini memberi semua orang gambaran yang sangat baik tentang Konsep pemrograman modern. Ini TIDAK menunjukkan kepada Anda bagaimana komputer itu sendiri bekerja seperti Assembler atau bahkan bahasa yang sudah jauh lebih abstrak C. Tapi Pilot harus dapat terbang dan tidak dapat membangun Pesawat sendiri - pergi belajar JAVA sebagai dasar yang baik untuk Kode apa pun yang akan Anda tulis dalam (untuk resonansi) bahasa paling umum saat ini: Java, c ++, php, c #, ruby ​​(on rails) python dan sebagainya ...

maks

madmax
sumber
3

C # 3 dengan LINQ.

Ini adalah pengantar yang bagus untuk pemrograman fungsional.

Cobalah menulis sebuah program (atau menyelesaikan Project Euler) dan mengganti loop sebanyak mungkin dengan panggilan LINQ.
Ini membantu seseorang menguasai konsep pemrograman fungsional dan evaluasi malas.

Dari sana, seseorang dapat beralih ke F #

Slaks
sumber
3

Tangan ke bawah, saya akan mengatakan Haskell. Dan karena dua alasan:

  • Ini hanyalah cara terbaik untuk mempelajari pemrograman fungsional. Hampir setiap bahasa lain memungkinkan efek samping secara default, tetapi dapat melakukan berbagai hal secara fungsional (dan ya, ini termasuk ML dan Erlang: lihat pembicaraan ini untuk info lebih lanjut ). Haskell berfungsi secara default, tetapi dapat dibuat untuk menggunakan efek samping saat Anda membutuhkannya.
  • Ini jelas merupakan bahasa yang mendorong Anda untuk berpikir sebelum membuat kode. Sejujurnya, ini tidak pernah benar-benar menjadi masalah bagi saya (jika ada, justru sebaliknya). Yang mengatakan sepertinya aku minoritas. Sebagian besar programmer yang saya temui tampaknya lebih dari pola pikir "kode pertama, ajukan pertanyaan nanti" daripada "merenungkan masalah Anda selama berhari-hari sebelum coding solusi dalam 5 menit" pola pikir (yang cenderung menjadi pola pikir saya) . Oleh karena itu, bahasa seperti ini dapat memberikan pengalaman berharga bagi sebagian besar programmer.
Jason Baker
sumber
3

Saya akan menyarankan Scala jika seseorang berasal dari dunia C / Java.

Ini bukan murni bahasa pemrograman fungsional, tetapi menggunakan OO untuk mensimulasikan beberapa fitur pemrograman fungsional (mis. Menggunakan objek untuk mensimulasikan fungsi kelas satu dan fungsi urutan tinggi).

Jadi, jika Anda terbiasa dengan OO, Scala menggunakan istilah yang sudah Anda ketahui untuk menjelaskan dunia fungsional.

Saya merasa lebih mudah bagi saya untuk memahami pemrograman fungsional dalam Scala daripada terjun ke pemrograman yang lebih fungsional seperti Haskell, List ... dll.

Brian Hsu
sumber
2

Bahasa fungsional adalah bahasa yang saya rasa membantu membawa saya ke tempat saya hari ini. Meskipun saya sedang dalam pengembangan aplikasi web, konsep-konsep yang dipelajari dari bahasa fungsional membantu saya melihat solusi untuk masalah yang sebelumnya tidak akan saya lihat. Berikut adalah bahasa yang saya gunakan di universitas saya:

  • C ++ (Tidak fungsional, tetapi konsep seperti pointer dan manajemen memori sangat berharga)
  • Skema Dr.
  • ML / Ocaml (Kami menulis bahasa lain menggunakan ML / Ocaml!)
  • JavaScript (Bahasa fungsional yang mendapatkan daya tarik dalam industri, baik sisi klien dan sisi server)

Mempelajari bahasa-bahasa ini akan membantu Anda memahami dunia abstraksi, dan bagaimana membangun blok kode yang merangkum fungsionalitas lain, menyembunyikan detail level rendah sehingga Anda dapat fokus pada tujuan bisnis level tinggi.

jmort253
sumber
1

Ruby memiliki salah satu kerangka kerja pengujian paling kuat dan intuitif yang saya gunakan. Saya tidak yakin saya benar-benar mengerti cara menggunakan ejekan dan stubbing dengan benar sampai saya mulai menulis tes di ruby. rSpec dan Mentimun adalah alat yang fantastis.

gposton
sumber
1

Ada sejumlah bahasa pemrograman yang mengharuskan Anda untuk memikirkan masalah dengan cara yang baru (relatif terhadap apa yang biasa Anda gunakan.) Bahasa yang paling umum untuk dipelajari setelah diajarkan bahasa imperatif, adalah fungsional dan bahasa logis, misalnya prolog dan lisp .

Beberapa bahasa sangat dipengaruhi oleh teori kategori, seperti ocaml dan Haskell dan beberapa bahasa cross-breed seperti Curry (fungsional dan logis). Curry mungkin adalah bahasa yang paling menggetarkan pikiran yang saya tahu, bukan hanya karena ia mendapatkan semua hembusan pikiran dari Haskell dengan pemrograman logis, tetapi juga karena integrasi dengan pemrograman berbasis kendala.

Bahasa lain yang menyenangkan adalah Occam-pi karena sangat berat pada konkurensi, tetapi juga karena port arduino baru-baru ini .

HaskellElephant
sumber
1

Seorang programmer yang berpengetahuan luas memiliki beberapa trik di lengan bajunya, dan ini termasuk:

  • Assembly, untuk mempelajari bagaimana nyali komputer bekerja.
  • Bahasa prosedural seperti C atau Pascal.
  • Bahasa fungsional seperti Skema.
  • Bahasa OOP seperti mencicit.

Ini semua mengajarkan Anda cara yang sedikit berbeda untuk memikirkan dan mendekati masalah.

kotoran merah
sumber
0

Anda tidak akan belajar bahasa pemrograman dengan benar tanpa target yang jelas. Mengetahui apa yang ingin Anda lakukan dengannya, maka Anda dapat memutuskan program mana yang sesuai dengan kebutuhan Anda.

Sebagai contoh, katakanlah tentang c #.

C # dapat melakukan program web, program konsol, dapat dijalankan sendiri, program game, program silverlight, dan program seluler. Sementara sintaksinya sama di hampir setiap kasus tetapi ia bekerja secara berbeda di setiap skenario. Sebagai contoh, executable yang berdiri sendiri menyimpan informasi mereka sampai dibongkar atau program selesai, sementara program web, informasi dihancurkan setiap kali Anda memuat halaman, dan dalam cahaya perak, Anda akan menghabiskan sebagian besar waktu, berjuang dengan file xml.

Dan kedua, jangan habiskan waktu Anda dengan bahasa eksotis (misalnya Haskel), berbicara di perusahaan, ada sangat sedikit program yang sepadan dengan usaha Anda: java (king of the hill), c # / vb.net, php dan sql.

magallanes
sumber
0

Ada program yang sangat sederhana untuk menulis Java Applet yang disebut Processing

Bahasa ini akan memberi Anda pemahaman yang sangat mendasar tentang variabel, loop, dan hal-hal semacam itu, jika Anda baru memulai.

Buns Glazing
sumber
0

Beberapa saran bagus di sini. Saya mungkin akan menggunakan C atau C ++ secara pribadi. Mereka memaksa Anda untuk berurusan dengan banyak konsep yang sangat penting dalam memahami bagaimana hal-hal bekerja, tetapi itu cenderung dikaburkan dalam bahasa lain. Hanya dengan memahami bagaimana berbagai hal benar-benar berfungsi akan membantu Anda sebagai seorang programmer bahkan jika bahasa yang Anda gunakan nanti menyembunyikan beberapa detail.

Perakitan itu menyenangkan jika Anda ingin menggali level yang sedikit lebih rendah dari itu, tetapi jangan berharap banyak yang bisa dilakukan dengannya. :)

Tridus
sumber
0

Saya akan merekomendasikan Ruby. Ruby tidak menuntut Anda mengubah paradigma, tetapi mendorong Anda untuk bekerja dalam banyak paradigma. Saya pikir keuntungan dari hal ini adalah bahwa alih-alih frustrasi karena tidak dapat bekerja seperti yang biasa Anda lakukan, Anda menggunakan paradigma yang berbeda karena frustrasi dengan keterbatasan melakukan hal-hal seperti yang biasa Anda lakukan.

philosodad
sumber