Minggu, 11 November 2007

PAPARAN HASIL DIDIK AKADEMIS BIDANG IT 2


New Breed of Developer
Dalam kurun waktu sepuluh tahun ke depan akan banyak hal terjadi dalam dunia IT. Beberapa ahli memprediksi akan lebih banyak bahasa pemrograman lahir. Bahkan java sendiri akan berevolusi menjadi platform untuk bahanyak bahasa, terutama scripting language. JDK 7 kemungkinan besar akan sudah menyertakan salah satu dari JRuby atau Groovy dalam distribusinya. Bahkan ada pula ahli yang memprediksi akan lahir sebuah bahasa pemrograman baru yang bisa menyaingi java dalam segala hal (really?).

Di sisi lain industri IT, terutama di Indonesia, berusaha dengan keras untuk terus bisa bersaing. Delivery schedule harus dipenuhi dengan taruhan apapun, deadline akan benar-benar menjadi pokok persoalan yang selalu urgent untuk dilaksanakan. Sedangkan antrian hal-hal penting yang harus diselesaikan secepatnya juga semakin panjang. Kualitas dan teknologi software pun harus ditingkatkan tanpa mengorbankan produktifitas. Padahal teknologi-teknologi baru bermunculan bak upil hidung di udara kotor jakarta :D.

Produktifitas menjadi semakin mendesak untuk ditingkatkan dengan tetap mengikuti teknologi-teknologi baru. Jika jaman dulu web kental dengan teknologi action base, sekarang component base yang memungkinkan industri web 2.0 merajalela menggelembung bak balon udara. Tanpa dua faktor tersebut, kita tidak dapat bersaing di dunia usaha IT Indonesia yang bersaing sangat ketat.

Dari perspektif ini kita sebagai programmer juga harus berevolusi mengikuti perkembangan IT itu sendiri. Kepasifan dan keapatisan hanya akan menenggelamkan kita lebih dalam ke area nyaman yang mematikan. Saya menyebut programmer generasi baru ini sebagai "new breed of developers". Mari kita bahas beberapa faktor yang mencirikan generasi baru developer ini.
Smart and Get-things-doneFaktor utama yang harus dipunyai developer generasi baru adalah Smart dan Get-things-done. Joel Spolsky dalam artikel "Guerilla to Interviewing" menyaratkan dua faktor utama sebagai pertimbangan, yaitu : Smart and Get-things-done. Smart tapi tidak Get-things-done biasanya menyiratkan seseorang dengan background pendidikan dan nilai akademis yang luar biasa. Seringnya orang-orang seperti ini tidak banyak yang mau mendengarkan karena sok teoritis dan tidak praktis sama sekali. Banyak berceloteh tentang teori ini dan itu tapi tidak bisa mendeliver aplikasi tepat waktu.

Get-things-done tapi tidak smart akan melakukan banyak hal-hal ceroboh yang pada akhirnya menyusahkan orang lain. Kode program yang tidak dites, implementasi yang hanya benar dari satu test-case sederhana, requirement yang tidak jelas dan pengertian yang dangkal akan pentingnya software quality assurance. Bahkan lebih parah kalau waktunya dihabiskan untuk mencari script-script contekan dari website penyedia script program tanpa melihat lebih jelas implementasi script tersebut. Yang menyebalkan sih kalau orang-orang ini tidak peduli dengan praktek code convention yang baik, semisal: menggunakan variable A, B, C, temp, temp1, temp2, dan seterusnya. Akibatnya orang lain juga akan kesusahan pada waktu kebodohan-kebodohan ini muncul ke permukaan.

Smart dan get-things-done artinya anda menyelesaikan tugas dengan baik, sempurna dan tidak melewati batas deadline. Ketika pekerjaan selesai itu artinya benar-benar selesai dan softwarenya bekerja dengan baik, tidak ada lagi bug bodoh dan quality assurance yang asal-asalan. Orang yang pintar selalu mencari cara baru bagaimana menyelesaikan masalah tepat waktu dengan kualitas yang terus meningkat. Banyak membaca referensi berkualitas maupun blog dari para ahli merupakan makanan wajib sehari-hari jika kita ingin terus berada dalam posisi up-to-date.

