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.

Menggunakan Log4J

Menggunakan log4j

Pada waktu SMU dulu, saya dan teman-teman saya membentuk grup band. Sebagai band amatiran, kami hanya tampil kalau ada pentas seni di sekolah, atau kalau ada acara tujuh-belasan di lapangan dekat rumah. Yang ingin tampil di event tersebut tidak hanya band kami, tapi juga puluhan band amatir lainnya. Karena demand jauh melebihi supply, seringkali kami justru harus membayar uang pendaftaran agar bisa tampil.

Sama dengan band remaja pada umumnya, kami punya impian menjadi rock-star. Tidak usah mengeluarkan album dulu lah … setidaknya kami dibayar setiap kali tampil. Bukannya malah membayar.

Suatu ketika, pemain bas kami mengajak kami berkenalan dengan salah satu sepupunya yang juga punya band. Tidak seperti kami yang amatiran, band sepupu ini lebih profesional. Mereka sudah punya slot tampil rutin di beberapa kafe, yang tentu saja … dibayar :D

Setelah ngobrol kesana-sini, akhirnya kami diajak untuk datang ke kafe dan menonton penampilan mereka.

Sesampainya di lokasi, terlihat jelas perbedaan level antara kami dan mereka. Band kami, sebelum tampil, semua anggotanya deg-degan dan gugup. Topik pembicaraan adalah tentang lagu yang dimainkan. Kami saling mengingatkan berapa kali harus mengulang refrain, berapa bar sesi gitar solo, pada ketukan berapa vokalis harus masuk, dan hal-hal sejenisnya. Dan tentunya, orang gemetaran tidak mungkin bercanda.

Berbeda keadaannya dengan band sepupu tersebut. Begitu datang, mereka berhaha-hihi dengan gembira. Pada waktu kami mendekat, terdengar jelas bahwa topik pembicaraan bukanlah tentang teknis musik yang akan dimainkan, melainkan urusan ….. kostum !!!

Mereka sudah sedemikian terbiasa tampil di panggung, sehingga bermusik sudah seperti bernafas. Tidak perlu berpikir lagi. Oleh karena itu mereka bisa dengan tenang memikirkan kostum.

Lalu apa hubungannya band kafe dengan Log4J?

Programmer pemula akan sangat concern dengan urusan algoritma, design pattern, normalisasi database, dan hal-hal teknis pemrograman. Programmer kawakan, sudah tidak lagi mengkhawatirkan hal-hal tersebut. Bukan karena tidak penting, tapi karena hal teknis tersebut sudah menjadi bagian dari dirinya. Coding sudah seperti bernafas. No mind .. demikian menurut Tom Cruise dalam film The Last Samurai.

Lalu apa yang dipikirkan programmer kawakan? Dia memikirkan pengguna aplikasinya. Bukan end-user atau operator, karena itu juga sudah refleks terpikirkan. Melainkan system administrator, first level technical support, dan maintainer programmer (programmer generasi kedua yang akan menambahkan fitur atau melakukan troubleshoot).

Untuk kepentingan tersebut, maka yang harus dipikirkan adalah log message dan exception handling. Log message sangat dibutuhkan oleh sysdamin untuk mendeteksi masalah sedini mungkin. First level technical support juga harus membuat keputusan apakah masalah bisa diselesaikan melalui restart, atau butuh coding tambahan?

Nah, untuk itu kita harus mempertimbangkan :

  1. Di titik mana harus menaruh log

  2. Informasi apa yang harus ditulis di log

  3. Di mana harus menulis log: konsol, file, database, syslog, Event Viewer?

  4. Bagaimana harus memformat log message agar mudah ditelusuri?

  5. Bagaimana memfilter log agar menampilkan hanya severity tertentu?

  6. Bagaimana memfilter log agar hanya meliput modul tertentu?

Beruntung bagi programmer Java, kita hanya perlu memikirkan nomer 1 dan 2. Sisanya sudah disediakan oleh logging framework seperti log4j.

Lalu bagaimana cara menggunakan log4j? Pelajari di Minibook Log4J.


Road to Java SE

Belajar bahasa pemrograman mirip dengan belajar bahasa manusia. Bahasa pertama adalah yang paling sulit. Ini disebabkan karena kita belum paham istilah-istilah yang digunakan, pola umum menyusun kata, dan ungkapan-ungkapan khusus yang biasa digunakan dalam bahasa tertentu.

Mari kita ingat waktu pertama kali belajar bahasa Inggris (bahasa Indonesia tidak dihitung, karena kita sudah bisa dari kecil). Pertama kali, kita sama sekali tidak tahu vocabulary. Kemudian kita belajar tentang susunan kata, Subjek-Predikat-Objek. Belajar kalimat aktif dan pasif.

Demikian juga dengan bahasa pemrograman. Bahasa pertama selalu paling sulit. Setelah kita menguasai satu bahasa, belajar bahasa berikutnya tidak sesulit yang pertama. Misalnya kita butuh waktu enam bulan untuk menguasai Java, maka untuk belajar PHP mungkin cuma butuh 2 bulan.

Dengan asumsi kita sama sekali belum pernah mengenal bahasa pemrograman, berikut adalah peta jalan untuk belajar bahasa pemrograman Java.

Pertama, kita kumpulkan dulu perlengkapan belajarnya. Kita membutuhkan:

  • Java SDK

  • Java Tutorial dari Sun

  • Javadoc API

  • Text Editor yang bisa memberi warna (syntax highlighting)

