GoSuda

5 Karakteristik Desain Bahasa Go dari Perspektif Rekayasa Sistem dan Backend

By Rabbit Princess views ...

Pendahuluan

Bahasa pemrograman adalah alat untuk membangun produk. Menggunakan suatu bahasa saja tidak serta-merta menentukan kemampuan seorang pengembang. Namun, bahasa apa yang dipilih dan bagaimana bahasa tersebut digunakan dapat memberikan pengaruh langsung terhadap pola pikir dan arah pertumbuhan pengembang. Secara khusus, membandingkan bahasa yang sedang digunakan dengan bahasa-bahasa lain sangat membantu dalam memperluas wawasan teknis dan menumbuhkan kepekaan terhadap hakikat sesuatu. Dalam tulisan ini, saya ingin membahas mengapa saya memilih Go dan bagaimana bahasa tersebut membantu pertumbuhan pengembang, dengan membaginya ke dalam lima aspek.

1. Go adalah bahasa yang menyeimbangkan performa dan produktivitas.

Terdapat banyak bahasa pemrograman di dunia, dan setiap bahasa memiliki kelebihan dan kekurangan sesuai karakteristiknya.

  • C memiliki performa yang sangat baik dan memungkinkan kontrol tingkat rendah, tetapi pengelolaan memori harus dilakukan langsung oleh pengembang dan kurangnya fitur tingkat tinggi membuat produktivitasnya rendah serta pemeliharaannya sulit.
  • C++ dan Rust mendukung berbagai fitur canggih seperti pemrograman berorientasi objek, template, dan metaprogramming, tetapi sintaksisnya kompleks, kurva belajarnya curam, dan kecepatan kompilasinya yang lambat membuatnya kurang cocok untuk penerapan yang berulang kali.
  • Java dan C# menyediakan independensi platform dan stabilitas sehingga banyak digunakan pada layanan skala besar, tetapi karena dijalankan di mesin virtual yang berat, proses penerapan dan lingkungan eksekusinya menjadi rumit serta kebutuhan sumber dayanya tinggi.
  • Python dan JavaScript cocok untuk pengembangan cepat berkat sintaksisnya yang ringkas dan ekosistemnya yang kaya, tetapi performa eksekusinya rendah dan keandalan ekosistemnya kurang sehingga keterbatasan strukturalnya tampak pada sistem skala besar.

Sebaliknya, Golang adalah bahasa yang memiliki keseimbangan luar biasa antara performa dan produktivitas. Go merupakan bahasa terkompilasi seperti C sehingga menjamin performa eksekusi yang tinggi, sekaligus menyediakan fleksibilitas penerapan setara bahasa interpreter berkat kecepatan kompilasinya yang tinggi. Dengan kata lain, Go adalah bahasa yang seimbang dan dapat diandalkan di sebagian besar lingkungan tanpa kelemahan yang mencolok.

2. Go mencegah cargo cult programming.

Selama Perang Dunia II, Sekutu membangun pangkalan udara di sebuah pulau Pasifik untuk mendukung peperangan. Pasokan logistik dan bantuan peralatan militer yang sangat besar secara signifikan mengubah kehidupan para tentara dan penduduk asli. Warga pulau untuk pertama kalinya melihat pesawat terbang membawa pakaian buatan pabrik, makanan kalengan, dan barang-barang lainnya. Ketika perang berakhir, pangkalan itu ditinggalkan dan kiriman barang tidak lagi datang. Oleh karena itu, penduduk pulau meniru para tentara dengan mengenakan pakaian seperti pengatur lalu lintas udara, tentara, dan pelaut, membuat area menyerupai landasan pacu, serta menggunakan tongkat untuk memberikan sinyal pendaratan kepada pesawat. Mereka terus berbaris agar kargo jatuh dengan parasut dari pesawat. Namun, pesawat yang mereka nantikan tidak pernah datang.

Cargo cult programming adalah kebiasaan pengembangan yang hanya meniru bentuk luar kode atau teknologi tanpa memahami prinsip di baliknya. Dalam dunia pengembangan modern, khususnya di bidang pengembangan web, kebiasaan mengikuti tanpa memahami makna sering terjadi. Berkat framework seperti React, Next, Spring, dan Django, pengembangan dimungkinkan tanpa mengetahui struktur internalnya, tetapi banyak pengembang yang tidak mampu menangani bahkan kesalahan kecil dengan baik. Ditambah lagi dengan munculnya alat pembangkit kode berbasis AI, semakin meluas cara pengembangan yang hanya menyalin dan menempel hasil tanpa menulis kode sendiri atau memahami prinsipnya.