Love to Learn New ThingsDua faktor tersebut sangat penting demi tercapainya produktifitas perusahaan, tetapi ada sisi lain yang harus dipunyai oleh programmer, terutama java, saat ini. Andrian Coyler CTO Interface21, meramalkan "More APIs, more frameworks, more stuff. And we'll have to figure how to deal with that". Untuk mengantisipasi ramalan ini, seorang programmer generasi baru harus senang "Learning new things" yang selalu menganggap teknologi baru adalah tantangan baru yang menguras adrenalin (hahahahah). Seperti yang diungkapkan Eugene Ciurana, enterprise architect di Walmart.com : "When I hire someone and all they have in their resume is Java, I don't hire that [person]. I think they should have a broader skill set. I look for people who have a broader background and are always trying to learn new things".

Di masa mendatang penguasaan Java fundamental saja sangat tidak cukup sebagai syarat mendapatkan pekerjaan bergengsi, apalagi tanpa skill java sama sekali!. Membuat aplikasi java sekarang ini semakin kompleks saja, sehingga programmer baru dipaksa untuk belajar berbagai macam topik mengenai pattern dan framework dalam waktu yang sangat singkat. Kemampuan untuk mempelajari hal-hal baru dengan cepat akan menentukan perkembangan kita sebagai programmer.

Namun diperlukan pengalaman dan kearifan untuk membedakan mana pekerjaan dan mana hobi. Mengetahui hal-hal baru terkadang menjadi hobi yang membawa kita untuk selalu mengupgrade pengetahuan kita. Tapi ingat, terkadang masalah yang sekompleks apapun tetap memerlukan penyelesaian yang sederhana. Banyak orang tergoda untuk mengetahui framework MVC yang canggih-canggih seperti Tapestry5 atau Struts2, tapi jika scope pekerjaan menghendaki kita menggunakan Struts, yha kenapa harus repot?. Kita juga harus melihat sustainability project yang kita kerjakan dari sisi resource, misalnya ada satu atau dua developer senior angkat kaki, apakah menggantikan mereka dengan developer junior memerlukan learning curve yang panjang?. It's good to use the most sophisticated framework but it's better to use right tools for right job.

Proof of concept adalah teori yang harus diterapkan untuk mengetahui apakah suatu framework dapat bekerja baik seperti yang diiklankan. Lebih jauh lagi teori ini digunakan untuk membuktikan apakah suatu framework cocok digunakan untuk menyelesaikan suatu masalah tertentu. There are no such silver bullet or one tools for all problem. Selalu ada cara terbaik untuk menyelesaikan suatu masalah, dan ga ada satu cara yang bisa menyelesaikan semua masalah.

Sering menjalankan kegiatan Proof of concept terhadap suatu framework baru adalah sikap yang arif dalam mengendalikan kecintaan kita dalam mempelajari hal-hal baru. Belajar terus menerus hal-hal baru hanya karena hasrat yang menggebu-nggebu tanpa diarahkan ke sesuatu yang kongkrit dan bermanfaat adalah kesia-siaan belaka. Akan jauh lebih bijaksana jika dalam proses kita mempelajari hal-hal baru diarahkan untuk menyelesaikan masalah yang sering kita hadapi dengan lebih baik, tidak dipakai untuk adu sok pinter :D.

Jangan Jadi Jagoan, Jagolah Berjama'ahSangat menyenangkan rasanya untuk selalu lebih tahu dari orang lain dan dijuluki jagoan. Tapi gw yakin perusahaan tidak mencari jagoan-jagoan berlagak cowboy yang tidak pernah bisa menerima masukan dari orang lain, dan tidak pernah bisa menerima bahwa orang lain lebih benar. Lebih bijaksana jika kita memang lebih tahu dari orang lain, ajaklah orang lain untuk ikutan tahu juga. Capasity Building dalam konteks perusahaan IT adalah faktor terpenting kemajuan perusahaan, karena barang modal perusahaan IT bukan pabrikm bukan pula tambang emas, tetapi sistem dan sumber daya manusia perusahaan. Kita akan dihargai dengan lebih tinggi jika mau dengan sabar mengajarkan orang lain apa yang kita bisa, mulailah dengan hal-hal kecil, semisal shortcut IDE agar coding lebih produktif.

Di level lebih tinggi lagi, ukuran produktifitas dari seseorang tidak melulu diukur dari kemampuan tehnikalnya atau seberapa banyak kode yang telah ditulisnya. Tetapi kemampuan seseorang untuk membuat orang lain menjadi lebih produktif akan jauh lebih bermanfaat. Sebuah perusahaan akan sangat rugi jika menggaji Software Architect untuk koding sendirian, yang diminta oleh perusahaan adalaha bagaimana si Super Jago Software Architect ini bisa menularkan keahlianya kepada programmer lain.