Pada tahap ini, jangan menggunakan editor canggih –biasa disebut Integrated Development Environment (IDE)– macam Eclipse, Netbeans, dan lainnya. IDE memiliki fitur yang canggih dan juga kompleks. Di awal masa belajar, kita ingin belajar tentang bahasa Java, bukan penggunaan tombol dan wizard.

Setelah itu, instal Java SDK. Tergantung metode instalasi Anda, mungkin Anda perlu mengatur environment variabel JAVA_HOME dan PATH. JAVA_HOME mengarah ke folder tempat instalasi Java SDK, sedangkan PATH mengarah pada folder bin di dalam lokasi JAVA_HOME.

Untuk mengetes apakah instalasi Anda sudah berhasil, coba ketik perintah berikut di command prompt:

javac -version

Bila keluar pesan error “perintah javac tidak ditemukan” berarti environment variabel masih belum diatur dengan benar.

Perhatikan bahwa setelah mengatur environment variabel, kita harus merestart command prompt. Command prompt baik di Windows maupun Linux tidak dapat mendeteksi perubahan environment variabel secara instan.

Selanjutnya, buat kode program sederhana. Dalam semua bahasa pemrograman, kode ini disebut HelloWorld. Kode program ini hanya mencetak tulisan Hello World ke layar komputer.

Coba kompilasi dan jalankan program HelloWorld tersebut. Dari sini Anda akan mengetahui beberapa konsep, yaitu:

  • Cara kompilasi kode program Java

  • Cara menjalankan aplikasi Java

  • Konsep CLASSPATH

Begitu kita sudah bisa mengkompilasi dan menjalankan kode program Java, kita bisa mulai belajar prinsip umum pemrograman. Prinsip ini sama di semua bahasa pemrograman, walaupun cara penulisannya berbeda. Berikut prinsip-prinsip yang perlu dipelajari:

  1. Anatomi aplikasi. Di Java, aplikasi terdiri dari banyak package, satu package berisi banyak class, satu class berisi banyak property dan method, satu method terdiri dari banyak statement.

  2. Menggunakan variabel

  3. Macam-macam tipe data

  4. Operator

  5. Statement, Comment, Expression

  6. Method, function, atau procedure. Istilah mana yang digunakan tergantung bahasa yang dipelajari

  7. Penggunaan variabel sebagai argumen dan return value. Pelajari juga pass-by-value vs pass-by-reference dan scope variabel

  8. Control Flow, meliputi percabangan menggunakan if-else dan switch, dan perulangan dengan while atau for.Ketahui juga keyword control flow seperti break, return, dan exit.

  9. Setelah mahir menggunakan variabel skalar, pelajari variabel majemuk. Variabel majemuk ini ada di semua bahasa pemrograman. Biasanya ada dua kategori dasar, yaitu yang menggunakan indeks numerik dan indeks non-numerik. Di PHP variabel majemuk berindeks numerik disebut dengan numeric-array, sedangkan yang berindeks non-numerik disebut associative-array. Di Java pilihan lebih banyak. Untuk indeks numerik ada List dan array. Sedangkan indeks non-numerik diwakili oleh Map. Java juga punya variabel majemuk yang dinamakan Set, yang tidak memiliki indeks berurut, tapi bisa digunakan untuk mencegah elemen yang duplikat. Pelajari konsep, implementasi, dan penggunaannya.

Beberapa latihan yang dapat digunakan untuk memahami prinsip dasar ini antara lain:

  • Hitung jumlah hari dalam bulan dan tahun tertentu

  • Tampilkan nama sendiri secara berulang sebanyak jumlah hurufnya

  • Hitung faktorial

  • Deret Fibonacci

  • dan sebagainya

Salah satu keunggulan Java adalah dukungannya terhadap Object Oriented Programming. Sekarang, setelah menguasai cara kerja bahasa pemrograman melalui prinsip-prinsip di atas, kita belajar tentang bagaimana mendesain aplikasi dengan menggunakan prinsip orientasi objek.

Langkah-langkah belajar OOP adalah:

  1. Belajar apa itu class dan apa itu object. Kalau di Java, ketahui perbedaan antara class dan instance. Perbedaan antara static variable dan instance variable.

  2. Encapsulation

  3. Inheritance

  4. Polymorphism

  5. Banyak orang mengalami kesulitan dalam menjelaskan, apalagi mempelajari encapsulation, inheritance, dan polymorphism. Berdasarkan pengalaman saya, design pattern dapat digunakan untuk membantu pemahaman ketiga konsep OO tersebut. Gunakan Strategy pattern untuk memahami polymorphism, Factory pattern untuk memahami encapsulation, dan Template Method untuk memahami Inheritance. Cukup dengan tiga pattern ini, seharusnya konsep OO sudah bisa dipahami dengan baik

Beberapa bahasa pemrograman seperti Java, Ruby, C# memiliki fitur Exception Handling. Pelajari fitur ini. Khusus Java, pelajari bedanya Error, Checked Exception, dan Unchecked Exception. Yang lebih penting, kenali karakteristik masing-masing dan kapan harus menggunakannya.

Semua bahasa pemrograman modern sudah memiliki infrastruktur Input/Output Stream. I/O Stream ini digunakan untuk membaca dan menulis data ke berbagai tujuan, misalnya file, jaringan, object, dan sebagainya. Dengan menggunakan I/O Stream, teknik baca/tulis file mirip dengan terima/kirim data dari jaringan.

