Belajar dari Wawancara

Tadi siang saya habis ketemu dosen untuk pengajuan bimbingan untuk persiapan proposal disertasi (di sini untuk S2 namanya disertasi). Menurut pengalaman seorang teman, ada kalanya saat bertemu dengan dosen kita akan dites kemampuan programming-nya. Saya pikir, “Oh, okelah. Dulu juga sudah pernah beberapa kali wawancara saat melamar pekerjaan kan.” Kandidat pembimbing lainnya yang ditemui kemarinnya malah tidak memberikan tes semacam itu. Jadi, saya pikir semua akan baik-baik saja.

Ternyata saya salah.

Setelah memperkenalkan diri lagi, saya mulai ditanya-tanya dulu pernah belajar apa saja. Kemudian, karena saya menyatakan bahwa saya cukup percaya diri untuk urusan ngoding, ditanyalah apakah saya keberatan kalau diberikan tes sederhana untuk mengetahui kemampuan saya. Maka, penderitaan wawancara itu pun dimulai.

Insertion Sort

Pertanyaan yang diberikan kepada saya pertama kali adalah mengenai insertion sort. Sesuatu yang sebenarnya cukup sederhana dan punya kemungkinan ditanyakan cukup besar. Perihal sorting ini sendiri bahkan jadi satu volume khusus dari seri buku The Art of Computer Programming oleh Donald Knuth. Ini menyatakan betapa pentingnya untuk tahu hal seperti ini.

insertion-sort
Ilustrasi | Sumber

Saya ingat bahwa insertion sort itu seperti mengurutkan kartu di tangan saat bermain capsa. Pertanyaan berikutnya yang memusingkan saya, “Apa bedanya dengan bubble sort?” Nah, loh. Setelah saya pikir-pikir lagi, ternyata memang agak mirip idenya. Saya pun akhirnya tidak bisa menjelaskan dengan baik idenya. Kegagalan pertama.

Linked List

Berikutnya, saya diminta untuk membuat fungsi untuk membalik urutan dari linked list. Jadi, dari 1 -> 4 -> 0 -> 4 -> 5, menjadi 5 -> 4 -> 0 -> 4 -> 1. Kalau di Java, gampang dong? Sudah banyak library untuk mengerjakan itu.

java.util.Collections.reverse(List list)

Kelar.

Masalahnya, saya diminta membuat ulang programnya. From scratch. Pusing lah saya. Lebih-lebih lagi, saya masih sering bermasalah dengan menghadapi tekanan.

Syntax saya berantakan. Sudahlah tulisannya jelek, tercampur-campur pula antara pseudo-code, Java syntax, dan Python syntax. Yang ada di otak saya saat itu adalah memanfaatkan pustaka standar dari Java, tapi ya enggak bisa dipakai kan?

Pada akhirnya, dosennya kelihatan kasihan sama saya karena tidak ada kemajuan berarti. Akhirnya saya diminta menggambarkan dulu apa itu linked list. Nah, kalau ini saya masih bisa. Sayang, saya benar-benar tidak terbayang bagaimana membalik urutannya. Pertanyaan tentang ini pun disudahi. Kegagalan kedua.

n-th Fibonacci Number

Deret Fibonacci nampaknya menjadi soal favorit banyak orang. Bahkan, sebelum bertemu dengan dosennya siang tadi, saya sempat membahas kalau dulu pernah dites semacam ini saat wawancara kerja dulu. Dulu, saya terlalu lama berpikir untuk bisa sampai ke solusi yang dibutuhkan. Harusnya, saya sudah belajar dari pengalaman tersebut.

fibonaccishallowdiags_1000
Deret Fibonacci | Sumber: mathworld.wolfram.com

Well, saya berhasil membuat solusinya dengan cukup cepat dengan menggunakan cara rekursif. Namun, ternyata pertanyaannya tidak selesai di situ. Pak dosen ini ingin tahu kompleksitas dari algoritma saya itu seperti apa. Setelah berpikir dengan suasana otak yang masih kalut, saya bilang saja O(n2). Bapaknya kemudian menggambarkan pohon yang tercipta dari algoritma tersebut, dan segera saya sadari bahwa kompleksitasnya ternyata O(2n). Nah loh.

