Senarai Kemahiran Yang Perlu Ada Pada Pakar Node.js

Mana lebih baik, jadi pakar dalam suatu bidang atau jadi seseorang serba boleh? Nak jadi pakar (specialist) atau generalis (generalist)?

Artikel Generalist or specialist dari John Sonmez dan Generalist Vs Specialist dari Itamar Turner-Trauring adalah antara artikel yang menarik membincangkan isu pakar atau generalis.

Itamar berpendapat, mengaku pakar adalah satu teknik pemasaran. John Sonmez pula dengan nada berbeza, bersetuju dengan mengaku pakar bertujuan pemasaran, tetapi bukan setakat teknik pemasaran diri semata-mata.

Apabila ditanya tentang Elon Musk dalam channel Youtube-nya, John Sonmez berpendapat Elon Musk bukan generalis tetapi pakar dalam pelbagai bidang (specialist in multiple areas).

Adakah sebab nak jadi popular, saya pilih jalan menjadi pakar Node.js? Tujuan pemasaran?

Hmmm...

Betul. Tapi bukan 100% sebab pemasaran. Ada alasan-asalan lain.

Bidang komputer hari ini sangat luas. Front end, back end, data saintis, DevOps, data admin, UI desinger, UX designer dan banyak lagi. Front end Developer saja pun dah buat istilah JavaScript fatique.

Kalau dulu, seorang boleh jadi semua. Tapi hari semua peranan (role) ini dipecah-pecahkan. Kenapa? Sebab kita ke arah menghasilkan produk IT yang lebih selamat, mudah guna dan tahan lama.

Orang tua kan dah nasihat: jangan sampai yang dikejar-kejar tak dapat, yang dikendong berciciran.

Jadi Saya Pilih Nak Jadi Pakar Node.js Sebab

  1. Tenaga dan masa saya terhad. Saya nak fokus sepenuhnya kepada backend Node.js kerana saya sorang je. Masa dan tenaga saya terhad. Saya kena fokuskan pada satu benda sahaja. Kalau tak pemikiran jadi bertabur. Ilmu tak berapa nak masuk.

    Saya perasan ini, bila saya bertukar dari buat android app (Java) kemudian buat server backend Node.js (JavaScript). Katakan semalam, saya luangkan masa buat android app. Hari ini, bila saya tulis kod JavaScript, banyak benda jadi keliru. Jadi saya rasa fokus satu benda lebih baik.

  2. Saya dah ada asas kebanyakan bidang. Pada hari ini, saya boleh buat dan pernah buat:
  3. backend HTTP-based api guna Node.js atau Laravel
  4. pasang dan jalankan web, app pada server untuk diakseskan orang ramai (web deployment)
  5. pasang Ubuntu pelayan (server) di DigitalOcean atau Linode
  6. android app, sama ada natif, hibrid atau HTML5 app

    Kemahiran umum sebagai pembangun (developer) dah ada. Jadi sekiranya saya buat Node.js app, saya tiada masalah untuk menjadikan app tersebut boleh diakses.

    Cukuplah masa untuk bermain-main dekat pantai. Dah tiba masa untuk berenang ke-tengah laut. perumpamaan je ni, saya sebenarnya, tak pandai berenang 😜

  7. Saya jatuh cinta dgn Node.js 💕. Node.js popular sebab laju (Node.js is fast). Node.js memang 'laju', tetapi sebab utamanya ialah budaya async. Bahasa pengaturcaraan yang lain pun boleh jadi laju, jika kod di tulis secara async. Tapi dengan Node.js, kita diutamakan menulis kod secara async dan tetapan lalainya pun begitu.

    Selain itu, perkara yang paling suka dengan Node.js ialah npm. Sangat senang untuk tambah library dengan Node.js.

    Jangan salah faham, Node.js ada banyak juga kelemahan. Cuma, bila saya timbang baik buruknya, saya lebih suka Node.js. Pasal kekuatan dan kekurangan Node.js, kita cerita lain hari.

    Hackernoon setelah melakukan soal selildik merumuskan kelebihan Node.js.

    Kebaikan Node.js dari survey oleh Hackernoon Sumber gambar: Hackernoon

  8. Saya nak jadi pakar banyak benda. Saya nak buat web, nak buat sistem yang berkualiti (cepat), nak buat android app, nak buat kereta elektrik, nak buat smart kandang kambing (IoT) dan saya nak buat game juga. Banyaklah saya nak buat.

    Saya kena mula sekarang. Saya pilih untuk mulakan dengan Node.js. Lepas dah pakar Node.js, saya mungkin akan berusaha jadi pakar Rust (rustlang) pula untuk sokong kelemahan Node.js.

