My thought about Programming (and Why I won’t call myself programmer)

Saya masih inget perjuangan berat saya 10 tahun yang lalu: membuka mata saat pelajaran Bu Fazat. PTI-A, jam 2, abis kenyang makan siang, berusaha memahami algoritma mengupas kentang, dengan  otak yang masih ga nemu-nemu koneksi antara kentang dan programming. Not to mention, bahkan saya masih bertanya-tanya algoritma itu sebenernya apa. Nilai D di mata kuliah PTI-A sempet bikin saya pengen hijrah ke jurusan Elektro, sampai suatu ketika saya mendapati kenyataan pait kalo kemampuan (+nilai) Dasar Rangkaian Elektrik saya jauh lebih menyedihkan dari programming. Saya pun memutuskan untuk milih jurusan STI–Sistem Teknologi Informasi–sebagai pilihan utama waktu penjurusan jaman S1. Because I’m pretty sure I won’t survive in hardcore Computer Science or Electrical Engineering.

Udah kedengeran cukup familiar?

Di Jurusan STI, meskipun masih ada programming dan sedikit elektro (FkYea, Sistem Digital, I am talking about you!), seenggaknya bebannya lebih tolerable dibanding CS/Informatika. Tapi kenyataannya, di taun ke-2, saya malah ga lulus kuliah Algoritma dan Struktur Data. Iya, ga lulus. Bukan remed lagi. Jadi harus ngulang kuliah itu di tahun berikutnya. Ibarat di anime ato film drama jepang, programming tuh kayak tokoh cowok ikemen yang dingin dan sulit dimengerti. Yang udah gatau harus diapain lagi untuk bisa mendapatkan hati-nya (?).

kokoro ini lelah, Mas.

Waktu itu saya sempet berpikir kalo programming itu bukan untuk saya. Udalah, ikemen itu terlalu sulit buat diraih. Terlalu banyak pengorbanan dengan ROI yang terlalu kecil. Sampai pas abis lulus kuliah, tibatiba kerjaan pertama saya membutuhkan programming. Nothing fancy, actually. Ga sampe bikin yang susah dan aneh-aneh kayak bikin mini-fesbuk. Cuma nge-convert data excel jadi suatu bentuk XML khusus pake macro. But that’s the turning point where the whole programming thing started to make sense to me.

Ternyata selama kuliah saya belajar programming dengan approach yang kurang tepat. Buat sebagian orang, algoritma mengupas kentang itu mungkin start yang oke. Buat saya engga. Mungkin sebagian orang bisa langsung ngerti konsep OOP dengan belajar teori di kelas dan ngerjain tubes yang deadlinenya duaminggu sekali, belom ditambah tugas kuliah lain yang nyita waktu. Ujung-ujungnya saya cuma ngejar yang penting tubes kelar. Saya baru paham konsepnya setelah bikin modul-modul untuk automated web testing di pekerjaan saya yang kedua. Dulu saya mikir kalo untuk bisa programming itu harus hafal algoritma searching, sorting, stack, queue, list operation, dll dsb diluar kepala. I was somehow caught in a thought that if I cannot do all those fancy algorithm on paper, I won’t be able to program at all. Barulah setelah saya nyemplung ke dunia nyata, saya melihat programming dengan perspektif yang baru.

No, you don’t need to remember every programming language syntax and algorithm. Itulah mengapa dokumentasi itu ada. Udah banyak library yang meng-handle berbagai algoritma dasar. Saat kita masih mikir cara implement quick sort from the scratch, udah ada library yang memungkinkan kita melakukan operasi itu dengan satu baris kode. It’s okay to have a preference over one programming language. Tapi bahasa pemrograman akan selalu berubah dan berkembang. Penggunaannya biasanya tergantung sama existing application yang udah ada pakenya apa. Saya lebih suka dengan paham bahwa pada akhirnya, programming itu hanyalah sebuah alat. Alat untuk membantu kita mencapai tujuan, apapun itu.

