Saya melihat banyak pembicaraan di sini tentang bahasa dan hal-hal fungsional. Mengapa Anda menggunakan salah satu dari bahasa "tradisional"? Apa yang mereka lakukan dengan lebih baik? Apa yang lebih buruk dari mereka? Apa aplikasi pemrograman fungsional yang ideal?
programming-languages
functional-programming
MattBelanger
sumber
sumber
Jawaban:
Bahasa fungsional menggunakan paradigma yang berbeda dari bahasa imperatif dan berorientasi objek. Mereka menggunakan fungsi bebas efek samping sebagai blok bangunan dasar dalam bahasa. Ini memungkinkan banyak hal dan membuat banyak hal lebih sulit (atau dalam banyak kasus berbeda dari apa yang digunakan orang).
Salah satu keuntungan terbesar dengan pemrograman fungsional adalah bahwa urutan pelaksanaan fungsi bebas efek samping tidak penting. Misalnya, di Erlang ini digunakan untuk mengaktifkan konkurensi dengan cara yang sangat transparan. Dan karena fungsi dalam bahasa fungsional berperilaku sangat mirip dengan fungsi matematika, mudah untuk menerjemahkannya ke dalam bahasa fungsional. Dalam beberapa kasus, ini dapat membuat kode lebih mudah dibaca.
Secara tradisional, salah satu kelemahan besar pemrograman fungsional adalah juga tidak adanya efek samping. Sangat sulit untuk menulis perangkat lunak yang bermanfaat tanpa IO, tetapi IO sulit diimplementasikan tanpa efek samping pada fungsi. Jadi kebanyakan orang tidak pernah mendapatkan lebih banyak dari pemrograman fungsional daripada menghitung satu output dari input tunggal. Dalam bahasa paradigma campuran modern seperti F # atau Scala ini lebih mudah.
Banyak bahasa modern memiliki elemen dari bahasa pemrograman fungsional. C # 3.0 memiliki banyak fitur pemrograman fungsional dan Anda dapat melakukan pemrograman fungsional dengan Python juga. Saya pikir alasan untuk popularitas pemrograman fungsional sebagian besar karena dua alasan: Concurrency menjadi masalah nyata dalam pemrograman normal karena kita mendapatkan semakin banyak komputer multiprosesor; dan bahasa semakin mudah diakses.
sumber
Saya tidak berpikir bahwa ada pertanyaan tentang pendekatan fungsional untuk pemrograman "menangkap", karena sudah digunakan (sebagai gaya pemrograman) selama sekitar 40 tahun. Setiap kali seorang programmer OO menulis kode bersih yang menyukai objek yang tidak dapat diubah, kode itu meminjam konsep fungsional.
Namun, bahasa-bahasa yang menerapkan gaya fungsional sekarang mendapatkan banyak tinta virtual, dan apakah bahasa-bahasa itu akan menjadi dominan di masa depan adalah pertanyaan terbuka. Kecurigaan saya sendiri adalah bahwa bahasa hibrid, multi-paradigma seperti Scala atau OCaml kemungkinan akan mendominasi bahasa fungsional "purist" dengan cara yang sama seperti bahasa OO murni (Smalltalk, Beta, dll.) Telah mempengaruhi pemrograman utama tetapi belum berakhir sebagai notasi yang paling banyak digunakan.
Akhirnya, saya tidak dapat menahan diri untuk menunjukkan bahwa komentar Anda tentang FP sangat paralel dengan pernyataan yang saya dengar dari programmer prosedural beberapa tahun yang lalu:
Sama seperti antarmuka pengguna grafis dan "kode sebagai model bisnis" adalah konsep yang membantu OO menjadi lebih dihargai secara luas, saya percaya bahwa peningkatan penggunaan keabadian dan paralelisme (masif) yang lebih sederhana akan membantu lebih banyak programmer melihat manfaat yang ditawarkan oleh pendekatan fungsional . Tetapi sebanyak yang telah kita pelajari dalam 50 tahun terakhir yang membentuk seluruh sejarah pemrograman komputer digital, saya pikir kita masih harus banyak belajar. Dua puluh tahun dari sekarang, pemrogram akan melihat kembali dengan takjub pada sifat primitif dari alat yang kami gunakan saat ini, termasuk bahasa OO dan FP yang sekarang populer.
sumber
Nilai tambah utama bagi saya adalah paralelisme inherennya, terutama karena kita sekarang bergerak menjauh dari lebih banyak MHz dan menuju lebih banyak core.
Saya tidak berpikir itu akan menjadi paradigma pemrograman berikutnya dan sepenuhnya menggantikan metode tipe OO, tapi saya pikir kita akan sampai pada titik bahwa kita perlu baik menulis beberapa kode kita dalam bahasa fungsional, atau bahasa tujuan umum kita akan tumbuh untuk memasukkan konstruksi yang lebih fungsional.
sumber
Bahkan jika Anda tidak pernah bekerja dalam bahasa fungsional secara profesional, memahami pemrograman fungsional akan membuat Anda menjadi pengembang yang lebih baik. Ini akan memberi Anda perspektif baru pada kode dan pemrograman Anda secara umum.
Saya katakan tidak ada alasan untuk tidak mempelajarinya.
Saya pikir bahasa yang melakukan pekerjaan yang baik dengan menggabungkan gaya fungsional dan imperatif adalah yang paling menarik dan paling mungkin berhasil.
sumber
Saya selalu skeptis tentang Hal Besar Berikutnya. Banyak kali Hal Besar Berikutnya adalah kecelakaan murni sejarah, berada di sana di tempat yang tepat pada waktu yang tepat tidak peduli apakah teknologinya bagus atau tidak. Contoh: C ++, Tcl / Tk, Perl. Semua teknologi cacat, semuanya sangat sukses karena mereka dianggap dapat memecahkan masalah saat ini atau hampir identik dengan standar yang sudah tertanam, atau keduanya. Pemrograman fungsional memang mungkin bagus, tetapi itu tidak berarti akan diadopsi.
Tetapi saya dapat memberi tahu Anda mengapa orang sangat tertarik dengan pemrograman fungsional: banyak, banyak programmer telah memiliki semacam "pengalaman konversi" di mana mereka menemukan bahwa menggunakan bahasa fungsional membuat mereka dua kali lebih produktif (atau mungkin sepuluh kali lebih produktif) saat memproduksi kode yang lebih tangguh untuk diubah dan memiliki lebih sedikit bug. Orang-orang ini menganggap pemrograman fungsional sebagai senjata rahasia; contoh yang baik dari pola pikir ini adalah Beating the Averages karya Paul Graham . Oh, dan lamarannya? Aplikasi web e-commerce.
Sejak awal 2006, ada juga beberapa buzz tentang pemrograman fungsional dan paralelisme. Karena orang-orang seperti Simon Peyton Jones telah mengkhawatirkan paralelisme dan setidaknya sejak 1984, saya tidak menahan napas sampai bahasa fungsional menyelesaikan masalah multicore. Tapi itu menjelaskan beberapa buzz tambahan saat ini.
Secara umum, universitas-universitas Amerika melakukan pekerjaan yang buruk dengan mengajarkan pemrograman fungsional. Ada inti dukungan yang kuat untuk mengajar pemrograman intro menggunakan Skema , dan Haskell juga menikmati beberapa dukungan di sana, tetapi ada sangat sedikit cara mengajarkan teknik canggih untuk programmer fungsional. Saya telah mengajar kursus seperti itu di Harvard dan akan melakukannya lagi di musim semi ini di Tufts. Benjamin Pierce telah mengajar kursus semacam itu di Penn. Saya tidak tahu apakah Paul Hudak telah melakukan sesuatu di Yale. Universitas-universitas Eropa melakukan pekerjaan yang jauh lebih baik; misalnya, pemrograman fungsional ditekankan di tempat-tempat penting di Denmark, Belanda, Swedia, dan Inggris. Saya kurang memahami apa yang terjadi di Australasia.
sumber
Saya tidak melihat ada yang menyebutkan gajah di kamar di sini, jadi saya pikir itu terserah saya :)
JavaScript adalah bahasa fungsional. Karena semakin banyak orang melakukan hal-hal yang lebih maju dengan JS, terutama memanfaatkan poin-poin yang lebih baik dari jQuery, Dojo, dan kerangka kerja lainnya, FP akan diperkenalkan oleh pintu belakang pengembang web.
Sehubungan dengan penutupan, FP membuat kode JS benar-benar ringan, namun masih dapat dibaca.
Ceria, PS
sumber
Cara OO tidak selalu "normal." Standar dekade ini adalah konsep terpinggirkan dekade lalu.
Pemrograman fungsional adalah matematika. Paul Graham on Lisp (pemrograman fungsional pengganti untuk Lisp):
sumber
Saya yakin Anda tidak tahu Anda pemrograman fungsional ketika Anda menggunakan:
sumber
Yang itu hanya masalah waktu saja. Programer korporat rata-rata Anda mempelajari apa pun Big Thing saat ini. 15 tahun yang lalu, mereka tidak mengerti OOP. JIKA FP menangkap, "programmer perusahaan rata-rata" Anda akan mengikuti.
Bervariasi banyak. Di universitas saya, SML adalah bahasa pertama yang diperkenalkan oleh siswa. Saya percaya MIT mengajarkan LISP sebagai kursus tahun pertama. Dua contoh ini mungkin tidak representatif, tentu saja, tetapi saya percaya sebagian besar universitas paling tidak menawarkan beberapa program opsional tentang FP, bahkan jika mereka tidak menjadikannya bagian wajib dari kurikulum.
Ini sebenarnya bukan masalah "cukup sederhana". Apakah solusinya lebih sederhana (atau lebih mudah dibaca, kuat, elegan, berkinerja) di FP? Banyak hal yang "cukup sederhana untuk dipecahkan di Jawa", tetapi masih membutuhkan sejumlah besar kode.
Bagaimanapun, perlu diingat bahwa pendukung FP telah mengklaim bahwa itu adalah Hal Besar Berikutnya selama beberapa dekade sekarang. Mungkin mereka benar, tetapi perlu diingat bahwa mereka tidak ketika mereka membuat klaim yang sama 5, 10 atau 15 tahun yang lalu.
Namun, satu hal yang sangat penting bagi mereka adalah bahwa baru-baru ini, C # telah berbelok tajam ke arah FP, sampai-sampai secara praktis mengubah generasi pemrogram menjadi pemrogram FP, tanpa mereka sadari . Itu mungkin saja membuka jalan bagi "revolusi" FP. Mungkin. ;)
sumber
Manusia tidak dapat memahami kesempurnaan dan ketidaksempurnaan dari seni yang dipilihnya jika ia tidak dapat melihat nilai dalam seni lain. Mengikuti aturan hanya memungkinkan pengembangan sampai pada titik dalam teknik dan kemudian siswa dan seniman harus belajar lebih banyak dan mencari lebih jauh. Masuk akal untuk mempelajari seni lain dan juga strategi.
Siapa yang belum belajar lebih banyak tentang diri mereka sendiri dengan menonton kegiatan orang lain? Untuk mempelajari pedang, pelajari gitar. Untuk mempelajari perdagangan studi pertama. Hanya mempelajari pedang akan membuat Anda berpikiran sempit dan tidak akan membiarkan Anda tumbuh keluar.
- Miyamoto Musashi, "Buku Lima Lingkaran"
sumber
Salah satu fitur utama dalam bahasa fungsional adalah konsep fungsi kelas satu. Idenya adalah Anda bisa meneruskan fungsi sebagai parameter ke fungsi lain dan mengembalikannya sebagai nilai.
Pemrograman fungsional melibatkan penulisan kode yang tidak mengubah status. Alasan utama untuk melakukannya adalah agar panggilan yang berurutan ke suatu fungsi akan menghasilkan hasil yang sama. Anda dapat menulis kode fungsional dalam bahasa apa pun yang mendukung fungsi kelas satu, tetapi ada beberapa bahasa, seperti Haskell, yang tidak memungkinkan Anda mengubah status. Bahkan, Anda tidak seharusnya membuat efek samping (seperti mencetak teks) sama sekali - yang kedengarannya sama sekali tidak berguna.
Haskell sebagai gantinya menggunakan pendekatan yang berbeda untuk IO: monads. Ini adalah objek yang berisi operasi IO yang diinginkan untuk dieksekusi oleh tingkat teratas penerjemah Anda. Pada tingkat lain mereka hanya objek dalam sistem.
Apa kelebihan yang disediakan pemrograman fungsional? Pemrograman fungsional memungkinkan pengkodean dengan potensi bug yang lebih sedikit karena setiap komponen sepenuhnya terisolasi. Juga, menggunakan rekursi dan fungsi-fungsi kelas satu memungkinkan untuk bukti sederhana kebenaran yang biasanya mencerminkan struktur kode.
sumber
Saya tidak berpikir orang yang paling realistis berpikir bahwa pemrograman fungsional akan menangkap (menjadi paradigma utama seperti OO). Lagi pula, sebagian besar masalah bisnis bukan masalah matematika yang cantik, tetapi aturan imperatif untuk memindahkan data dan menampilkannya dalam berbagai cara, yang berarti itu tidak cocok untuk paradigma pemrograman fungsional murni (kurva belajar monad jauh melebihi OO.)
OTOH, pemrograman fungsional adalah apa yang membuat pemrograman menyenangkan. Ini membuat Anda menghargai keindahan yang tak terpisahkan dari ekspresi singkat dari matematika yang mendasari alam semesta. Orang mengatakan bahwa belajar pemrograman fungsional akan membuat Anda menjadi programmer yang lebih baik. Ini tentu saja sangat subyektif. Saya pribadi tidak berpikir itu sepenuhnya benar juga.
Itu membuat Anda menjadi makhluk yang lebih baik.
sumber
Saya harus padat, tapi saya masih belum mengerti. Apakah ada contoh nyata aplikasi kecil yang ditulis dalam bahasa fungsional seperti F # di mana Anda dapat melihat kode sumber dan melihat bagaimana dan mengapa lebih baik menggunakan pendekatan seperti itu daripada, katakanlah, C #?
sumber
Saya akan menunjukkan bahwa semua yang Anda katakan tentang bahasa fungsional, kebanyakan orang mengatakan tentang bahasa berorientasi objek sekitar 20 tahun yang lalu. Saat itu sangat umum untuk mendengar tentang OO:
Perubahan harus datang dari suatu tempat. Perubahan yang berarti dan penting akan terjadi tanpa memandang apakah orang yang terlatih dalam teknologi sebelumnya berpendapat bahwa perubahan tidak perlu. Apakah Anda pikir perubahan ke OO baik meskipun semua orang menentangnya pada saat itu?
sumber
F # dapat menangkap karena Microsoft mendorongnya.
Pro:
Kontra:
Jadi, saya memberi kesempatan 50:50 pada F # untuk menjadi penting. Bahasa fungsional lainnya tidak akan membuatnya dalam waktu dekat.
sumber
Saya pikir salah satu alasannya adalah bahwa beberapa orang merasa bahwa bagian terpenting dari apakah suatu bahasa akan diterima adalah seberapa baik bahasa itu . Sayangnya, hal-hal jarang begitu sederhana. Sebagai contoh, saya berpendapat bahwa faktor terbesar di balik penerimaan Python bukanlah bahasa itu sendiri (walaupun itu adalah sangat penting). Alasan terbesar mengapa Python begitu populer adalah perpustakaan standarnya yang besar dan komunitas perpustakaan pihak ke-3 yang lebih besar.
Bahasa seperti Clojure atau F # dapat menjadi pengecualian untuk aturan ini mengingat mereka dibangun di atas JVM / CLR. Akibatnya, saya tidak punya jawaban untuk mereka.
sumber
Sebagian besar aplikasi dapat diselesaikan di [masukkan bahasa, paradigma, dll. Favorit Anda di sini].
Meskipun, ini benar, alat yang berbeda dapat digunakan untuk menyelesaikan masalah yang berbeda. Fungsional hanya memungkinkan abstraksi tingkat tinggi (lebih tinggi?) Yang memungkinkan untuk melakukan pekerjaan kita lebih efektif bila digunakan dengan benar.
sumber
Tampaknya bagi saya bahwa orang-orang yang tidak pernah belajar Lisp atau Skema sebagai sarjana sekarang menemukannya. Seperti halnya banyak hal dalam bidang ini, ada kecenderungan untuk hype dan menciptakan harapan tinggi ...
Itu akan berlalu.
Pemrograman fungsional sangat bagus. Namun, itu tidak akan mengambil alih dunia. C, C ++, Java, C #, dll akan tetap ada.
Apa yang akan datang dari ini saya pikir lebih banyak kemampuan lintas bahasa - misalnya menerapkan hal-hal dalam bahasa fungsional dan kemudian memberikan akses ke hal-hal itu dalam bahasa lain.
sumber
Saat membaca "Bahasa Pemrograman Mainstream Berikutnya: Perspektif Pengembang Game" oleh Tim Sweeney, Epic Games, pikiran pertama saya adalah - Saya harus belajar Haskell.
PPT
Versi HTML Google
sumber
Hal-hal telah bergerak dalam arah fungsional untuk sementara waktu. Dua anak baru yang keren dalam beberapa tahun terakhir, Ruby dan Python, secara radikal lebih dekat dengan bahasa fungsional daripada apa yang datang sebelum mereka - sangat banyak sehingga beberapa Lispers mulai mendukung satu atau yang lain sebagai "cukup dekat."
Dan dengan perangkat keras paralel besar-besaran yang memberikan tekanan evolusioner pada semua orang - dan bahasa fungsional di tempat terbaik untuk menghadapi perubahan - itu bukan lompatan seperti dulu untuk berpikir bahwa Haskell atau F # akan menjadi hal besar berikutnya.
sumber
Apakah Anda mengikuti evolusi bahasa pemrograman belakangan ini? Setiap rilis baru dari semua bahasa pemrograman utama tampaknya meminjam semakin banyak fitur dari pemrograman fungsional.
Penutup, fungsi anonim, fungsi lewat dan kembali sebagai nilai yang digunakan untuk fitur eksotis yang hanya diketahui oleh peretas Lisp dan ML. Namun secara bertahap, C #, Delphi, Python, Perl, Javascript, telah menambahkan dukungan untuk penutupan. Tidak mungkin bahasa apa pun yang akan datang dianggap serius tanpa penutup.
Beberapa bahasa, terutama Python, C #, dan Ruby memiliki dukungan asli untuk pemahaman daftar dan daftar generator.
ML memelopori pemrograman generik pada tahun 1973, tetapi dukungan untuk obat generik ("parametrik polimorfisme") hanya menjadi standar industri dalam 5 tahun terakhir. Jika saya ingat benar, Fortran mendukung obat generik pada tahun 2003, diikuti oleh Java 2004, C # pada 2005, Delphi pada 2008. (Saya tahu C ++ telah mendukung templat sejak 1979, tetapi 90% diskusi tentang C ++ STL dimulai dengan "here there be demon" .)
Apa yang membuat fitur ini menarik bagi programmer? Itu harus jelas jelas: ini membantu programmer menulis kode yang lebih pendek . Semua bahasa di masa depan akan mendukung - setidaknya - penutupan jika mereka ingin tetap kompetitif. Dalam hal ini, pemrograman fungsional sudah dalam arus utama.
Siapa bilang tidak bisa menggunakan pemrograman fungsional untuk hal-hal sederhana juga? Tidak setiap program fungsional perlu menjadi kompiler, teorema, atau saklar telekomunikasi paralel masif. Saya secara teratur menggunakan F # untuk skrip sekali pakai ad hoc di samping proyek saya yang lebih rumit.
sumber
Ini menarik karena ini adalah alat terbaik untuk mengendalikan kompleksitas. Lihat:
- slide 109-116 dari Simon Peyton-Jones talk "A Taste of Haskell"
- "Bahasa Pemrograman Mainstream Berikutnya: Perspektif Pengembang Game" oleh Tim Sweeney
sumber
Checkout Mengapa Masalah Pemrograman Fungsional
sumber
Saya setuju dengan poin pertama, tetapi waktu berubah. Korporasi akan merespons, meskipun mereka adalah pengguna yang terlambat, jika mereka melihat bahwa ada keuntungan yang bisa didapat. Hidup itu dinamis.
Mereka mengajar Haskell dan ML di Stanford pada akhir 90-an. Saya yakin tempat-tempat seperti Carnegie Mellon, MIT, Stanford, dan sekolah-sekolah bagus lainnya menyajikannya kepada siswa.
Saya setuju bahwa sebagian besar aplikasi "mengekspos basis data relasional di web" akan berlanjut dalam jangka waktu yang lama. Java EE, .NET, RoR, dan PHP telah mengembangkan beberapa solusi yang cukup bagus untuk masalah itu.
Anda telah menemukan sesuatu yang penting: Ini mungkin masalah yang tidak dapat diselesaikan dengan mudah dengan cara lain yang akan meningkatkan pemrograman fungsional. Apa itu?
Akankah perangkat keras multicore besar dan komputasi awan mendorong mereka?
sumber
Karena FP memiliki manfaat signifikan dalam hal produktivitas, keandalan, dan pemeliharaan. Many-core dapat menjadi aplikasi pembunuh yang akhirnya membuat perusahaan besar untuk beralih meskipun kode legacy volume besar. Selanjutnya, bahkan bahasa komersial besar seperti C # mengambil rasa fungsional yang berbeda sebagai hasil dari banyak masalah inti - efek samping hanya tidak cocok dengan konkurensi dan paralelisme.
Saya tidak setuju bahwa programmer "normal" tidak akan memahaminya. Mereka akan, sama seperti mereka akhirnya mengerti OOP (yang sama misterius dan anehnya, jika tidak lebih).
Juga, sebagian besar universitas mengajarkan FP, bahkan banyak yang mengajarkannya sebagai kursus pemrograman pertama.
sumber
Wow - ini diskusi yang menarik. Pikiran saya sendiri tentang ini:
FP membuat beberapa tugas relatif sederhana (dibandingkan dengan bahasa non-FP). Bahasa None-FP sudah mulai mengambil ide dari FP, jadi saya curiga tren ini akan berlanjut dan kita akan melihat lebih banyak penggabungan yang seharusnya membantu orang membuat lompatan ke FP lebih mudah.
sumber
Saya tidak tahu apakah itu akan cocok atau tidak, tetapi dari penyelidikan saya, bahasa fungsional hampir pasti layak untuk dipelajari, dan akan menjadikan Anda seorang programmer yang lebih baik. Hanya dengan memahami transparansi referensial membuat banyak keputusan desain menjadi jauh lebih mudah- dan program yang dihasilkan lebih mudah untuk dipikirkan. Pada dasarnya, jika Anda mengalami masalah, maka itu cenderung hanya menjadi masalah dengan output dari satu fungsi, bukan masalah dengan keadaan tidak konsisten, yang bisa disebabkan oleh salah satu dari ratusan kelas / metode / fungsi dalam bahasa imparatif dengan efek samping.
Sifat tanpa kewarganegaraan dari FP memetakan secara lebih alami ke sifat tanpa kewarganegaraan dari web, dan dengan demikian bahasa-bahasa fungsional lebih mudah digunakan untuk webapp yang lebih elegan dan RESTFUL. Kontras dengan kerangka kerja JAVA dan .NET yang perlu menggunakan HACKS jelek seperti VIEWSTATE dan SESI kunci untuk mempertahankan status aplikasi, dan mempertahankan abstraksi (kadang-kadang sangat bocor) dari bahasa imperatif stateful, pada platform fungsional dasarnya stateless seperti web.
Dan juga, semakin stateless aplikasi Anda, semakin mudah ia dapat meminjamkan dirinya ke pemrosesan paralel. Sangat penting bagi web, jika situs web Anda menjadi populer. Tidak selalu mudah untuk hanya menambahkan lebih banyak perangkat keras ke situs untuk mendapatkan kinerja yang lebih baik.
sumber
Pandangan saya adalah bahwa itu akan menangkap sekarang bahwa Microsoft telah mendorongnya lebih jauh ke arus utama. Bagi saya itu menarik karena apa yang bisa dilakukan untuk kita, karena itu adalah tantangan baru dan karena peluang kerja yang membenci masa depan.
Setelah dikuasai itu akan menjadi alat lain untuk lebih membantu membuat kita lebih produktif sebagai programmer.
sumber
Poin yang terlewatkan dalam diskusi adalah bahwa sistem tipe terbaik ditemukan dalam bahasa FP kontemporer. Terlebih lagi, kompiler dapat menyimpulkan semua (atau setidaknya sebagian besar) tipe secara otomatis.
Sangat menarik bahwa seseorang menghabiskan separuh waktu menulis nama ketik saat pemrograman Java, namun Java sejauh ini tidak mengetik aman. Meskipun Anda mungkin tidak pernah menulis tipe dalam program Haskell (kecuali sebagai jenis kompilasi dokumentasi yang diperiksa) dan kodenya 100% aman.
sumber
Selain jawaban yang lain, casting solusi dalam istilah fungsional murni memaksa seseorang untuk memahami masalah dengan lebih baik. Sebaliknya, berpikir dengan gaya fungsional akan mengembangkan keterampilan pemecahan masalah yang lebih baik.
* Entah karena paradigma fungsional lebih baik atau karena akan memberikan sudut serangan tambahan.
sumber