Sebagai latihan, coba buat aplikasi chatting sederhana.

Terakhir, pelajari fitur-fitur Java yang advanced, seperti:

  • Multithreading

  • Reflections API

  • Annotations

  • Generics

  • Enum

Kalau sudah sampai di sini, pengetahuan Anda sudah cukup untuk meneruskan sendiri. Bila ingin membuat aplikasi bisnis, pelajari JDBC, kemudian ikuti Road to Java EE. Bila ingin membuat aplikasi daemon seperti web server atau sms gateway, dalami multithreading, classloading, socket programming, dan lainnya. Bila ingin konsentrasi di mobile, pelajari Java ME.

Demikian panduan singkat untuk belajar bahasa pemrograman Java. Tidak ada yang instan di dunia ini, termasuk belajar bahasa pemrograman. Bila Anda sama sekali belum pernah coding, Anda butuh waktu paling tidak 6 bulan untuk menguasai Java. Bila sudah pernah menggunakan bahasa non-OOP, butuh waktu sekitar 2-3 bulan. Perkiraan waktu ini sekedar gambaran saja, mungkin juga ada yang 2 minggu sudah bisa, atau 2 tahun masih belum bisa. Tergantung kondisi.

Setelah menguasai bahasanya, selanjutnya menguasai (Application Programming Interface) API yang dibutuhkan untuk menyelesaikan pekerjaan. Kemudian masih ada framework untuk membantu pembuatan aplikasi. Jangan lupa, kita masih harus belajar menggunakan tools seperti IDE, Ant, Maven, JUnit, Subversion, agar kita bisa bekerja secara efektif dan efisien.

Selamat belajar Java.


Wirausaha

Tiga bulan yang lalu, tepatnya Februari 2008, saya membuat keputusan signifikan sepanjang kehidupan saya. Yaitu berpindah sisi meja, dari menerima gaji, menjadi memberi gaji alias mendirikan perusahaan sendiri. Padahal kantor tempat saya bekerja merupakan perusahaan terkenal, posisi saya strategis dan menantang, dan lingkungan kerjanya menyenangkan.

Perubahan ini, terutama bagi mereka yang sudah cukup lama bekerja di perusahaan dan sudah berkeluarga, merupakan hal yang menakutkan. Pada waktu kita masih single, kalau ada kesulitan keuangan, yang menderita cukup diri sendiri saja. Sedangkan bila kita sudah berkeluarga, bokek bisa berakibat fatal bagi istri dan anak. Saya pernah mengalami masa melarat dulu di Surabaya sekitar tahun 2001-2002. Saking bokeknya, kami (saya dan teman-teman serumah) tidak punya uang untuk membeli lauk. Hanya ada nasi. Akhirnya, kami memetik daun kelor yang tumbuh di pekarangan dan merebusnya sebagai teman nasi. Jika ada yang memiliki ilmu kebatinan, pasti akan luntur seketika :p. Setelah berkeluarga, tentunya kita ingin memastikan bahwa jangan sampai anggota keluarga kita terpaksa makan sayur daun kelor.

Tidak sedikit teman-teman yang bertanya bagaimana cara melakukan peralihan dari karyawan menjadi wirausahawan dengan mulus. Yah, saat ini saya juga masih belum menjadi pengusaha sukses. Masih berjuang. Tapi ada sedikit pengalaman yang bisa saya ceritakan pada mereka-mereka yang ingin mengikuti jejak saya.

Di jaman serba sulit seperti ini, akan lebih baik jika kita bisa mandiri menciptakan lapangan pekerjaan sendiri. Jadi, semakin banyak pengusaha, semakin cepat Indonesia akan bangkit dari keterpurukan nasional.

Kerja kantoran dulu kemudian buka usaha sendiri berbeda dengan lulus sekolah dan langsung buka usaha. Masing-masing ada plus-minusnya.

Jika kita langsung buka usaha, kita biasanya akan:

  • terbiasa dengan kondisi finansial yang tidak menentu. Kadang kaya raya, kadang melarat.

  • memiliki jiwa sales (ini adalah karakteristik penting yang akan saya bahas lebih lanjut nanti)

  • berorientasi hasil, bukan jam kerja

  • miskin pengalaman, sehingga usaha sulit maju

Sebaliknya, bila kita jadi karyawan dulu, biasanya kita:

  • terbiasa gajian di akhir bulan dengan jumlah fixed.

  • naluri pemburu kurang terasah, kecuali yang bekerja di lini penjualan

  • berorientasi jam kerja, lewat jam kantor masih kerja, hitung lembur

  • sudah mengenal sistem birokrasi kantoran dengan hirarki kekuasaan dan wewenang

  • terbiasa dengan prosedur yang baku (bila bekerja di perusahaan yang rapi)

Masing-masing starting-position memiliki plus minusnya. Yang akan kita bahas sekarang adalah start dari posisi karyawan. Mungkin lain waktu kita akan bahas tentang start langsung jadi pengusaha.

Untuk bisa beralih dengan mulus, ada beberapa persiapan terutama dari aspek pola pikir dan gaya hidup.

Pola pikir yang dibutuhkan adalah:

  • Orientasi terhadap hasil

  • Sense of urgency

  • Kepekaan terhadap peluang

Sedangkan gaya hidup yang dibutuhkan adalah:

  • Multiple Stream of Income (MSI).

  • Aktif di komunitas, baik fisik maupun maya.

Mari kita bahas satu persatu.

Orientasi Hasil

Bila kita menjadi karyawan swasta –apalagi di industri IT–, kita sulit untuk santai. Selalu ada atasan yang memantau kinerja kita. Terlihat chatting atau browsing, pasti akan langsung diajak diskusi mengenai pemanfaatan jam kerja yang efisien. Dengan demikian, performa kita akan selalu kinclong, karena dimonitor dan diingatkan sepanjang waktu.

Lain halnya bila kita menjadi wirausahawan. Tidak ada lagi atasan yang memantau kinerja kita dan mengingatkan bila kita mulai tidak fokus. Mau berpola hidup PNS, monggo. Mau sampai di kantor jam 11 pulang jam 14, silahkan.

Ini merupakan tantangan bagi kita. Kita harus memacu diri sendiri untuk menghasilkan sesuatu. Bila kita programmer, harus menghasilkan kode program. Bila kita instruktur pelatihan, harus menghasilkan modul pelatihan dan slide presentasi. Tanpa orientasi terhadap hasil, dapur bisa berhenti ngebul.

Sense of Urgency

Mirip dengan orientasi hasil, di lingkungan karyawan kita memiliki atasan yang rajin menagih hasil kerja kita. Setelah hasil kerja kita serahkan, biasanya akan diperiksa dulu sebelum kita berikan pada client.

Berbeda halnya bila kita berwirausaha. Bila kita tidak memiliki sense of urgency, semua delivery ke client akan terlambat dan berkualitas rendah, karena tidak ada yang menagih dan memeriksa pekerjaan kita.

Kedua hal ini, orientasi hasil dan sense of urgency sepintas nampak seperti hal sepele dan sudah menjadi kondisi yang umum. Tapi walaupun ini terkesan common sense, tapi ternyata sangat berat dilakukan tanpa adanya atasan yang mengawasi. Penguasaan kita terhadap dua hal ini akan menentukan apakah kita bermental bos atau karyawan. Tanpa kedua hal ini, walaupun kita menjadi karyawan, sulit untuk meningkatkan karir di kantor.

Kepekaan terhadap peluang

Sebagai karyawan, bila tidak berada di departemen business development, marketing, atau sales, biasanya kita tidak mampu mengenali peluang bisnis. Kepekaan terhadap peluang adalah suatu kemampuan yang harus dilatih terus menerus, mirip seperti kemampuan mendesain aplikasi.

Saat belum terlatih, kita tidak bisa melihat peluang bisnis, bahkan walaupun sudah disodorkan di depan mata. Berikutnya, kita bisa mengenali peluang, tapi belum bisa membedakan mana yang angin surga dan mana peluang betulan. Bila sudah mahir, kita bisa mengendus dari sekian banyak peluang, mana yang akan menghasilkan imbal hasil yang paling menguntungkan.

Inilah yang saya sebut di atas “memiliki jiwa sales”. Sebagai pendiri perusahaan, tugas utama kita adalah mendatangkan bisnis ke dalam perusahaan. Menjadi seorang deal-maker. Bila perusahaan kita tidak mendapat project, karyawan tidak ada kerjaan, ini adalah tanggung jawab founder.

Tanpa kemampuan ini, perusahaan tidak akan jalan, tidak peduli sepintar apapun programmer yang dimiliki. No sales, no company.

Multiple Stream of Income

Sebagai karyawan yang loyal, biasanya kita hanya memiliki satu sumber penghasilan, yaitu gaji. Kondisi ini menyulitkan kita bila tiba-tiba ingin banting setir menjadi pengusaha. Seperti kita tahu, menjadi pengusaha penuh dengan ketidakpastian income. Kadang panen raya, kadang paceklik. Tidak ada bisnis yang terus menerus sukses. Bila Anda percaya ada bisnis yang tidak bisa gagal, hati-hati, bisa jadi Anda akan masuk koran sebagai investor blue energy yang ternyata palsu.

Untuk mengatasi perbedaan suasana ini, saya anjurkan untuk membiasakan diri mencari penghasilan tambahan di luar gaji. Setidaknya selama dua sampai tiga tahun, cobalah untuk mencari penghasilan diluar gaji. Tentunya dilakukan dengan cara yang profesional dan etis. Bila sumber penghasilan kita sudah lebih dari satu, maka kita sudah memiliki Multiple Stream of Income (MSI).

Ada beberapa keuntungan yang didapat dari MSI ini. Pertama, terutama bagi eks-karyawan, ini akan menghilangkan paradigma kita bahwa yang namanya penghasilan hanyalah dari gaji bulanan. Kedua, ini akan mengasah kepekaan kita terhadap peluang bisnis. Ketiga, ini akan melatih kita berorientasi hasil dan memiliki sense of urgency. Keempat, ini akan menambah keyakinan diri bahwa tanpa gaji rutin kita tetap bisa survive.

Saya sendiri sudah memiliki MSI sejak lulus kuliah. Dua tahun terakhir sebelum saya benar-benar berhenti jadi karyawan, saya mulai mencatat income saya, baik dari gaji maupun dari yang lainnya. Di akhir tahun pertama, proporsi pendapatan gaji dengan non-gaji berbanding 85:15. Di tahun kedua, proporsinya naik menjadi 65:35. Artinya, hanya dengan menggunakan 10-15% waktu, saya mampu menghasilkan 35% penghasilan tahunan saya.

Kemudian hal ini saya bicarakan dengan keluarga. Siapkah mereka hidup dengan hanya 35% saja dari income biasa? Tentunya dengan imbalan waktu yang lebih fleksibel untuk keluarga dan potensi penghasilan yang tidak terbatas.

Alhamdulillah keluarga saya menyatakan siap berjuang bersama. Saat ini, setelah lima bulan berjuang, rata-rata income saya sudah lebih dari gaji semasa kerja dulu. Tidak ada yang instan. Pada masa awal dulu, kami hidup prihatin dan mengencangkan ikat pinggang.

Paradigma MSI ini akan menjadi lebih penting setelah kita memiliki usaha sendiri. Bila kita mengerjakan project software development, harus selalu ada lebih dari satu project yang berjalan bersamaan. Bila kita mengadakan pelatihan, harus ada pemasukan dari sesi training, lisensi materi pelatihan, dan penjualan buku atau sampel kode program.

Aktif di komunitas

Rasulullah bersabda bahwa silaturahmi akan membuka pintu rejeki. Brian Tracy dan Robert Kiyosaki mengatakan bahwa aliran kas masuk berbanding lurus dengan komunikasi keluar. Hasilnya mungkin tidak terlihat langsung, tapi bisa terasakan dampaknya.

Di ArtiVisi, kita mengikuti filosofi tersebut. Saya dan Ifnu aktif mengisi blog dan berkontribusi di milis Java. Motif utamanya tentu saja sedekah ilmu dan mencari pahala. Kalau kemudian ada project yang datang dari komunitas, kami anggap itu sebagai bonus dan juga konsekuensi logis dari aktifitas tersebut.

Demikianlah sedikit sharing pengalaman mendirikan perusahaan baru. Masih panjang jalan yang harus ditempuh untuk membesarkan perusahaan yang baru seumur jagung ini. Di atas semua usaha, tentunya doa memiliki peranan yang paling penting.

Harapan saya, dengan artikel ini akan banyak pengusaha baru yang bisa membuka banyak lapangan kerja. Di satu sisi, banyak training centre dan software development company memang akan menambah saingan ArtiVisi. Tapi di sisi lain, kami jadi bisa berjualan lisensi materi pelatihan, project management training, dan consulting kepada para kompetitor.

Ayo jadi pengusaha !!


Apa itu CMMI?

Di milis Asosiasi Pengembang Perangkat Lunak Indonesia (APPLI) ramai dibahas mengenai standarisasi dalam pengembangan perangkat lunak. Salah satu standar yang populer digunakan adalah CMMI (Capability Maturity Model Integration) yang dikembangkan oleh Carnegie-Mellon University, untuk lebih tepatnya dalam departemen Software Engineering Institute. Selain itu, ada juga blog ini dan ini yang membahas tentang CMMI.

Dengan adanya standar, organisasi dapat berkembang dengan lebih terarah. Semua anggota organisasi mulai dari programmer, analis, tester, manajer, dan direktur menjadi tahu apa ruang lingkup pekerjaannya. Apa yang harus disediakan bagi pihak lain, dan juga apa yang bisa diharapkan dari departemen lain. Dengan demikian, tidak banyak effort yang terbuang karena miskomunikasi atau kurang koordinasi.

Sayangnya, dunia enterpreneur IT di Indonesia masih jarang yang hirau terhadap masalah standarisasi ini. Berbagai alasan dikemukakan, antara lain:

  • Tidak mengerti bahasa Inggris

  • Standar luar negeri tidak cocok untuk kondisi lokal

  • Standar membuat organisasi monoton dan membosankan

  • dan segudang alasan lainnya

Menurut saya, segala alasan itu cuma pembenaran saja untuk sifat malas belajar. Sebagai praktisi IT, tentunya kita sadar bahwa dunia tempat kita hidup sekarang (internet) dibangun di atas standar. Untuk bisa browsing, kita menggunakan protokol HTTP. Memeriksa email, menggunakan protokol POP3, IMAP, dan SMTP. Chatting, menggunakan protokol IRC, XMPP. Voice chat, menggunakan protokol SIP.

Protokol adalah nama lain dari standar. So, standar membuat hidup kita menjadi lebih baik. Setidaknya, standar apapun lebih baik daripada tanpa standar. Melalui artikel ini, mudah-mudahan para praktisi tergerak untuk setidaknya mempelajari dulu standar sebelum mengeluarkan vonis “tidak perlu” atau “tidak sesuai”.

Sekarang, mari kita lihat standarisasi dalam pengembangan perangkat lunak. Standar yang populer dan cukup saya kuasai adalah CMMI, jadi mari kita bahas tentang CMMI. Kebetulan saya pernah ikutan mengantarkan BaliCamp meraih CMMI Maturity Level 3.

Apa itu CMMI

CMMI adalah singkatan dari Capability Maturity Model Integration. Ini adalah kerangka kerja (framework) yang bisa digunakan untuk mengembangkan proses di dalam perusahaan.

Apa itu proses? Proses adalah cara kita melakukan suatu tugas. Misalnya, membuat proposal, menganalisa kebutuhan client, membuat kode program, dan kegiatan lainnya. Semua tata laksana kegiatan tersebut dikenal dengan nama proses atau prosedur.

CMMI membantu kita untuk memperbaiki proses di perusahaan/organisasi kita. Dengan membaiknya proses, diharapkan produk yang dihasilkan akan ikut menjadi baik.

CMMI dirumuskan oleh Software Engineering Institute di Carnegie Mellon University. Para peneliti di SEI telah mengamati proyek pembangunan perangkat lunak di seluruh dunia, mulai dari proyek kecil sampai proyek raksasa. Organisasi yang diteliti meliputi NASA, IBM, dan kontraktor Departemen Pertahanan Amerika Serikat. Pengalaman yang dimiliki organisasi tersebut dirangkum dalam seperangkat aturan yang disebut CMMI. Nah, apakah perusahaan kita sudah lebih canggih daripada organisasi di atas, dalam hal mengelola proyek software? Kalau belum, mari kita belajar dari mereka.

Apa sih isinya CMMI ??

CMMI terdiri dari rangkaian practices. Dalam rangkaian practices ini ada rambu-rambu atau rekomendasi yang dapat diikuti. Practices dalam CMMI dibagi menjadi dua, yaitu Generic Practices (GP) dan Specific Practices (SP).

Bila kita sudah mengimplementasikan practices dengan sempurna, kita dianggap sudah memenuhi Goals. Sama seperti practices, ada Generic Goals (GG) dan Specific Goals (SG).

SG dan SP dikelompokkan menjadi Process Area (PA). Total ada 22 Process Area dalam CMMI for Development versi 1.2.

Daftar PA, GG, SG, GP, dan SP dapat dilihat di spesifikasi CMMI yang bisa didonlod gratis di sini.

Apa hubungannya CMMI dengan standarisasi ISO

CMMI dan ISO sama-sama standar yang digunakan untuk menilai proses suatu organisasi. Kalau kita programmer Java, kita punya sertifikasi SCJP, SCWD, SCBCD, dan sebagainya. Nah, anggap saja CMMI atau ISO ini adalah sertifikasinya perusahaan.

Kalau di SCJP yang dinilai adalah penguasaan kita terhadap bahasa pemrograman Java, maka di ISO/CMMI yang dinilai adalah penguasaan perusahaan terhadap prosesnya sendiri.

Perbedaan CMMI dan ISO terletak pada ketelitiannya. Bila kita ingin perusahaan kita mendapat sertifikasi ISO, perusahaan kita harus memiliki Standard Operating Procedure (SOP) yang tertulis. Kemudian kita harus membuktikan pada badan sertifikasi bahwa SOP tersebut kita jalankan dengan baik. Apa saja yang kita tulis dalam SOP bebas terserah kita. ISO tidak mengatur sampai ke tingkat itu.

Berbeda dengan CMMI, selain kita punya SOP, dia punya aturan khusus tentang isi SOP. Misalnya, kalau kita melakukan analisa kebutuhan (requirement gathering), ada beberapa aturan yang harus diikuti, misalnya:

  • Pernyataan kebutuhan user harus dicatat

  • Pernyataan kebutuhan harus dikonfirmasi ke user

  • Pernyataan kebutuhan harus disetujui kedua pihak

  • Kalau ada perubahan, harus dicatat

  • Antara kebutuhan dan software yang dideliver, harus bisa dilacak bolak-balik

Singkatnya, kalau kita lulus ISO, belum tentu lulus CMMI. Sebaliknya, kalau kita lulus CMMI, besar kemungkinan kita akan langsung lulus ISO bila ikut sertifikasinya.

Apa yang dimaksud Maturity Level ??

Tujuan awal dirumuskannya CMMI sebenarnya adalah untuk mendukung proses tender di lingkungan Departemen Pertahanan Amerika Serikat (US-DoD). Mereka ingin memiliki sistem penilaian terhadap semua vendor yang mengajukan proposal. Untuk itu dirumuskanlah sistem penilaian vendor berupa Maturity Level (ML).

Maturity Level di CMMI ada 5, mulai dari yang terendah ML 1, sampai yang paling canggih ML 5. Bila perusahaan kita sudah ML-5, maka kita bisa ikut dalam tender proyek software rudal Patriot. Begitu kira-kira.

Setiap ML memiliki seperangkat PA yang harus dipenuhi agar kita berhak menggunakan titel ML tersebut. Sebagai contoh, bila kita ingin lulus ML-2, maka kita harus mengimplementasikan 7 PA. Untuk mencapai ML-3, kita harus mengimplementasikan 7 PA dari ML-2 ditambah dengan 11 PA dari ML-3. Demikian seterusnya, sehingga ML-5 yang sudah mengimplementasikan 22 PA.

Bila kita sama sekali belum mengimplementasikan apa-apa, perusahaan kita dikategorikan sebagai ML-1. Level ini diadakan sebagai hiburan bagi perusahaan yang sudah ikut SCAMPI Class A, tapi tidak lulus bahkan di ML-2. Well, ML-1 kedengarannya lebih baik daripada No-ML atau ML-0 :p

Daftar lengkap PA per ML bisa dilihat di spesifikasi CMMI.

Perusahaan saya ingin mendapat ML-5, bagaimana caranya?

Pertama, tentunya perusahaan kita harus memenuhi semua persyaratan mulai dari ML-2 sampai ML-5. Perusahaan kita harus sudah punya SOP yang mengatur semua proses sesuai aturan CMMI. Bila ada aturan yang tidak kita pahami, kita bisa datangkan konsultan untuk menjelaskan.

