Saya tahu Lisp dan Haskell masing-masing adalah bahasa pemrograman logika dan fungsional, tetapi apa sebenarnya artinya ini? Bagaimana mereka berbeda dari bahasa lain? Saya pernah mendengar bahwa mempelajari ini akan membuat Anda menjadi programmer yang lebih baik dan meningkatkan logika Anda. Apakah ini benar, dan jika saya belajar Lisp atau Haskell ke tingkat yang kompeten apakah pemrograman saya akan meningkat dan apakah saya akan lebih baik dalam menangani masalah dalam bahasa apa pun? Saya hanya ingin tahu untuk melihat apakah mereka sepadan dengan upaya belajar. Juga apakah bahasa-bahasa ini berguna di bidang-bidang seperti GUI dan grafik atau mereka hanya berguna untuk aplikasi konsol?
41
Jawaban:
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
Contoh bagus lainnya adalah kerangka templating cegukan:
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 mengambila 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.
sumber
tl; dr. Mempelajari hal-hal baru hanya dapat membuat Anda menjadi programmer yang lebih baik, tetapi menjadi programmer yang lebih baik bukanlah tentang bahasa tempat Anda menulis kode.
Apa keuntungan menggunakan LISP dan Haskell?
PELAT:
Dari: Mengapa Lisp bermanfaat?
Haskell:
Anda dapat membaca di sana deskripsi Fungsional vs imperatif
Dari: http://www.haskell.org/haskellwiki/Introduction
Apakah mereka akan menjadikan saya programmer yang lebih baik?
Ya, tentu saja, mengetahui lebih banyak bahasa dan paradigma hanya dapat membuat Anda menjadi programmer yang lebih baik, tetapi langsung saja:
Tidak ada alat tunggal, buku tunggal, paradigma pemrograman tunggal yang akan membuat Anda seorang programmer yang lebih baik.
Mempelajari bahasa pemrograman yang berbeda dengan paradigma yang berbeda pasti membantu Anda untuk menjadi programmer yang lebih baik, belajar untuk memecahkan masalah dengan pendekatan yang berbeda juga sangat menguntungkan pemikiran logis Anda.
Menjadi seorang programmer yang baik tidak banyak tentang bahasa, tetapi tentang memiliki kemampuan untuk menyelesaikan masalah dalam bahasa apa pun. Dan ketika Anda tidak tahu bahasa, kemampuan untuk mempelajari bahasa itu dengan cepat dan menggunakannya secara efektif.
Pengungkapan: Ini adalah iklan yang paling memalukan, karena berasal dari blog saya.
sumber
Ketika Anda mempelajari bahasa yang berada di luar paradigma yang biasanya Anda operasikan, itu akan membuka pikiran Anda untuk solusi alternatif di hari Anda sehari-hari dan bahkan dapat membantu Anda memahami beberapa fitur dalam bahasa pilihan Anda dengan lebih baik. Hanya dengan mengetahui bahasa-bahasa itu tidak akan menjadikan Anda seorang programmer yang lebih baik kecuali Anda dapat mengambil pelajaran yang Anda pelajari dari bahasa-bahasa itu dan menerapkannya pada situasi yang Anda lihat sehari-hari.
Yang sedang berkata, itu tidak terbatas pada bahasa. Saat Anda membaca berbagai struktur data yang belum pernah Anda lihat atau gunakan sebelumnya, ini dapat membantu memperluas cakupan pengetahuan Anda sehingga saat berikutnya Anda menghadapi masalah, Anda memiliki satu lagi solusi yang mungkin.
sumber