Apakah Scala siap untuk prime time? [Tutup]

22

Sekarang saya telah melakukan beberapa hal sepele dengan Scala (yang saya sukai untuk "hello world" dan aplikasi yang dibuat-buat!) Saya bertanya-tanya .. bagian tentang kematangan alat untuk mendukung pengembangan, dan bagian tentang penerapan umum. Apakah toolets sudah siap? Apakah Scala sesuai untuk digunakan pada aplikasi perusahaan / bisnis? Apakah "Anda" akan menggunakannya pada proyek non-sepele?

Beberapa kekhawatiran saya (mungkin tidak berdasar) adalah:

  • apakah IDE dan toolets sekaya apa yang harus kita kembangkan .net dan aplikasi java (gerhana untuk Scala tampaknya terbatas dibandingkan dengan gerhana untuk java)?
  • apakah perangkat build / CI / testing dapat menangani Scala secara efektif?
  • bagaimana bisa dikelola kode ringkas yang dapat (didorong?) ditulis dalam bahasa?
  • apakah mungkin menemukan pengembang dengan pengalaman Scala?
  • apakah ada cukup banyak orang yang kritis untuk mendapatkan bantuan melalui referensi on-line dan buku-buku yang lebih dari "intro" ke bahasa?

Jadi intinya - apakah ekosistem cukup matang untuk digunakan sekarang, atau lebih baik menunggu untuk melihat bagaimana itu berkembang?

EDIT: katakanlah "non-sepele" adalah proyek 10-20 tahun, multi-rilis, pengembang.

jayraynet
sumber
7
Jika Anda harus bertanya ... :)
Scott Whitlock
Ada banyak ruang antara non-sepele dan perusahaan. Saya tidak yakin seberapa besar proyek yang Anda minati.
Eric Wilson
Poin bagus @FarmBoy, diperbarui.
jayraynet
@Scott Witlock: yeah, Anda mungkin benar =)
jayraynet
Scala bukan Pythonic, tetapi Clojure adalah. Cukup kata.
Pekerjaan

Jawaban:

22

Meskipun benar bahwa Scala telah digunakan di alam liar di Guardian dan di Twitter, ada satu keprihatinan mendasar.

Banyak popularitas Java berasal dari kenyataan bahwa itu relatif mudah dibaca dan dipelihara. Scala memiliki masalah di sini karena dapat ditulis dalam berbagai gaya. Gaya OO vs gaya fungsional adalah perpecahan yang jelas di sini, tetapi semakin rumit ketika Anda berbicara tentang 3 level Scala .

Anda perlu memastikan bahwa tim Anda dan calon karyawan baru semuanya dapat mengikuti gaya yang sama, dan bahwa gaya tersebut cukup sederhana bagi Anda untuk benar-benar dapat mempekerjakan pengembang yang bisa efektif (tidak semua orang dapat menyewa 2% teratas) .

Dukungan alat juga belum ada di sana, meskipun saya berharap celah ini ditutup dengan cepat. Anda juga bisa mendapatkan dukungan untuk tumpukan Scala penuh dari kerumunan TypeSafe . Saya pikir Scala akan mengukir ceruknya, tetapi sampai level benar-benar dibangun ke dalam bahasa / kompiler / apa pun, saya melihat sakit kepala pemeliharaan turun pada tim setelah 1-2 tahun awal produktivitas bersemangat.

Lihat jawaban terkait ini untuk lebih jelasnya.

Martijn Verburg
sumber
apakah masalah ini terjadi dalam bahasa multi-paradigma lain atau lebih spesifik untuk Scala?
DPM
2
Lebih spesifik dari Scala karena pada dasarnya beberapa fitur bahasa tambahan tidak diintegrasikan dengan beberapa fitur bahasa lainnya, salah satu alasan untuk reputasinya "Kitchen Sink".
Martijn Verburg
12

Scala saat ini digunakan oleh Twitter, dan oleh The Gaurdian, jadi itu pasti siap untuk aplikasi non-sepele.

Pemrogram scala akan sangat termotivasi, dan kemungkinan besar sangat baik. Memilih bahasa baru adalah cara yang bagus untuk menarik bakat.

Tentu saja, pemrogram Scala seringkali tidak memiliki pengalaman Scala profesional, dan mungkin ada beberapa variasi dalam idiom yang mereka gunakan. Beberapa mungkin memperjuangkan kemurnian seperti Haskell, sementara yang lain mungkin melihatnya sebagai Java dengan penutupan. Jadi mungkin perlu beberapa waktu untuk mengembangkan standar dan konvensi pengkodean yang konsisten.

Banyak alat Java akan bekerja dengan baik, meskipun IntelliJ Idea mungkin akan bernilai investasi dibandingkan Eclipse.

