Bagaimana cara memperkenalkan tim Anda ke gaya pengkodean fungsional?


10

Saya memiliki situasi di mana kebanyakan orang dalam kelompok saya berasal dari latar belakang pemrograman berorientasi objek dengan sedikit atau tanpa pemahaman tentang pemrograman fungsional. Bahkan dasar-dasar tidak seperti penutupan.

Ada saran tentang apa yang mungkin cara yang baik untuk memperkenalkan mereka ke gaya pengkodean fungsional? Banyak pengkodean yang kita lakukan dapat dipersingkat jika kita melakukan cara fungsional untuk kasus-kasus spesifik kita.

Saya sudah memberikan beberapa presentasi tentang paradigma fungsional dan pengkodean. Sayangnya kami tidak menggunakan bahasa pemrograman fungsional yang tepat seperti Haskell (pada dasarnya kode warisan ada di C, C ++, Java) jadi kami harus melakukan apa pun yang ada di sana dengan ini.


11
Sebelum bertanya bagaimana, tanyakan mengapa . Apakah Anda mengerjakan masalah yang bisa lebih mudah dipecahkan dalam gaya fungsional daripada gaya berorientasi objek? OO bekerja sangat baik untuk banyak hal (itu sebabnya itu sangat sukses) dan tidak begitu baik untuk orang lain. Dari pertanyaan Anda, itu membuatnya terdengar seperti "Saya ingin melakukan kode kami dalam gaya fungsional hanya karena saya pikir pemrograman fungsional itu keren, bahkan jika kami tidak memiliki bahasa yang mendukungnya dan tim tidak tahu bagaimana untuk melakukannya! " Itu ide yang sangat buruk. Ingat, alat yang tepat untuk pekerjaan yang tepat.
Mason Wheeler

2
@MasonWheeler: Saya tahu mengapa kita perlu fungsional. Tidak ke bahasa keren dari hal bulan. Terlalu tua untuk itu.
Fanatic23

1
Mari kita asumsikan seseorang mengenal Haskell, bisakah Anda membuatnya bekerja di sistem Anda?
JeffO

4
Sepertinya pemrograman fungsional memecahkan masalah yang belum didapat tim Anda. Mereka tahu bagaimana kode C, C ++ Java yang bukan kandidat alami untuk pemrograman fungsional (menerapkan penutupan jelas mengerikan dalam bahasa ini).
James Anderson

Jawaban:


8

