Bagian 1 - Menjadi NodeJS Backend Engineer - Pendahuluan
Published: 2023-12-29 09:58:43

## Kali Ini Tentang Apa?

Beberapa minggu lalu saya ditanya, apakah saya pernah melihat sebuah [Gambar Roadmap](https://roadmap.sh/backend) yang harus dipelajari untuk menjadi Back-end engineer seperti berikut ini:

![Dari https://roadmap.sh/backend](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6x5ghp72bxknljcijj6e.jpg)


Melihat gambar tersebut, saya langsung menjawab "Ya" karena saya pernah melihat gambar tersebut bersliweran di Linkedin sudah cukup lama. Dari gambar tersebut, tampaknya cukup banyak istilah yang muncul, belum lagi terkait teknologi dan detail yang harus dipelajari. Pusing? Wajar, sepertinya dulu kalau saya langsung disuguhkan segitu banyak juga langsung mikir "nanti dulu deh belajarnya".

Sebagai seseorang yang belajar Back-end secara otodidak tanpa mentor -karena dulu tidak banyak bootcamp saat kuliah, saya ingin mencoba menyederhanakan menjadi 4 bagian awal untuk mempelajari Back-end. Di sini saya tidak bermaksud untuk menghilangkan bagian penting dalam dunia Back-end, namun saya bermaksud untuk menghilangkan kompleksitas belajar Back-end untuk pemula. Berikut 4 bagian yang saya pikirkan:

1. Pilih bahasa pemrograman. Ini penting karena akan menentukan bagaimana kita mempelajari bagian yang lain seperti membuat API, memasang Auth pada API yang telah dibuat, menguji kode (unit testing), dan lainnya.
2. Mengerti coding dasar untuk bahasa yang dipilih. Mininal mengerti dahulu cara menulis kode sederhana -misalnya membuat program sederhana untuk mencari nilai maksimum dan minimum, mengurutkan suatu bilangan, lalu mencoba memisahkan blok kode secara efisien menggunakan `class`, dan mengerti apa itu package/library serta menggunakannya.
3. Bikin proyek sederhana dahulu. Manusia saja tidak langsung menjadi dewasa, maka begitu pula belajar pemrograman (dalam kasus ini spesifik ke Back-End) tidak bisa langsung belajar membuat sistem yang kompleks dengan design pattern yang wow. Namun, kita bisa belajar dengan membuat proyek yang paling sederhana terlebih dahulu.
4. Tambah fitur dari proyek sederhana dengan teknologi-teknologi yang disebutkan di gambar. Mulai dari Authentication dan Authorization, Caching, hingga memecah menjadi Microservice yang mengimplementasikan Instrumentation sampai Circuit Breaker.

Dari 4 bagian di atas, saya akan coba uraikan masing-masing ke tulisan terpisah. Namun, di bagian pendahuluan ini saya mau mencoba menguraikan apa yang akan kita pelajari nanti.

1. Bahasa pemrograman: **Javascript**. Di sini saya akan memilih Javascript karena tampaknya bahasa ini cukup familiar digunakan di dunia per-website-an terutama jika telah mengenal HTML dan CSS yang lebih mengarah ke _front-end._
2. Kita akan belajar bagaimana menulis kode sederhana dengan Javascript.
3. Kita akan coba membangun sebuah program sederhana untuk menyimpan, menampilkan, mengubah dan menghapus katalog produk.
4. Bagian ini mungkin tidak akan saya jelaskan (atau akan lanjut kalau ada waktu). Namun, harapannya ketika di bagian ke-3 Anda sudah mengerti bagaimana membuat program atau proyek yang biasa dikerjakan oleh Back-end engineer.

---

Oke, langsung saja karena kita sudah pilih **JavaScript**, maka berikut adalah tools yang diperlukan:

### Teks Editor atau Integrated Development Environment untuk menulis kode program

Kita gunakan saja yang gratis dan banyak digunakan (bahkan oleh para professional), yaitu **Visual Studio Code**. Silahkan download programnya di sini https://code.visualstudio.com/ dan install seperti biasa (double-click file installer-nya).

Jika kalian bertanya, "kenapa harus Visual Studio Code?", maka jawabannya "tidak harus". Sebenarnya kalian bisa pakai apapun yang penting untuk menulis kode. Bahkan saya bisa katakan kalau mau ekstrim kalian bisa Notepad, Microsoft Word, ataupun terminal dengan menggunakan `vim`. Yang terpenting ialah ketika menyimpan hasil tulisan kode itu menjadi file, kalian menyimpannya sebagai teks file dengan ekstensi `.js` untuk JavaScript.

Namun, agar lebih mudah dan terbantu dengan adanya saran penulisan dari program, maka kita gunakan saja Visual Studio Code yang memang ditujukan untuk coding.

### Install NodeJS

#### Kenapa perlu NodeJS?

Jika kita menjalankan JavaScript di browser, kita umumnya menuliskannya didalam file HTML dan membukanya di browser. 

Bagi yang belum paham, coba kalian copy-paste kode berikut lalu simpan dengan nama file `index.html`:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ini Program Javascript</title>
</head>
<body>
    <div id="hasil-tambah"></div>
    <script>
        let a = 1;
        let b = 1;
        let hasil = a + b;
        document.getElementById("hasil-tambah").innerHTML = `Hasil dari a=${a} ditambah b=${b} adalah ${hasil}`;
    </script>
</body>
</html>
```

Kode JavaScript yang kita tulis ada di bagian antara "tag" `<script>` dan `</script>`.

Lalu coba buka dengan browser kesukaan kalian, maka akan tampil kira-kira seperti ini:


![Hasil render index.html](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2abbyc5jvc7xjr0h6lc.png)


Nah, lalu muncul pertanyaan kenapa butuh NodeJS? Bukankah kita bisa menjalankan kode JavaScript di browser kita?

Begini, karena kita saat ini belajar dalam ranah Back-end, maka kita sudah sepatutnya berpikir bahwa kode yang kita tulis  **tidak akan dijalankan langsung di komputer pengguna.**

Gampangnya seperti ini, misalkan kalian lagi mengakses tulisan ini. Sebenarnya tulisan ini disimpan di database di server yang terhubung melalui internet, lalu ditampilkan di komputer kalian melalui browser.

* Program atau kode yang dibuat untuk dijalankan di browser untuk meminta data dari server kita sebut _front-end_. Ini sebagai jembatan antar-muka antara pengguna dengan server.
* Program atau kode yang dijalankan di server untuk mengambil data dari database kemudian dikirimkan ke pengguna melalui internet bisa disebut _back-end_.

> Sebelum saya didebat oleh para Back-End engineer lain, saya mau mengklarifikasi bahwa kode Back-End sebetulnya tidak hanya bertugas mengambil data dari database, bisa lebih banyak dari itu. Namun, karena tulisan ini ditujukan untuk pemula, saya batasi dahulu pengertian kode Back-End seperti ini.


#### Lalu di mana posisi JavaScript di Back-end?

Nah, karena [JavaScript awalnya dikembangkan untuk dijalankan di browser](https://id.wikipedia.org/wiki/JavaScript) maka memang benar jika kode JavaScript yang dibuat dahulu hanya dapat dijalankan di browser.

Namun, meskipun dijalankan di browser sebetulnya JavaScript memerlukan "mesin penerjemah" agar kode yang kita tulis bisa dieksekusi oleh komputer. Salah satu "mesin penerjemah" ini ialah V8 Engine [https://v8.dev/](https://v8.dev/) yang dibuat oleh Google pada tahun 2008 untuk browser Google Chrome mereka.

Nah, karena kode untuk V8 Engine ini terbuka untuk umum yang bisa diakses di sini [https://github.com/v8/v8](https://github.com/v8/v8), pada tahun 2009 [Ryan Dahl](https://en.wikipedia.org/wiki/Ryan_Dahl) membuat NodeJS dengan V8 Engine. Dengan proyek NodeJS ini, kita dapat menjalankan kode JavaScript tanpa menggunakan browser, yang artinya kita dapat menjalankannya di komputer server yang umumnya tidak memiliki tampilan grafis tetapi hanya dapat diakses melalui terminal.

#### Bagaimana Menginstall NodeJS?

Pertama, kita install dahulu `nvm` atau **Node Version Manager**. Ini berguna banget kalau kita punya banyak proyek di mana misal proyek lama masih menggunakan NodeJS versi 18 sedangkan proyek baru menggunakan versi 20. 

Dalam dunia kerja, kejadian seperti ini sangat memungkinkan, karena kode lama mungkin memiliki fitur yang cukup banyak dan terlalu berisiko jika dinaikkan versinya karena mungkin ada banyak perubahan yang menyebabkan _Error_. Contohnya, pada versi 18 jika kita menggunakan fungsi `Buffer.alloc()`, `Buffer.allocUnsafe()`, atau `Buffer.allocUnsafeSlow()` maka kemungkinan error yang muncul ialah `ERR_INVALID_ARG_VALUE`, namun di [versi 20 menjadi `ERR_OUT_OF_RANGE`](https://github.com/nodejs/node/pull/45796/files). Ini hanyalah salah satu contoh saja, mungkin [masih banyak](https://www.upgradejs.com/blog/why-and-how-to-upgrade-to-nodejs-from-v18-to-v20m-v18.html) hal yang perlu diperhatikan terkait kecocokkan kode dengan versi NodeJS-nya.


Kembali lagi ke **cara menginstall `nvm`**, jika kalian menggunakan Linux atau MacOS, kalian bisa langsung menjalankan [perintah berikut di terminal](https://github.com/nvm-sh/nvm/tree/v0.39.7#install--update-script):



```
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
```


Namun, jika Anda pengguna Windows, silahkan install dahulu Windows Subsystem for Linux yang bisa dilihat di sini [https://learn.microsoft.com/id-id/windows/wsl/install](https://learn.microsoft.com/id-id/windows/wsl/install). Jika sudah diinstall, cukup jalankan perintah di atas.


Setelah terinstall `nvm`, install NodeJS versi 20.10.0 karena ini versi yang akan disupport hingga 30 April 2026 dengan menjalankan perintah berikut di terminal:


```
nvm install 20.10.0
```

Lalu jadikan versi tersebut sebagai versi default:

```
nvm alias default 20.10.0
```

Sekarang cek apakah NodeJS dan `npm` kita sudah terinstall dengan cara:

```
node --version
npm --version
```

Jika keseluruhan proses instalasi berhasil, kira-kira hasilnya ialah seperti berikut:


![Install NodeJS dan NPM dengan NVM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/quh6cebutjw1a6zc1uct.png)

Kalian mungkin bertanya apa itu NPM. NPM singkatan dari Node Package Manager, ini nanti akan kita gunakan untuk mendownload package atau library yang dikembangkan oleh pihak lain untuk memudahkan pembuatan aplikasi Back-End yang kita buat nanti.

---


## Sampai Di Sini Dulu
Kita sudah menginstall tools yang kita butuhkan untuk belajar menjadi Back-End engineer khususnya menggunakan bahasa JavaScript. Selanjutnya saya akan coba menjelaskan bagaimana menulis kode JavaScript dasar dengan asumsi bahwa kita belum mengerti sama sekali tentang kode pemrograman atau baru menggunakan JavaScript.

Sampai jumpa di tulisan berikutnya!

---

> Akhir tahun harus produktif!

<sup>2023-12-28 22:16 PM - Kost Putra Al-Muhibbin</sup>