mengapa semua tutorial pemrograman fungsional begitu matematika?

20

Saya telah mencoba mempelajari pemrograman fungsional dan sebagian besar tutorial yang saya temukan menggunakan matematika sebagai contoh untuk konstruksi yang lebih rumit (bahkan yang sederhana dalam beberapa kasus). Kenapa ini? Saya akan membayangkan sesuatu yang lebih mudah dapat digunakan. Ini membuatnya sulit untuk dipelajari.

Info Latar Belakang: Saya telah menulis perangkat lunak selama 12 tahun. Saya memahami beberapa konsep seperti penutupan, fungsi sebagai warga negara kelas satu, dan obat generik. Saya mungkin mengalami masalah dengan fungsi tingkat tinggi di beberapa tingkat lanjut, tetapi saya ingin percaya bahwa saya memiliki pemahaman dasar. Monads menggigitku di pantat, dan pada titik ini aku belum bisa melewati itu (aku yakin pada akhirnya aku akan melakukannya, karena aku gigih).

Charles Lambert
sumber
hanya sedikit, saya belum mencoba 3 bahasa lain yang Anda sarankan
Charles Lambert
F # adalah cara termudah untuk memulai jika Anda tahu C #. Tidak meminta pengetahuan matematika besar.
cnd
6
Coba SICP - itu tidak melampaui matematika SMA.
SK-logic
@ Charles Lambert - Pergi menonton OfficeSpace dan Anda akan mendapatkan bagian kedua dari komentar Ayub.
Jetti
@Charles Lambert: Pelajari Haskell untuk Great Good Anda tidak terlalu menarik: D
Matthieu M.

Jawaban:

21

Mereka menggunakan matematika karena Pemrograman Fungsional sangat baik dalam memodelkan konstruksi matematika dan sangat terikat dengan konsep matematika, khususnya Lambda Calculus. Juga karena I / O biasanya merupakan subjek yang cukup sulit dan maju dalam banyak bahasa matematika paradigma fungsional melalui REPL dari berbagai bahasa menjadi cara yang baik untuk mengajar bahasa pada awalnya.

Karena Pemrograman Fungsional memperlakukan Fungsi sebagai konstruksi kelas satu dalam bahasa pemrograman, pembuatan fungsi menjadi sangat penting. Oleh karena itu matematika yang lebih tinggi menjadi sangat penting terutama teori grafik.

Bahasa Imperatif sama matematikanya tetapi semuanya aritmatika pada dasarnya karena mereka lebih dekat ke mesin yang hanya bisa menambahkan saja. Bahasa fungsional dengan abstraksi yang lebih tinggi cenderung lebih ke arah matematika. Penggunaan umum di dunia akademis juga tidak membantu ketika mereka terbiasa dan dengan demikian diajarkan oleh orang-orang yang tahu banyak matematika dan mengajar orang-orang yang diharapkan belajar banyak matematika. Jadi mungkin untuk "membodohi" sehingga untuk berbicara tetapi tidak mungkin diberikan faktor-faktor ini.

http://learnyouahaskell.com/ - Mungkin salah satu pengantar paling lembut untuk Pemrograman Fungsional, saya periksa dua kali dan tidak ada yang melampaui teori aljabar dan grafik dasar di sana.

Insinyur Dunia
sumber
learnyousomeerlang.com juga merupakan opsi jika Anda menginginkan hal lain selain Haskell.
Travis
11

Ada banyak alasan, dan semuanya terkait:

  • Sebagian besar bahasa pemrograman fungsional dikembangkan dalam konteks akademik, di mana CS terkait erat dengan Matematika, sehingga orang-orang yang mendesainnya memiliki latar belakang matematika yang kuat (dan cenderung berasumsi sama tentang audiens mereka)
  • Pemrograman fungsional adalah paradigma yang sangat cocok untuk memecahkan masalah matematika yang berat
  • Teori di balik FP, lambda calculus (pada dasarnya, teori fungsi abstrak), adalah cabang Matematika, dan bahasa FP cenderung menggunakan konsep dan terminologi dari lambda calculus

Juga, FP tidak lebih matematik daripada paradigma lain, tetapi konsep-konsep kunci (berfungsi sebagai warga negara kelas satu, fungsi tingkat tinggi, penutupan, dan kemurnian) membutuhkan pola pikir tertentu. Pada titik tertentu, pikiran Anda harus "klik"; jika Anda memahami 4 gagasan inti ini, sisanya kemungkinan akan semudah paradigma lainnya.

