
Kita semua mendengar film ikonik, permainan, buku atau komposisi musik yang mendapat pujian besar dari komunitas para profesional, profesional dan kritikus, namun tampaknya tidak pernah menarik kesuksesan komersial yang nyata atau perhatian dari khalayak yang lebih luas. Situasi seperti itu membuat saya sangat frustrasi.
Dalam hal pengembangan, teknologi yang baik juga terkadang tidak pernah menjadi pusat perhatian. Ambil F # sebagai contoh. Yang saya tahu adalah bahwa itu adalah bahasa yang sangat keren, namun sama sekali tidak populer yang menyulitkan pengembang - setelah mengetahuinya - untuk kembali ke bahasa yang biasa mereka gunakan.
Saya mencoba mencari tahu apa kisah di balik ini. Sebenarnya, siapakah orang yang menggunakannya dan mengapa mereka melakukan ini jika bahasa tersebut tidak diminati dalam bisnis? Untuk mendapatkan jawaban, saya bergabung dengan komunitas F # berbahasa Rusia di Telegram - meja bundar kami untuk diskusi.
Bagaimana Anda mulai belajar F #?
Ayrat Hudaygulov (
Szer ): Saya awalnya bermigrasi ke sini dari C #. Kami pernah memiliki pekerjaan yang berkaitan dengan Akka.NET - port Scala Akka. Port itu sendiri baik-baik saja, tetapi tidak memiliki contoh untuk kasus-kasus langka dalam buku pedoman, meskipun selalu ada dalam buku pedoman Scala. Sambil membaca manual itu, saya terus bertanya-tanya - mengapa hanya perlu beberapa baris untuk menulisnya di Scala sedangkan saya berjuang keras untuk melakukan hal yang sama dalam C #?
Saya melihat solusi dalam beralih ke F #. Saya tidak pernah berpikir dua kali sejak itu.
Roman Liman (
kagetoki ): Ternyata, itu adalah alat yang ampuh untuk memecahkan masalah sehari-hari yang sebenarnya yang bisa dihadapi pengembang mana pun. Rintangan-rintangan yang dulu dipandang sebagai norma OOP yang tak terhindarkan di dunia C # dan Jawa, pada kenyataannya bukanlah hal yang tak terhindarkan dan dapat dengan mudah dicegah daripada diatasi.
Phil Ranzhin (
fillpackart ): Saya pernah membaca wawancara panjang dengan Vagif Abilov tentang Habr. Saat itu saya tidak bisa memahami paradigma pemrograman fungsional, sehingga informasi terkait akan membuat saya kesal. Wawancara itu tidak terkecuali.
Vagif Abilov (
VagifAbilov ):
Berikut ini tautan ke artikel yang dimaksud . Saya melakukannya segera setelah memberikan ceramah di konferensi DotNext di Moskow. Singkatnya, saya mulai belajar F # sebagai upaya untuk membuat kode saya lebih ringkas (kode kurang sama dengan kejahatan) dan untuk memanfaatkan struktur data yang persisten. Tentu, tidak ada yang menghentikan pengembang C # atau Java untuk menyatakan struktur data mereka sebagai persisten, tetapi kemampuan untuk mengubah struktur data adalah fitur mendasar dari bahasa OOP, dan yang selalu melekat pada mereka. Pemrograman fungsional memberi Anda upaya yang biasanya dihabiskan untuk melindungi data terhadap mutasi yang tidak pantas dalam lingkungan multi-utas - data akan ditangani sendiri, karena tidak dapat diubah.
Phil Ranzhin : Vagif terus mengatakan bahwa setelah C # dan Java yang benar-benar formal, F # tampak seperti sesuatu yang jauh lebih ramah pengembangan. Saya tidak tahu waktu itu siapa Vagif, tetapi saya alami mengira pria itu tidak memiliki petunjuk sedikit pun. C # tidak terlalu formal, C # persis seperti yang seharusnya. Sangat kuat dan indah. Saya memutuskan untuk menulis artikel tentang bagaimana pemrograman fungsional tidak masuk akal. Saya mengambil masalah sederhana dan mulai mengimplementasikannya di C # dan F # untuk membuktikan maksud saya. Tetapi ketika saya sedang mengerjakannya, saya menyukai F # sehingga saya meninggalkan artikel itu. Alih-alih, saya mulai menggali lebih dalam tentang teknologi.
Roman Liman : Banyak hal yang diverifikasi C # saat runtime sekarang ditangani pada waktu kompilasi, jadi rasanya seperti bermain dengan mengetik statis untuk pertama kalinya - wahyu yang sebenarnya.
Tanpa melebih-lebihkan, di mana Anda memerlukan tujuh baris kode dalam F #, Anda akan membutuhkan 200-300 baris untuk menulis kode yang setara dalam C # (hanya untuk menghitung kode yang bermanfaat). Compiler akan melakukan semua generasi boilerplate untuk Anda, seperti kesetaraan struktural.
Phil Ranzhin : Saya tidak pernah benar-benar
men -debug kode F # saya karena dalam kode F # saya, semua bug terhenti saat dikompilasi. Saya tidak bercanda.
Apakah sulit untuk belajar F #?
Roman Liman : Seberapa sulit mempelajarinya? Menurut saya, tidak sulit sama sekali. Anda mungkin merasa sulit untuk mengatasinya pada awalnya jika Anda belum pernah berurusan dengan paradigma fungsional dan tipe yang tidak berubah sebelumnya. Tetapi masalah ini berkaitan dengan peralihan antara paradigma, bukan bahasa.
Sintaksnya tidak jelas pada awalnya, jadi jinakkan kesombongan Anda dan baca tentang bahasa ini, jangan harap Anda akan lolos dengan pengetahuan Anda tentang C #.
Ayrat Hudaygulov : F # mendukung semua yang dilakukan C #, kecuali goto (karena bahasanya benar-benar berbasis ekspresi, akan terasa aneh untuk membuat lompatan imperatif dalam ekspresi yang dapat dihitung) dan kata kunci yang dilindungi (itu dirancang oleh desain, seperti yang tampaknya menambahkannya akan menjadi no-brainer). Semua yang kami sukai tentang OOP - kelas abstrak, antarmuka, properti yang diimplementasikan otomatis, penggunaan, coba-coba, dll. - semua ada di sana tentu saja. Penggemar penghitungan byte juga akan puas, apa dengan parameter ref / out, mutabilitas, rentang, tidak terkelola, pointer, stackalloc.
Semua fitur C # dapat ditambahkan dengan penundaan beberapa tahun dibandingkan dengan F # (generik, tugas async / menunggu +, LINQ, pencocokan pola, dan banyak lainnya). Selain itu, banyak fitur yang mungkin tidak akan pernah sampai ke bahasa (jumlah jenis sebagai serikat terdiskriminasi, kari fungsi asli). C # 8.0 yang akan datang diharapkan akan ditingkatkan dengan pencatatan dan pencocokan pola rekursif. Pertanyaannya adalah, mengapa harus menunggu?
Pertanyaan lain adalah: mengapa mempelajari bahasa baru untuk menggunakannya dengan cara lama? Untuk benar-benar merangkul keuntungan dari F # yang hilang dalam C #, Anda harus memahami sisi lain dari the Force. Tidak ada yang mengatakan itu mudah.
John Doe : Sebagai pengembang C #, saya berterima kasih kepada pencipta F # untuk generik dan pemrograman asinkron dengan wajah manusia di C #. Bagi mereka yang tidak tahu, fitur-fitur besar itu datang ke C # berkat F #.
Vagif Abilov : Penulis Pengembangan Pragmatik yang populer merekomendasikan agar pengembang mempelajari bahasa pemrograman baru setiap tahun. Saya tidak bisa mengatakan saya secara religius mematuhi nasihat ini, tetapi saya kira para penulis benar-benar ingin mengatakan bahwa pengembang harus selalu siap untuk merevisi prinsip-prinsip yang menjadi dasar penulisan kode mereka.
Banyak orang menghormati bahasa pemrograman seperti kepercayaan mereka. Beberapa akan memperlakukan peralihan dari Jawa ke Clojure seperti konversi dari agama Kristen ke Islam. Mengapa harus begitu penting? Mempelajari bahasa pemrograman baru akan sering memberi kita kesempatan untuk mempertimbangkan kembali cara lama kita bekerja dengan bahasa yang sudah kita ketahui. Mengenal F # membuat orang menulis kode C # dengan cara baru.
Roman Melnikov (
neftedollar ): Bagian OOP dari F # lebih tepat (meskipun sepenuhnya kompatibel dengan versi C # dari OOP), karena mendorong Anda untuk memprogram menggunakan antarmuka abstrak alih-alih kelas eksplisit.
Apa pendapat Anda tentang perancang bahasa ini?
Nikolay Matyushin : Saya pernah membantu memperkenalkan dukungan penyedia tipe data ke .NET Core. Mereka tidak akan bekerja cukup lama, jadi, setelah meminta anggota lain dari komunitas kami yang berbahasa Rusia, saya memutuskan untuk mencari tahu apa yang sebenarnya salah. Setelah beberapa penggalian, kami menemukan bahwa .NET Core tidak memiliki fungsi untuk menyimpan objek perakitan ke file - fungsi ini diperlukan oleh penyedia tipe.
Kami menghabiskan satu atau dua minggu untuk mengembangkan prototipe yang dapat melakukannya. Kami mengumpulkan hack yang berantakan, tetapi berhasil (setidaknya sampai batas tertentu). Selama itu, kami terus memposting ke Masalah Github sampai Don Syme muncul, mengatakan itu 'beberapa jam kerja' dan memperbaiki penyedia tipe.
Vagif Abilov : Perancang bahasa Don Syme mudah didekati dan berpikiran terbuka. Saya berharap dia suatu hari akan pergi sejauh beberapa konferensi Rusia untuk bertemu pengembang Rusia secara langsung.
Roman Liman : Syme adalah seorang jenius. Luar biasa dia sendirian di balik desain cantik ini.
Pavel Smirnov : Dia adalah panutan saya di dunia pemrograman.
Ayrat Hudaygulov : Ngomong-ngomong, Don Syme adalah orang yang memperkenalkan obat generik ke .NET, kalau tidak kita akan tetap melakukan pengecoran keras segala sesuatu dari dan ke objek di C #, seperti (dan sebagian) kasus di Jawa. Syme menumbuhkan bahasa dengan melihat kembali ke C #, ke kompatibilitas dengan fitur-fitur barunya, yang mungkin merupakan hal yang benar untuk dilakukan dari sudut pandang strategis. Namun itu berarti bahwa aftertaste dari keputusan yang buruk dalam C # juga dapat bocor ke F #. Dia juga menentang pengenalan fitur FP kutu buku (halo Scala!) Dan kerumitan bahasa, karena semua itu dapat menakut-nakuti orang lain dan mengasapi perpustakaan standar (halo C ++!).
Saya pikir Syme adalah pahlawan. Saya berpihak padanya pada visinya tentang bahasa sebagai multi-paradigma, namun, saya mungkin akan menambahkan lebih banyak fitur ke bahasa.
Mengapa bahasanya tidak terlalu populer?
Roman Liman : Menurut saya bahasa ini tidak populer karena FP umumnya kurang populer daripada OOP. Selain itu, ada kurva belajar yang curam. Sisanya adalah situasi Catch 22. Beberapa proyek dikodekan dalam F # karena pasar tidak memiliki programmer F #, sedangkan programmer tidak mempelajari bahasa ini karena pasar tidak memiliki proyek yang relevan.
Phil Ranzhin : Saya tidak tahu siapa pun yang akan mempraktikkan pemrograman fungsional dan pada saat yang sama lebih suka model berorientasi objek. Dalam hal itu, F # sangat tidak beruntung, karena bekerja dengan baik hanya untuk mereka yang percaya pada persatuan simbiosis dari kedua paradigma.
Pavel Smirnov : Banyak yang menganggapnya sebagai anak yang masih dilahirkan karena kebijakan Microsoft menjadikan F # hanya sebuah platform untuk bermain dengan fitur yang ditujukan untuk C #. Namun, bahasa ini awalnya ditujukan untuk ilmu data daripada pengembangan industri.
Roman Melnikov : ReSharper. Ini hal penting untuk C #, dan banyak orang telah berinvestasi di dalamnya. Menulis kode C # tanpa ReSharper adalah pekerjaan berat, mengingat besarnya konfigurasi manual, seperti untuk menyoroti alokasi. Dengan demikian, ReSharper mengurangi banyak rasa sakit di pantat untuk pengembang C #. F # tidak menimbulkan rasa sakit ini sejak awal, tetapi mereka yang menggunakan ReSharper tidak bisa benar-benar menghargai keindahan seluruh bahasa yang tidak bergantung pada tooling.
Vagif Abilov : Menurut pendapat saya, alasan ia tertinggal dari kesuksesan Scala terletak pada posisi dominan Microsoft yang masih menentukan prioritas di seluruh platform Windows. Terlepas dari kenyataan bahwa F # dikembangkan di Microsoft Research, perusahaan selalu memposisikannya sebagai bahasa untuk para penggemar. Microsoft memiliki metrik sendiri untuk kelayakan ekonomi dalam menumbuhkan teknologi tertentu berdasarkan kinerja penjualan saat ini, jadi tentu saja, menurut metrik tersebut, proyek seperti SharePoint terlihat jauh lebih seksi daripada F #. Namun, pukulan kecil jatuh pohon ek besar.
Phil Ranzhin : Saya yakin ini akan lepas landas. Kekuatan .NET dikombinasikan dengan sintaksis paling modern dan konsep idiomatik yang belum pernah terjadi sebelumnya hanya akan lepas landas.
Roman Melnikov : Masa depan terlihat sangat menjanjikan. F # membuka jalan untuk analisis data, terima kasih untuk mengetik penyedia misalnya. Ada juga kompiler js dan perpustakaan sihir elmish (yang sebenarnya adalah Elm untuk .NET).
Miguel de Icaza adalah pendukung berat F #, jadi Xamarin selalu memiliki tingkat dukungan F # yang sama dengan C #. Ada juga kompiler di ErlangCore, yang juga cukup mengagumkan. F # dapat digunakan untuk kode backend dan frontend. SAFE-Stack adalah hal yang mengejutkan, dengan panggilan API yang diketik, pembungkus soket web yang keren (Elmish. Bridge) dan banyak hal lainnya.
Vagif Abilov : Saya senang mendengar bahwa F # digunakan dalam latihan. Saya mengerjakan proyek perusahaan penyiaran Norwegia di mana sistem mengunggah file media televisi dan radio ke cloud untuk membuatnya tersedia untuk diputar ulang dari komputer dan perangkat seluler. Sistem ini ditulis dalam F # dan memanfaatkan Akka.NET. Ini bukan satu-satunya proyek organisasi kami di F #, dan yang lebih menjanjikan adalah bahwa jumlah proyek seperti itu bertambah seperti halnya jumlah pengembang yang mau beralih ke bahasa itu.
Apa gunanya F #?
Phil Ranzhin : F # sangat cocok untuk pengembangan AI. Bahasa ini secara harfiah dirancang untuk memisahkan pikiran saya dari segala kerepotan dan untuk fokus pada hal-hal penting. Saat Anda mengerjakan AI, tugas Anda adalah menyesuaikan pola pikir Anda dengan perilaku mesin. Dalam kasus seperti itu, kode Anda adalah bahasa perantara Anda yang tidak mampu menggambarkan gagasan yang terlalu rumit. Tetapi F # mampu menjadi cukup abstrak untuk membuat Anda dan mesin Anda membuat sejarah.
Vagif Abilov : Ini dapat digunakan untuk menyelesaikan masalah, dan sangat baik untuk desain berbasis domain. Dalam wawancara saya tahun lalu tentang Habr, saya konyol menyatakan bahwa bahasa fungsional berlaku untuk algoritma dan backend ke tingkat yang lebih besar daripada yang berlaku untuk pemrograman antarmuka pengguna dan halaman web.
Seseorang kemudian menyebutkan di bagian komentar bahwa ada bahasa fungsional Elm yang dirancang khusus untuk pemrograman halaman web. Orang yang meninggalkan komentar itu benar sekali. Sejak itu, saya mulai menggunakan Fable yang memungkinkan penulisan aplikasi web dalam F # dan mengompilasinya ke JavaScript. Efeknya luar biasa: kombinasi F # plus Fable (dan perpustakaan Fable-Elmish) membuka akses ke pemrograman web untuk pengembang yang ditantang CSS seperti saya.
Pavel Smirnov : Pengembangan berbasis data - ini adalah bahasa FP ringkas dengan dukungan tipe yang disediakan. Model aktor MailboxProcessor-nya, sebagai bagian dari perpustakaan standar, adalah suguhan!
Roman Melnikov : Ini memecahkan masalah web dengan sempurna dan terintegrasi dengan baik dengan komponen reaksi. Ini memecahkan analisis data dan masalah pembelajaran mesin (fslab.org), masalah ETL, masalah desain logika bisnis - jenis sistemnya memungkinkan untuk kode sedemikian rupa untuk menghindari keadaan yang salah.
Ini berfungsi dengan baik untuk parsing (Fparsec). Ini bagus untuk merancang dan menafsirkan bahasa Anda sendiri. Ambil saja TypeScript - ini aslinya ditulis dalam F #. Itu dapat digunakan untuk menulis kode GPU.
Saya sendiri menggunakan F # daripada bash dan Python untuk kode skrip fsx untuk komputer saya.
Memang benar bahwa Anda tidak dapat menggunakannya untuk memprogram pengendali mikrokontroler. Tetapi saya rasa beberapa orang dapat melakukannya tanpa ini.
Di mana mendapatkan informasi
Buku
Internet
Telegram
fsharp_news
fsharp_chat
Deskripsi singkat tentang komunitas
Roman Liman : Komunitas ini luar biasa: didorong oleh keinginan untuk kode di F # secara komersial, sehingga pemula disambut dan menawarkan dukungan luar biasa dalam upaya menumbuhkan komunitas dan meningkatkan peluang anggota untuk mencari pekerjaan.
Phil Ranzhin : Pengikut sekte yang berbahaya itu! Tetapi mereka benar.
Pavel Smirnov : Komunitas F # berbahasa Rusia adalah tempat yang bagus. Yang paling saya sukai adalah mereka benar-benar peduli dengan bahasa favorit mereka, seperti yang dilakukan orang di ekosistem lain yang lebih dikenal.
Nikolay Matyushin : Itu mungkin karena bahasanya tidak terlalu populer, jadi orang yang beracun tidak tinggal.
Roman Melnikov : Komunitas memiliki pangsa drama yang tidak mempengaruhi bahasa itu sendiri namun membuat hidup lebih menarik.