Generalized SpecialistScott Ambler, evangelist Agile development mempunyai ungkapan yang pas "A generalist is a jack-of-all-trades but a master of none, whereas a generalizing specialist is a jack-of-all-trades and master of a few". Sebuah grup kumpulan generalist adalah bencana, karena semuanya berteori dan tidak ada yang bisa menyelesaikan pekerjaan (get-things-done) sama sekali. Tetapi sebaliknya kumpulan sepesialist yang terlalu fanatik terhadap platform pengembangan software atau framework tertentu juga akan menyebabkan bencana, setiap orang akan mempertahankan pendapat bahwa bidang yang dikuasainya adalah yang terbaik untuk digunakan dalam projek. Spesialist yang buruk terkadang terlalu PD dengan bidang yang dikuasainya dan tidak mau membuka wawasan terhadap cara-cara baru mengatasi menyelesaikan tugas.

Generalized Specialist sebaliknya, mengetahui segala macam hal dan mengerti sampai menedalam beberapa hal. Dengan pengetahuanya yang luas, si generalized specialist tahu mana cara terbaik untuk digunakan dan mengerti betul bagaimana cara tersebut memecahkan masalah dalam praktek, bukan teori. Jabatan sebagai software architect atau chief technology officer memerlukan jenis developer yang bisa menjadi Generalized Specialist.
So, What About Now?Setelah jauh-jauh membahas faktor-faktor apa saja yang diperlukan seorang generasi baru programmer, mari kita lihat lebih jelas tentang apa yang terjadi sekarang ini. Sebagai referensi, saya menggunakan entry blog teman saya, Endy, yang berisi tentang proses rekruitmen di perusahaan dimana beliau bekerja.

Sekarang coba kita lihat apa yang disyaratkan Endy dalam syarat-syarat yang harus dipenuhi untuk menjadi karyawan balicamp dan anggota timnya :
1. Konsep dasar OOP
2. Dasar-dasar Java
3. Pernah menggunakan minimal 2 (dua) bahasa pemrograman
4. Konsep struktur data, misalnya tree, list
5. Konsep relasional termasuk join dan subquery
6. Mengerti SQL untuk minimal satu produk database
7. HTML dan CSS
8. Dasar-dasar jaringan komputer
9. Bahasa Inggris (minimal membaca)
10. Pernah membuat minimal satu aplikasi utuh (dari tampilan depan sampai ke database, lengkap dengan validasi) dengan minimal 4 (empat) tabel yang berelasi Untuk memenuhi poin dari satu sampai sembilan, you have to really smart, karena semuanya diajarkan di matakuliah yang mengerikan hiiiii!!. Konsep OOP dan java diajarkan di mata kuliah Sistem berorientasi objek. Ada pula matakuliah Bahasa Pemrograman, kemudian Struktur Data. SQL diajarkan di Basis Data Relational, Jaringan Komputer mengajarkan seluk-beluk protokol dan jaringan. Dan sisanya kita harus belajar sendiri di luar mata kuliah yang diajarkan di bangku kuliah. Tentu saja yang penting adalah kita bisa membuktikan bahwa we are productive and get things done dengan membuat aplikasi kecil karya sendiri sampai selesai.

Poin-poin diatas adalah skill dan mentalitas dasar sebagai modal untuk menjadi developer berkualitas. Namun modal itu akan sia-sia jika kita tidak berusaha untuk mengembangkanya sampai batas-batas kemampuan. Tidak perlu takut gagal, kalau gagal coba lagi dan coba lagi.
Continues Learning Setinggi apapun posisi anda, kemauan untuk terus belajar menjadi esensial. Tidak ada yang tidak berubah di dunia ini selain perubahan itu sendiri. Dengan terus belajar dan belajar, perubahan apapun tidak akan bisa menjatuhkan kita, bahkan malah menjadi keunggulan karena kita selalu bisa beradaptasi dengan perubahan tersebut.

Dari paparan yang sangat bertele-tele diatas sebenarnya kuncinya ada pada poin terakhir, yaitu continues learning. Ketika kita sampai pada titik dimana belajar adalah attitude kita sehari-hari, anda tidak perlu khawatir, good things akan selalu datang silih berganti.

Tidak ada komentar: