Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Lan Na Zha

Beberapa hari yang lalu, saya membaca artikel menarik tentang profesi IT. Inti dari artikel tersebut adalah profesi di dunia IT sucks dengan beberapa alasan:

  1. Pemrograman termasuk kategori temporary knowledge capital, yaitu pengetahuan yang cepat kadaluarsa
  2. Bahasa pemrograman, teknologi, dan platform berubah dengan sangat cepat
  3. Gajinya kecil dan prestisenya rendah
  4. Jenjang karir tidak jelas

Artikel selengkapnya bisa dibaca di sini.

Untuk masalah nomer #3 dan #4, menurut saya lebih terkait pada masalah ambisi, attitude, dan self-improvement/kemampuan otodidak. Di artikel ini, kita akan bahas solusi untuk masalah nomer #1 dan #2.

Seperti di artikel sebelumnya, kali ini kita juga akan mengambil teladan dari seorang tokoh di luar dunia IT. Siapa dia?

Li Shu Wen

gambar diambil dari MangaFox

Dia adalah Li Shu Wen, legenda kungfu Delapan Mata Angin yang diceritakan di komik Kenji.

Sekilas kita lihat, memang dunia IT berkembang dengan sangat cepat. Bahasa pemrograman datang dan pergi dengan cepatnya. Waktu saya mulai belajar pemrograman dulu (tahun 2001), bahasa paling populer adalah PHP, VB, dan Delphi. Java waktu itu hanyalah mainan orang-orang di kampus. 12 tahun kemudian, kita mendengar banyak bahasa baru, misalnya:

  • Go
  • Harlan
  • Kotlin
  • Rust
  • Dart
  • Clojure
  • dan banyak lagi yang lainnya

Dan juga jangan dilupakan bahasa lama yang kembali ngetren, misalnya:

  • Ruby
  • Python
  • JavaScript

Hal yang sama berlaku juga di urusan platform. Beberapa tahun yang lalu, Blackberry adalah rajanya. Sebelum Blackberry, JavaME dan Symbian adalah platform utama di mobile. Jaman sekarang mereka semua sudah digusur oleh Android dan iPhone. Ini semua terjadi dalam kurun waktu 5 tahun saja. Jadi kalau 5 tahun yang lalu kemahiran kita dalam pemrograman JavaME membuat kita menjadi idola masyarakat, jaman sekarang kita tidak lebih dari seorang Pak Tua yang sudah mendekati usia pensiun ;)

Nah, saya termasuk salah satu Pak Tua tersebut. Tergabung dalam generasi dinosaurus yang masih tau apa itu CORBA, RMI, SOAP, XML, dan singkatan-singkatan lain yang tidak dipahami generasi masa kini yang urusannya adalah KML, JSON, dan kawan-kawannya. Bagaimana cara saya survive bisa menjadi pelajaran buat generasi 2013 yang akan menyusul menjadi Pak Tua dalam 5 tahun ke depan :D

Kuncinya ada di legenda kungfu jaman dulu, Li Shu Wen yang diceritakan dalam komik Kenji dengan nama Lie Syo Bun yang bisa dibaca online di sini. Berikut sedikit bagian yang relevan dengan artikel ini, yaitu tentang gerakan Lan Na Zha.

Untuk menjadi master di aliran kungfu Delapan Mata Angin, Li Shu Wen harus menguasai dua teknik, yaitu pukulan pamungkas dan teknik tombak. Dia menguasai pukulan pamungkas secara otodidak dengan mempertaruhkan nyawa. Baca ceritanya di bab dua Kenji volume 21. Setelah itu, dia mendapat pengajaran dasar-dasar ilmu tombak di perguruannya. Karena sering berkelahi, maka Li Shu Wen hanya boleh menonton, tidak boleh mencoba. Gurunya mendemokan tiga gerakan dasar ilmu tombak, yaitu Lan (memutar ke luar), Na (memutar ke dalam), dan Zha (menusuk).

Lan Na Zha

gambar diambil dari MangaMyID

Ketika gurunya mengajarkan teknik kombinasi yang lebih advanced, dia menolak belajar karena menganggap sudah cukup dengan tiga gerakan dasar itu saja, sehingga diskorsing oleh gurunya. Tapi bermodalkan tiga gerakan dasar ini saja, dia berhasil mengalahkan semua yang menantangnya, sehingga digelari Dewa Tombak. Baca cerita lengkapnya di sini.

