I Used to Hate Go, until I Didn't
Opening keynote DHH di RailsWorld 2026 banyak menuai reaksi. Ada yang pro, ada yang kontra. Di Reddit bahkan DHH dibilang gila. Ini karena di opening keynote-nya, DHH bilang bahwa Hey, SaaS email mereka, backend-nya di-rewrite ke dalam Rust, full pake AI, alias vibe coding. Dia bilang begitu, di konferensi Rails, di mana orang yang hadir berekspektasi akan mendapatkan arah Rails ke depannya di era agentic AI sekarang ini.
Jujur saja, saya sedih dan galau. Saya suka Ruby karena sintaksnya yang ekspresif. Menulis kode Ruby adalah sebuah kepuasan sendiri. Rasanya bukan seperti sedang menulis sebuah kode, tapi sedang bercerita.
Tapi ada satu hal yang saya kurang suka dari Ruby: memory usage-nya lumayan. Satu proses bisa sekitar 30 sampai 50 MB. Kalau banyak dependensi, bisa sampai 90 sampai 100 MB. Kalau kapasitas servernya cukup besar, ini bukan apa-apa. Tapi, beberapa waktu lalu saya sudah downgrade spec VPS jadi 1 vCPU dan 1 GB RAM. Jadi sebisa mungkin memory usage-nya harus kecil.
Satu-satunya cara untuk mendapatkan memory usage yang lebih kecil adalah dengan menghasilkan native binary. Kode yang hasilnya berupa bahasa mesin, dan sedekat mungkin dengan mesin. Untuk web application, ada dua yang cukup populer, yaitu Rust dan Golang.
I've tried Rust, but I'ts just doesn't click (yet?)
Saya pernah mencoba untuk belajar Rust dari tutorial resminya. Tapi baru beberapa chapter saja, saya sudah berhenti. Banyak konsep baru yang harus saya ingat. Shadowing, borrowing, mutation, dan sebagainya. Jujur saja, belajar hal baru di saat gelas kita sudah terisi, rasanya cukup sulit. Pertimbangannya bukan lagi menambah skill set, tapi waktu yang terbuang dengan outcome yang kelak akan diperoleh. Pemikiran "apakah ini layak untuk dipelajari" bagi saya lebih penting dari sebatas "belajar ya belajar aja".
Rust secara performa memang bagus. Sangat bagus dan populer karena performanya yang nggak main-main. Tapi, konsep yang baru dan sintaks yang rumit menahan saya untuk mendalaminya. Tidak untuk saat ini. Learning path-nya terlalu dalam.
Tidak seperti DHH di keynote-nya yang bilang "I love Rust, if I don't have to look into it". Saya masih peduli dengan kode yang di-generate oleh AI. Saya harus mengerti apa yang kode tersebut lakukan, dan untuk itu, kode-nya harus mudah dipahami tanpa jargon asing.
Untuk hal-hal yang serius, menulis kode yang tidak saya mengerti terasa seperti sebuah dosa.
Go is simple, and I love simplicity. But...
Hubungan saya dengan Go itu putus-nyambung. Saya mencoba belajar Go saat masih kuliah. Waktu itu Go belum sematang sekarang. Perlu setup GOPATH, GOBIN, apalah itu, hanya untuk menjalankan sebuah aplikasi Golang. Semua masih serba manual.
Saya tidak lanjut mendalami Golang karena jujur aja, saya sintaksnya yang kurang nyaman di mata saya. Yang paling saya tidak suka adalah error handlingnya: if err != nil. Bagi programmer OOP, konsep di Golang saat itu terasa tidak masuk akal. Public atau private-nya sebuah method ditentukan dari kapital atau tidaknya huruf pertama dari method tersebut. Konsep interface juga sangat membingungkan. Like, whaaat? Otak saya yang sudah OOP banget kurang nyaman mencerna hal-hal baru ini.
Lalu saya mencoba lagi, berhenti lagi. Mencoba lagi, dan berhenti lagi. Saya berhenti karena masih belum dapat klik-nya.
Tapi, kalau dipikir-pikir lagi, belajar paradigma baru itu memang harus menyediakan satu gelas kosong khusus untuk itu. Kesalahan saya adalah memaksakan paradigma OOP ke bahasa pemrograman yang memang bukan OOP. Memaksakan struktur project ke struktur yang saya lebih familiar, padahal komunitas di bahasa pemrograman tersebut punya aturannya sendiri yang bertolak belakang dengan aturan yang selalu saya taati selama ini.
Jadi, saya mulai berdamai dengan itu. Saya menerima bahwa Golang punya paradigmanya sendiri. Golang punya struktur project dan aturannya sendiri. Saya hanya perlu menyediakan gelas kosong dan mengisinya dengan air yang berbeda dengan gelas-gelas sebelumnya. Well, tidak sepenuhnya pola baru sih. Beberapa pola yang sifatnya umum, saya terapkan juga di Golang.
Saya menerima semuanya, dan justru semua malah terasa lebih mudah. Semua hal yang saya kurang suka di Golang kini bisa saya terima. if err != nil tidak lagi saya lihat sebagai code smell, tapi sebagai sebuah kesederhanaan.
Saya suka hal-hal simpel. Ini sangat dipengaruhi dari pengalaman saya 6 tahun menulis kode Ruby. Sintaks Ruby sangat ekspresif dan sederhana. Selama 6 tahun saya selalu berusaha membuat kode yang sederhana, mudah dipahami, dan lebih humanis, dalam arti mudah dibaca oleh programmer lain yang kelak bertanggung jawab mengerjakan fitur yang sedang saya pegang.
Jadi, kalau harus memilih antara Rust dan Golang untuk native backend, saya akan pilih Go. Setidaknya untuk saat ini.
AI helped me doing the type acrobats
Salah satu hal yang saya masih belum terbiasa saat menulis kode Golang adalah error handling dan assignment variable. Error handling di Golang itu sangat to the point. Tidak ada abstraksi. Tidak ada raise dan rescue exception. Error dianggap sebagai sebuah tipe data khusus. Dan ini kadang yang saya miss. Entah itu miss karena tidak menyimpan variable error saat sebuat method mengembalikan result dan error, atau miss sepele seperti tidak menggunakan :=.
Menulis kode Golang secara manual juga terasa lebih melelahkan ketimbang menulis kode Ruby karena harus memikirkan struktur data dan bagaimana flow data tersebut dari awal hingga akhir. Butuh jam terbang lebih supaya saya bisa terbiasa dengan ini semua.
Atau... saya suruh saja AI melakukannya.
Ini seperti hubungan DHH dengan Rust, tapi lebih baik. Di mata saya, kode di Golang lebih sederhana ketimbang di Rust. Penilaian ini mungkin agak bias, karena saya baru sekali belajar Rust, tapi biarlah, karena memang yang saya rasakan saat menulis ini ya begitu.
DHH bilang Rust itu bahasa pemrograman yang bagus kalau kita tidak perlu lihat kodenya. Saya bilang Go itu bahasa pemrograman yang bagus kalau saat saya perlu baca kodenya, kodenya terlihat sederhana dan mudah dipahami. Sama seperti Ruby, tapi dengan performa yang jauh lebih baik.
Where does this leave Ruby?
Apakah ini berarti saya akan meninggalkan Ruby? Well, tidak juga. Saya masih akan tetap pakai Ruby untuk beberapa project yang akan datang. Hanya saja, saya tidak akan menggunakan Rails. Saya sekarang sedang membuat sebuah framework sendiri di atas Roda. Fokusnya saat ini ke memory usage yang kecil tapi tetap performant. Dan semua ini jadi lebih mudah dan murah karena ada AI.
Struktur project-nya saya buat cukup mirip dengan Golang, terutama di folder app. Ketimbang berisi views, models, jobs, dan sebagainya, saya lebih suka pendekatan module. Misal: module registrasi user, maka strukturnya kurang lebih sebagai berikut:
app
└─ registration
└─ controller.rb
└─ controller_test.rb
└─ contract.rb
└─ contract_test.rb
└─ repository.rb
└─ repository_test.rb
Setiap module dibungkus di dalam Module. Contoh: isi app/registeration/controller.rb strukturnya jadi sebagai berikut:
module Registration
class Controller < Base::Controller
# code goes here
end
end
Struktur begini lebih plug and play. Kode yang sama bisa diduplikasi lebih mudah di project lain.
Framework ini menyediakan beberapa CLI dasar, seperti generate, migrate, dan rollback file migrations, dan generator untuk generate module. CLI ini sudah sangat cukup untuk versi awal. Sisanya nanti menyesuaikan dengan use case saja.
Penutup
Pada akhirnya, software engineering itu tentang solving the problems. Terserah mau pakai alat apa, selama problemnya itu berhasil diselesaikan.
Tapi di era AI sekarang ini, patut diakui kalau bar-nya sudah naik. Software engineering bagi beberapa pihak lagi soal solving problem semata, tapi solving problem using efficient solution. Sebuah tim kecil dengan bantuan AI bisa jadi sekarang bisa full native ketimbang melakukan workaround seperti memasang webview di aplikasi Android atau iOS. Biaya pengembangan dan maintenance sekarang jauh lebih murah.
Tapi bagi beberapa pihak lain, readibility dan maintainability bisa jadi lebih penting daripada performa semata. Jadi... semua akan kembali kepada apa yang menurut kita penting. Keduanya tidak sedang bersaing, malah sama-sama diuntungkan dengan adanya AI.
Opening keynote dari DHH membuat saya sebagai Rubyist sedikit galau, tapi DHH ada benarnya juga. Dunia tech memang terkenal dengan laju perubahannya yang sangat cepat. Kalau ingin tetap bertahan, harus bisa beradaptasi dengan tren yang ada. Ini sudah hukum alam.
Saya justru penasaran apa efek jangka panjang dari adanya AI. Jika semua orang bisa membangun software-nya masing-masing, bagaimana dampak nyatanya terhadap kelangsungan perusahaan teknologi? Sepertinya menarik untuk dibahas di tulisan selanjutnya, hehe. Ciao!
Oiya, saya menulis e-book The Programmer's Mindset, berisi pola pikir apa yang harus kita miliki sebagai seorang programmer supaya tetap relevan di era AI. Saya mau jujur: tulisan ini dibuat oleh AI, saya hanya mengarahkan dan bertindak sebagai editor. Kalau berminat, silahkan beli di sini:
