Daftar Teknologi yang Ingin Saya Pelajari

Tulisan ini adalah daftar tentang teknologi yang ingin saya pelajari. Daftar ini akan berkembang terus tergantung dengan perkembangan yang ada dan apakah saya masih tertarik dengan teknologi tersebut.

Wahyudi Wibowo
Koding Kala Weekend
10 min readJun 17, 2017

--

Courtesy of Avi Richards (unsplash.com)

Dari dulu saya sebenarnya ingin membuat daftar tentang hal-hal apa yang ingin saya pelajari terkait bidang yang saya tekuni yaitu programming. Tujuan dari pembuatan daftar ini adalah sebagai pengingat, berhubung untuk mempelajari semua hal ini juga membutuhkan waktu riset yang tidak sedikit karena masing-masing topik memiliki learning curve nya sendiri-sendiri.

Yang saya yakini, tidak ada manusia di dunia ini yang dapat menguasai semua keahlian sekaligus. Jadi, untuk menguasai semua yang tertulis di daftar ini secara mendalam itu hal yang bisa dibilang tidak mungkin. Tapi setidaknya, saya ingin mencoba dan merasakan teknologi ini secara langsung sehingga saya tahu mana teknologi yang tepat untuk kasus yang saya hadapi di lapangan.

Baik, langsung saja kita lihat daftarnya. Saya sertakan daftar serta alasan mengapa saya ingin mempelajari teknologi tersebut. Siapa tahu bisa jadi inspirasi bagi teman-teman sehingga kita bisa belajar bareng 😁

# Programming Language

Kita mulai dengan bahasa pemrograman. Saya sendiri percaya dengan falsafah right tools for the right job sehingga saya tidak fanatik pada suatu bahasa pemrograman. saya yakin bahwa setiap bahasa memiliki tradeoff masing-masing jika dibandingkan dengan bahasa pemrograman lainnya. Dan cita-cita saya adalah menjadi polyglot programmer yang dapat menguasai lebih dari satu bahasa pemrograman.

PHP

Well, bisa dibilang PHP adalah cinta pertama saya dan gerbang saya menuju dunia pemrograman. Saya menilai PHP adalah bahasa yang mudah dipelajari dan memiliki dokumentasi yang sangat bagus. Dukungan komunitasnya juga baik dan semakin saya amati, PHP semakin mature sebagai bahasa pemrograman. Jadi, menurut saya PHP masih menarik untuk dipelajari. Apalagi dengan kemunculan Laravel yang membuat koding di PHP serasa kekinian dan fun lagi 😄

Framework / Tools di PHP yang ingin dikuasai :

  • Laravel - full scale web application
  • Lumen - service level application
  • PHPUnit - Unit testing

Javascript

Yup, bahasa yang satu ini meraih puncak popularitas semenjak adanya NodeJS. Desainnya yang asynchronous dan non-blocking by default membuat performanya relatif cepat. Saya sendiri ingin menguasai Javascript karena Javascript adalah bahasa pemrograman yang seamless. Kita bisa membuat satu ekosistem aplikasi sendiri hanya dengan Javascript. Frontend ? ada React, Vue, Angular. Backend ? ada NodeJS dengan Express, Koa, atau LoopBack. Database ? ada Mongo yang menyimpan document dalam bentuk JSON. Bahkan ada juga database yang berbasis JS yaitu LoveField. Data transportation ? JSON. Hybrid app ? ada React Native atau Ionic. Ada juga framework Javascript yang isomorphic seperti Meteor. Ingin membuat desktop app berbasis web yang bisa jalan di OSX, Linux atau Windows ? Bisa dibuat dengan Electron. Pokoknya lengkap deh!

Framework / Tools di Javascript yang ingin dikuasai :

  • Express / Koa - Backend atau Service Level App
  • React + Redux - Frontend
  • React Native - Hybrid App untuk Mobile
  • Electron - Multi-platform desktop app berbasis web.
  • Webpack - module bundler
  • Jest - unit testing

Python + R

Saya ingin belajar Python, bukan hanya karena cara penulisannya yang sedap dipandang mata namun juga dukungan library untuk scientificnya yang lengkap. Dan jika dipasangkan dengan R, maka Python akan jadi bahasa yang sangat cocok sekali jika kita ingin belajar statistical programming atau scientific programming seperti machine learning atau actuarial.

Framework / Tools di Python yang ingin dikuasai :

  • Django - full scale web application.
  • Flask - service level application.
  • Panda - statistical library in Python
  • Scrapy + beautifulsoup - scraping framework

Kotlin

Kotlin saya anggap sebagai investasi di dunia Mobile. Saat ini Kotlin didukung penuh oleh android dan (mungkin) oleh iOS juga. Menurut saya, Kotlin adalah bahasa pemrograman yang se-powerful Java namun dengan sintaks yang lebih sederhana dan ekspresif.

