Bahasa pemrograman apa yang harus saya pelajari/gunakan?

Persoalan yang sepele, namun berdampak terhadap karir kita nanti

Friendly reminder

Target pembaca untuk tulisan ini adalah seseorang yang sedang mempelajari suatu bahasa program, ataupun seseorang yang ingin mempelajarinya. Pilihan yang paling bijak untuk pembaca yang sudah menulis program menggunakan bahasa pemrograman tertentu adalah dengan terus memperdalam pengetahuannya terhadap sesuatu yang berkaitan dengan bahasa program tersebut.


Judul tulisan ini merupakan persoalan sederhana yang biasanya terjadi oleh seseorang yang baru ingin menjadi developer. Entah pelajar sekolah, mahasiswa, atau self-taught developer yang baru ingin terjun ke industri, pasti memiliki persoalan ini, sekaligus biasanya membandingkan dengan bahasa pemrograman lain yang ada.

Pemilihan bahasa pemrograman yang akan dipelajari dan digunakan akan sangat berpengaruh untuk karir kita, dan karir kita nanti. Memilih bahasa pemrograman yang “tepat” dibanding yang “terbaik” sepertinya menjadi pilihan yang bijak untuk persoalan ini. Mari kita bahas dari yang paling dasar: Bahasa program yang sudah diajari di sekolah/kampus/bootcamp

Yang dipelajari di institusi

Setiap kampus memiliki cara berbeda-beda dalam menjelaskan material yang sudah disusun berdasarkan kurikulum. Ambil contoh di kampus saya yang menggunakan Pascal, PHP, C++, JavaScript, dan Java yang so old school berdasarkan mata kuliah yang terkait. Atau di kampus teman saya yang sudah lumayan modern seperti menggunakan Python untuk mata kuliah terkait.

Dari mata kuliah yang ada, seharusnya kita sudah bisa menentukan bagian mana yang kita senangi. Pengembangan game? Web app? Desktop app? CLI app? Dsb. Atau ke yang lebih spesifik seperti frontend atau backend? Anggap kita sudah mendapatkan jawabannya, dan kita jatuh ke Java. Karena Java paling dominan diajarkan di kampus dibanding bahasa program lain.

Pertanyaannya: Apakah saya benar-benar harus mempelajari Java? Apakah Java adalah bahasa program yang paling tepat untuk karir saya nanti?

Mari kita masuk ke topik inti.

Bahasa program apa yang harus saya pelajari?

Sebelum masuk ke pembahasan lebih dalam, saya biasanya memiliki parameter khusus untuk menentukan bahasa program yang akan saya gunakan/pelajari nanti. Parameter-parameternya adalah:

  • Pasar
  • Ekosistem
  • Kompleksitas
  • Kapabilitas
  • Reliabilitas

Untuk detailnya akan kita bahas satu-satu.

Pasar

Ibarat jualan rokok di lingkungan non-perokok, pertanyaanya adalah: “Siapa yang mau beli?”. Begitupula dengan penerapan poin ini terhadap karir kita: “Siapa yang mau hire?”. Saya menempatkan Pasar di poin pertama karena alasan realistis. Kita dibayar untuk menulis kode & menyelesaikan masalah, that’s it.

Memilih pasar pun tidak sembarangan memilih, karir saya harus berada di karir yang benar-benar saya cintai. Yang bisa saya rasakan dampaknya secara langsung. Bukan hanya karena demand nya saja yang tinggi.

Untuk bisa mengetahui bahasa program apa saja yang dibutuhkan oleh pasar, kita harus melakukan sedikit riset. Paling realistis adalah melihat lowongan pekerjaan yang ada, kalau yang cakupannya ingin lebih luas bisa lihat dari survey yang ada.

Selain melihat dari sisi demand, kita harus melihat juga dari sisi supply demi mempersiapkan diri kita kompetisi dengan developer lain. Jika dirasa variable-variable yang ada sudah cocok dengan keinginan anda, mari kita bahas ke poin selanjutnya.

Ekosistem

Setelah melihat pasar dan ok, poin selanjutnya yang jadi pertimbangan adalah ekosistem. Ekosistem menurut saya sangat berpengaruh untuk karir kita nanti. Ambil contoh dari komunitas yang ada di Indonesia: Angular ID, React Indonesia, Vue ID, NuxtID, dsb. Ekosistem teknologi web terlihat menjanjikan sampai banyak komunitas yang ikut andil didalamnya. Yang berarti banyak yang memiliki ketertarikan yang sama terhadap ekosistem teknologi web.

Yang artinya, akan tidak sulit untuk mendapatkan “bantuan” dari komunitas. Pertanyaan, shared library, sumber pembelajaraan & studi kasus, dan lain sebagainya.

Kompleksitas

