Akankah scala menjadi pilihan yang baik alih-alih Java?

11

Kami akan memulai proyek baru yang akan melibatkan pelatihan semua pengembang .net di Jawa (frameworks / sistem ECO dll). Kami memiliki banyak kode yang ditulis dalam C # dan tampaknya semua ini akan sia-sia karena kami harus menulis ulang semuanya di Jawa. Masalah yang saya lihat adalah bahwa tahun pertama atau lebih (mungkin 2 tahun) kami tidak akan memberikan apa-apa karena kami akan menghabiskan sebagian besar waktu mereproduksi apa yang kami miliki sebelumnya tetapi sekarang di Jawa.

Karena tim kami didistribusikan di berbagai kantor di seluruh dunia dan kami memiliki sejumlah besar pengembang java (20 hingga 30) dan 10 pengembang menggunakan .net, kami ingin mendapatkan semua pengembang menggunakan bahasa / platform yang sama sehingga kami dapat mulai menggunakan kembali komponen / modul. Jadi saya bisa mengerti sudut pandang manajemen.

Kemarin saya menemukan Scala dan bertanya-tanya apakah akan lebih baik menggunakan ini dengan produk saat ini (yang ditulis dalam C #) dan kemudian setidaknya kita akan memiliki produk yang berfungsi dalam setahun. Juga dalam setahun kami memiliki modul yang dapat digunakan di dunia Java sementara kami memigrasi bagian lain dari produk.

Akankah Scala menjadi pilihan yang lebih baik daripada Jawa mengingat apa yang kami coba capai?

JD01
sumber
2
Menulis ulang semuanya dalam bahasa lain? Dan 2 tahun tanpa hasil? Kedengarannya seperti keputusan manajemen yang mengerikan dan Anda mungkin membutuhkan pekerjaan baru dalam setengah tahun;)
zvrba
Ya, itu sudah dipertimbangkan. Tidak yakin di mana saya harus mulai mencari sekarang dan tetap berpegang pada C # :)
JD01
1
Kedengarannya seperti Anda akan melakukan hal yang tidak boleh Anda lakukan
back2dos

Jawaban:

15

Beberapa hal yang perlu dipertimbangkan:

  • Scala adalah bahasa yang hebat - tetapi perlu dicatat bahwa itu juga merupakan bahasa yang cukup menantang untuk dipelajari dan digunakan dengan benar. Bukan hanya pendapat saya - bahkan ahli Scala yang berpengalaman mengatakan demikian . Bergantung pada tingkat keterampilan dalam tim Anda, itu mungkin paling cocok sebagai alat untuk pengembang yang paling berpengalaman / ahli
  • Java dan C # cukup mirip dalam banyak hal - tidak akan lama bagi pengembang yang terlatih dalam satu hal untuk berpindah (sintaksinya mirip, sebagian besar hanya kasus mempelajari kebiasaan masing-masing dan mendapatkan pemahaman tentang perpustakaan yang berbeda, yang sering memiliki fungsi serupa tetapi dikemas secara berbeda dan / atau memiliki nama yang berbeda). Saya pribadi telah beralih dari Java ke C # dan kembali ke Java tanpa kesulitan.
  • Perlu juga dicatat bahwa semua bahasa JVM (Java dan Scala, tetapi juga JRuby dan Clojure dll) sangat kompatibel - mereka berbagi platform JVM mendasar yang sama dan dapat berbagi kode / perpustakaan dengan sangat mudah.

Mengingat semua ini, Anda mungkin ingin melakukan lindung nilai taruhan Anda dan pergi untuk strategi Java / Scala campuran - yaitu bermigrasi ke platform JVM , dan fokus pada Java, tetapi tetap buka opsi untuk menggunakan Scala ketika pengembang Anda merasa nyaman dan / atau itu cocok dengan masalah yang dihadapi.

Dari perspektif manajemen, ini memiliki banyak keuntungan:

  • Anda masih dapat membagikan semua perpustakaan sehingga investasi Anda akan aman
  • Pengembang yang kurang berpengalaman akan dapat mentransfer C # -> Java dengan cepat
  • Pengembang Anda yang lebih berpengalaman dapat memanfaatkan sepenuhnya fitur-fitur canggih di Scala
  • Semua alat kompatibel / dapat dibagi (membangun sistem, IDE, alat penyebaran dll.)
  • Anda mendapatkan akses gratis ke ekosistem open source perpustakaan yang sangat luas di JVM (di samping portabilitas lintas-platform, ini bisa dibilang alasan terbaik untuk berada di platform JVM)
  • Pengembang Anda dapat menggunakan bahasa yang membuat mereka paling produktif dengan keterampilan / tugas yang mereka miliki (Java dalam beberapa kasus, Scala dalam kasus lain, mungkin bahasa lain seperti Clojure di masa mendatang)

Kelemahannya adalah Anda masih memiliki dua bahasa utama untuk didukung. Tetapi Anda mungkin sebenarnya sudah memiliki lebih dari dua (skrip shell? Format XML khusus domain? File konfigurasi? Mesin aturan? HTML? Javascript?) Sehingga Anda dapat berpendapat bahwa itu sebenarnya bukan masalah besar.