Rust

Mengapa Rust ? Awal-awal mencoba bahasa ini, baru kali ini saya menemukan bahasa yang sangat strict soal safety dan memory consumption. Rust memang merupakan system level programming language dan banyak vendor besar yang beralih ke Rust untuk menangani backendnya karena performanya yang sangat cepat. Walau compilernya sangat strict, namun dari situ saya belajar soal memory management dan safety dalam koding (di Rust, default dari sebuah variable itu immutable alias tidak bisa dirubah-rubah). Satu ungkapan yang pernah saya dengar dari senior saya : “Kalau di Rust itu, asal bisa dicompile berarti udah aman”. Saya belajar Rust dengan perkiraan bahwa bahasa ini akan dipakai di Web Assembly dan Internet of Things (IOT).

Framework / Tools di Rust yang ingin dikuasai :

  • Rocket - full scale web application.

Command Line + Shell scripting

Belajar command line + shell scripting menurut saya sangat worth it karena saya sendiri sebagai backend programmer seringkali berurusan dengan server. Saya sendiri belum menguasai shell scripting, namun sangat tertarik untuk belajar shell scripting.

# Regular Expression (REGEX)

Regex never die! Di bahasa pemrograman apapun, ujung-ujungnya pasti bertemu dengan yang namanya Regex. You can’t run from it 😄 Selama ini saya masih berjuang memahami dan membaca Regex. Sejauh ini kalau ada kasus yang mengharuskan saya memakai Regex dan saya sudah menyerah, akhirnya lari ke Stack Overflow 😅 Tapi keyakinan saya mempelajari Regex sangat bermanfaat karena kita banyak berurusan dengan pattern matching di pemrograman.

# DevOps

Posisi saya sebagai backend programmer membuat saya sering berurusan dengan dunia server. Setelah sedikit-sedikit belajar, saya akhirnya memutuskan ingin belajar juga soal server dan app deployment. Berikut daftarnya :

Nginx

Nginx adalah salah satu web server yang terkenal karena simple dan lightweight. Ada banyak fitur yang disediakan oleh nginx yang umum dipakai seperti load balancer dan reverse proxy.

Docker (Compose, Machine)

Teknologi containerization memang sedang hype saat ini. Ide bahwa aplikasi dapat dijadikan satu paket dengan environmentnya dan dijamin dapat berjalan di mesin manapun sangat disambut baik oleh para developer yang sering clash dengan alasan klasik “It works on my machine”. Saat ini saya sudah men-dockerize sebagian besar aplikasi dan project yang ada di laptop saya. Tinggal build image via docker build atau menjalankan docker-compose up, it will be guaranteed to run on any machine. Tidak perlu lagi pusing memikirkan harus install ini dan itu ketika clone sebuah project.

Kubernetes / Docker Swarm

Di production level, kita tidak hanya memakai satu docker image saja sehingga diperlukan tools untuk orchestration. Salah satu manfaat dari penggunaan orchestration adalah zero downtime application.

Jenkins

Jenkins adalah tools untuk continuous integration (CI). Bagi yang belum tahu apa itu CI, CI adalah proses push kode ke dalam shared repository beberapa kali sehari. Kode yang di push akan di verifikasi oleh automated test sehingga jika ada masalah dapat langsung terdeteksi.

Amazon Web Service

AWS ini sangat terkenal dengan layanannya yang sangat lengkap. Dan banyak web besar yang menggunakan AWS behind the scene. Saya kira banyak orang yang membutuhkan developer yang bisa setup AWS.

Let’s Encrypt

Let’s Encrypt adalah penyedia certificate yang gratis. Intinya sih membuat aplikasi web kita dari http menjadi https yang lebih secure.

Tmux

Tmux berguna untuk split window di terminal dan menyimpan session untuk kita gunakan selanjutnya. Lalu apa bedanya dengan Terminator di Linux atau iTerm2 di OSX ? Pertama, tmux dapat digunakan langsung di terminal, tidak perlu install Terminator atau iTerm2. Kedua Tmux dapat menyimpan session. Ketiga Tmux dapat di script. Keempat, no mouse required.

Vim

Sama seperti Tmux, Vim adalah text editor yang langsung dapat digunakan di terminal, tanpa aplikasi tambahan. Vim juga tidak membutuhkan mouse agar dapat dioperasikan. Selain itu dengan tambahan plugins dan penguasaan shortcut key, Vim could become your most powerful text editor.

# RDBMS

Postgres