Meskipun pasar & ekosistem sudah okay, kompleksitas menjadi parameter variable penentu akan bahasa program yang akan kita gunakan. Kalian tau bahasa pemrograman apa yang fast, efficient, dan safe? Ya, Rust. Sudah banyak pasar yang membutuhkan programmer Rust, dan ekosistem nya juga terlihat menjanjikan karena digunakan oleh beberapa company yang terpandang seperti Mozilla, Dropbox, Atlassian, dan masih banyak lagi.

Meskipun junior-level friendly (mengingat bahasa pemrograman Rust relatif masih baru), namun tidak beginner-friendly karena kita harus berurusan dengan berbagai low-level API seperti memory management, thread, dan sebagainya.

Kapabilitas

Apa sih pekerjaan kita nanti yang sekiranya akan kita cintai? Membuat game untuk hiburan? membuat perangkat pintar untuk membantu pekerjaan lebih mudah? Membuat aplikasi desktop kode editor untuk membuat developer lebih efektif? Atau manipulasi citra untuk diatas teknologi Web untuk para designer agar bisa bekerja dimana saja dan tidak terikat dengan platform yang digunakan?

You choose it.

Setiap bahasa pemrograman pasti memiliki kapabilitas nya masing-masing. Misal NodeJS yang mungkin tidak terlalu cocok untuk komputasi berat yang bisa memakan CPU banyak karena single-threaded nya meskipun mendukung clustering. Atau PHP misalnya yang synchronous sehingga kurang cocok untuk program yang banyak melakukan proses I/O.

Reliabilitas

Ini poin akhir yang prioritasnya tidak terlalu tinggi. Seberapa handal bahasa pemrograman yang kita pilih tersebut? Parameter handal disini adalah:

  • Sehandal apa bahasa program tersebut tereksekusi di platform?
  • Sehandal apa bahasa program tersebut berkomunikasi dengan kode lain yang ditulis menggunakan bahasa program yang berbeda?
  • Sehandal apa bahasa program tersebut terhadap fault tolerance?

Misal seperti Objective-C yang hanya bisa dieksekusi diatas platform Mac, beda dengan Swift yang bisa berjalan juga di Linux. Bagaimana sebuah bahasa program dalam menangani fault tolerance pun menjadi fokus saya disini. Bagaimana program menghandle DoS attack yang terjadi dikarenakan regex evil? Bagaimana program bisa menghandle ribuan request per-detik misalnya agar tidak crash? Dsb.

Poin penting dari reliabilitas sih sebenarnya di poin kedua menurut saya. Yang menjadi alasan saya mengapa saya memilih JavaScript sebagai bahasa pemrograman utama saya. Spoilernya: It can runs on cross platform including native mobile app and it can calls another program written in another language!


Oke, sudahi teorinya. Mari kita praktikan riset kecil-kecilannya. Data yang saya ambil berdasarkan dari 3 survey:

Saya mengambil data dari survey luar, karena belum menemukan sumber data di lokal. Yang semoga data yang ada tersebut berlaku juga untuk di Indonesia ya.

Pasar

Kita ambil 5 bahasa program demi mempermudah perolehan data. Berdasarkan 3 survey diatas, 5 bahasa program yang paling populer; Paling banyak digunakan, paling menjanjikan dan paling disenangi adalah (unordered):

  • Java (paling banyak digunakan sebagai bahasa utama)
  • JavaScript (paling banyak digunakan)
  • Python (paling menjanjikan dan digunakan)
  • Rust (paling disenangi)
  • Golang (paling menjanjikan)

Paling menjanjikan berarti “yang akan digunakan nanti” dan untuk paling disenangi berarti “mungkin akan digunakan lagi nanti”. Dominasi ada di Python yang menjanjikan dan sudah banyak digunakan ya? Mari kita lihat tren nya:

Dipenghujung tahun 2018, urutannya adalah Java, JavaScript, Python, Go, dan Rust. Melihat chart setelahnya (pertengahan 2019), Java tetap diurutan pertama dilanjutkan oleh Python, JavaScript, Go, dan Rust.

Itu untuk data diseluruh dunia ya, sekarang mari kita persepit untuk Indonesia.

Tetap dimenangkan oleh Java! Dilanjutkan oleh JavaScript, Python, Go, dan Rust. Btw data tersebut berdasarkan “Web Search” ya, yang berarti banyak topik terkait yang dicari oleh pengguna di Search Engine. Bisa lihat chart nya disini.

Kabar buruknya, Java tidak terlalu junior-friendly. Biasanya tech stack Java dipakai oleh enterprise yang kerap kali program yang dikembangkan nya lumayan kompleks. Karena kompleksitas ini, mereka banyaknya lebih tertarik mencari kandidat yang “Senior”. Dan juga, Java adalah bahasa program yang sudah tua dan stabil. Yang bisa diasumsikan bahwa kemungkinan lebih banyak “Senior” daripada “Junior”.

