Mengapa Bahasa Go?
Pendahuluan
Bahasa pemrograman adalah alat untuk membuat produk. Kualitas seorang pengembang tidak hanya ditentukan oleh bahasa yang digunakannya. Namun, pilihan bahasa dan cara pengelolaannya dapat secara langsung memengaruhi cara berpikir dan arah pertumbuhan seorang pengembang. Secara khusus, membandingkan bahasa yang sedang digunakan dengan bahasa lain sangat membantu dalam memperluas cakrawala teknis dan mengembangkan pemahaman tentang esensi. Dalam artikel ini, saya akan membahas mengapa saya memilih Go, dan bagaimana hal itu membantu pertumbuhan pengembang dari lima aspek yang berbeda.
1. Go adalah bahasa yang menyeimbangkan kinerja dan produktivitas.
Ada banyak bahasa pemrograman di dunia, dan setiap bahasa memiliki kelebihan dan kekurangan tergantung pada karakteristiknya.
- C memungkinkan kinerja yang sangat baik dan kontrol tingkat rendah, tetapi pengembang harus mengelola memori secara langsung, dan kurangnya fitur tingkat tinggi menyebabkan produktivitas yang rendah dan kesulitan dalam pemeliharaan.
- C++ dan Rust mendukung berbagai fitur canggih seperti Object-Oriented, Template, dan Metaprogramming, tetapi sintaksnya rumit, kurva pembelajarannya curam, dan kecepatan kompilasinya lambat sehingga tidak cocok untuk deployment berulang.
- Java dan C# banyak digunakan untuk layanan berskala besar karena menawarkan platform independence dan stabilitas, tetapi berjalan pada virtual machine yang berat, membuat lingkungan deployment dan eksekusi menjadi kompleks, serta membutuhkan sumber daya yang tinggi.
- Python dan Javascript cocok untuk pengembangan cepat berkat sintaks yang ringkas dan ekosistem yang kaya, tetapi kinerja eksekusinya rendah dan keandalan ekosistemnya rendah sehingga keterbatasan strukturalnya terungkap dalam sistem berskala besar.
Sebaliknya, Golang adalah bahasa yang memiliki keseimbangan luar biasa antara kinerja dan produktivitas. Karena Go adalah bahasa yang dikompilasi seperti C, ia menjamin kinerja eksekusi yang tinggi, sekaligus menyediakan fleksibilitas deployment setingkat interpreter dengan kecepatan kompilasi yang cepat. Dengan kata lain, Go adalah bahasa yang seimbang yang dapat digunakan secara stabil di sebagian besar lingkungan tanpa kekurangan yang jelas.
2. Go mencegah pemrograman Cargo Cult.
Selama Perang Dunia II, pasukan Sekutu membangun pangkalan udara di pulau-pulau Pasifik untuk membantu perang. Banyaknya pasokan dan dukungan peralatan militer sangat mengubah kehidupan para prajurit dan penduduk asli. Penduduk melihat untuk pertama kalinya pesawat-pesawat yang membawa pakaian, makanan kaleng, dan barang-barang lainnya yang diproduksi. Setelah perang berakhir, pangkalan itu ditinggalkan dan kargo tidak lagi tiba. Jadi, penduduk pulau meniru para prajurit, mengenakan pakaian seperti pengontrol lalu lintas udara, prajurit, dan pelaut, membangun sesuatu yang menyerupai landasan pacu, dan menggunakan tongkat untuk mengirim sinyal pendaratan ke pesawat. Mereka terus berbaris agar kargo dijatuhkan dengan parasut dari pesawat. Namun, pesawat yang mereka tunggu tidak datang.
Pemrograman Cargo Cult mengacu pada kebiasaan pengembangan yang meniru penampilan luar tanpa memahami prinsip-prinsip kode atau teknologi. Di kalangan pengembang modern, terutama di bidang pengembangan web, kebiasaan meniru tanpa memahami makna semacam ini sering terjadi. Berkat framework seperti React, Next, Spring, dan Django, pengembangan menjadi mungkin tanpa mengetahui struktur internal, tetapi seringkali sulit untuk menangani bahkan kesalahan kecil. Dengan munculnya alat pembuatan kode AI baru-baru ini, cara pengembangan yang lebih mengutamakan menyalin dan menempel hasil daripada menulis kode secara langsung atau memahami prinsip-prinsipnya menjadi semakin meluas.
Go secara fundamental menghindari masalah ini pada tingkat filosofi bahasa. Go adalah bahasa yang dirancang berpusat pada standard library, bukan berpusat pada framework. Pengembang dapat membangun server web tingkat layanan aktual hanya dengan library dasar seperti net/http dan database/sql, dan melalui ini, mereka secara alami akan mengembangkan intuisi dan pemahaman tentang struktur tingkat rendah seperti jaringan, database, dan I/O. Struktur yang memungkinkan untuk menguasai dasar-dasar dengan kuat tanpa bergantung pada framework ini menjadi dasar bagi pengembang untuk terus tumbuh tanpa kehilangan esensi teknologi.
3. Go menyediakan model konkurensi yang kuat.
CPU modern berkembang ke arah peningkatan kinerja dengan memanfaatkan beberapa core secara paralel, daripada meningkatkan kecepatan single core. Oleh karena itu, konkurensi, di mana satu program dapat memproses beberapa tugas secara bersamaan, telah menjadi suatu keharusan, dan pentingnya bahasa yang dapat merancang dan mengimplementasikannya secara efisien semakin meningkat. Go adalah bahasa yang dioptimalkan untuk lingkungan ini. Goroutine adalah lightweight thread yang disediakan oleh Go, dapat dibuat hanya dengan stack berukuran beberapa KB, dan bahkan menjalankan ribuan goroutine secara bersamaan hampir tidak mengonsumsi sumber daya sistem. Go runtime secara efisien mendistribusikan banyak goroutine ke OS thread melalui M:N scheduler-nya sendiri, dan proses ini secara otomatis dioptimalkan tanpa intervensi langsung dari pengembang. Melalui ini, pengembang dapat merancang logika konkurensi dengan cara yang aman dan konsisten, bahkan tanpa logika sinkronisasi yang kompleks atau penjadwalan khusus.
Selain itu, Go secara aktif mendukung desain konkurensi modern menggunakan alat sinkronisasi seperti mutex dan waitGroup, serta channel dan context. Berkat struktur ini, pengembang dapat secara alami menguasai pemahaman praktis tentang konkurensi dan paralelisme tanpa terikat pada teori yang kompleks, dan dapat mencapai tingkat abstraksi dan kemampuan desain yang tinggi yang dapat digunakan dari nol.
4. Go adalah bahasa yang dibuat oleh pengembang-pengembang hebat dengan fokus utama.
Go adalah bahasa yang lahir dari inisiatif para pengembang legendaris seperti Google, Robert Griesemer, Rob Pike, dan Ken Thompson. Secara khusus, mereka adalah pencipta Unix dan bahasa C, serta master di bidang compiler dan perangkat lunak sistem, yang dengan sendirinya membuktikan keandalan teknis Go. Dengan pengalaman praktis dan pengetahuan operasional layanan berskala besar dari banyak insinyur Google yang tercermin di dalamnya, Go sejak awal bertujuan untuk memecahkan masalah-masalah nyata, dan telah berkembang dengan filosofi dan arah yang konsisten.
Bahasa lain seringkali menimbulkan kebingungan bagi komunitas dan pengguna karena ketidakcocokan, perubahan desain, lisensi yang tidak stabil, dan ekosistem yang tidak terstandardisasi. Misalnya, Python terpecah menjadi dua ekosistem selama bertahun-tahun karena ketidakcocokan antara versi 2 dan 3, dan setelah akuisisi oleh Oracle, kebijakan lisensi Java menjadi tidak stabil, sehingga semakin banyak perusahaan yang enggan mengadopsinya. Selain itu, Node.js masih belum dapat menyediakan sistem modul yang konsisten karena co-existence antara CJS dan ESM.
Sebaliknya, Go adalah bahasa yang mengutamakan konsistensi dan stabilitas. Tim Go secara ketat mempertahankan kompatibilitas mundur, dan ketika memperkenalkan fitur baru, mereka menganut metode integrasi bertahap untuk menghindari konflik dengan kode yang sudah ada. Sintaksnya juga menghindari kata kunci yang tidak perlu dan membatasi abstraksi yang berlebihan, sehingga mencegah bahasa itu sendiri menjadi rumit secara tidak perlu. Selain itu, toolchain resmi yang konsisten seperti go fmt, go mod, go build, dan go test mendorong semua proyek Go untuk memiliki lingkungan dan struktur pengembangan yang sama, dan standard library yang kuat dan praktis dengan setia mendukung sebagian besar fungsi yang diperlukan untuk pengembangan praktis seperti server web, pemrosesan file, dan integrasi database tanpa perlu framework terpisah.