Sometimes, the kind algorithm that you need to care is not about how your program technically search data. But rather like: if you have input A, want to produce output B, C, D, how can you use existing resource to reach your goal? If not, what other feasible solution available? Programming itu salah satu cara untuk mengubah input jadi output (tapi bukan satu-satunya cara).  Saya ngerasa struggling waktu kuliah karena ga berpikir dalam kerangka itu. Terlalu tenggelam dalam pertanyaan yang terlalu detail dan teoretis tentang definisi seputar konsep pemrograman. Padahal, ujung-ujungnya definisi itu ngga seberapa ngaruh kalo udah praktek. You may call it method, function, procedure, whatever, as long as they serve pretty much similar purpose, it’s good.

Mungkin itu ga menjadikan saya programmer yang baik. That’s why I won’t even bother to call myself a programmer. Being Programmer sounds very demanding to me. Kalo jadi seorang programmer itu artinya saya harus jadi dewa yang tau semua bahasa, sintaks, hapal semua algoritma, dapet A di semua mata kuliah programming, dan selalu berhasil membuat kode yang super efisien tanpa bug, then I’m out. Bhay. Makasih. Tapi setidaknya saya tau (dan akan berusaha mencari tau kalau belum tau) apa yang harus dilakukan seandainya pekerjaan saya membutuhkan sesuatu yang berhubungan dengan programming. Bisa dibilang, saya melihat programming dari sisi STI.

Saya ga bilang kalo mempelajari algoritma di bangku perkuliahan itu ngga berguna. It is useful. Minimal membuka mata tentang apa aja algo yang udah ada. Kalo misalnya kerjaan kalian adalah riset tentang Artificial Intelligence, misalnya. Ya mungkin harus paham algoritma-algoritma yang mendukung beserta model matematisnya secara mendetil, karena disitulah fokus inovasinya. Atau kalo berhubungan sama optimisasi, mungkin harus ngerti lebih jauh tentang memory management dan mempertimbangkan itu ketika programming. Tapi in general, kalo misalnya saya disuruh melakukan sesuatu dengan 2 cara: implement algoritma dari nol tapi butuh waktu 3 jam atau pakai library yang udah ada tapi cuma butuh 10 menit, saya bakal pilih yang kedua. For me, it’s not about pride of solving already existing algorithm. It’s about getting things done in the best possible way depends on situation.

Lagipula, belajar programming di luar bangku perkuliahan menurut saya lebih menarik. Ada lebih banyak hal yang bisa dieksplor. Bener kata Richard Muller, kuliah itu cuma pembuka jalan. Bukan dengan kuliah berarti langsung jadi pinter. Banyakan hal-hal penting itu malah saya pelajarin diluar kuliah. Lewat kerjaan lah. Deployment lah. Debugging lah. Testing lah. Project random lah. Apapun. Malah kadang, setelah udah ga kuliah baru deh ngerti apa aja tu maksud yang diomongin dosen jaman kuliah.. hahaaa. Maafkan anak didikmu ini ya Pak Bu Dosen.. 😛

Selama ini, saya juga sering denger kalo orang yang suka ngoding cenderung ga suka hal-hal berbau seni dan sebaliknya, orang-orang seni kebanyakan ga suka coding. Tapi menjejakkan kaki di kedua dunia itu ternyata lumayan menyenangkan juga. Jadi bisa tau pola pikir atau istilah-istilah orang IT dan orang seni kaya gimana (walaupun saya lebih nyaman menyebut diri saya illustrator amatir ketimbang programmer).

Sebagai orang yang juga udah mayan lama berkecimpung di bidang art & illustration, saya berpikir kalo konsep re-use dan modularisasi dalam programming itu mirip sama bikin komik atau gambar pake photoshop. I understand how painful it is to maintain messy code in the long run, just like how painful it is to maintain messy layers on Photoshop (and how important is naming convention if working on huge project!).

messy layers in Photoshop 😛 (private collection)

So if you are like me who wasn’t born with natural Programming talent in mind, but not giving up yet, you can try looking at programming from different angle. Maybe relate it to something you like. Or think about some fun stuff you can do with programming. Like Internet of Things, create your own small personal smart home system, lighting, whatever. I find that learning programming with purpose is way more enjoyable.

The ikemen is actually not that cold, if you know the right way to approach him ^_^

source: pinterest

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s