Search
  • Welly Tambunan

Hati-hati memilih Bahasa Pemrograman




Banyak nya bahasa pemrograman dan platform dan juga tools yang muncul dan tenggelam silih berganti menyebabkan kebingungan. Memilih platform dan bahasa pemrograman dapat mempengaruhi kemampuan dan produktifitas dalam membangun software.


Pemilihan bahasa tidak melulu hanya dilihat dari sisi fitur bahasa seperti functional programming, asynchronous programming, parallelism dan masih banyak lagi hal yang mungkin menarik untuk dipelajari. Akan tetapi kita harus memikirkan beberapa hal penting seperti ekosistem, komunitas, banyak sumber belajar dan library, adopsi industry, talent pool, kemudahan, produktifitas, dan keamanan dan stabilitas di production.


Tidak ada gunanya memilih bahasa yang modern tetapi tidak tersedia banyak perkakas atau pustaka yang kita butuhkan. Kita akan banyak membuang waktu untuk membuat segala sesuatu dari awal. Kompetisi dalam industri begitu cepatnya, sehingga kita harus memilih trade off yang sesuai dengan kebutuhan bisnis, institusi atau industri.


Belakangan ini saya terombang-ambing ingin membuat server untuk ETP yang dulu saya sudah pernah buat pada masa aktif di organisasi pada industri energy. Ada tiga pilihan yang saya pertimbangan untuk membangun server ini. Java, C++ dan Rust.


Tentu saja native language seperti C++ dan Rust akan menghasilkan code yang efisien untuk mesin. Karena akan langsung di kompilasi menjadi bahasa mesin. Sehingga tidak ada runtime yang menyebabkan slow atau cold startup yang disebabkan oleh just in time compilation(JIT) ataupun pause or stop the world yang disebabkan oleh garbage collection.


Akan tetapi setelah mencoba selama kurang lebih satu bulan saya mengalami kesulitan untuk menjadi produktif dengan bahasa C++ dan Rust. Berikut detail dari perjalanan saya untuk setiap bahasa pemrograman.


C++


C++ merupakan bahasa yang sudah lama dan banyak digunakan oleh perusahaan besar seperti Microsoft, Facebook, Amazon dan yang lain. Akan tetapi meskipun sudah sangat lama dan cepat perkembangan fitur nya (C++ 20) tetap saja tooling atau perkakas pembantu seperti package manager, library, build system, IDE, debugger dan juga support dari tools yang baru dalam bidang cloud native, monitoring, productionalization sangat minim.


Hal ini menyebabkan sangat sulit untuk membuat aplikasi yang siap di deploy ke production. Programmer yang dapat menggunakan bahasa ini dengan baik juga sedikit. Kita harus mengurus memory sendiri yang sering sekali menimbulkan memory corruption dan menyebabkan masalah security. Bahkan Microsoft pun mengakui hal ini menyebabkan banyak masalah security pada windows.


Tentu saja saya tidak ingin bunuh diri dengan mencoba-coba membuat sesuatu yang akan di deploy ke production dengan C++, karena selain tidak familiar, sepertinya akan membutuhkan waktu yang sangat panjang untuk melakukan stabilisasi. Terutama untuk aplikasi terdistribusi. Produktifitas pasti sangat rendah dan bahkan untuk mencapai performance yang kita inginkan tanpa menyebabkan memory leak akan menguras waktu dan resources.


Jadi saya tidak akan memilih C++ untuk membuat server ini.


Rust


Rust merupakan bahasa yang dijagokan untuk menggantikan C/C++ yang penuh dengan masalah keamanan. Saya melihat meskipun Rust bahasa yang baru dan merupakan system programming. Fitur bahasa nya sangat bagus meskipun sangat konservatif dengan penggunaan memory. Hal ini memang dilakukan sehingga tidak ada kesempatan untuk membuat kesalahan penggunaan memory yang berujung kepada keamanan software yang dibangun.


Ini merupakan modal yang bagus. Tools seperti package manager dan juga build system sudah cukup baik. Akan tetapi karena Rust merupakan bahasa yang baru, kita tidak mendapatkan support yang bagus dari tools seperti debugger, profiling dan juga library yang tersedia masih sangat minim. Dan jikapun ada masih belum layak digunakan untuk production.