Sedemikian universalnya teknik dasar ini, sehingga bisa kita temukan juga di komik lain, yaitu Legenda Naga.

Lan Na Zha Legenda Naga

gambar diambil dari MangaFox

Lalu apa hubungannya dengan profesi di dunia IT? Pelajaran utama dari komik di atas adalah kita harus mengambil inti dari setiap pengetahuan yang kita miliki. Teknik implementasi bisa berubah dengan cepat, tapi konsep dasar tidak berubah. Tidak percaya? Coba kita lihat istilah-istilah yang sedang trendi di jaman sekarang:

  • Functional Programming, Closure, Clojure, Scala, Groovy, Lambda Expression
  • Object Oriented Programming, UML
  • ORM
  • REST

Mari kita telusuri apakah benar istilah tersebut membuat skill kita kadaluarsa?

Functional Programming

Menurut Wikipedia, Functional programming sudah dikenal sejak tahun 1950. Bahasa yang terkenal adalah LISP dan Haskell.

Jadi, apa yang ngetren dengan nama Clojure di masa kini, sebetulnya sudah ada sejak tahun 1950. Kalau saja kita menguasai konsep functional programming, bukan hanya teknik pemrograman Lisp/Haskell, maka konsep yang kita pahami tersebut akan memungkinkan kita menguasai Clojure dalam waktu satu bulan saja. Demikian juga dengan bahasa pemrograman functional lain seperti Scala, Groovy, dan fitur Lambda Expression yang akan hadir di Java 8.

Object Oriented Programming

Istilah OOP mungkin tidak terdengar terlalu modern. Tapi sebetulnya dia umurnya sama dengan Functional Programming, yaitu dikenal sejak tahun 1950. Bahasa pemrograman berparadigma OOP yang terkenal antara lain adalah Smalltalk.

Untuk mendokumentasikan desain aplikasi OOP, digunakan notasi UML. Notasi ini dirumuskan pada tahun 1990.

ORM

Object Relational Mapping atau ORM, sering kita kenal dengan istilah JPA, Hibernate, Toplink, dan sebagainya, sebetulnya bukan konsep baru. ORM hanyalah library yang mengkonversi hasil query database relasional menjadi object, dan sebaliknya. Adapun istilah-istilah yang sering kita temui dalam penggunaan ORM seperti:

adalah istilah umum yang juga ditemui di SQL. Sedangkan

  • second level cache
  • lazy loading vs eager fetching

merupakan teknik optimasi pengambilan data, yang tidak hanya berlaku untuk database relasional, tapi juga semua pengambilan data dari sumber eksternal seperti:

  • file
  • web service
  • network socket
  • dan sebagainya

REST

REST, sebetulnya hanyalah satu metode untuk mengakses service yang disediakan aplikasi lain. Secara konseptual, dia tidak berbeda dengan:

  • SOAP
  • ISO-8583
  • IMAP
  • POP3
  • SMTP

Intinya adalah ada aplikasi A yang ingin menyuruh aplikasi B melakukan sesuatu. Sesuatu di sini bisa menjalankan perintah tertentu, mengambilkan data, mematikan komputer, dan apapun yang bisa kita pikirkan. Begitu kita paham intinya, menyuruh aplikasi lain bisa dilakukan dengan berbagai cara lain, misalnya:

  • mengirim SMS
  • mengirim email
  • mengirim data dengan format yang kita tentukan sendiri melalui jaringan (TCP/IP)
  • mengirim message chat melalui Yahoo Messenger, BBM, Google Hangout, Line, Whatsapp, dan apapun media lain

Kita bisa generalisasi lagi menjadi konsep yang lebih mendasar, yaitu bagaimana menghubungkan (integrasi) antar beberapa aplikasi agar bisa bekerjasama.

Framework dan Library

Kita juga sering pusing dengan cepatnya perkembangan framework dan library. Di dunia Java, kita bisa ambil contoh Spring Framework dan Java EE.

Walaupun demikian, dengan menggunakan prinsip Lan-Na-Zha, kita tidak perlu pusing. Coba kita bahas evolusinya.