tammmer
sumber
3
+1 untuk dikembangkan di dunia akademis: orang yang membuat bahasa fungsional mendasarkannya pada properti matematika, sehingga bocor ...
Matthieu M.
@ Matthieu M: Mendasarkan bahasa pemrograman pada properti matematika membantu menulis perangkat lunak yang benar dan mengurangi waktu pengembangan. Misalnya, saya pasti menghabiskan lebih sedikit waktu untuk debug kode Haskell saya daripada kode C ++ saya. Mengurangi waktu pengembangan (dan biaya) adalah keuntungan praktis yang sangat besar yang dapat membenarkan upaya belajar beberapa matematika. Seperti yang ditunjukkan oleh tdammers, ada beberapa konsep tambahan yang perlu dipelajari tetapi setelah Anda memahami beberapa ide inti, FP sama intuitifnya dengan pemrograman imperatif.
Giorgio
Saya juga setuju dengan tdammers yang juga bahasa imperatif dapat dijelaskan menggunakan konsep matematika. Faktanya, deskripsi matematis dari program imperatif biasanya jauh lebih kompleks daripada deskripsi matematis dari program fungsional. IMO ini menjelaskan mengapa bahasa imperatif lebih cenderung mengandung bug: lebih sulit untuk memahami kode imperatif. Setidaknya, ini adalah pengalaman pribadi saya dengan beberapa tahun pemrograman fungsional dan bertahun-tahun pemrograman imperatif.
Giorgio
@Iorgio: ada perbedaan antara "bocor ke bahasa" (entah bagaimana) dan "bocor ke tutorial". Saya cukup yakin Anda bisa menulis tutorial pemrograman fungsional tanpa banyak matematika di dalamnya. Tentu saja apakah mereka akan lebih baik atau tidak tergantung pada perdebatan dan mungkin subjektif.
Matthieu M.
@ MatthieuM .: Terima kasih banyak untuk mengklarifikasi apa yang Anda maksud dengan membocorkan (membocorkan tutorial): komentar Anda jauh lebih masuk akal bagi saya sekarang. Saya setuju dengan Anda bahwa tutorial tentang FP harus mengandung matematika sesedikit mungkin. Saya entah bagaimana salah mengartikan komentar Anda: Setelah bekerja baik di industri dan di akademisi, saya agak terlalu sensitif terhadap "di akademisi mereka melakukan banyak matematika yang tidak berguna di dunia" semacam komentar. +1 untuk komentar dan jawaban tdammer Anda.
Giorgio
5

Itu karena pada dasarnya, pemrograman komputer adalah matematika. Bahasa fungsional dirancang dengan pemikiran ini dan inilah mengapa banyak tutorial difokuskan pada matematika.

Ini hanya sulit untuk dipelajari jika Anda tidak terbiasa berpikir pemrograman komputer memiliki dasar matematika.

Rudolf Olah
sumber
4
Komputasi secara fundamental adalah kombinasi dari logika dan aritmatika. Ini bukan matematika. Anda tidak bisa mengekspresikan instruksi cabang dalam rumus matematika - jadi itu tidak bisa didasarkan pada matematika. Kerumunan pemrograman fungsional ingin agar didasarkan pada matematika sehingga mereka mengembangkan bahasa program yang berperilaku seolah-olah instruksi cabang tidak ada.
James Anderson
9
@ James Anderson, apakah Anda mengatakan bahwa logika dan aritmatika bukan matematika? Dan saya telah melihat berton-ton formula matematika yang berisi instruksi cabang (biasanya dinyatakan dalam formalisme seperti sakelar).
Peter Taylor
4
Aritmatika himpunan bagian matematika yang berhubungan dengan perhitungan sederhana. Logika adalah superset matematika yang merupakan dasar dari semua pemikiran rasional. Pemrograman fungsional yang kebetulan adalah ide yang sangat bagus untuk menyelesaikan masalah yang dapat diekspresikan secara matematis; itu tidak begitu panas ketika Anda mencoba untuk mengikuti kekacauan aturan arbitrer yang tidak masuk akal seperti GAP (praktik Akuntansi yang Diterima Secara Umum)
James Anderson
6
@ ian31, bagaimana Anda mendefinisikan kata "secara fundamental "? Anda tahu, teknik sipil juga didasarkan pada fisika dan matematika, padahal pada dasarnya ini adalah soal membangun sesuatu untuk digunakan dan dinikmati orang. Dan, bagaimana pun, bahkan sebelum mulai berpikir tentang pemrograman solusi untuk beberapa masalah dunia nyata, Anda harus menerjemahkan masalah itu ke dalam formalisme matematika. Itu tidak akan berhasil sebaliknya. Pemrograman adalah tentang formalisme.
SK-logic
6
@ ian31, bahasa pemrograman adalah formalisme. Perilaku mereka didefinisikan secara ketat dan dapat diprediksi. Dengan demikian, pengkodean setiap model tertentu (meskipun tidak jelas) mengubahnya menjadi semacam formalisme. Matematika berskala baik ke area yang tidak jelas ini, meskipun persepsi umum itu terbatas pada dunia mengkristal yang jelas dari model ketat yang terdefinisi dengan baik.
SK-logic
1

Saya pikir "The Little Schemer" adalah pengantar yang luar biasa untuk pemrograman fungsional dan sama sekali tidak matematika. Itu tidak masuk ke Monads, jadi mungkin terlalu mendasar untuk selera Anda, tetapi melakukan turunan dari Y-combinator menjelang akhir.

Saya baru-baru ini melewatinya setelah tidak melakukan pemrograman fungsional sejak kuliah 12 tahun yang lalu, dan itu adalah penyegaran yang hebat, saya pasti merasa siap untuk menangani hal-hal yang lebih maju setelah mengerjakan sebagian besar masalah dalam buku menggunakan Racket.

Paul Sanwald
sumber