Ada beberapa alasan yang menyebabkan saya menghapus MySQL dari daftar dan menggantinya dengan Postgres. Walaupun MySQL dan Postgres memiliki kelebihan dan kelemahannya masing-masing (Seperti fitur replikasi di MySQL yang lebih mature dari Postgres, sebaliknya Postgres memiliki aturan yang lebih strict, mendukung partial index dsb. Lengkapnya bisa dilihat di slide ini atau jawaban di quora), namun saya memilih Postgres dengan alasan Postgres memiliki fitur-fitur yang lebih baik. Selain itu saya lebih menyukai dokumentasi yang dimiliki Postgres daripada MySQL. It’s a matter of taste anyway.

SQLite

Database yang satu ini juga populer dikalangan mobile programmer.

# NoSQL

Redis

Redis sangat cocok digunakan sebagai penyimpan cache, session, atau kasus apapun yang membutuhkan performa yang cepat karena redis berjalan di RAM, bukan Harddisk. Redis menyimpan data dalam bentuk key-value pair.

ELK Stack (Elasticsearch, Logstash, Kibana)

Dari stack ini, yang sudah pernah saya pakai adalah Elasticsearch. Saya menggunakannya untuk indexing dan search engine. Banyak fitur-fitur yang menarik di Elasticsearch yang sudah saya coba adalah fuzzy search dan search as you type dengan metode n-gram. Logstash digunakan untuk menyimpan log dan Kibana sebagai alat visualisasinya.

Mongo

Hampir semua tahu tentang database NoSQL yang satu ini. Ya, Mongo adalah NoSQL yang menyimpan data dalam bentuk document. Sangat cocok untuk menyimpan data yang unstructured.

# NewSQL

What ? Apa ini ? saya juga baru dengar ada istilah NewSQL yang katanya menggabungkan benefit yang ada di RDBMS (seperti ACID) dan skalabilitas yang ada di NoSQL. Best from both worlds. Is it sounds too good to be true ? Hmm belum tahu juga, tapi saya taruh di daftar in case suatu saat nanti mau belajar soal ini. Setelah googling, ada database engine namanya TiDB yang sudah menerapkan NewSQL. Will take look at that later. Terimakasih mas Imam Digm yang sudah memberitahu penulis tentang ini😄

# Advanced Message Queuing Protocol (AMQP)

RabbitMQ

Saya sempat belajar RabbitMQ semenjak beberapa tahun yang lalu namun belum sempat belajar secara mendalam. RabbitMQ sangat bermanfaat untuk paralellisasi aplikasi, membuat aplikasi dengan skema publisher-subscriber dan event sourcing untuk keperluan audit.

NSQ

Saya menulis NSQ disini atas saran dari rekan saya Prima Adi Pradana sebagai tools yang worth to try. Terimakasih atas sarannya 😁

# Graph Database

OrientDB

Ini bisa digunakan sebagai alternatif dari Neo4j yang menurut rekan saya Prima Adi Pradana, Neo4j itu costly jika kita mau memakai clusternya. Terimakasih atas sarannya 😁

# Big Data

Sejujurnya, saya masih awam sekali dengan Big Data, namun ada beberapa tools yang sepertinya menarik untuk dicoba.

Hadoop

Saya pernah mencoba Hadoop dalam sebuah workshop. Yang saya pahami, Hadoop adalah sebuah distributed filesystem, dimana kita dapat menggabungkan banyak komputer menjadi satu storage virtual yang besar.

Hbase + Hive

Hmm saya juga tidak terlalu banyak tahu soal ini. Setahu saya, Hbase digunakan untuk menyimpan data dalam bentuk table, sementara Hive digunakan untuk meng-query data di Hadoop.

BlazingDB

Database yang mengutilisasi GPU untuk pemrosesan data yang sangat besar. GPU, bukan CPU. Menarik.

# Programming Paradigm & Concepts

OOP

Saya sudah lama menggunakan paradigma ini. Namun saya masih ingin memperdalam konsep-konsep OOP seperti abstract class, polymorphism, dan principle seperti SOLID.

Functional Programming

Paradigma ini menarik menurut saya. Ada beberapa hal yang saya pelajari untuk memperdalam pemahaman saya dalam functional programming seperti function first, pure function, higher order function, immutable data & persistent data structures.

Reactive Programming

Reactive Programming adalah paradigma dimana pemrograman bereaksi terhadap perubahan data stream yang asynchronous. Kita bisa berkenalan lebih jauh dengan membaca introductionnya di https://gist.github.com/staltz/868e7e9bc2a7b8c1f754.
Terimakasih untuk mas Aves yang memberikan saran terkait materi ini.

Concurrency & Parallelism

Ketika aplikasi kita berkembang sangat besar, harus melayani jutaan req/sec, maka saat itulah kita memerlukan pemahaman terkait concurrency dan parallelism. Concurrency dan Parallelism membuat performa aplikasi meningkat karena beberapa hal dapat dilakukan secara bersamaan.

# API

GraphQL

