Haruskah saya mengambil bahasa pemrograman fungsional?

10

Baru-baru ini saya lebih peduli tentang cara saya menulis kode. Setelah membaca beberapa buku tentang pola desain (dan penerapannya yang terlalu bersemangat, saya yakin) saya telah mengubah pemikiran saya ke arah merangkum apa yang berubah. Saya cenderung memperhatikan bahwa saya menulis lebih sedikit antarmuka dan lebih banyak kode berorientasi metode, di mana saya suka merapikan kehidupan ke dalam kelas lama dengan predikat, aksi, dan tugas delegasi lainnya. Saya cenderung berpikir bahwa sering kali tindakan itu berubah, jadi saya merangkumnya. Saya bahkan sering, meskipun tidak selalu, memecah antarmuka menjadi satu metode, dan kemudian saya lebih suka menggunakan delegasi untuk tugas daripada memaksa kode klien untuk membuat kelas baru.

Jadi saya kira itu kemudian mengenai saya. Haruskah saya melakukan pemrograman fungsional saja?
Sunting: Saya mungkin memiliki kesalahpahaman tentang pemrograman fungsional.

Saat ini bahasa pilihan saya adalah C #, dan saya berasal dari latar belakang C ++. Saya bekerja sebagai pengembang game tetapi saat ini saya menganggur.

Saya sangat menyukai arsitektur. Keutamaan saya adalah kode yang bersih, fleksibel, dapat digunakan kembali dan dikelola. Saya tidak tahu apakah saya telah diracuni dengan cara-cara ini atau apakah itu menjadi lebih baik. Apakah saya mengalami demam refactoring atau haruskah saya melanjutkan? Saya mengerti ini mungkin pertanyaan tentang "gunakan alat yang tepat untuk pekerjaan itu" , tetapi saya ingin mendengar pendapat Anda.

Haruskah saya mengambil bahasa fungsional? Salah satu faktor ketakutan saya adalah meninggalkan kenyamanan Visual Studio.

Pernyataan
sumber
Anda dapat mencoba F # jika meninggalkan Visual Studio adalah pemecah kesepakatan.
Adam Lear
Itu bukan pemecah kesepakatan. Saya belum mencoba banyak alternatif lain. Saya kira saya merasa takut bekerja tanpa intellisense, refactoring atau alat serupa dan memiliki konsepsi bahwa Anda akhirnya menulis kode dalam editor teks biasa lagi.
Pernyataan
Saat ini saya menganggur ... bukankah ini yang harus diperbaiki?
Pekerjaan
Saya akan mencoba bekerja tanpa VS sebentar. Anda mungkin menemukan bahwa bekerja dengan cara yang sangat minimalis mungkin menyenangkan.
Zachary K
@ Kerja, ya, tapi saya telah dihantam dengan serangkaian peristiwa yang sangat buruk baru-baru ini :) Saya merusak kaki saya (well saya tidak kode dengan kaki saya, tapi, masih ...) baru-baru ini setelah meninggalkan pekerjaan lama saya di cari yang baru.
Pernyataan

Jawaban:

5

IYA

Mempelajari hal-hal baru harus menyenangkan. Dan mempelajari cara baru untuk memprogram harus menjadikan Anda seorang programmer yang lebih baik. Periksa salah satu dari Haskell atau Erlang, keduanya fungsional tetapi mereka sangat berbeda. Jika Anda memilih Haskell, cari beberapa pembicaraan oleh "Simon Payton Jones" di youtube atau podcast. Pria itu adalah pembicara yang hebat.

