Anda mungkin membaca judul posting ini dan berpikir, “Apa yang orang ini hisap? Jawa ada dimana-mana! " Anda benar, Java masih mendominasi industri dan memberdayakan beberapa aplikasi penting terbesar di dunia. Tetapi penyebaran Jawa bukanlah apa yang saya bicarakan, saya berbicara tentang sensasi di sekitarnya. Saya menghabiskan banyak waktu dengan programmer yang tidak berpengalaman. Apa yang suka dilakukan programmer yang tidak berpengalaman? Cemas dan terlalu percaya diri tentang alat seperti bahasa pemrograman. Tak satu pun siswa Ilmu Komputer yang saya temui mengagumi Java, dan menurut saya seharusnya tidak seperti itu.
Pengembang muda / naif (termasuk saya sendiri) sering terjebak dalam menjebak bahasa dan alat baru dengan mengorbankan kinerja dan kewarasan. Sebelum bekerja di Halp (sekarang dimiliki oleh $ TEAM), saya memiliki hubungan yang hampir romantis dengan TypeScript sisi server. Saya pikir ekosistem node.js adalah yang paling keren: Saya menyukai ide kode transparan, debugging real-time, pustaka paket yang besar, dan bahkan sistem build yang aneh dan terfragmentasi. Ketika saya benar-benar menggunakannya dalam pengembangan dan berbicara dengan insinyur yang lebih berpengalaman, keajaiban itu dengan cepat menghilang.
Saya memiliki keterikatan yang tidak rasional dengan ekosistem JS karena itu adalah hal baru yang panas; itu hype. Kenyataannya tidak memenuhi harapan saya. Hari ini saya menikmati hal-hal menakjubkan yang saya harapkan dari JavaScript saat saya mendapatkan pengalaman dengan Java. Saya merasa tertipu karena hype tersebut tidak membawa saya ke Jawa lebih awal. Java menyenangkan untuk ditulis, produktif, dan menikmati reputasi dinosaurus yang tidak adil di antara pengembang baru.
Ergonomi adalah apa yang membuat Java menjadi bahasa pemrograman yang hebat
Ini tidak boleh diremehkan: Java hanya menyenangkan untuk ditulis. Ini sebagian besar disebabkan oleh keterampilan yang dimasukkan JetBrains ke IntelliJ IDEA. Semuanya terisi secara otomatis, langsung menuju definisi, penggunaan find berfungsi dengan baik, dan pemfaktoran ulang itu mudah. Namun, di mana Java benar-benar bersinar adalah pengalaman pengembang dengan pustaka pihak ketiga.
Ketergantungan beban kerja yang berat dan tren industri
Pengalaman saya terbatas, tetapi saya merasa angin telah bergerak menuju liberalisasi ketergantungan eksternal. Tidak Diciptakan Disini tidak lagi dalam mode, Tidak Diciptakan Ada dalam mode . Secara khusus, pengembang JavaScript lebih cenderung menyertakan pustaka pihak ketiga bahkan untuk operasi sepele seperti mengisi nomor di sebelah kiri . Menurut saya, lampiran saat ini ke dependensi pihak ketiga tidak berbahaya, tetapi perubahan API di hulu dapat merusak basis kode JS / Python yang tidak diketik.
Saat menggunakan pustaka pihak ketiga di Java, Anda selalu tahu persis jenis apa yang perlu Anda teruskan ke suatu metode. Yang terpenting, penyalahgunaan fungsi akan menghasilkan garis bergelombang merah di editor Anda. Mengingat perpustakaan banyak digunakan, saya pikir lebih banyak orang harus antusias tentang Java.
Panggilan nominal menghemat waktu
Dinamis / implisit / lemah / pengetikan apa pun memiliki sejumlah kelemahan. Saat dependensi mengubah metode API dan aplikasi Anda mengalami error pada waktu proses, bukan pada waktu build, itu menjadi masalah. Ketika pengembang harus kembali ke implementasi metode untuk mencari tahu jenis apa yang harus dilewati, itu hanya membuang-buang waktu. Petunjuk tipe TypeScript dan Python menangani hal ini sedikit, tetapi tidak memiliki kemampuan untuk memeriksa jenis yang diteruskan pada waktu proses tanpa kode tambahan.
Perlindungan jenis adalah fitur TypeScript yang paling tidak saya sukai. Pada dasarnya, ini adalah pengetikan implisit yang harus Anda implementasikan sendiri dan percaya bahwa itu diterapkan dengan benar. Menurut pendapat saya, ini adalah yang terburuk dari kedua dunia. Pertimbangkan hal-hal berikut ini:
interface Dog {
bark: () => void;
}
/* The developer has to manually implement
a heuristic check for interface adherence!
When they update the interface, they have
to update the type guards too! */
function isDog(pet: object): pet is Dog {
return (pet as Dog).bark !== undefined;
}
const dog: any = {bark: () => console.log('woof')};
if (isDog(dog)) {
// TS now knows that objects within this if statement are always type Dog
// This is because the type guard isDog narrowed down the type to Dog
dog.bark();
}
Ada sesuatu tentang deklarasi tipe AND tentang perlunya menulis logika validasi untuk tipe tertentu yang benar-benar membuatku khawatir. Kode di atas sepertinya seseorang menggunakan alat yang salah.
Tidak seperti definisi TypeScript, sistem tipe nominal Java mengambil beban dari otak pemrogram dengan mengkristalkan definisi tipe dan menjamin perlindungan tipe default.
Penghapusan tanggung jawab untuk pengoptimalan
Pengembang Java dapat dengan percaya diri mempercayai JVM untuk membuat aplikasi terbaik. Baik mereka mengimplementasikan aplikasi multi-threaded atau menyimpan data dalam jumlah besar di heap, mereka dapat yakin bahwa mereka tidak terpengaruh oleh manajemen memori atau data race. Ini terutama merupakan keunggulan dibandingkan C ++, yang berisi banyak footgun.
Ini adalah bagian dari pengalaman ergonomis Java. Ketika pengembang tidak perlu terlalu khawatir tentang detail teknis, mereka dapat lebih fokus pada masalah saat ini.
Cawan suci produktivitas
Berapa banyak bahasa yang dapat Anda ingat yang memenuhi kondisi berikut?
- Manajer paket kualitas dan sistem pembangunan (Maven)
- Set nominal
- Komunitas besar
- Optimasi otomatis
Menurut saya satu-satunya alat yang cocok adalah Java, tetapi beri tahu saya jika ada alat lain!
sunting: Seperti yang Jwosty tunjukkan , saingan Java Microsoft C # memiliki semua karakteristik ini dan lebih banyak / fitur bahasa baru. Saya tidak pernah menggunakan C # di luar mesin game Unity, tapi saya akan mempelajarinya.
Ketidakhadiran yang mengejutkan dari kurikulum universitas
Saya saat ini belajar di University of Colorado di Boulder; ini adalah sekolah yang bagus, tapi tidak terlalu dikenal untuk Ilmu Komputer. Namun, sebagian besar kurikulum ilmu komputer sekolah menengah kami dicuri tanpa malu-malu dari CMU atau Stanford. Selama saya belajar di CU, saya menggunakan bahasa pemrograman berikut:
- C++. : , , . . , , .
- Python Julia. , .
- Scala. Principles of Programming Languages, . Scala JVM Java, , Java.
- Bahasa web (HTML / CSS / JS). Mereka hanya digunakan dalam satu kursus, Teknik dan Alat Pengembangan Perangkat Lunak, tentang tren industri.
Saya menyelesaikan semester ini dan Java belum muncul sekali pun; Saya menganggapnya memalukan.
Kesimpulan
Tidak ada satu cara yang benar untuk membangun aplikasi, tetapi menurut saya Java tidak mendapatkan perhatian yang layak, terutama di kalangan pemula dan komunitas pemrograman pemula. Bahasa yang tidak diketik adalah alat yang berguna, tetapi menurut saya mereka tidak harus menjadi pilihan default untuk membangun aplikasi besar. Jika Anda adalah pengembang berfitur lengkap dan belum pernah menggunakan Java secara ekstensif, saya pikir Anda akan terkejut jika mencobanya pada proyek berikutnya.
Java dan JVM digemari di tahun 90-an dan awal 2000-an, tapi menurut saya mereka tidak akan pernah hilang! Pengalaman pengembangan yang saya peroleh dengan IntelliJ dan Java sangat mengagumkan.
Saya penasaran mengapa Java kehilangan hype sama sekali. Sejarah budaya programmer tidak terdokumentasi dengan baik, dan jika Anda memiliki pemahaman, silakan email saya atau tinggalkan komentar (di reddit / Hacker News ).