Banyak yang bilang GraphQL itu “The Next REST”. Namun berbeda dengan REST yang menggunakan URL sebagai resources, GraphQL menggunakan query untuk mendapatkan resourcenya.

API Authentication dengan JWT dan OAuth2

JWT (JSON Web Token) dan OAuth2 adalah authentication yang populer dipakai oleh banyak penyedia API. Ada beberapa library siap pakai baik untuk JWT maupun OAuth2, tapi saya ingin belajar lebih dalam tentang what’s going on inside JWT dan OAuth2.

JMeter

JMeter adalah tools untuk stress test. Stress test adalah proses test dimana aplikasi kita dihantam oleh load yang sangat tinggi untuk mengetahui seberapa kuat aplikasi tersebut.

# Interesting Topics

Progressive Web Apps

PWA ini topik yang menarik dimana aplikasi web bisa berjalan online dan offline dan responsivitasnya sama seperti aplikasi desktop dengan memanfaatkan cache machine dan service worker.

Web Assembly

Aplikasi binary tapi bisa berjalan di web ? Welcome to Web Assembly!

Real Time Web Apps

Aplikasi chat, realtime analytics, document collaboration adalah contoh Real Time Web Application. Dibalik itu ada teknologi bernama websocket. Salah satu framework yang paling terkenal untuk real time engine adalah socket.io.

ChatBot

Dari virtual assistant sampai game berbasis chat semacam werewolf adalah salah satu contoh aplikasi ChatBot. Untuk membuat sebuah chatbot kita dapat menggunakan service yang bernama AIAAS (Artificial Intelligence As A Service) atau kalau mau yang lebih menantang kita bisa belajar Artificial Intelligence dan Machine Learning untuk membuat chatbot sendiri.

# End-to-End Test

Selenium

Selenium adalah tools untuk scripting di browser. Contoh scripting di browser misalnya mengklik tombol, menginputkan teks, sampai scroll windows. Saya pernah memakai selenium dan menggunakan webdriver.io yang berbasis Javascript untuk browser scriptingnya.

PhantomJS + Horseman

Sama seperti Selenium, PhantomJS juga dapat digunakan untuk browser scripting. Bedanya, PhantomJS adalah sebuah headless browser berbasis webkit dan jauh lebih ringan untuk dijalankan dibandingkan Selenium. Horseman adalah script yang berjalan di atas PhantomJS yang membuat PhantomJS dapat dijalankan dari aplikasi NodeJS.

NightmareJS

NightmareJS sama dengan PhantomJS, bedanya NightmareJS berbasis Electron.

# Push Notification

Parse

Semenjak ditutup pada 2017 lalu, Parse kini menjadi aplikasi open source. Jika kita tidak ingin menggunakan third party service dengan alasan privasi, mungkin kita bisa menginstall Parse di server kita sendiri.

Firebase

Salah satu layanan real time push notification yang terkenal milik Google. Worth to try.

# Collaboration Tools

Git

Saya adalah pengguna setia Git. Git is wonderful tools for collaboration. Saya sudah biasa menggunakan fitur-fitur Git semacam clone, pull, push, commit, add, log, reset, checkout, branch, merge. Namun ada fitur-fitur Git yang lebih advance seperti rebase, cherry-pick, reflog, blame yang menarik untuk di eksplore lebih jauh. Please use with caution untuk beberapa fitur seperti rebase dan reset karena dapat menghilangkan history pekerjaan kita 😅

Untuk aplikasi Git server yang open source kita dapat menggunakan gitlab.

# Computer Science

Algoritma & Struktur Data

Belajar algoritma dan struktur data akan mempertajam intuisi kita ketika menyelesaikan suatu permasalahan. Ada banyak algoritma seperti sorting, tree, graph, genetic algorithm, djikstra, dynamic programming, dfs, bfs, tsp, knapsack problem dll yang saya percaya bisa meningkatkan efisiensi kita ketika koding.

Natural Language Processing

Mengetahui bagaimana cara mesin memproses bahasa manusia dan berbicara seperti manusia adalah hal yang paling membuat saya penasaran sejak dulu.

Machine Learning

Sama seperti NLP, saya juga penasaran bagaimana komputer bisa “belajar” dari data dan membuat prediksi dari data yang tersedia.

Dan itulah list teknologi yang ingin saya pelajari. Jika teman-teman ada ide tentang topik menarik terkait teknologi dan pemrograman, please leave a comment below. Thank you for reading!

Terimakasih telah membaca artikel ini. Apabila anda menyukainya klik ❤️ dan share serta follow medium, facebook, atau twitter Koding Kala Weekend untuk mendapat info tentang artikel terbaru kami.

--

--

Wahyudi Wibowo
Koding Kala Weekend

Dad | Backend Dev : PHP, NodeJS, Go | Lifelong learner | Passionate about programming stuff