Java EE

Jaman dulu namanya J2EE, beberapa jargon yang kita dengar adalah:

  • Container Managed Transaction (CMT) : programmer tidak perlu begin-commit/rollback sendiri, diurus appserver
  • Enterprise Java Beans (EJB) : object yang diinisialisasi, dimaintain, dan dibersihkan oleh appserver
  • Session Beans : EJB yang bertugas menampung proses bisnis
  • Entity Beans : EJB yang bertugas menjadi mapping dari Java ke tabel database
  • Message Driven Beans : EJB yang bertugas menunggu message JMS dan beraksi begitu ada message

Teknik implementasinya adalah sebagai berikut:

  1. Coding Session Beans, Entity Beans, Message Driven Beans menggunakan Java
  2. Deklarasikan objectnya di file XML
  3. Bila object tersebut saling terkait, tulis juga hubungannya di file XML
  4. Konfigurasi CMT di file XML juga

Jaman sekarang namanya JEE. Implementasinya beda, seperti ini:

  1. Coding Session Beans, Entity Beans, Message Driven Beans menggunakan Java
  2. Tambahkan annotation @Stateless, @Stateful, @Entity, @MessageDriven supaya EJB dikelola oleh appserver
  3. Bila object tersebut saling terkait, tulis juga hubungannya menggunakan @Inject
  4. CMT sudah diaktifkan by-default. Konfigurasi tambahan bisa dilakukan menggunakan @TransactionAttribute

Konsepnya tetap sama. Tidak percaya? Baiklah saya copy paste ;)

  • Container Managed Transaction (CMT) : programmer tidak perlu begin-commit/rollback sendiri, diurus appserver
  • Enterprise Java Beans (EJB) : object yang diinisialisasi, dimaintain, dan dibersihkan oleh appserver
  • Session Beans : EJB yang bertugas menampung proses bisnis
  • Entity Beans : EJB yang bertugas menjadi mapping dari Java ke tabel database
  • Message Driven Beans : EJB yang bertugas menunggu message JMS dan beraksi begitu ada message

Seperti kita lihat, kalau kita menghafalkan implementasi (konfigurasi XML), maka skill J2EE kita akan kadaluarsa begitu JavaEE 6 dirilis. Tapi kalau kita pahami benar-benar konsepnya (CMT, EJB), maka pemahaman tersebut masih relevan di JavaEE 5, JavaEE 6, dan kemungkinan besar juga di JavaEE 10 beberapa tahun yang akan datang ;)

Spring Framework

Bagi aliran non JavaEE, biasanya pakai Spring Framework. Di sinipun tidak jauh berbeda. Dulunya konfigurasi menggunakan XML, sekarang bisa pakai Annotation dan JavaConfig.

Implementasi jaman dulu:

  • inisialisasi (menewkan object) ada di XML
  • transaction management dilakukan menggunakan AOP, juga di XML

Contohnya bisa dilihat di kode program saya tahun 2006 - 7 tahun yang lalu. Perhatikan bahwa setiap class DAO dideklarasikan di XML. Demikian juga konfigurasi transaction di bagian transactionAttributes.

Implementasi jaman sekarang:

  • inisialisasi dilakukan melalui annotation
  • transaction management dikonfigurasi di annotation

Contohnya bisa dilihat di kode program saya tahun 2013.

Walaupun kode programnya berubah sama sekali, konsepnya tidak berubah dalam kurun waktu 7 tahun, yaitu:

Gong Fu

Kalau kita baca terus kisah Li Shu Wen sampai bab 5, kita akan mendapat pelajaran penting lainnya, yaitu gongfu. Gongfu artinya adalah hasil yang didapat dari latihan. Kita melakukan satu hal berulang-ulang, sehingga hal tersebut menjadi refleks dan bisa kita lakukan tanpa harus berpikir lagi.

Gong Fu

gambar diambil dari MangaFox

Salah satu latihan yang sering saya lakukan adalah membuat aplikasi dengan satu tabel database, satu form input, satu tabel list, lengkap dengan validasinya, menggunakan framework yang biasa digunakan (Spring dan Hibernate), dari nol. Dengan latihan tersebut, saya hafal dan tahu persis fungsi dan tujuan setiap baris kode program dan konfigurasi yang ada dalam aplikasi. Bila ada error, saya bisa mengatasinya dengan cepat dengan bermodalkan gongfu dalam mengintegrasikan berbagai framework.

