Ini seperti belajar matematika akan meningkatkan kemampuan analitik Anda dan belajar sastra latin / klasik akan meningkatkan keterampilan menulis Anda.
Orang-orang yang merancang bahasa-bahasa itu telah berpikir keras tentang apa artinya menulis suatu program. Dan bahasa-bahasa itu adalah hasil dari penelitian itu.
Yang mengatakan, belajar Java juga akan membuat Anda menjadi programmer yang lebih baik. Dan belajar C. Manfaat nyata berasal dari belajar bahasa dengan filosofi yang berbeda. Maka Anda dapat memiliki pendapat Anda sendiri tentang cara program seharusnya ditulis.
Edit
Saya menyadari jawaban ini tidak begitu berguna bagi orang yang belum belajar haskell dan / atau cadel. Berikut adalah beberapa contoh untuk menjelaskan lebih lanjut apa yang saya maksud
PELAT
Lisp percaya bahwa sintaks harus minimal, dan bahwa semuanya harus berupa daftar atau primitif (Lisp adalah singkatan dari Pemrosesan Daftar). Bahkan program sebagian besar berisi daftar daftar dan simbol lainnya. Lisp memungkinkan Anda untuk memanipulasi program sebagai daftar, dan untuk menghasilkan program baru dengan cepat. Karena itu seluruh code is data and data is code
moto.
Konsekuensi langsungnya adalah bahwa bahasa Lisp memungkinkan Anda untuk menentukan antarmuka apa pun yang Anda inginkan. Contoh yang bagus adalah compojure yang merupakan kerangka web clojure. Inilah tampilan fungsi perutean
(defroutes app-routes
(GET "/" [] view/page)
(GET "/api" [] (wrap-aleph-handler api/socket-handler))
(route/resources "/static")
(route/not-found "page not found"))
Contoh bagus lainnya adalah kerangka templating cegukan:
(html [:ul
(for [x (range 1 4)]
[:li x])])
Seperti yang Anda lihat, hasilnya sama singkatnya dengan di DSL seperti kumis, tetapi memungkinkan Anda untuk menggunakan fitur bahasa seperti (for [x (range 1 4)] block)
. Lebih bagus lagi, Anda memiliki semua alat untuk abstrak dan menyusun kode Anda.
Dalam bahasa lain, sintaksisnya lebih kompleks. Anda tidak dapat membaca program Java sebagai banyak daftar. Tetapi dengan menggunakan Lisp, Anda mendapatkan ide yang lebih baik tentang seperti apa tampilan antarmuka yang ideal, dan apa yang ada dalam kode Anda yang dapat disarikan sebagai data. Ini juga membantu Anda untuk melihat bahasa favorit Anda sebagai struktur data besar, dan untuk lebih memahami bahasa semantiknya.
Haskell
Haskell percaya pada pengetikan statis dan kemurnian yang kuat. Fungsi murni seperti fungsi matematika: mereka didefinisikan pada set nilai, dan memetakannya pada set lain. Fungsi tidak memiliki efek samping, dan nilainya tidak berubah. Kemurnian menarik karena itu bukan sesuatu yang bisa dimiliki oleh bahasa multi-paradigma. Bahasa itu murni atau tidak.
Salah satu konsekuensinya adalah bahwa Anda tidak dapat melakukan tindakan IO kapan pun Anda inginkan (haskellers percaya bahwa ini adalah hal yang baik). Tindakan IO didefinisikan sebagai transaksi, yang sendiri merupakan nilai murni. The main
nilai dari program Haskell adalah transaksi IO dijalankan ketika Anda menjalankan program.
Anda harus berurusan dengan aliran data di program Anda secara eksplisit. Anda tidak dapat membuat dua komponen berkomunikasi dengan menulis & membaca hal-hal dalam variabel global. Anda harus membangun dan meneruskan nilai.
Fitur lain yang disebutkan oleh Jimmy Hoffa adalah sistem tipe kaya. Sementara bahasa lain memiliki pengetikan statis, di haskell Anda dapat memiliki hal-hal seperti:
length :: [a] -> Int
(berfungsi dari daftar a ke int)
map :: (a -> b) -> [a] -> [b]
(fungsi yang mengambil a to b
transformasi dan daftar a, dan mengembalikan daftar b)
Yang menyenangkan adalah saya tidak perlu menjelaskan apa fungsi sebenarnya yang dilakukan: Anda sudah mengerti perilaku mereka. Terlebih lagi, fungsi dengan tanda tangan itu tidak bisa apa-apa selain menghitung panjang daftar dan memetakan transformasi atas daftar.
Dalam bahasa yang diketik lainnya, hierarki kelas yang dikombinasikan dengan ketidakstabilan membuat berurusan dengan jenis-jenis itu mimpi buruk. Anda harus memahami hal-hal seperti kovarians dan contravariance, yang tidak mungkin dilakukan dengan benar dari perspektif bahasa (yaitu sederhana, kuat, dan aman).
Entah Anda mengambil jalur aman (seperti scala) dan berakhir dengan bahasa yang sangat rumit, atau Anda mengambil jalur sederhana dan mendapatkan sesuatu yang terbatas (google go generics terbatas pada daftar dan peta) atau tidak aman (generik panah yang selalu kovarian).
Dengan menggunakan haskell, Anda terutama belajar tentang manfaat kemurnian, dan cara menulis kode murni.