Zachary K
sumber
1
Saya memilih jawaban ini karena berbagai alasan. @ Zachary K mengatakan mungkin menyenangkan untuk keluar dari kotak tempat yang terkenal dan memiliki perspektif lain. Saya seharusnya tidak takut untuk mencoba sesuatu yang baru. Ini bukan akhir dari hari. Haskell adalah bahasa yang menarik perhatian saya dalam berbagai diskusi beberapa kali sebelumnya. Saya tidak tahu apakah saya memerlukan bahasa fungsional tetapi seperti @Toby Allen mengatakan ini adalah cara yang bagus untuk melihat cara kerja yang lain dan saya setuju dengan ini setelah mencoba beberapa UnrealScript. @ammoQ sedikit merindukan intinya tetapi saya tidak memiliki definisi yang sangat baik atas pertanyaan saya. Saya masih mendapatkan keprihatinannya.
Pernyataan
Senang untuk membantu. Selamat bersenang
Zachary K
14

Kudus * * * *. Tidak ada peluru perak. Mengundurkan diri. Tenang, ambil napas dalam-dalam.

Hanya karena Anda memiliki alat di kotak alat Anda, itu tidak berarti Anda pasti akan menggunakannya. Berkonsentrasilah pada tugas yang ada, yaitu menulis program yang berfungsi, dan refactor ketika kode berbau tidak enak. Jangan merangkum dan abstrak setiap detail kecil hanya karena itu mungkin akan berubah suatu hari nanti. IMO, jauh lebih baik untuk mulai langsung, KISS & YAGNI, dan bereaksi terhadap perubahan persyaratan ketika mereka benar - benar berubah .

Saya tidak berpikir ada orang di sini yang dapat memberi tahu Anda apakah bahasa fungsional lebih cocok untuk kebutuhan Anda atau tidak. Karena Anda tidak memberi tahu kami apa yang sedang Anda kerjakan.

pengguna281377
sumber
Yah, aku tidak sedang mengerjakan sesuatu yang khusus saat ini. Saya ada di antara pekerjaan. Saya / adalah seorang pengembang game.
Pernyataan
3
Ini adalah situasi berbahaya terkait overengineering. Tidak ada tenggat waktu, tidak ada jaminan, terlalu banyak waktu untuk terobsesi dengan detail.
user281377
(Banyak menebak di depan karena saya tidak memiliki gambaran yang jelas dalam pikiran saya). Saya kira "kebutuhan" saya lebih tercermin dalam cara saya lebih suka menulis kode. Saya tidak tahu banyak tentang pemrograman fungsional, dan saya kira namanya mungkin sedikit menipu saya. Saya hanya merasa bahwa preferensi saya tidak sebanyak objek berorientasi seperti yang saya pikirkan. Jadi mungkin saya harus menikmati bekerja dalam paradigma lain?
Pernyataan
Ya, saya kira itulah masalahnya. Saya sedang dalam fase belajar sekarang sehingga itu sebabnya saya mengeksplorasi kemungkinan menulis dengan cara tertentu. Di tempat kerja, orang sering tidak punya waktu untuk menulis kode seperti itu, dan Anda harus menghormati kode etik dan mempertahankan gaya yang konsisten di antara para pengembang.
Pernyataan
2
Benar-benar oke ketika Anda mencoba setiap alat yang ada sekarang karena Anda sedang berada di antara pekerjaan, tetapi saya khawatir kami tidak dapat memberi tahu Anda apakah sepatu itu cocok atau tidak.
user281377
12

Anda dapat mengambil F # . Ini adalah bahasa fungsional .NET, yang akan memungkinkan Anda untuk menggunakan Visual Studio dan menggunakan kembali banyak pengetahuan .NET Anda. Rakitannya tentu saja berintegrasi dengan C # rakitan dengan mulus (memungkinkan Anda untuk dengan mudah menggabungkan C #, C ++ / CLI dan F # dalam satu proyek). Dukungan F # hadir dengan VS Pro atau lebih baik, saya tidak yakin apakah itu diaktifkan secara default.

Matěj Zábský
sumber
Saya pikir ada addon untuk F # di VS2008, tetapi default di VS2010.
apoorv020
F # bekerja bahkan dengan VS Shell gratis.
SK-logic
6