Secara keseluruhan, ini bisa menjadi pilihan yang baik jika Anda memiliki kendali atas proyek. Jika ini adalah bagian dari perusahaan asuransi besar, Anda dapat mengalami masalah jika ada pedoman arsitektur seperti: 'Semua proyek akan dibangun oleh Maven dan digunakan di WebSphere.' (Saya tidak punya alasan untuk berpikir bahwa aturan khusus ini akan menjadi masalah, tetapi proliferasi aturan semacam itu bisa membuat Anda tersandung pada suatu saat.)

Eric Wilson
sumber
Apa yang dilakukan Twitter dengan Scala?
Anto
1
@Anto lihat misalnya infoq.com/interviews/kallen-scala-twitter
Jesper
10
Saya tidak akan mempercayai keputusan teknik twitter sebagai bukti untuk kematangan & ketahanan.
red-dirt
6

Kesan saya adalah, bahwa sebagian besar ekosistem yang hadir dengan bahasa "konvensional" (seperti Jawa) dimaksudkan untuk menebus kecanggungan mereka.

Pertanyaannya bukan, berapa banyak alat yang ada untuk bahasa tertentu (Scala), tetapi apakah alat yang ada untuk bahasa itu lebih baik daripada alat yang ada untuk bahasa referensi (Jawa). Karena 100 alat biasa-biasa saja tidak akan memberi Anda, apa alat yang baik dapat memberi Anda. Dan satu hal yang tidak boleh Anda lupakan adalah, bahwa bahasa itu sendiri adalah bagian dari alat itu.

Deklaratifitas suatu bahasa

  • berbanding terbalik dengan jumlah dan tingkat keparahan bug yang Anda hasilkan, itu sebabnya Java sangat hebat dalam menghasilkan bug dan Anda membutuhkan banyak alat untuk menghindari dan melacaknya
  • sebanding dengan produktivitas Anda, itulah sebabnya Java sangat verbose dan Anda membutuhkan banyak generator kode dan alat serupa

Sebagai contoh, saya pernah membaca posting blog yang mengerikan oleh seorang pria Ruby, yang berpendapat pengetikan statis tidak ada gunanya, karena tes Anda akan mencakup keamanan jenis. Ini jelas berasal dari seseorang, yang belum bekerja dengan sistem tipe statis ekspresif. Dengan asumsi saya dapat mewakili semua tipe hubungan dalam semantik bahasa dan tidak banyak yang bisa dilakukan (dan tidak, karena sebagian besar bahasa modern mendukung inferensi tipe), saya mendapatkan semua ini secara gratis.

Untuk mendorong satu pemikiran sedikit lebih maju: Uji unit memastikan, bahwa suatu unit bertindak seperti yang ditentukan, atau untuk mengulanginya, uji unit adalah spesifikasi yang dapat dijalankan. Namun melalui pemrograman deklaratif, unit itu sendiri adalah spesifikasi yang dapat dijalankan. Sekali lagi, Anda mendapatkan sesuatu secara gratis.

Yang ingin saya katakan adalah, bahwa Anda tidak boleh meremehkan fitur bahasa apa yang dapat dilakukan untuk Anda. Dan kecuali Anda benar-benar mencobanya di lapangan, Anda tidak akan pernah mengerti.

Jadi untuk kembali ke pertanyaan awal: Apakah alat yang ada untuk Scala lebih baik daripada untuk Java? Sulit untuk dikatakan. Tergantung pada apa yang ingin Anda lakukan. Saya pikir kita semua setuju bahasanya jauh lebih baik, sekarang pertanyaannya adalah, seberapa baik ekosistem yang akan Anda temukan di area bisnis Anda.
Untuk web, Lift benar-benar merupakan opsi yang solid untuk digunakan. Tidak tahu tentang desktop atau seluler.

back2dos
sumber
5

katakanlah "non-sepele" adalah proyek 10-20 tahun, multi-rilis pengembang.

Itu banyak risiko. Hadiahnya harus sepadan. Dalam dunia aplikasi bisnis perusahaan dan proyek ukuran menengah hingga besar, pengambilan risiko biasanya terbatas. Atau lebih tepatnya sudah ada risiko yang cukup untuk dihadapi ... Prediktabilitas lebih penting.

Saya ragu adopsi akan bekerja seperti itu.

Ini lebih cenderung dimulai sebagai segelintir orang yang bekerja pada bagian di mana risikonya terkandung seperti POC, komponen yang tidak penting, pengujian, atau bagian-bagian di mana masalahnya tampaknya ditangani dengan jauh lebih baik oleh Scala daripada alternatif (mungkin jika sesuatu melibatkan aktor misalnya) ... Lalu ketika alat matang, komunitas tumbuh, pengetahuan tumbuh di perusahaan, maka itu bisa berkembang.

