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.
Jawaban:
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.
sumber
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.)
sumber
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
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.
sumber
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.
sumber
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.
sumber
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.)
sumber
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.
sumber
Saya tidak pernah mengerti perbedaan antara
enterprise
dannon enterprise
program.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.
sumber