Luca Bolognese membuat presentasi yang fantastis ini di mana ia memperkenalkan pemrograman fungsional (untuk menyajikan F #) menggunakan contoh kopi yang sangat hebat dan banyak membantu saya untuk memperkenalkan Pemrograman Fungsional kepada teman dan kolega.

Anda juga dapat melihat Pemrograman Fungsional Dunia Nyata oleh Petricek yang merupakan cara terbaik untuk mulai berpikir secara fungsional menurut saya.


presentasi itu fantastis .. terutama karena itu diberikan oleh vampir !! LOL !! j / k .. mereka mendapat karisma ..
hanzolo

7

Apakah kolega Anda kode di luar pekerjaan?

Menimbang bahwa Anda tidak melakukan FP di perusahaan Anda, maka membuat orang lain belajar bahasa / paradigma baru ketika mereka tidak melakukan apa pun di luar tugas pekerjaan langsung mereka akan menjadi hampir mustahil.

Jika ya, maka temukan proyek menarik yang akan mereka sukai yang terkait dengan pemrograman fungsional dan tunjukkan kepada mereka. Anda tidak berada dalam posisi untuk mengamanatkan perubahan, jadi Anda harus menabur benih jika tertarik pada tingkat pribadi. Ini adalah bagaimana saya diperkenalkan kepadanya - diberikan, oleh sahabat saya yang kebetulan bekerja dengan saya.

Di luar itu, kebanyakan orang menulis alat di rumah untuk memudahkan tugas-tugas kecil. Cobalah untuk menulis beberapa di antaranya dalam bahasa fungsional. Siapa pun yang ingin melihat kode akan terkena keindahan (mudah-mudahan / mungkin) dari kode tersebut dan kemungkinan akan menanyakannya ketika mereka melakukannya. Itu adalah kesempatan untuk menjual ide.

Ingat, ada bahasa fungsional yang akan bekerja pada stack Anda (scala / closure keduanya berjalan pada JVM). Ini bukan "murni fungsional" seperti Haskell, tapi ini awal yang baik dalam perjalanan panjang.

Jika Anda memiliki kendali atas perekrutan, pekerjakan orang yang memiliki pengalaman fungsional (atau setidaknya tertarik pada pemrograman fungsional).

Dan akhirnya ... Anda mungkin berada di perusahaan yang salah jika Anda bersemangat menulis kode fungsional. Anda tidak akan mengubah cara seluruh perusahaan Anda menulis perangkat lunak - terutama jika mereka menghasilkan uang dan lebih terutama lagi tidak dalam waktu yang cukup singkat.

Ini semua tentang menjualnya kepada devs ... manajemen adalah sepenuhnya binatang buas lainnya.


2

Beralih dari pemrograman fungsional yang imperatif ke murni adalah perubahan besar dengan kurva pembelajaran yang curam. Saya akan menyarankan untuk mencoba transisi yang kurang cepat, dan dalam hal ini Anda memiliki banyak pilihan. Sebagai contoh, Python mendukung pemahaman daftar dan ekspresi generator , Ruby mendukung fungsi tingkat tinggi melalui blok kode, dll. Karena Anda menyebutkan Java, jika Anda semua memiliki latar belakang Java dan Anda ingin dukungan pemrograman fungsional penuh, Anda dapat mencoba Scala .


2

Menyewa (atau meminta bos untuk menyewa) seorang programmer fungsional

Akhirnya, ini tidak akan terjadi pada sisa tim Anda.

Juga, seperti yang dinyatakan sebelumnya, mendorong mereka untuk menulis kode dalam bahasa fungsional selama waktu libur juga tidak ada salahnya.


2

Jika pemrograman fungsional benar-benar akan membuat hidup lebih mudah dalam kasus Anda, maka saya sarankan mengisolasi satu kasus seperti itu, dan menunjukkan implementasi yang setara dalam kedua OO dan bahasa fungsional kepada kolega Anda.

Jika perbedaan dalam kerumitan selebar yang Anda katakan, maka ini harus berbicara sendiri.


2

+1 ke faif untuk menyebut Scala: ini dimulai sebagai komentar atas jawaban itu tetapi terlalu besar ...

Saya ingin belajar sesuatu tentang pemrograman fungsional (berasal dari C / C ++, beberapa Python & Java berkarat); Saya mencoba menyelam di bagian paling dalam dengan Ocaml dan kemudian Haskell dan Just Did get Get it. Kemudian saya mencoba Scala dan menemukannya membiarkan saya mulai menggunakan hal-hal fungsional dalam lingkungan OOP / Java-ey yang nyaman di mana saya dapat dengan mudah kembali ke gaya imperatif yang sudah dikenal ketika pendekatan fungsional menghindari saya. Beberapa orang mungkin mengeluh sifat "multi-paradigma", "hibrid" dari bahasa ini berarti Anda tidak pernah dipaksa untuk meregangkan diri untuk menjadi "fungsional murni", tetapi saya akan mengatakan itu berarti Anda dapat bersikap pragmatis tentang berbagai hal dan tahu Anda akan dapat menyelesaikan hal-hal nyata dengan mudah, kapan pun Anda membutuhkannya.

Beberapa tahun kemudian (dan 200+ solusi Project Euler Scala di Scala kemudian) pertemuan dengan fungsional telah memengaruhi Python saya (lebih banyak menggunakan peta, memfilter, mengurangi, lambdas, itertools, daftar pemahaman dan fungsi lewat di sekitar daripada saya ' d pernah direnungkan sebelumnya) dan pada tingkat lebih rendah C ++: mungkin sedikit lebih banyak upaya untuk menggunakan perangkap fungsional STL, tetapi dampak utamanya adalah saya jauh lebih nyaman menggunakan peta TBB / mengurangi konstruksi dan benar-benar seperti bagaimana mengeksploitasi kekekalan dapat menjinakkan kompleksitas dalam kode multithreaded.

Jadi secara pribadi, jika saya adalah Anda, saya akan membuat kasus untuk memperkenalkan Scala ke dalam beberapa pengembangan Java-world Anda, lebih disukai dengan menunjukkan beberapa contohnya sangat menyederhanakan sesuatu dan menghasilkan manfaat yang Anda klaim. Apa yang terjadi selanjutnya adalah ke seluruh bisnis "memperjuangkan" ide-ide baru dan mendorong perubahan ... yang sepertinya merupakan masalah yang jauh lebih besar.


1
@timeday Kata yang sangat bagus. Saya seorang Java / OO guys. Saya mengambil Scala setahun yang lalu. Dan itu sangat menantang bagi saya untuk belajar FP. Saya melakukan sedikit demi sedikit dan duduk dengannya. Saya tidak mencoba untuk mendapatkan semuanya sekaligus.
chaotic3quilibrium

1

Saya ingin merekomendasikan pendekatan bertahap menggunakan Scala. Dan saya akan merekomendasikan mulai dengan buku pencipta Scala, "Programming in Scala, 2nd Edition" . Buku ini FANTASTIC dengan perlahan memperkenalkan Pemrograman Fungsional satu ke (FP) menggunakan Scala. Dan dalam menunjukkan langkah menuju FP, itu tidak menolak OO. Bahkan, ia memanfaatkannya. Saya membuat melewati kedua saya sekarang.

Pada dasarnya, Scala memungkinkan seseorang untuk melakukan Java / OO "tanpa titik koma". Dan kemudian seseorang dapat mencoba sedikit FP tanpa harus pergi babi utuh. Sebagai contoh, dalam melatih diri saya untuk melakukan FP, saya biasanya akan fokus pada transparansi referensial di tingkat metode kelas, tetapi biar metode saya memiliki banyak var-s, kemampuan berubah-ubah dan imperatif seperti yang diperlukan bagi saya untuk melakukan pass pertama di sebuah implementasi. Kemudian, saya fokus pada pengerjaan ulang setiap metode untuk memindahkannya ke arah FP murni. Dan saya juga menggunakan situs saudara untuk StackOverflow, CodeReview, untuk mendapatkan bantuan dengan transisi mental / berpikir saya. Ini adalah contoh dari postingan terbaru yang saya buat untuk melakukan hal ini.

Bagaimanapun, semoga beruntung dalam perjalanan FP Anda. :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.