Kesimpulan singkatnya: Silahkan pilih antara Python, JavaScript, dan Go. Jika kalian tertarik di Frontend (khususnya di web), JavaScript pastinya menjadi pilihan satu-satunya. Jika di Backend, bisa pilih antara Python dan Go. Dilihat dari banyaknya supply dan demand, Python mendominasi. Jika ada lowongan tentang “Backend Developer”, rata-rata mencari kandidat yang tau tentang Python atau Go. Namun tetap, lebih banyak yang mencari Python.

Karena penggunaan Python biasanya lebih luas dari Go, seperti merambah ke pemrosesan data yang besar. Atau untuk membuat bot bahkan ML yang tidak junior-friendly. Setau saya, paling penerapan Go di Indonesia ini untuk membuat microservices dan internal tooling seputar devops.

Pilihannya? Kalau baru belajar bahasa program: Python! Kalau sudah mengenal sekilas seputar bahasa program dan memiliki pengalaman mungkin Go bisa menjadi pilihan.

Ekosistem

Sudah jelas, pemenangnya adalah JavaScript. Jika dilihat dari perusahaan yang terang-terangan memberitau tech stack mereka, paling banyak adalah Go.

Jika dari komunitas, paling banyak adalah Python. Silahkan pertimbangkan

Kompleksitas

JavaScript menjadi bahasa pemrograman yang paling mudah. Dilanjutkan dengan Python, lalu Golang. Dari sisi sintaksis ya. Terlebih untuk programmer yang baru memulai.

Dari sisi kompleksitas lain, Python lebih mudah dibanding Go. Dilanjutkan dengan JavaScript. Konteks yang ini lebih general ya, tentang bagaimana kita menggunakan bahasa program tersebut terhadap program yang kita buat.

Di Python, jika String + Int maka akan muncul error ketika dieksekusi. Karena Python interpreted, strongly typed namun dynamic.

Di Go, jika String + Int maka akan muncul error sebelum program ter-compile. Karena Go compiled, strongly typed namun static.

Beda dengan JavaScript yang weakly typed dan pastinya dynamic. Silahkan eksekusi console.log("13" + 37) di JavaScript, maka hasilnya akan membuat anda biasa saja.

Kapabilitas

Jika di Frontend, sudah jelas: JavaScript. Jika di Backend, baru ada beberapa poin yang perlu dipertimbangkan. Yang sekali lagi, kembali lagi ke minat kalian di industri apa.

Ingin membuat aplikasi realtime? NodeJS & Go bisa menjadi pilihan. Ingin membuat bot? Python. NodeJS cocok untuk program yang tidak memakan CPU banyak, atau bisa juga untuk program yang mengandalkan realtime data processing yang tidak berat.

Python lebih luas penggunaannya, yang paling favorit adalah pemrosesan data yang besar. Jika go biasa digunakan untuk melakukan banyak proses secara simultan. Bayangkan program apa yang sekiranya cocok dengan kalian. Membuat program komunikasi Realtime? Go bisa menjadi pilihan. Program untuk memonitor error? Python bisa menjadi pilihan. Program apapun itu yang penting bikin aja dulu? NodeJS!

Reliabilitas

Gak bisa ngebahas banyak tentang reliabilitas disini, karena bukan ahli dibidang ini. Setau saya, NodeJS lumayan bisa diandalkan mengingat banyak perusahaan besar yang sudah menggunakan NodeJS di production (Paypal, Netflix, LinkedIn, NASA?). Begitupula dengan Go dan Python.

Agar tidak bingung, pilih NodeJS sebagai pilihan utama. Untuk mencari alternatif, silahkan pilih Python untuk aplikasi monolith dan Go untuk microservices.

IMO yak


Oke begitulah kira-kira selayang pandang dari seorang developer yang menulis — ehm — bahasa program HTML dikesehariannya. Topik disini akan banyak membahas seputar Frontend, dan NodeJS bila memang akan membahas seputar backend.

Jika kamu lebih tertarik untuk mempelajari Go, silahkan cari sumber lain selain disini. Begitupula dengan Python.

Mengapa saya memilih menggunakan NodeJS? Karena saya tau JavaScript dari the good, bad, and ugly part nya. Cuma bisa hello world di python dan go klo gak error itu juga.

Jika saya mendapat pilihan untuk mempelajari bahasa program lain selain JavaScript, sejujurnya saya akan memilih Go (walau Rust lebih menarik ya). Karena syntax Go mudah dimengerti, cepat, dan di compile sebagai single executable program!

Dan banyak yang hiring juga.

Semoga membantu. Ditulisan selanjutnya kita akan membahas seputar praktikal bukan teori ya.