Macam mana nak jadi pakar Node.js

Setelah tekad nak jadi pakar Node.js, saya pun buat kajian, macam mana nak jadi pakar Node.js. Berikut adalah artikel yang saya rujuk:

Senarai Kemahiran Yang Perlu Ada Kepada Pakar Node.js

Saya fokus kepada Node.js, JavaScript di back end. Namun, senarai ini boleh digunakan untuk orang yang nak jadi pakar JavaScript front end. Cuma tolak tambahlah apa yang perlu.

Sekiranya pembaca, rasa ada yang perlu saya tertinggal atau terlebih masuk, boleh komen kat bawah.

Node.js dan JavaScript

  • Guna Node.js dan npm LTS yang terkini - sekarang Node.js 6.x, tak lama lagi Node.js 8.x dan npm5
  • Belajar dan biasakan diri dengan ES2015 (ES6) dan ES2016 (ES7) syntax dan fungsi2 baru

    • promise - utamakan promise daripada callback
    • async await
    • class - Ini cumalah ES5 prototypal pattern, dengan beberapa peraturan keras, seperti mesti guna new
    • generator
    • iterator
    • arrow function
    • template literal
  • Guna linter StandardJS. Tambah precommit untuk linter pada package.json
  • Belajar tentang keselamatan ExpressJs dan Node.js

  • Fahami tentang require()

    • require() adalah blocking. Jadi jangan guna dalam loop. Lagi baik require kat atas sekali sahaja
    • require() adalah cache. Berhati-hati jangan bazirkan memory
  • Sentiasa ingat untuk semak error

    • callback - StandardJS linter akan tolong semak error
    • promise - Sentiasa catch
    • Belajar tentang uncaught exception dalam JavaScript
    • Guna on('error', ()->{} untuk kelas dengan Observer Pattern
  • Kecilkan kod, guna function, biasakan modularization (module atau library)
  • return callback atau return terus lepas callback untuk elakkan kod terus berjalan selepas callback. Masalah ini sentiasa berlaku dalam ExpressJs. Satu lagi cara ialah guna if else.
  • Guna dotenv (.env) untuk tetapan app
  • Guna WinstonJS atau package logger yang async sebab console.log adalah blocking
  • Debugging

    • Belajar guna --inspect - debug dgn chrome
    • Belajar guna debugger dalam Virtual Studio Code (VSCode)
    • Jangan guna console.log untuk debug kecuali nak padam segera
  • Fahami event loop dalam JavaScript / Node.js

  • Clean Code

    • Namakan pembolehubah sesuai dengan fungsinya. Contoh: nama logger lebih baik dari nama winston, walaupun guna package winstonJs
    • Semua nama fail dalam huruf kecil untuk elakkan masalah cross-platform. Sebab *Nix OS case-sensitive tapi Windows case-insensitive
    • Struktur fail dan direktori secara tersusun dan teratur. Belajar macam mana frameworks pisahkan direktori dan fail. Contoh: Laravel, Loop Back dan lain-lain
    • Namakan fungsi atau pembolehubah dengan nama yang menerangkan maksud dan tugas, supaya kod sahaja dah boleh jadi penerangan tanpa perlukan komen (comments) yang banyak
    • Format kod dengan prettier
  • Belajar design pattern JavaScript

    • Baca buku JavaScript Design Patern oleh Addy Osmani
    • Baca design pattern untuk ES6
    • Faham dan biasakan Observer Pattern
    • Utamakan Functional Programming
    • Perkemaskan pengetahuan Object oriented programming OOP. Polymorphism, Encapsulation, Inheritance
  • Belajar dan amalkan 12 Factor App
  • Belajar dan berlatih algorithm dan data structure

    • Senaraikan algorithm yang perlu belajar dan belajar
    • Fahami struktur data (data structure) dalam pengaturcaraan. JavaScript agak kurang, tapi Rust, Java ada struct, arrays, set, hashmap dan lain-lain
    • Uji Kemahiran dengan cabaran kod (code challenge)

  • Basic databes Insert, Select, Update, Delete, combine group dan ORM yang multiple database dengan Node.js. Pengalaman dengan PHP tidak dikira

    • MongoDB
    • Mongoose
    • MySql
    • MariaDB
    • PostgreSql
    • Sequelize
    • Redis
    • DynamoDB
  • pm2

    • Sentiasakan jalankan app di production server dengan pm2
    • Guna cluster bila hardware mampu sebab Node.js satu thread
  • Belajar guna npm macam pakar, terutamanya npm5

    • guna npm terbaru npm5
    • Guna npm scripts - npm run xxx, prexxx and postxxxx
    • Biasakan guna --save, -S dan --save-dev, -D dengan betul
    • Belajar teknik-teknik npm lebih dari asas

Front-end dan DevOps

Kemahiran Node.js semata-mata tak mencukupi untuk jadi pakar Node.js. Apa guna boleh buat Node.js app, tapi orang lain boleh guna? Sebab tu, saya kena tahu serba sedikit DevOps. Cukup sekadar boleh deploy dengan cepat dan efisyen. Lagi baik kalau boleh automation.

Apa guna sebuah web yang orang boleh guna tapi susah untuk diguna oleh orang biasa? Tak user friendly. Nak tak nak, saya kena ambil tahu sedikit tentang front end. Sikit-sikit pun tak, boleh faham kod dan boleh salin tampal (copy paste) kod orang lain pun dah cukup.

Maka ☺, berikut adalah senarai yang saya rasa perlu juga untuk jadi pakar Node.js.

  • Belajar guna git macam intermediate user

    • Belajar tentang git best practice

      • Git commit comments
      • Git rebase
      • --no-ff
    • Hanya masukkan fail yang perlu kedalam git. Jangan masukkan fail log
  • Belajar JavaScript untuk frontend

    • Build tool

      • Gulp
      • Webpack
    • Graf dan carta

      • chart.js
      • d3.js
    • Animasi dan translasi

      • animate.css
      • GreenSock GSAP
      • Anime.js
      • Animasikan vektor grafik (SVG)
  • Belajar tentang Single Page Application (SPA) library. Secara jujur sy tak berminat dgn SPA. Tapi mungkin sebab setakat hari ini, kebanyakan web app yang saya dihasilkan tak sesuai untuk SPA kot

    • VueJs - Saya cuba VueJs dan sangat suka. Contoh projek dengan VueJs - buku21
    • ReactJs
    • AngularJs
    • Siapkan Todo MVC
    • Siapkan Quiz app
  • Monitor Node.js app

    • Prometheus untuk metrik monitor
    • ElasticSeacrh, Logstash, Kibana untuk log monitor dan carian
    • Keymetrics untuk pm2
  • Architecture

    • Monolith
    • Microservice - sy berpendapat microservice lebih baik dari serverless untuk organisasi yang mampu
    • Serverless
  • Belajar guna docker. Penting untuk microservices
  • Belajar pasang di Amazon AWS. Untuk sistem yang besar dan peluang pekerjaan, AWS sangat penting
  • Belajar dan guna messaging queue - Kafka, RabbitMQ, NSQ, AWS SQS
  • Soft skill

    • Hadirkan diri ke conference/meetups. Mana-mana teknikal conference. Sekurang2nya 3 conference sebelum tamat 2017
    • Bercakap dekat conference atau
    • Buat video ajar pengaturcaraan. Yang penting bercakap.
  • Belajar test Node.js app

    • Fahami test pyramid
    • Belajar dan praktikkan Test driven development, TDD
    • Belajar dan tulis Integration test
    • Belajar End to end (e2e) test
  • Belajar bahasa pengaturcaraan lain untuk sokong pemahaman javascript dan Node.js

    • Belajar asas Typescript
    • Belajar Elm tujuan mebiasakan diri dengan functional programming
    • Belajar Rust (rustlang) kerana bahasa kompil lagi laju dari bahasa interpreter
  • Belajar Nginx lebih mendalam

    • Asas: proxy Node.js app
    • Cache dgn Nginx
    • Gzip, brotli dan lain-lain optimisasi
    • Https

      • Letsencrypt
      • Penyulitan sendiri (self encrypt), supaya tahu asas tentang penyulitan
    • Unsur keselamatan seperti CORS, CSURF dll
  • Belajar dan guna Continous Integration dan Continous Deployment

    • Gitlab CI sebab percuma
    • Jenkins untuk host sendiri (self-host)
  • Asas linux command line

    • ufw
    • grep
    • netstat
    • lain2

Penutup

Inilah senarai yang boleh saya fikirkan. Tak setuju? Boleh komen, mungkin saya terlepas pandang.

Ini adalah senarai yang panjang, saya sendiri tak tahu, bila boleh habis. InshaAllah, ada rezeki, semua benda boleh jadi.

📷 Gambar dekat atas sekali dari ANDRIK ↟ LANGFIELD ↟ PETRIDES di Unsplash