Setelah ada SOP tersebut, setiap orang dalam perusahaan harus memahami dan menjalankannya dengan benar. Setelah kita yakin bahwa perusahaan kita mampu, kita mendatangkan appraiser atau auditor untuk memeriksa proses kita.

Kegiatan appraisal ini disebut dengan SCAMPI. Ada macam-macam SCAMPI, tapi yang berhak mengeluarkan peringkat ML hanyalah SCAMPI Class A.

Dalam SCAMPI, Lead Appraiser(LA) akan merekrut beberapa orang dari perusahaan kita untuk membantunya mengaudit. Tim auditor ini disebut Appraisal Team Member (ATM). Perusahaan kita juga juga harus menyediakan tim yang akan diwawancarai oleh ATM, yang disebut dengan Functional Area Representative (FAR).

FAR merupakan perwakilan dari berbagai departemen dalam organisasi. Mungkin nantinya akan ada kelompok FAR dari procurement, tim project, network administrator, programmer, tester, dan lainnya.

ATM dibutuhkan untuk menterjemahkan aturan CMMI ke dalam SOP perusahaan. Misalnya, dalam CMMI ada aturan mengenai analisa kebutuhan, yaitu process area Requirement Management (REQM) dan Requirement Development (RD). Process area ini di perusahaan A mungkin diimplementasikan dengan dokumen Software Requirement Specification (SRS), tapi di perusahaan B mungkin namanya User Requirement Specification (URS), dan di perusahaan C berupa Use Case Diagram dan User Stories. Nah, tugas ATM adalah menjembatani antara istilah CMMI dan istilah internal perusahaan.

Wawancara ATM tidak aneh-aneh. Untuk setiap proses area, mereka akan tanya apakah FAR sudah mengimplementasikan. Bila sudah, mana buktinya. Bukti ini bisa berupa hard-copy, bisa juga soft-copy. Kita bisa mengajukan email sebagai evidence. Bahkan kita juga bisa menunjukkan log Subversion atau item bug dalam aplikasi bug tracker.

Dalam sintaks Java 5, proses appraisal dalam SCAMPI Class A bisa digambarkan sebagai berikut.

int level = 1;