huynhjl
sumber
5

Dengan memanfaatkan runtime Java, Scala tentu siap untuk prime time. Jika Anda dapat menggunakan aplikasi Scala, setelah bytecode dibuat, itu harus selalu bekerja dengan versi tertentu dari runtime Java. Pustaka berbasis Scala akan berfungsi seperti perpustakaan pihak ketiga Java lain yang Anda kenal.

Dalam hal IDE, build tools, dan yang lainnya, Scala tidak memiliki tingkat proliferasi yang sama dengan yang dimiliki Java. Jadi Anda tidak memiliki banyak kerangka kerja berbasis Scala atau alat berbasis Scala. Itu lebih berkaitan dengan popularitas Java daripada dengan peningkatan popularitas Scala. Scala memiliki alat fungsional termasuk Scala IDE dan sbt, alat bangun. Tetapi mereka hampir tidak secanggih beberapa alat bantu Jawa murni lainnya di luar sana.

berlinbrown2
sumber
4

Poin memetik ceri dari @huynhjl dan @FarmBoy:

  • Menemukan cukup banyak programmer Scala yang berpengalaman bisa jadi sulit.

  • Dogma "praktik terbaik" untuk Scala masih terus berevolusi (*).

  • Panduan gaya, konvensi, dll. Masih terus berkembang (*).

  • Dukungan alat masih terus berkembang (*).

Menyatukan semua ini, mungkin pertanyaan yang lebih baik untuk Anda tanyakan (diri sendiri) adalah apakah organisasi Anda siap menggunakan Scala pada proyek "non-sepele"? Apakah Anda memiliki orang-orang yang dapat mengatasi melakukan proyek besar dengan begitu banyak hal yang "masih berkembang"? Sebaliknya, apakah lebih baik melakukan proyek yang lebih kecil terlebih dahulu?

(* Faktanya, sebagian besar bahasa masih berkembang dalam satu atau lebih hal ini. Masalahnya di sini adalah tingkat perubahan / fluks ... dan apakah tim Anda dapat mengatasinya.)

Stephen C
sumber
1
'Jumlah yang cukup besar' dari pengembang Scala akan jauh lebih kecil daripada 'jumlah yang cukup besar' dari pengembang Java.
kevin cline
3

David Pollak di Good Stuff memiliki postingan blog yang luar biasa berjudul Fungsional Bahasa akan Memerintah (tetapi tidak tahun ini) yang masuk ke seluk beluk bahasa fungsional secara umum, dan Scala secara rinci yang saya sangat menyarankan membaca untuk lebih memahami jika Scala siap untuk prime time.

Dakotah Utara
sumber
0

Saya tidak pernah mengerti perbedaan antara enterprisedan non enterpriseprogram.

Saya menggunakan program yang sama di tempat kerja seperti di rumah. Saya tidak akan menggunakan program biasa-biasa saja di waktu luang saya - mengapa saya harus?

Apa itu program non-profesional? Saya telah melihat aplikasi yang buruk telah digunakan, karena pengguna tidak tahu yang lebih baik, karena masalah kompatibilitas, atau pengguna menolak untuk mempelajari sesuatu yang baru.

Tapi ini masalah perangkat lunak yang sudah ketinggalan zaman, dan tujuan, yang ada dalam pikiran pengembang - bukan bahasa, program itu ditulis. Jika Anda mulai berpikir, dalam bahasa apa suatu program ditulis, itu sudah berakhir: gagal.

Enterprise-aplikasi adalah istilah marekting, yang tidak berguna untuk diskusi serius.

Dan pelanggan mana yang tahu dalam bahasa apa Anda telah melakukan pekerjaan Anda? Terkadang mereka peduli, kadang tidak.

Anda mungkin memiliki pertanyaan yang terkait dengan kematangan bahasa - tetapi Anda tidak dapat menjawab pertanyaan untuk semua jenis perusahaan dan semua aplikasi.

Pengguna tidak diketahui
sumber
1
Enterprise lebih dari sekadar istilah pemasaran ... Pada dasarnya berarti perusahaan tempat kita membeli alat ini akan ada setidaknya selama kita ada, dan memiliki sumber daya untuk mendukungnya . Anda dapat mengganti organisasi sumber terbuka dengan perusahaan di atas .... Pada akhirnya, ada perbedaan besar antara memilih bahasa yang sebagian besar digerakkan oleh satu orang, vs tim kecil vs. fondasi sumber terbuka besar vs. teknologi Fortune 100 perusahaan.
red-dirt