Di jaman content seperti saat ini, gongfu yang paling perlu dipupuk adalah teknik googling. Memilih keyword yang tepat supaya hasil search sesuai keinginan merupakan suatu skill khusus. Skill ini hanya bisa ditingkatkan melalui latihan.

Khusus programmer, penting juga dilatih cara untuk mendebug error. Membaca pesan error, memisahkan mana yang relevan dan tidak, kemudian mencari tahu baris kode yang menyebabkan error, merupakan skill yang hanya bisa didapat melalui latihan.

Dalam melatih gongfu, ada satu prinsip yang penting untuk kita gunakan, yaitu Slow is smooth, smooth is fast. Artinya, kita lakukan langkah demi langkah seakurat mungkin walaupun perlahan. Fokusnya adalah melakukan secara benar. Seiring dengan durasi latihan kita, rangkaian gerakan tersebut akan tertanam menjadi refleks di otak kita, sehingga kita bisa melakukannya dengan lebih cepat. Ulangi terus dalam jangka waktu yang lama, maka kita akan bisa melakukan hal tersebut dengan sangat cepat, namun tetap akurat.

Kesimpulan

Belajar dari kisah Li Shu Wen di atas, kita tidak perlu khawatir dengan cepatnya perkembangan teknologi di dunia IT. Bila kita paham konsep dan prinsip dasarnya, kita tidak akan tertinggal. Teknik implementasi, bahasa pemrograman, platform, format data, protokol komunikasi, memang akan terus berubah sepanjang jaman. Tapi prinsip yang mendasarinya akan tetap berpulang pada konsep klasik dan akal sehat.

Jadi, bila kita belajar sesuatu, tidak hanya di dunia IT, jangan cepat puas begitu kita tahu bagaimana cara melakukannya. Gali terus sampai kita memahami tujuan kenapa kita melakukan hal tersebut dan berbagai cara lain untuk mencapai tujuan yang sama. Jangan puas begitu kita bisa insert data menggunakan ORM. Tapi gali terus sampai kita paham mengapa ORM dibuat dan bagaimana cara kerja/isi perut ORM.

Setelah paham, latih terus pemahaman konsep tersebut sampai kita mahir. Jangan berhenti ketika merasa sudah mahir, karena semua skill dan teknik perlu maintenance supaya tidak hilang.

Terakhir, untuk mendapatkan hasil maksimal, kombinasikan artikel ini dengan artikel sebelumnya. Pahami prinsip dasar dari skill otodidak, kemudian latihan sampai mahir. Jangan menyerah kalau merasa sulit dalam belajar. Yang namanya belajar pasti sulit, kalau sudah tidak sulit lagi tandanya kita sudah bisa ;)

Juga jangan bosan bila kita tidak cepat memahami/menguasai sesuatu. Menguasai suatu konsep dan teknik dasar seringkali butuh waktu lama. Dalam komik Legenda Naga, Lan Na Zha dilatih selama enam bulan

Lan Na Zha Legenda Naga

gambar diambil dari MangaFox

Dalam komik Kenji, Li Shu Wen melatih kuda-kuda dasar selama 3 bulan. Tidak seperti aliran lain, selama periode tersebut siswa belum belajar memukul sama sekali.

Latihan Kuda-kuda

gambar diambil dari MangaMyID

Bagaimana dengan programming?

Menurut Peter Norvig, belajar pemrograman butuh waktu 10 tahun.

Jadi, kalau kita belajar sesuatu, setelah dua minggu belum paham dan masih bingung, jangan khawatir. Masih ada waktu 10 tahun kurang 2 minggu lagi untuk belajar ;)

Nah, dengan artikel ini, mudah-mudahan orang bisa memahami mengapa di berbagai forum, milis, sesi kuliah dan pelatihan, saya selalu bersikeras supaya orang mencoba dulu sebelum bertanya/minta solusi. Karena dengan mencoba, kita akan meningkatkan gongfu dalam skill problem solving.

Selamat berlatih ;)