Go secara mendasar menghindari masalah ini pada tingkat filosofi bahasa. Go dirancang berpusat pada pustaka standar, bukan pada framework. Pengembang dapat membangun server web yang setara dengan layanan tingkat produksi hanya dengan pustaka dasar seperti net/http dan database/sql, dan melalui proses ini secara alami mengembangkan intuisi serta pemahaman terhadap struktur tingkat rendah seperti jaringan, basis data, dan I/O. Struktur yang memungkinkan pembelajaran fundamental secara kokoh tanpa bergantung pada framework ini menjadi landasan bagi pengembang untuk terus bertumbuh tanpa kehilangan hakikat teknologi.

3. Go menyediakan model konkurensi yang kuat.

CPU modern berkembang bukan dengan terus meningkatkan kecepatan satu inti, melainkan dengan memanfaatkan banyak inti secara paralel untuk meningkatkan performa. Seiring dengan itu, konkurensi, yaitu kemampuan sebuah program untuk memproses beberapa tugas secara bersamaan, menjadi hal yang esensial, dan pentingnya bahasa yang mampu merancang dan mengimplementasikannya secara efisien semakin besar. Go adalah bahasa yang dioptimalkan untuk lingkungan seperti ini. Goroutine adalah thread ringan yang disediakan oleh Go, dapat dibuat hanya dengan stack berukuran beberapa KB, dan hampir tidak menghabiskan sumber daya sistem meskipun ribuan goroutine dijalankan secara bersamaan. Runtime Go mendistribusikan banyak goroutine ke thread OS secara efisien melalui scheduler M:N buatannya sendiri, dan proses ini dioptimalkan secara otomatis tanpa campur tangan langsung dari pengembang. Dengan demikian, pengembang dapat merancang logika konkurensi yang aman dan konsisten tanpa logika sinkronisasi yang rumit atau penjadwalan kustom.

Selain itu, Go secara aktif mendukung desain konkurensi modern menggunakan alat sinkronisasi seperti mutex dan waitGroup, serta channel dan context. Struktur ini memungkinkan pengembang memperoleh pemahaman praktis tentang konkurensi dan paralelisme secara alami tanpa terjebak dalam teori yang kompleks, dan dapat mencapai tingkat abstraksi serta kemampuan desain yang tinggi yang berguna dalam praktik dari nol.

4. Go adalah bahasa yang dibentuk oleh para pengembang hebat yang memegang kendali atas arahnya.

Go lahir di bawah pimpinan para pengembang legendaris dari Google, yaitu Robert Griesemer, Rob Pike, dan Ken Thompson. Secara khusus, mereka adalah pencipta Unix dan C serta tokoh besar di bidang compiler dan perangkat lunak sistem, sehingga keberadaan mereka sendiri membuktikan kredibilitas teknis Go. Selain itu, pengalaman praktis dari banyak insinyur Google dan pengetahuan mereka dalam mengoperasikan layanan skala besar tercermin di dalamnya, sehingga Go sejak awal berorientasi pada penyelesaian masalah nyata dan telah berkembang dengan filosofi serta arah yang konsisten.

Bahasa lain sering menimbulkan kebingungan bagi komunitas dan penggunanya karena perubahan yang tidak kompatibel, perubahan desain, lisensi yang tidak stabil, dan ekosistem yang tidak terstandarisasi. Sebagai contoh, Python mengalami perpecahan ekosistem selama bertahun-tahun akibat ketidakkompatibilan antara versi 2 dan 3, dan Java semakin enggan diadopsi oleh perusahaan setelah kebijakan lisensinya menjadi tidak stabil sejak diakuisisi Oracle. Selain itu, Node.js hingga kini belum menyediakan sistem modul yang konsisten karena CJS dan ESM masih hidup berdampingan.

Sebaliknya, Go adalah bahasa yang menjadikan konsistensi dan stabilitas sebagai nilai utama. Tim Go menjaga kompatibilitas mundur secara ketat dan, ketika memperkenalkan fitur baru, tetap berpegang pada pendekatan integrasi bertahap agar tidak bertentangan dengan kode yang sudah ada. Dari sisi sintaksis, Go menghindari kata kunci yang tidak perlu dan membatasi abstraksi berlebihan sehingga mencegah bahasa menjadi rumit tanpa alasan. Selain itu, toolchain resmi yang konsisten seperti go fmt, go mod, go build, dan go test mendorong seluruh proyek Go memiliki lingkungan pengembangan dan struktur yang sama, serta pustaka standar yang kuat dan praktis mampu mendukung sebagian besar kebutuhan pengembangan nyata, seperti server web, pemrosesan berkas, dan integrasi basis data, tanpa memerlukan framework tambahan.

5. Gopher itu menggemaskan.

Gopher1

Gopher2

Gopher3