Tak terelakkan, saya diminta untuk memberikan solusi dengan kompleksitas yang lebih sederhana. Saya langsung terpikir menggunakan cara iteratif. Lagi-lagi, otak saya terlalu kalut untuk menemukan solusinya yang baik. Padahal, harusnya ini adalah hal yang cukup sederhana. Di Python, kodenya hanya perlu lima baris! Kegagalan ketiga.

Refleksi

Di akhir sesi, bapaknya bilang kalau kelihatannya saya bisa ngoding, mungkin hanya perlu kepala yang lebih dingin saja. Selain itu, akan sangat baik jika saya menggambarkan persoalannya terlebih dahulu sebelum menyentuh kode. Untuk linked list, gambarlah representasinya dulu. Untuk deret Fibonacci, tulis saja beberapa angka pertamanya supaya tahu apa yang harus dijumlahkan per iterasi.

Solusi semacam ini sudah sering saya baca, tapi ternyata agak sulit juga menerapkannya di lapangan ya. Mungkin butuh jam terbang supaya bisa lebih mengontrol kegugupan semacam ini. Satu kegagalan di awal itu seharusnya tidak serta-merta mengganggu pikiran saya. Hanya perlu kembali menyadari bahwa “everything’s going to be okay.”

Di sisi lain, saya jadi cukup tersadar bahwa selama ini agaknya saya jadi sedikit sombong. Karena terbiasa ngoding, jadi merasa sudah banyak hal yang bisa dikerjakan. Padahal, masih banyak juga hal yang harus dipelajari. Mungkin, materi-materi yang lama juga perlu saya ulas kembali supaya dapat pemahaman yang lebih baik.

Terkait Kesombongan

Saya selama ini mungkin terlalu banyak mengandalkan keberuntungan, jadi kurang menghargai kerja keras. Toh, selama ini semua terasa mulus-mulus saja jalannya. Masuk universitas favorit, lulus dengan nilai yang cukup baik, dan bisa dapat beasiswa, agaknya membuat saya makin ingin yang muluk-muluk tanpa diiringi usaha yang sepadan.

Sekarang, saya sedang berpikir lagi untuk melanjutkan ke PhD. Apakah masih akan berkutat di bidang yang digeluti sekarang — machine learning — atau bergeser sedikit ke social network? Rasa-rasanya saya malah mau dua-duanya, tapi ya mana lah mungkin? Sudah begitu, masih ingin jago urusan software engineering, dan masih mau berbisnis sendiri pula nanti. Kalau dengan usaha seperti sekarang, apakah itu semua bisa tercapai?

Bukan artinya berhenti bermimpi besar, tapi usahanya yang perlu didorong lagi. Kalau mau semua itu, ya tidak bisa sesantai sekarang sepertinya. Kalau perlu, jadi seperti Elon Musk yang bisa kerja sampai 80 jam seminggu.

Pertanyaannya, sudah siapkah saya?

Iklan

3 tanggapan untuk “Belajar dari Wawancara

  1. Waduh. Keras juga ya ditanyain kayak gitu… kudu sering-sering Topcoder kalau mau terbiasa terus ngerjain kayak gitu 😐

    Badewei, maksudnya social network itu gimana li? Mau bikin website / app social network sendiri nanti?

    1. Sebenernya ngga harus banget bisa sih, Do, pada akhirnya. Tentang keseimbangan ini pengen dibahas juga, tapi nanti kepanjangan kalo jadi satu pos. Hahaha…

      Social network itu maksudnya penelitian di bidang jaringan, Do. Ga harus social network, tapi intinya mainan graf. Cuma ya emang ketertarikannya di social network-nya. Salah satu yang terdepan di bidang ini adalah Jon Kleinberg, dosen di Cornell. 🙂

      1. Wahaha~ ditunggu pos berikutnya deh ya 😛

        Ooh disertasimu tentang Machine Learning + Graf? Edan pisan… sukses li! Pulang-pulang makin imba maneh 😆

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s