Cukup Pakai Java
(teamten.com)- Bahasa favorit saya adalah Python. Meski begitu, saya memakai Java di mana-mana — bahkan untuk skrip sederhana.
- Beberapa pengalaman:
- Di perusahaan yang berbasis Java, saya pernah menulis skenario pengujian dengan JavaScript. Namun, sulit melacak stack trace, dan saya jadi repot menulis kode jembatan antara Java dan JavaScript.
- Kami menyimpan log dalam format JSON, lalu seorang rekan membuat program bernama
logcatuntuk menangani log tersebut. Saya puas dengan program itu, tetapi ketika kemudian membuat program serupa dengan Java, performanya meningkat lebih dari 10 kali lipat. - Berkat pengalaman dan materi yang sangat banyak tentang Java, untuk membuat layanan web Java lebih cepat daripada Python. Tepatnya, ini adalah keuntungan karena memakai satu bahasa yang sama.
- Perdebatan paling panas tentang Java adalah verbose (terlalu bertele-tele). Namun, ini sama sekali bukan kekurangan. Lihat dua kode berikut.
// java
Map<String,User> userIdMap = new HashMap<String,User>();
// python
userIdMap = {}
- Namun, dalam praktiknya, kemungkinan besar kode Python akan ditulis seperti di bawah ini. (Kalau tidak, pasti akan sangat sulit dirawat)
# Map from user ID to User object.
userIdMap = {}
- Artinya, memakai bahasa bertipe dinamis itu seperti mengorbankan produktivitas setelah 14 hari demi membuat sesuatu yang keren dalam 30 menit.
- Stack Overflow bertahan menangani 60,000,000 pageview dengan 5 server menggunakan ASP.NET (pada 2010).
- Mari lihat contoh unit test. Menulis dan memelihara unit test memakan waktu. Terutama, kasus-kasus pengecualian yang bisa diperiksa secara sederhana lewat tipe tidak terlalu tertangkap dengan baik oleh unit test di bahasa bertipe dinamis (misalnya: parser).
- (Sebagai tambahan alasan mengapa saya tidak memakai Python) solusi cepat (quick hack) lama-lama membesar dan menjadi tool yang sangat penting, tetapi tidak ada waktu untuk menulis ulang, sehingga setiap kali dipakai akhirnya harus bergulat dengan performa dan maintainability.
- Terakhir, alasan saya lebih memilih Java dibanding bahasa bertipe statis lain
- C/C++ sulit diterapkan pada pekerjaan saya
- C# kurang dukungan cross-platform
- Scala terlalu kompleks
- Bahasa lain seperti D dan Go masih terlalu baru untuk dipakai dalam pekerjaan saya
- Ada beberapa alasan saya membawa tulisan ini ke GeekNews:
- Ini pertama kalinya saya melihat tulisan yang benar-benar berkata, "Saya sangat suka Java!", jadi terasa menarik (saya kira hanya dari judulnya akan ada twist, ternyata tidak...)
- Menarik bahwa penulis punya kotak perkakasnya sendiri (dibuat dengan Java). Saya jadi membayangkan sosok orang tua yang merogoh-rogoh saku dan mengeluarkan senjata kuno satu per satu.
- Secara pribadi saya sangat menyukai JavaScript dan Python. Namun, sekilas terlihat bahwa tren pada bahasa-bahasa ini juga mengarah ke 'memperkenalkan tipe dengan satu cara atau lainnya' (TypeScript untuk JavaScript, typing/mypy untuk Python). Dalam situasi seperti ini, setelah membaca tulisan ini saya jadi merasa bahwa memakai bahasa bertipe statis dengan cara yang sama sekali tidak memaksa tipe mungkin sedikit mirip kepuasan diri saya sendiri.
- Penulis memiliki pengalaman dengan Java dan Python sehingga membandingkan keduanya secara langsung, tetapi rasanya kita tidak perlu membatasi pemikiran hanya pada dua bahasa itu. Dari sudut pandang yang lebih luas, bagaimana pendapat kalian tentang bahasa bertipe statis dan bahasa bertipe dinamis?
PS. Jangan merendahkan bahasa tertentu secara tidak berarti ya :D
58 komentar
Mungkin ini pengalaman yang terlalu pribadi, tapi menurut saya masalah terbesar Java bukan bahasanya, melainkan JVM.
Saya terlalu sering mengalami ketidakmampuan mengelola memori di berbagai versi JVM.
Kalau begitu, buat dan pakailah juga pandas dan numpy dengan Java. Orang yang melontarkan klaim seperti itu sebaiknya jangan didekati.
Java dipakai untuk backend web, dan Python dipakai untuk AI. Kalau mau memperdebatkan performa, ya pakai Rust, bukannya itu hal yang sudah semua orang tahu? Tapi ke depannya porsi AI diperkirakan akan makin besar, jadi saya jadi berpikir apakah sudah waktunya juga meninggalkan Java. Soalnya di negara kita banyak yang punya pola pikir bahwa kita tidak boleh sampai tertinggal wkwk
Kalau AI makin banyak dibutuhkan dan REST API umum atau pekerjaan CRUD sederhana tergantikan sehingga sistem seperti itu tidak lagi dibuat, mungkin saja Java bisa ditinggalkan.
Selain itu, karena ada juga kasus ketika sebuah proyek tidak disusun dengan satu bahasa saja, saya rasa tujuan bahasa dan tujuan proyek juga tidak bisa dipetakan satu banding satu. Karena antarmuka pemrogramannya memakai Python dan bagian yang penting untuk performa biasanya menggunakan kode native. Meski di negara kita, kasus proyek yang disusun seperti itu memang tidak begitu umum.
Pengantarnya agak disayangkan. Kalau Anda lebih dulu memberi tahu tanggal penulisan naskah aslinya, mungkin sekitar separuh orang di sini bisa cukup memahaminya...
Saya juga baru sadar setelah melihat komentar orang lain.
Namun, saya keburu mengira ini ditulis baru-baru ini, dan saat membacanya saya sama sekali tidak merasa ada yang janggal. Setidaknya bagi saya, ini masih tulisan yang meyakinkan.
Terlepas dari itu, saya akan lebih memperhatikan tanggal sesekali wkwk
Diskusi mulai memanas.
Jika ada sanggahan, mohon tuliskan hanya isinya saja.
Komentar yang melanggar aturan penggunaan situs telah kami hapus.
Selain itu, akun yang berulang kali melakukan aktivitas yang tidak sesuai dengan aturan penggunaan telah kami blokir, jadi harap diperhatikan.
Mohon lakukan diskusi yang sehat.
Saya lebih percaya pada Google (v8) daripada Oracle (JVM).
Saat pertama kali melihat Java setelah memakai Python, saya benar-benar merasa Java sangat bertele-tele. Namun belakangan ini, kalau melihat kode-kode yang diperlukan untuk menambahkan type hint yang lengkap di Python, rasanya juga tidak begitu berbeda, haha. Kekurangan Java justru sepertinya ada pada konvensi penamaannya yang cenderung membuat nama method jadi sangat panjang.
1 Juni 2014
Saya juga lebih menyukai bahasa dengan tipe statis.
Ada bagian-bagian di mana bahasa bertipe dinamis terasa nyaman, tetapi dalam lingkungan produksi, cukup sering pemeliharaannya menjadi lebih sulit.
Selain itu, bahasa bertipe dinamis biasanya memiliki filosofi desain yang bertujuan pada "menulis kode yang sederhana", sehingga ada banyak hal yang dikelola secara implisit di tingkat bahasa; karena itu, sering kali ruang untuk melakukan optimasi juga jadi lebih sedikit.
Pada akhirnya, sepertinya yang terbaik adalah mempertimbangkan dan memilih sesuai lingkungan pengembangan, di antara kemudahan implementasi vs banyaknya peluang optimasi.
Tulisan dari 10 tahun lalu, wow
Betul juga wkwk
Tinggalkan saja Java
Sejak meninggalkan Java, hidup saya menjadi lebih tenang.
Ada alasan jelas mengapa peringkat popularitas Java terus turun dalam survei Stack Overflow. Di Korea, bahasa ini masih lumayan berguna saat mencari kerja karena kerangka kerja pemerintah itu dipatok ke Spring, namun di dunia Barat, selain untuk sistem legacy, tampaknya memilih Java untuk memulai proyek baru sudah hampir menghilang.
Memang benar ada alasan yang cukup kuat, tetapi sepertinya Anda memaknai alasan itu dengan cara yang berbeda.
Bahkan di situs TIOBE juga disebutkan bahwa peringkat bahasa pemrograman sebaiknya hanya dilihat sebagai referensi, dan tidak berhubungan langsung dengan pangsa pasar atau popularitas.
Kesimpulannya, Python memang nomor 1 dengan pangsa yang sangat dominan, tetapi apakah ada tool di pasar yang benar-benar muncul karenanya?
Yang paling sering kita temui justru C/C++, .NET, lalu Java (Kotlin), serta Swift.
Banyaknya pertanyaan dan pencarian tidak berarti itu adalah bahasa yang paling banyak digunakan.
Python adalah bahasa yang bisa dipakai siapa saja bahkan tanpa latar belakang pendidikan formal di bidang ini.
Saya tidak menyangkal bahwa bahasa ini sangat populer, tetapi di pasar pengembangan ceritanya berbeda.
Instagram menggunakan Python untuk backend.
Pakai saja Java.
Agak tidak jelas apa yang dimaksud dengan 'tool yang sudah ada di pasar'... bukankah tool seperti Django, FastAPI, PyTorch, NumPy, Pandas, dan sebagainya sudah lebih dari cukup...?
Lihat judulnya, jadi langsung masuk sambil berharap duluan ke kolom komentar wkwkwk. Akhir-akhir ini memang makin besar ketergantungan kita pada bahasa, ya.
Kalau dibatasi hanya pada masalah biaya, Java cenderung menimbulkan biaya cloud yang lebih besar karena penggunaan memorinya. Program dalam bahasa statis yang membutuhkan memori 100MB atau 200MB sering kali jika ditulis dengan Java justru membutuhkan 1GB atau 2GB, dan lightweight thread juga sering tidak bisa digunakan karena masalah kompatibilitas library.
Java juga bahasa statis, tetapi... masalah memori berkaitan dengan garbage collector atau JVM, dan yang Anda maksud dengan "program dalam bahasa statis yang membutuhkan memori 100MB, 200MB" tampaknya lebih mengacu pada bahasa native seperti C, C++.
Maaf atas halusinasi saya. T_T Java juga termasuk bahasa statis. Jika berbagai biaya di cloud dijumlahkan, perlu menganggarkan sekitar 30.000 won per 1 GB memori, jadi layanan yang dikembangkan dengan Java ternyata mengeluarkan biaya yang sangat mahal.
Jika exception ada, itu adalah bahasa bertipe dinamis. Terlepas dari itu, saya setuju dengan poin bahwa sistem tipe dan penggunaan memori adalah hal yang terpisah.
Makna pengecualian yang Anda sebutkan terasa terlalu luas bagi saya; bisakah Anda menjelaskannya sedikit lebih rinci?
Definisi bahasa bertipe statis/dinamis yang saya ketahui adalah: jika tipe variabel ditentukan pada waktu kompilasi dan harus diubah secara eksplisit, maka itu adalah bahasa bertipe statis; sedangkan bahasa bertipe dinamis adalah bahasa yang pada waktu runtime dapat menentukan tipe variabel sesuka hati dan juga dapat mengubahnya secara implisit.
Saat menghadapi situasi seperti melakukan downcasting saat runtime, Java harus melakukan pemeriksaan tipe pada saat runtime. Karena alasan ini, Java bersifat dynamic type, dan yang muncul saat itu adalah exception.
Pada dasarnya, jika kesenjangan ini tidak ada, tidak perlu menyebut exception sebagai exception.
throwhanya akan menjadi syntactic sugar untuk pola menyimpan objek yang akan dilempar ke variabel global lalu melakukangoto.Mirip dengan yang Anda katakan, bahasa yang melakukan pemeriksaan tipe saat runtime disebut bertipe dinamis. Namun, ini berlaku untuk semua nilai yang ditangani dalam program. Karena ini artikel tentang Java, ambil Java sebagai contoh: kode Java diperiksa tipenya pada waktu kompilasi, tetapi ini juga menyiratkan hal penting bahwa nilai yang akan dipetakan ke variabel tersebut harus sesuai dengan tipe variabelnya.
Kalau pengecekan tipe dilakukan saat runtime lalu disebut dynamic typing, apakah C juga termasuk bahasa bertipe dinamis? Setahu saya ada konsep
voidpointer; apa perbedaan keduanya?Kompiler C mana yang menyisipkan pemeriksaan tipe ke dalam kode dan memunculkan kesalahan eksplisit ketika tipenya salah? Jika ada implementasi seperti itu, tolong berikan satu contohnya saja.
Di C, tidak ada yang namanya pemeriksaan tipe dalam proses itu. Kalau data floating-point dibaca sebagai integer pun tidak ada masalah, kan? Itu bukan dynamic typing, melainkan memang berbahaya.
Ya, jika C melakukan pemeriksaan tipe saat runtime, maka itu adalah bahasa bertipe dinamis.
Karena tidak demikian, C adalah bahasa bertipe statis.
voidpointer pada dasarnya adalah raw pointer yang tidak diketahui tipe data aslinya. Kita tidak bisa mengetahui tipe apa yang ada pada alamat yang ditunjuk oleh pointer tersebut.Prinsip saya adalah bahasa yang sudah familier adalah yang terbaik.
Saya setuju. Sepertinya juga tidak mudah untuk keluar dari bahasa yang digunakan oleh tim atau organisasi.
Di antara berbagai alasan mengapa isi pekerjaan atau penugasan menjadi terpisah, ada kasus ketika bahasa pemrograman tambahan dimasukkan sehingga beban kerja berlebihan terjadi pada orang tertentu, dan saat ada perubahan personel pekerjaan jadi tidak bisa berjalan. Karena ini juga merupakan faktor yang memengaruhi perekrutan, menurut saya pemilihan tech stack harus dilakukan dengan hati-hati.
Namun sebaliknya, jika tetap bersikeras memakai bahasa hanya karena sudah terbiasa, padahal talent pool perekrutannya kecil atau setelah direkrut perlu pembelajaran tambahan, itu juga merupakan masalah.
Mengapa C# kurang dalam hal lintas platform? Belakangan ini sebagian besar aplikasi server .NET memang dideploy ke server Linux.
Python sejak awal bukan pembanding yang sepadan, dan sepertinya benar bahwa dibandingkan Kotlin dan C#, ia lebih bertele-tele dan memang kekurangan banyak fitur yang dibutuhkan.
Ah, ini artikel dari 10 tahun lalu ya. Sekarang situasinya sudah banyak berubah.
C# juga bahasa yang menggunakan virtual machine, jadi seharusnya dukungan lintas platform sudah muncul sejak lama, tetapi setahu saya itu baru benar-benar hadir belum lama ini, dan karena itu tampaknya untuk sementara persepsi bahwa ia sekadar bisa dijalankan di OS selain Windows akan tetap bertahan.
Selain itu, jika lingkungannya adalah Linux yang berfokus pada server dan berjalan 365 hari setahun, memang benar orang cenderung enggan memakai .NET yang belum cukup teruji dibanding bahasa lain yang kestabilannya sudah terbukti lebih dari 10 tahun pada sistem tersebut.
Dalam konteks itu, mungkin itulah maksudnya ketika dikatakan dukungan lintas platformnya masih kurang.
Tapi, sebenarnya apa kriteria yang digunakan untuk menilai bahwa stabilitasnya sudah terbukti? Saya kurang paham apakah yang dimaksud hanya lamanya masa penggunaan.
Karena ini tulisan 10 tahun lalu, artikel itu ditulis seperti itu saat .NET Core baru lahir belum lama. Aplikasi .NET saat ini sudah berjalan dengan stabil dan baik di Linux maupun Mac.
Saya sempat mencari-cari apakah ada bahasa dengan sintaks ringkas ala Python tapi memakai tipe statis, lalu tanpa sengaja menemukan GDScript, tetapi kekurangan terbesarnya adalah bahasa ini terlalu sulit digunakan secara umum.
Kalau ada kesempatan, saya sarankan mencoba membuat proyek kecil lewat Godot dan merasakan sendiri seperti apa GDScript.
Saya kena semacam fobia terhadap Java setelah mengenal Kotlin...
Saya merasa Java selalu punya jawaban yang sudah teruji setiap kali ada fitur yang dibutuhkan.
Gunakan saja Kotlin.
Saya juga sempat menanyakan pendapat beliau tentang Kotlin lewat email (kebetulan saya juga pengguna Kotlin), tetapi beliau membalas bahwa karena belum pernah mencobanya, sulit untuk berbicara berdasarkan pengalaman.
Saya menyukai bahasa dengan tipe statis. Karena itu mengurangi kebutuhan untuk terus berpikir soal tipe, sehingga waktu tersebut bisa dipakai untuk memikirkan hal lain.
Java benar-benar bahasa yang menempati posisi unik. Terakhir kali saya memakainya untuk pekerjaan mungkin sekitar 10 tahun lalu, tetapi bahkan sekarang pun jika saya harus mengembangkan suatu program untuk pekerjaan, bukan sekadar hobi, itu tetap masuk daftar bahasa yang pertama saya pertimbangkan.
Bahasa utama yang saya gunakan untuk pekerjaan saat ini adalah Ada dan C, tetapi alat-alat yang saya pakai secara pribadi atau di dalam tim kebanyakan saya buat dengan PowerShell. Namun saat menulisnya, begitu lewat sedikit waktu saja (bahkan cuma 5 menit...), saya mulai berpikir, "Tipe variabel ini tadi apa ya?" Karena itu belakangan ini saya selalu menuliskan tipenya secara eksplisit. (Di PowerShell, tipe bisa ditentukan saat mendefinisikan variabel, atau dihilangkan dan digunakan secara dinamis.)
Saya juga tidak terlalu suka C. Kesalahan terkait tipe yang akan ditangkap compiler di Ada sama sekali tidak bisa dideteksi oleh C. Saya cukup sering berpikir akan bagus kalau ada bahasa dengan sintaks mirip C tetapi mendukung sistem tipe seperti Ada.
Saya juga kurang cocok dengan Javascript dan Python. Kalau Perl atau Shell Script... saya bahkan tidak ingin memikirkannya.
Sepertinya ini tidak bisa dihindari karena filosofi dasar bahasa C, yaitu "percayalah pada programmer"..
Ah, dan saya suka Java, tapi saya tidak suka Maven.
Di masa-masa indah dulu, semuanya bisa dilakukan dengan Ant!
Menurut saya, setidaknya ini agak melegakan karena Java perlahan mulai mengejar bahasa-bahasa yang lebih modern, misalnya dengan penambahan record dan pattern matching.
Java memang bagus karena punya banyak referensi, tetapi kalau hanya itu alasannya, saya jadi bertanya-tanya kenapa tidak pakai C++ saja.
Saya berharap ada sedikit lebih banyak pembahasan tentang kelebihan Java.
Saya kebetulan lebih sering menggunakan C++, jadi saya hanya menjadikan C++ sebagai contoh. Saya juga menganggap Java sebagai bahasa yang bagus, tetapi yang ingin saya tunjukkan adalah bahwa postingan asli itu kurang membahas kelebihan Java.
Kalau menulis "Java itu sangat bagus", maka pembahasan utamanya seharusnya tentang kelebihan Java, tetapi menurut saya yang jadi fokus utama justru kritik terhadap bahasa lain.
Seperti yang Anda sampaikan, saya juga merasa JVM milik Java memang sangat bagus.
Saya sepenuhnya setuju. Penafian untuk tidak membatasi pembahasan hanya pada Java memang dimaksudkan seperti itu. Namun tampaknya maksudnya tidak tersampaikan dengan baik..
Karena pembandingnya Java dan C++, rasanya tingkat kepercayaannya langsung turun banget ya wkwk
Pakai saja Java.
Karena Java berjalan di atas JVM, kita bisa menyamakan setup lingkungan lokal dan mesin. Kalau ingin menyamakan lingkungan semua developer dan mesin dengan C++, kemungkinan akan memakan waktu cukup besar. Perawatannya juga sulit...
Penulis aslinya tampaknya hanya menggunakan Java karena pekerjaannya memang sulit menerapkan C++. Mungkin kalau harus memilih antara Python dan C++, bukankah dia akan memilih C++?
perbaikan: "Terakhir, alasan mengapa bukan bahasa bertipe statis lain" -> "Terakhir, alasan mengapa lebih memilih Java dibanding bahasa bertipe statis lain"
Umpannya gampang banget nyulut api.. sangat direkomendasikan
Ini bukan api yang saya inginkan T_T
Hangat.. ya..