mikera
sumber
Terima kasih untuk informasi. Saya hanya mencoba mencari tahu apa jalan terbaik ke depan dan Anda telah memberikan beberapa informasi yang bagus. Saat ini kami memiliki beberapa pengembang OO yang baik tetapi tidak ada yang akrab dengan pemrograman fungsional.
JD01
1
Senang untuk membantu! Perlu disadari bahwa Scala lebih merupakan bahasa berbasis multi-paradigma / OOP. Meskipun Anda tentu dapat melakukan FP dalam Scala, jika Anda ingin bahasa yang lebih jelas fungsional dalam fokus maka Haskell atau Clojure mungkin lebih dekat dengan sasaran.
mikera
Adapun penggunaan kembali kode, jika saya menggunakan Clojure atau Scala dari hari pertama atau bahkan seperti yang Anda katakan dalam strategi campuran, dapatkah saya menggunakan kembali kode Clojure / Scala di keduanya .net dan Java? Saya bertanya-tanya apakah ini merupakan nilai jual yang bagus untuk manajemen. Dengan cara ini kita masih bisa mengeluarkan produk (produk lama dengan fitur-fitur baru) dan juga berada di jalan untuk menulis ulang kode yang ada di Jawa dengan menggunakan kembali kode modul clojure / scala. Apakah saya benar dalam pemikiran saya di sini atau apakah ini membuka masalah lain?
JD01
1
Anda dapat mengekspos fungsionalitas Clojure / Scala sebagai layanan web atau antarmuka REST jika Anda suka. Itu overhead yang agak lebih tinggi daripada hanya langsung membangun perpustakaan (yang akan menjadi pilihan terbaik jika Anda ingin memanggil fungsi dari Java / bahasa JVM lain) tetapi tentu akan memberikan fleksibilitas untuk memanggil kode dari klien apa pun yang Anda suka (. Net, Java, Ruby, dll.)
mikera
Terima kasih Mike. Saya pikir jalur penggunaan kembali kode setidaknya akan menunjukkan kepada manajemen bahwa penulisan ulang lengkap tidak diperlukan dengan opsi Scala / Clojure. Saya tidak ingin kita berakhir seperti Netscape :). Kembali ke membangun perpustakaan, bisakah saya tidak menggunakannya di .net dan java tanpa layanan web?
JD01
15

Saya akan menambahkan opsi ke-3. Adakah orang di organisasi Anda yang melihat interop antara modul C # dan Java Anda? Bagaimana Anda mengekspos fungsionalitas C #? Apakah layanan web SOAP atau RESTFul merupakan opsi?

Menulis ulang 2 tahun bisa menjadi lonceng kematian bagi sebuah organisasi (tanyakan saja pada Netscape). Namun migrasi bertahap sementara kode yang ada berfungsi baik satu sama lain memiliki potensi dampak bisnis yang lebih kecil.

Martijn Verburg
sumber
3

Menulis ulang C # ke Scala akan sama sulitnya dengan menulis ulang ke Jawa. Adapun bahasa mana yang "lebih baik", titik itu bisa diperdebatkan, setiap bahasa memiliki poin plus dan minus sendiri.

Saya tidak tahu seberapa besar basis kode Anda tetapi 2 tahun untuk 30 pengembang tampaknya besar untuk penulisan ulang sederhana. Mengambil Java ketika Anda tahu C # itu mudah. Saya butuh satu atau dua hari untuk merasa nyaman dengan itu.

Saran saya adalah membiarkan manajemen mengambil jalan mereka dan menikmati kenyataan bahwa Anda dibayar untuk memperluas keahlian Anda.

Tom Squires
sumber
Hanya sekitar 10 pengembang yang akan mengerjakan produk baru. Saya hanya mencoba mencari tahu apa pro dan kontra dari pergi dengan Scala nantinya.
JD01
1
Saya tidak cukup tahu tentang spesifikasi proyek Anda atau Scala untuk memberi Anda jawaban yang menantang. Namun bagi saya sepertinya memperkenalkan bahasa ketiga tidak ada yang tahu hanya akan memperumit masalah.
Tom Squires
Kamu mungkin benar. Saya memikirkannya dalam hal mengeluarkan produk dalam satu tahun atau lebih sementara pada saat yang sama dapat menggunakan kembali kode dalam .net dan java. Poin Anda dicatat dengan baik :)
JD01
1

Saya pikir pilihan yang lebih mudah adalah membuat pengembang java belajar C #. Kedua bahasa sangat mirip dalam banyak hal dan tidak butuh waktu lama bagi pengembang java untuk mengambil C #. Saya telah bekerja dengan banyak pengembang java yang belajar C # dan biasanya transisi yang mulus. Satu area di mana mereka mungkin macet untuk sementara waktu adalah model pemrograman WebForms. Pengembang Java menyesuaikan diri dengan paradigma MVC. Dengan cara ini, Anda tidak perlu menunggu selama setahun sebelum mulai mengembangkan fitur baru. Mengenai Scala, saya khawatir itu akan memperkenalkan masalah yang sama sekali baru dengan 30 pengembang yang mencoba mempelajari bahasa baru.

Sriram
sumber
Ada begitu banyak produk yang ditulis di Jawa sehingga membuat mereka belajar C # akan sulit. Saya berharap dengan Scala, begitu kami memiliki produk baru, para pengembang java dapat menggunakan perpustakaan sebagaimana adanya tanpa perlu belajar Scala.
JD01
2
Bukankah tidak apa-apa jika Anda mengekspos kode .Net yang ada sebagai layanan yang pengembang java dapat memohon dan mengembangkan semua fitur baru di java.
Sriram
Itu telah disarankan di masa lalu tetapi telah diputuskan bahwa kita menjauh dari .net.
JD01
Wow! Maka saya akan membuatnya tetap sederhana dan menulis ulang kode di java. Saya pikir Scala akan memperkenalkan satu kompleksitas lagi untuk dikelola dan itu akan menjadi penjualan yang sulit bagi manajemen.
Sriram