Hal ini merisaukan karena kita akan menghabiskan banyak waktu untuk membuat banyak kode dari awal. Tentu saja semakin besar jumlah kode yang kita punya, maka testing yang harus dilakukan semakin banyak dan menyita waktu. Padahal kita ingin dengan cepat dan tepat menghasilkan solusi yang andal dan tidak menghambat produktivitas.


Meskipun Rust belakangan ini sangat agresif di dunia blockchain ataupun crypto currency (Solana, etc), bahkan ada beberapa project big data seperti Apache Arrow Data Fusion/Ballista, Fluvio, Materialize...) masih belum dapat dikatakan stabil dan bisa digunakan untuk production dengan tingkat percaya diri yang cukup.


Dengan pertimbangan tersebut, sudah tentu saya tidak memilih Rust.


Java


Sering kali saya tergoda untuk meninggalkan Java untuk bahasa pemrograman yang lebih sexy dan baru seperti C# .NET, NodeJS, Golang, Python. Akan tetapi setelah malang melintang membuat software dengan bahasa yang lain, saya tidak mendapatkan kemudahan dalam membuat software, melakukan maintenance dan juga monitoring aplikasi di production.


Sebelumnya saya juga sudah membuat keputusan bahwa untuk kebutuhan saya dan perusahaan kedepan sudah pasti menggunakan Java. Tapi karena saya membuat ETP server ini untuk sekedar kontribusi ke open source di bidang energy saja, saya ingin mencoba dengan bahasa lain yang masih belum pernah saya gunakan untuk aplikasi yang non-trivial.


Meskipun banyak kritik mengenai Java terutama tentang JVM dan JIT. Kedua hal tersebut merupakan salah satu alasan banyak perusahaan berhasil membuat aplikasi dengan skala besar. Masalah masalah yang lazim ditemukan pada C/C++ dan bahasa native yang lain, jarang muncul di Java. Karena sudah diurus oleh runtime nya. Sehingga produktifitas menjadi tinggi dan mudah untuk dikembangkan dan distabilkan.


Tools dan framework dan juga library sudah banyak sekali dan sangat robust. Tentu saja sudah banyak asam garam dan library tersebut banyak digunakan dan dimaintain oleh banyak orang pula. Ini yang tidak dimiliki oleh platform lain. Debugger, Profiling, Package Management, meskipun ada kekurangan tetapi dapat diabaikan dibandingkan keuntungan yang didapatkan.


Platform Big Data yang sudah pasti kompleks dan dikembangkan banyak orang hampir semua menggunakan Java. Meskipun orang sudah tahu bahwa Java rakus memory dan mempunya Garbage Collection yang bisa stop the world pada waktu yang tidak kita duga-duga. Coba lihat saja berapa banyak platform big data yang cukup tenar yang dibangun dengan bahasa lain? Mungkin tidak banyak dan masih belum sematang big data platform yang ada di JVM.


JVM juga sudah malang melintang hampir 25 tahun. Dan tetap di kembangkan oleh engineer dan scientist berpengalaman dari seluru belahan dunia. Pengerjaan nya juga dilakukan secara terbuka. Banyak juga perusahaan besar yang investasi di JVM. Mungkin Java sudah bisa dianggap the New COBOL. Code base yang sudah begitu besar sehingga sudah sangat stabil dan tidak dapat lagi digantikan. Karena sudah pasti membutuhkan biaya yang sangat mahal dari sisi waktu, tenaga dan juga uang. Bahkan kita terkesan membuang waktu dan lebih baik mengerjakan hal lain yang bisa membuat inovasi baru dan lebih memiliki impact yang lebih baik secara kolektif.


Kesimpulan


Pemilihan bahasa pemrograman tidak hanya semata untuk kepuasan diri programmer saja. Kita harus dapat bertanggung jawab terhadap dampaknya. Semua akan di ukur dari customer experience yang dihasilkan oleh software tersebut. Tingkat kepercayaan diri juga bisa saja rendah jika banyak masalah di production.


Memelihara software yang ada di production bukan merupakan tanggung jawab yang bisa dipandang enteng. Karena semua kemungkinan dapat terjadi dan yang kita lakukan adalah siap sedia, proactive akan tetapi tetap melakukan defensive dan reactive jika terjadi hal yang tidak pernah diperhitungkan.


Pilihlah bahasa pemrograman yang memang mempunyai ekosistem yang kuat dan anda mampu untuk menguasainya. Tentu saja hal ini harus ditentukan dengan pertimbangan secara kolektif dari sisi teknis dan bisnis.


Salam

207 views0 comments

Recent Posts

See All