Dahulu, ketika masih sekolah (SD-SMP-SMA), matematika dan fisika adalah pelajaran favorit saya. Matematika adalah cinta pertama, hingga ia menjadi terlalu abstrak bagi pikiran saya. Cinta kedua saya adalah fisika. Dalam fisika, matematika digunakan sebagai alat. Hal yang lebih penting (dan lebih menarik bagi saya) adalah pemahaman mengenai konsep dan hukum-hukum fisika.

I was pretty good at those two. Jika saya telah memahami suatu konsep fisika beserta teknik matematikanya, maka saya siap mengerjakan soal serumit apapun. Namun, hanya sebatas itulah minat saya terhadap fisika. Sama seperti matematika, konsep-konsep fisika tingkat lanjut – seperti teori relativitas dan mekanika kuantum – terlalu abstrak bagi saya. Mungkin saya bisa mendalami fisika eksperimental, namun saya tidak cakap dalam pekerjaan laboratorium.

Saya adalah tipe orang yang sensing, hanya bisa memahami sesuatu yang konkrit, atau setidaknya bisa dibayangkan dengan analogi hal-hal yang konkrit. Selain itu, saya hanya tertarik untuk mempelajari sesuatu yang mudah untuk diaplikasikan dan terlihat jelas manfaatnya di dunia nyata. Hal inilah yang mengantarkan saya pada cinta saya yang ketiga: ilmu komputer.

Ilmu komputer juga terdiri dari konsep-konsep abstrak. Sebagian besar konsepnya berasal dari matematika seperti logika, algoritma, matematika diskrit, metode formal, metode numerik, dan sebagainya. Ada juga beberapa konsep yang idenya berasal dari kehidupan nyata seperti struktur data dan pemrograman berorientasi objek. Hal yang menjadikan ilmu komputer berbeda dengan fisika adalah prakteknya: pemrograman. Pemrograman dilakukan sebagai implementasi dari solusi terhadap masalah dalam ilmu komputer. Karena prosesnya hanya dilakukan dengan duduk di depan layar monitor dan mengetik kode program, tidak seperti eksperimen fisika, saya cukup cakap dalam hal ini :D .

Ketika saya kuliah, pemrograman dipelajari dalam mata kuliah Algoritma dan Pemrograman, Struktur Data, Basisdata, Pemrograman Berorientasi Objek, dan Konsep Bahasa Pemrograman. Selain itu, dalam mata kuliah yang lain sering diberikan tugas untuk membuat program. Namun, saya merasa kurang puas jika hanya membuat program untuk keperluan kuliah. Seperti yang sudah saya sampaikan sebelumnya, saya ingin membuat program yang bermanfaat dalam dunia nyata. Oleh karena itu, sembari kuliah saya juga bekerja sambilan sebagai programmer. Saya sempat terlibat dalam berbagai proyek rekayasa perangkat lunak, baik dalam proyek yang saya dapatkan sendiri (dan dikerjakan bersama beberapa orang teman) maupun proyek di institusi tempat saya bekerja.

Faktanya sungguh menyedihkan: tidak satu pun perangkat lunak dalam proyek-proyek tersebut yang benar-benar digunakan oleh pengguna. Untuk kasus proyek di mana saya hanya sebagai pegawai, proyek tersebut nampaknya memang hanya untuk menghabiskan anggaran. Memang saya mendapatkan honor, namun tentu saja kepuasan batin kurang karena perangkat lunak yang saya buat tidak digunakan.

Ceritanya lain untuk kasus di mana proyek saya dapatkan sendiri. Dalam proyek tersebut, saya (dan teman-teman saya yang terlibat) bertanggung jawab secara langsung terhadap klien. Ada sebuah proyek yang terpaksa dihentikan karena jadwal sudah terlalu molor dan kami masih belum mampu untuk men-deliver perangkat lunaknya. Jadi, atas kesepakatan bersama dengan klien maka kami menghentikan proyek tersebut dan uang muka yang telah diberikan klien kami kembalikan setengahnya.

Berdasarkan pengalaman dari proyek-proyek tersebut, saya memahami bahwa kemampuan pemrograman saja tidak cukup untuk membuat suatu perangkat lunak. Hal itu sebenarnya telah saya ketahui ketika mengikuti mata kuliah Rekayasa Perangkat Lunak. Pada mata kuliah tersebut diajarkan mengenai berbagai macam proses dan metodologi dalam rekayasa perangkat lunak. Dalam metodologi waterfall, pemrograman hanyalah aktivitas utama dalam fase implementasi. Masih ada fase lain seperti requirement definition, perancangan (design), dan pengujian (testing).

Proses rekayasa perangkat lunak di dunia nyata, khususnya di Indonesia, tidak seindah teori. Jika saya sudah mendapat materi kuliah Rekayasa Perangkat Lunak, mengapa proyek yang saya kerjakan bisa gagal? Yah, kalau kata CEO di perusahaan saya sekarang sih:

Theory is easy. The difficult thing is applying theory into practice.

Related posts:

  1. Belajar Rekayasa Perangkat Lunak – Bagian II
  2. Sebuah Jawaban Atas “Misteri Proyek Rekayasa Perangkat Lunak”
  3. Tantangan Dalam Membangun Perangkat Lunak untuk Domain Bisnis
  4. Belajar Pemrograman versus Belajar Bahasa Pemrograman