Java vs. Google Go: Pertarungan epik untuk berbagi pikiran pengembang

Go vs. Java bukanlah pertarungan yang cocok antara yang sederajat. Salah satunya adalah kelas berat raksasa yang telah mendominasi industri selama bertahun-tahun. Yang lainnya adalah pendatang baru yang gesit dan ringan yang menunjukkan banyak masa muda dan janji tetapi hanya memiliki beberapa pukulan.

Java dan Go juga menangani ceruk yang berbeda. Satu ditujukan langsung ke aplikasi web sisi server, area di mana yang lain pernah menjadi pemain utama. Yang lain memiliki masa pakai yang lebih lama di rak dan sekarang menjadi pilihan populer untuk perangkat.

Tetapi tidak semua orang telah pindah dari Java di sisi server aplikasi web, wilayah Go menyerang, menggerogoti basis Java. Dan peralihan ini bukanlah lompatan yang terlalu besar, karena keduanya serupa dalam banyak aspek. Keduanya adalah penghormatan penuh kasih kepada C, jika tidak di bawahnya, setidaknya di permukaan di mana banyak pengembang menghabiskan hidup mereka bergulat dengan sintaks. Keduanya lugas dan penting dengan kemiripan struktural yang cukup sehingga tidak sulit untuk mengonversi kode di antara keduanya. (Proyek TardisGo, misalnya, adalah salah satu alat yang akan mengubah Go menjadi Java, C #, atau JavaScript.)

Anggap ini pertandingan kandang yang mempertandingkan dua sepupu dari sisi berbeda dari trek pemrograman yang bersaing untuk tumpukan aplikasi Anda berikutnya.

Sejarah panjang Java membawa efek jaringan yang membantu semua orang

Jawa telah ada sejak 1995, menarik lebih banyak mind share setiap tahun. Semuanya mulai dari prosesor kecil yang disematkan hingga chip server besar menjalankan Java dengan cepat dan efisien berkat mesin virtual just-in-time yang gesit. Android telah menjadi anugerah bagi Java, sebagai platform paling populer di dunia seluler sejauh ini. Itulah mengapa Java tetap menjadi yang teratas dalam peringkat seperti indeks Tiobe dan PyPL. Adopsi yang luas ini berarti ada banyak kode untuk digunakan kembali, dan sebagian besar bersifat open source untuk menyederhanakan hidup Anda. Anda akan berdiri di pundak raksasa ketika Anda mulai menyatukan miliaran baris kode Java yang tersedia secara gratis.

Sejarah singkat Go membuatnya langsung relevan

Tentu, keren untuk mengambil kode Java gratis dari web. Tapi tunggu, ini ditulis untuk Java 1.3, dan bos Anda ingin Anda menggunakan Java 1.8. Jangan khawatir, Anda mungkin bisa membuatnya berfungsi kembali dengan sedikit menulis ulang. Mari kita pindahkan tenggat waktu itu lagi ... dan lagi. Kode lama mungkin tampak seperti hadiah, tetapi tidak selalu slam dunk, dan terkadang lebih merepotkan daripada nilainya.

Sebaliknya, sejarah singkat Go berarti ditulis untuk standar web saat ini. Tidak ada sisa dari hari-hari ketika applet akan mendominasi dunia. Tidak ada ide yang sudah lama terlupakan seperti Java Beans atau J2EE sebagai gangguan yang menggoda. Ini benar-benar baru dan direkayasa untuk cara orang membangun web saat ini.

Java memungkinkan Anda mengetuk bahasa lain

JVM adalah dasar untuk lusinan bahasa menarik yang bergantung pada Java saat runtime. Masing-masing dapat ditautkan dengan mudah ke kode Anda, memungkinkan Anda menulis satu bagian di Kotlin, bagian lain di Scala, dan mungkin merekatkan semuanya dengan Clojure. Jika Anda ingin menggunakan bahasa seperti Python, JavaScript, atau Ruby, ketiganya dapat dijalankan langsung di tanah Java menggunakan emulator yang sering kali menjadi pilihan pertama. Java memberi Anda kebebasan untuk mengizinkan setiap subtim dan subproyek memilih bahasa yang tepat untuk pekerjaan tersebut sambil tetap berjalan di JVM yang sama. Anda tidak perlu menggunakannya, tetapi peluang selalu ada.

Go mempromosikan harmoni

Ya, Anda dapat menyatukan aplikasi superclever yang menggabungkan yang terbaik dari yang baru dan yang trendi, memilih bahasa yang benar-benar terbaik untuk setiap bagian dari karya besar Anda yang luar biasa di JVM. Anda bahkan dapat menggabungkan gaya lama seperti Rexx dan Common Lisp untuk menghormati tempat mereka dalam sejarah komputasi era 70-an. Semoga berhasil menemukan seseorang dengan selera dan bakat yang sama yang akan memelihara Menara Babel ini. Selain mencampurkan beberapa perpustakaan yang dibuat dengan baik, tidak selalu merupakan rencana yang baik untuk meniru Rube Goldberg saat mendesain kode yang baik. Terkadang itu bijaksana dan perlu, tetapi itu tidak berarti itu adalah rencana yang bagus. Harmoni dan konsistensi membuat hidup lebih mudah bagi semua. Dunia Go memberikan itu.

JVM Java ramping dan kuat

File kelas Java seringkali diukur dalam ratusan byte. File JAR yang menghubungkan keduanya biasanya hanya berukuran beberapa megabyte. Kode Java sendiri kecil karena mesin virtual memiliki begitu banyak daya untuk manajemen dan keamanan memori. Jika Anda berencana untuk memindahkan banyak kode, masuk akal untuk membiarkan fungsionalitas dalam alat runtime umum. Ada keuntungan lain dari sentralisasi. Jika masalah keamanan muncul di tingkat terendah Java, tidak perlu mengkompilasi ulang dan menautkan ulang semua kode Anda. Banyak masalah diselesaikan dengan mengupgrade JVM saja.

Go membuat paket lengkap

JVM sangat bagus sampai Anda menemukan bahwa Anda menginstal versi yang salah. Jika Anda ingin menjalankan JAR yang dikemas dengan Java 1.8, tetapi hanya memiliki JVM versi 1.6, Anda tidak akan ke mana-mana sampai Anda menemukannya. Kompilator Go menghasilkan binari yang siap dijalankan. Ya, mereka agak besar, tetapi itu karena Go menambahkan semua kode ekstra ke dalam biner untuk Anda. Semuanya ada dalam satu paket mudah.

Java membuat utas menjadi sederhana

Membuat berbagai bagian program berjalan secara mandiri bukanlah tugas yang mudah. Java memenangkan penggemar awal karena model utasnya cukup sederhana untuk dipahami sementara cukup kuat untuk berguna. JVM melakukan pekerjaan yang baik memetakan utas ke inti yang berbeda pada mesin. Ini tidak mudah dilakukan, tapi itu karena kerumitan masalahnya, bukan Java. Pengguna Go mungkin menyukai goroutine dan saluran mereka, tetapi mereka menambahkan lapisan kerumitan lain yang rumit ke dalam kekacauan yang sudah sangat besar. Anda akan menemukan diri Anda bertanya apakah itu utas hijau atau utas OS. Kemudian Anda akan bertanya-tanya tentang kerumitan saluran sinkronisasi. Java lebih mudah.

Go meringankan beban utas, dengan cerdas

Utas Java dan sinkronisasi primitif dapat melakukan pekerjaan itu, tetapi dengan biaya yang mahal. Membuat dan menghancurkan utas sangat melelahkan dan boros memori sehingga pemrogram Java selalu mendaur ulangnya dengan kumpulan utas. Java telah kehilangan daya tarik di server karena setiap klik di situs web membutuhkan utasnya sendiri. Go memiliki bobot yang lebih ringan dan objek yang lebih fleksibel yang disebut goroutine yang dihubungkan dengan antrean sinkronisasi cerdas yang disebut saluran. Sementara sebagian besar server tampaknya mencapai 1.000 atau mungkin 10.000 utas Java, orang-orang secara teratur melaporkan menjalankan ratusan ribu goroutine pada perangkat keras yang sama.

Model Go lebih canggih dan modern karena lebih muda. Bidang ini telah belajar banyak tentang menyampaikan algoritme multiprosesor yang canggih, dan Anda mungkin juga memanfaatkannya.

Alat Java sudah dicoba dan benar

Kematangan Java berarti Anda memiliki banyak opsi bagus untuk alat: Eclipse, IntelliJ, dan banyak lagi. Ada alat build canggih seperti Ant dan Maven, dan repositori utama dioptimalkan untuk menangani kode Java. Ada juga analisis kode meta untuk segala hal mulai dari menegakkan aturan kode hingga mencari kondisi balapan. Mereka mungkin tidak berfungsi dengan versi kode Anda, tetapi sering kali demikian. Inilah sebabnya mengapa Java adalah raksasa.

Alat Go modern dan baru

Go dibuat untuk dunia multithread modern, dan alat kode dioptimalkan untuk tantangan saat ini. Ada detektor kondisi balapan yang dibangun ke dalam debugger dan runtime, jadi jauh lebih mudah untuk menangani masalah yang tidak menyenangkan. Kode sumber dapat diaudit oleh golint dan penganalisis statis disebut "go vet" yang memiliki sejumlah heuristik untuk menangkap kode Go yang buruk atau bahkan ditulis dengan buruk. Semua ini dan lebih banyak lagi dioptimalkan untuk menjaga kode Anda berjalan dengan cepat di mesin multicore.

Java memiliki konstruksi yang Anda inginkan

Selama bertahun-tahun, komunitas Java menginginkan banyak fitur; terkadang, mereka telah diberikan. Penutupan, obat generik, lambda, dan lainnya telah ditambahkan. Jika ada ide baru dalam bahasa pemrograman, ada kemungkinan besar seseorang telah memasukkannya ke dunia Java. Ini mungkin tidak ideal, tetapi ada opsi. Anda dapat menulis kode brilian yang dibayangkan otak Anda berkat evolusi Java yang sedang berlangsung.

Pergi menghindari kebingungan konstruksi

Kebebasan untuk menggunakan lusinan struktur pengkodean yang cerdas terdengar bagus sampai semua orang di tim mulai melakukannya. Kemudian membaca kode orang lain menjadi lebih sulit karena mereka menggunakan fitur pintar A sementara otak Anda terbiasa dengan fitur pintar B. Kebingungan kombinatorial bertambah dengan setiap pengembang yang memasukkan konstruksi favoritnya ke dalam campuran.

Go, di sisi lain, dirancang untuk menjadi sederhana. Itu dibuat secara eksplisit sehingga programmer yang baik dapat mempelajari Go dalam beberapa jam. Tidak ada lusinan ide cerdas yang memenuhi ratusan halaman dokumentasi. Itu mungkin membatasi saat menulis kode, tetapi akan membuat santai saat membaca kode dari orang lain dalam tim. Setiap orang menggunakan idiom yang sama karena setiap orang menggunakan fitur inti yang sama. Ini bukan hanya pengalaman membangun tim, seperti Outward Bound. Ini tentang efisiensi.

Jawa sudah dewasa

Usia menghadirkan kebijaksanaan, kedewasaan, dan stabilitas — semua alasan untuk memilih basis kode yang luas dan direkayasa dengan baik yang lebih dari dua dekade. Anak-anak saat ini terus belajar Java di awal perjalanan mereka dengan ilmu komputer, dan platform paling dominan, Android, dibangun di atasnya. Kecuali ada alasan bagus untuk berubah, Anda harus tetap berpegang pada yang terbaik.

Go adalah jalan yang bersih

Terkadang yang terbaik adalah meninggalkan masa lalu. Bagaimanapun, kemajuan sering kali berarti memulai dari awal. Go menawarkan Anda kesempatan untuk bekerja dengan alat yang bersih, tajam, dan modern yang dioptimalkan untuk apa yang kami lakukan hari ini. Ini memungkinkan Anda menikmati kesederhanaan dan kebebasan meninggalkan masa lalu.

Dan hanya karena Google memulai Go untuk memberikan kesederhanaan pada pengkodean untuk server farm mereka yang tak ada habisnya, bukan berarti Google tidak dapat mengatasinya. Beberapa sudah menggunakannya untuk menjalankan drone, robot, dan perangkat lain. Bisakah smartphone tertinggal jauh?

Artikel terkait

  • Ketuk kekuatan bahasa Go Google
  • IDE dan editor bahasa Go terbaik
  • Review: Empat besar Java IDE dibandingkan
  • Angular vs. React: Pertarungan epik untuk berbagi pikiran pengembang
  • Java vs. Node.js: Pertarungan epik untuk berbagi pikiran pengembang
  • PHP vs. Node.js: Pertarungan epik untuk berbagi pikiran pengembang
  • Python vs. R: Pertarungan untuk berbagi pikiran ilmuwan data
  • 21 tren pemrograman populer — dan 21 menjadi dingin
  • 9 kebohongan programmer pada diri mereka sendiri
  • Peretasan karir: Anjuran dan larangan profesional untuk pengembang