appraisal:
for(int i=1; i<=5; i++) {
    List allProcessAreas = maturityLevel[i].getProcessAreas();
    for(ProcessArea pa : allProcessAreas) {
        for(GenericPractice gp : allGenericPractices) {
            if(!far.isImplement(pa, gp) { break appraisal; }
        }

        for(SpecificPractice sp : pa.getSpecificPractices()) {
            if(!far.isImplement(sp)) { break appraisal; }
        }

        level++;
    }
}

Berdasarkan hasil wawancara FAR oleh ATM, LA akan memutuskan ML berapa yang pantas untuk perusahaan kita.

Semua hasil SCAMPI Class A akan dilaporkan pada SEI dan akan dipublikasikan di internet. Sebagai contoh, kita bisa melihat hasil appraisal BaliCamp pada tahun 2006.

Sayangnya, sampai sekarang belum ada appraiser lokal. Jadi kita harus mendatangkan appraiser dari luar negeri.

Informasi lebih rinci mengenai SCAMPI dapat dilihat di spesifikasi resminya. Di sana ada penjelasan rinci tentang apa saja syarat menjadi ATM, bagaimana proses interview dilakukan, dan bagaimana cara memutuskan apakah suatu evidence sudah memenuhi syarat atau belum.

Apa yang dimaksud Continuous Representation?

Perusahaan mengadopsi CMMI untuk berbagai tujuan. Ada yang bermotif marketing, yaitu meraih ML tertentu dengan harapan akan mendapat project dari US-DoD, ataupun simply memperkeren Company Profile. Sama saja dengan kita ambil SCJP.

Ada juga yang memang berniat meningkatkan kualitas prosesnya. Mengadopsi CMMI dengan harapan perusahaan akan menjadi lebih baik.

Kita kesampingkan dulu motif marketing. Mari kita lihat motif peningkatan kualitas. Ada beberapa pendekatan untuk mengadopsi CMMI. Kita bisa mengadopsi per ML, misalnya tahun ini ML-3, berikutnya ML-4, dan seterusnya. Atau bisa juga kita hanya memfokuskan perbaikan pada satu process area tertentu saja, misalnya Requirement Management, atau Risk Management.

Bila kita berorientasi ML, maka kita mengambil pendekatan Staged Representation. Sedangkan bila kita berorientasi PA, maka kita mengambil pendekatan Continuous Representation.

Bila perusahaan saya sudah ML-5, apakah perusahaan akan menjadi monoton dan membosankan? Apakah karyawannya akan menjadi seperti robot belaka??

Bagi programmer seperti saya dan Anda, kreativitas dan improvisasi adalah kenikmatan kerja yang utama. Itulah yang membuat kita memilih profesi software developer. Oleh karena itu, wajar bila kita mengkhawatirkan masalah ini.

Well, saya sudah pernah mengantarkan BaliCamp meraih ML-3, dan ikut terlibat dalam persiapan mencapai ML-5. Jadi, yang akan saya ceritakan ini adalah pengalaman nyata, bukan FUD (Fear, Uncertainty, Doubt).

Sebagai programmer yang terlibat dalam project, hal yang paling menyebalkan bagi kita bukanlah kesulitan teknis atau kerumitan algoritma. Semakin sulit, semakin menantang bagi kita. Hal yang paling menyebalkan adalah perubahan requirement di tengah jalan. Fitur yang kita implementasi dengan susah payah, bertampilan Web 2.0, menggunakan teknologi AJAX, tiba-tiba divonis client, “Ini bukan yang saya mau, GANTI !!!”.

Atau mungkin tidak se-ekstrim itu. End-user hanya minta geser tombol sedikit, tambah fitur sedikit, dan sedikit-sedikit lainnya, yang lama-lama tentunya akan menjadi bukit. Tiba-tiba, project sudah telat 2 bulan, dan fitur baru 50% terimplementasi. Bukan karena kita codingnya lama, tapi karena user minta perubahan melulu.

Nah, urusan perubahan requirement ini wajib hukumnya untuk dikelola dengan baik. Diatur dalam process area Requirement Management (REQM) yang ada di ML-2 dalam SP 1.3. Kalau perusahaan kita mengimplementasi REQM dengan baik, kita sebagai programmer akan lebih tenang hidupnya. Semua perubahan terhadap aplikasi yang sedang dibuat harus melalui rangkaian prosedur untuk memastikan perubahan tersebut benar-benar diinginkan dan sudah dipertimbangkan konsekuensinya. End-user tidak akan semena-mena meminta perubahan, tapi harus melalui persetujuan atasannya dan atasan kita. Dengan demikian, perubahan yang sampai pada programmer sudah pasti adalah perubahan yang penting, bukan hanya menurut end-user, tapi juga menurut sponsor project. Bahkan, adanya prosedur ini saja sudah cukup untuk membatasi liarnya imajinasi end-user.

Ini hanya satu contoh saja bagaimana implementasi CMMI memudahkan hidup kita sebagai programmer. Silahkan baca-baca spesifikasinya untuk mengetahui aturan-aturan lainnya. Secara umum, CMMI sama sekali tidak menyinggung tentang teknologi, IDE, tools, bahasa pemrograman yang digunakan. Bahkan kegiatan coding sendiri cuma dibahas dalam 2 PA dari 22 yang ada, yaitu Technical Solution dan Product Integration.

Technical Solution mengharuskan kita untuk mengidentifikasi alternatif pendekatan yang tersedia. Kemudian dari alternatif tersebut, kita pilih yang paling baik, berdasarkan kriteria yang kita tentukan sendiri. Jadi tidak boleh langsung coding, melainkan harus mikir dulu.

ML-4 dan ML-5 banyak menitikberatkan pada analisa kuantitatif dan continuous improvement. Sukakah anda terlibat dalam project yang selesai tepat waktu, tidak lembur, libur pada hari Sabtu-Minggu? Nah, kalau sudah ML-5, project seperti ini bukan lagi impian, tapi sudah menjadi hal yang biasa. Delay dalam project sudah bisa diketahui sejak dini. Dari mulai telat 1 hari, project manager sudah bisa tahu dan mengambil tindakan antisipasi seperti minta pengunduran jadwal, mengurangi requirement, dan sebagainya.

Sebagai programmer, tidak banyak perubahan yang kita rasakan selain project menjadi lebih tenang dan teratur. Yang paling besar terkena dampak implementasi CMMI adalah Project Manager. Tiba-tiba saja dia akan diharuskan membuat banyak dokumen dan menyediakan data. Pekerjaan administratifnya akan menjadi jauh lebih banyak.

Tentunya hal ini bisa diatasi dengan otomasi proses. Begitu prosesnya sudah rapi, kegiatan administrasi bisa di-online-kan. Masalah versioning dokumen bisa diatasi dengan Subversion. Daftar resiko project, task management, bug report, bisa diotomasi dengan Bug/Issue Tracker. Lagipula, bila perusahaan kita bergerak di bidang IT, tentunya persenjataan seperti itu sudah seharusnya menjadi lifestyle kita.

Demikianlah penjelasan singkat tentang CMMI. Lain waktu kita akan bahas satu persatu Process Area yang ada.

Semoga bermanfaat.


Long time no see

Mohon maaf bagi pembaca setia blog saya, karena sudah lama tidak ada artikel baru. Pada Februari 2008 yang lalu, saya mengambil keputusan yang mengubah arah hidup saya, mudah-mudahan ke arah yang lebih baik.

Saya mengundurkan diri dari posisi empuk dan pekerjaan menantang di Sigma Karya Sempurna (BaliCamp) dan memutuskan untuk menggarap ArtiVisi secara lebih serius bersama Ifnu.

Sebagai perusahaan start-up, banyak hal yang harus dilakukan pada masa awal berdirinya perusahaan. Hal-hal teknis seperti setup repository server dan hal non teknis seperti rumus penggajian pegawai, aturan cuti, dan sebagainya harus dipikirkan dan dibuatkan prosedurnya. Belum lagi pengembangan produk pelatihan dan standarisasi kualitas bahan ajar. Dan yang paling penting, cari proyek supaya dapur tetap ngebul. Sehingga akibatnya aktivitas blogging menjadi kalah prioritas.

Setelah empat bulan berlalu, banyak pengalaman yang didapat, dan juga banyak project yang sudah closing. Urusan non teknis yang penting juga sudah banyak yang bisa didelegasikan. Karena itu, mudah-mudahan saya bisa mengisi blog lagi.

Beberapa pengalaman yang rencananya akan saya tuliskan antara lain:

Stay tuned … :D