IMO, ada baiknya mencoba bahasa fungsional. Bahkan jika Anda tidak pernah menggunakannya secara langsung dalam produk yang dirilis, mempelajarinya hampir pasti akan membantu memberikan pandangan / pandangan yang agak berbeda pada pemrograman. Bahkan jika Anda akhirnya terus melakukan semua "nyata" pengkodean dalam C #, kemungkinan cukup adil bahwa itu akan membantu Anda meningkatkan kode yang Anda tulis dalam C #.

Seperti yang telah disebutkan orang lain, pilihan yang jelas untuk seseorang yang terbiasa dengan Visual Studio adalah F #, yang pada dasarnya adalah turunan Ocaml / Caml / ML. IMO, itu adalah pilihan yang baik dari pihak Microsoft untuk memperkenalkan orang ke pemrograman fungsional - ini adalah bahasa fungsional penuh, tetapi tidak memiliki sintaksis yang hampir sama asingnya dengan beberapa yang dilakukan (misalnya, sementara bahasa berbasis Lisp melakukan memiliki kelebihan nyata, pemula hampir selalu merasa sulit untuk membaca).

Jerry Coffin
sumber
2

Ya kamu harus.

Jika Anda memilih bahasa yang murni, seperti Haskell, Anda tidak hanya akan belajar bahasa baru, tetapi juga cara berpikir yang baru. Ini dapat membantu Anda nantinya dalam pekerjaan proceural / OO Anda juga.

F #, di sisi lain, tidak murni, sehingga Anda dapat dengan mudah kehilangan apa yang penting dalam pemrograman fungsional. Jadi, Anda dapat, terus menulis program prosedural yang mengubah variabel di sini, melakukan beberapa efek samping di sana, hanya dalam sintaks F #.

Ingo
sumber
Saya benar-benar mulai di tryhaskell.org :) Sangat menyenangkan untuk mempelajari hal-hal baru.
Pernyataan
1

Jika Anda sudah menggunakan c # Anda tidak perlu bahasa baru - dengan kombinasi metode ekstensi, lambdas dan tipe Fungsi / Tindakan umum, cukup mudah untuk menulis kode fungsional dalam C # - dengan cara itu Anda dapat menggunakan gaya fungsional dalam algoritma yang paling masuk akal tanpa perlu mengubah seluruh aplikasi.

Tom Clarkson
sumber
1
Anda selalu membutuhkan bahasa lain. Bahkan jika Anda tidak pernah menggunakannya, itu adalah pengalaman belajar yang hebat untuk belajar bahasa baru. Tidak ada satu bahasa yang memiliki segalanya.
Toby Allen
Anda selalu perlu belajar, tetapi Anda tidak selalu perlu belajar bahasa lain. Manfaatnya berasal dari mempelajari konsep pemrograman fungsional daripada bahasa itu sendiri, dan Anda dapat melakukannya tanpa meninggalkan lingkungan yang akrab dan mengubah seluruh proyek. C # cukup baik, dan secara praktis ada keuntungan besar untuk hanya memiliki kode fungsional dalam algoritma yang benar-benar mendapat manfaat darinya.
Tom Clarkson
Ya saya kira kekhawatiran saya lebih condong ke arah jika ada bahasa yang lebih cocok (secara sintaksis) untuk bekerja dengan metode / fungsi dengan cara saya menemukan diri saya sering bekerja sambil mempermainkan ini. C # menawarkan ekspresi lambda dan itu bagus dalam dirinya sendiri tetapi misalnya memiliki fungsi mengembalikan nilai tanpa parameter menghasilkan kode seperti () => x, dan mungkin ada cara yang lebih bersih untuk melanjutkan.
Pernyataan
+1 @Toby. Saya baru-baru ini membaca sekilas referensi UnrealScript dan melihat beberapa solusi bahasa yang menarik untuk bekerja dengan state et.c. Ini dibawa ke C # dalam hal memikirkan masalah dan mereka memiliki solusi yang cukup bagus. Jadi ya, saya yakin Anda belajar banyak ketika Anda keluar dari kotak pasir Anda dan menjarah tetangga Anda untuk semua pasir dan mainan yang Anda temukan :)
Pernyataan