Ujian kualifikasi berakhir minggu lalu. Terlepas dari hasilnya, banyak hal yang saya pelajari selama mempersiapkan ujian ini.

Secara singkat, ada dua subjek ujian kualifikasi yang harus saya lewati. Tiap subjek, ada empat topik yang diujikan (saya hanya perlu menyelesaikan tiga dari empat topik untuk masing-masing subjek). Kedua subjek itu adalah:

Foundations of Theoretical Computer Science (cs5201), yang meliputi:

  1. Algorithms
  2. Theory of Computation
  3. Principles of Programming Languages
  4. Logic and Artificial Intelligence

Foundations of Computer Systems (cs5202), yang meliputi:

  1. Database Systems
  2. Operating Systems
  3. Computer Networks
  4. Computer Architecture

Kedua subjek ini dinilai sebagai aspek dasar yang minimal sudah dipelajari oleh mahasiswa selama undergraduate study (pendidikan strata 1). Tujuan dari ujian ini adalah untuk menguji pengetahuan dasar, kreatifitas, kemampuan evaluasi, desain and analisa serta mengaplikasikan prinsip-prinsip dasar yang sudah pernah dipelajari. Detail informasi dan referensinya dapat dilihat langsung pada link yang cs5201 dan cs5202.

Beberapa pelajaran berharga yang saya peroleh dari persiapan ujian ini:

Foundation is important

Aspek-aspek dasar sangatlah penting. Seperti bangunan, tanpa pondasi yang kuat, sulit untuk membangun gedung yang tinggi. Masing-masing topik pada kedua subjek saling berkaitan satu sama lain, dan topik-topik ini juga yang menjadi dasar riset lebih lanjut di bidang komputer. Jadi, dasar dari satu topik dapat menyokong dasar yang lain.
Contohnya:

  • struktur data (algoritma) sangat erat kaitannya dengan banyak hal mulai dari index database, filesystem sampai format protokol jaringan
  • page replacement (sistem operasi) berkaitan dengan buffer replacement (database)
  • algoritma routing (jaringan komputer) menggunakan algoritma graph dan dynamic algorithm
  • teori bahasa dan automata (teori komputasi) berkaitan dengan konsep bahasa pemrograman dan analisa kompleksitas algoritma (Polynomial dan Non-deterministic Polynomial)
  • first order logic berkaitan dengan software verification.

Concept is more important than remembering things

Ada banyak algoritma di luar sana. Sangat sulit untuk mengetahui secara detail sebuah algoritma. Bahkan sangat mungkin orang yang mengembangkan algoritma tersebut juga lupa detail algoritma yang dia kembangkan (saya pernah bertanya tentang algoritma di sebuah paper pada penulis aslinya, dan berhubung algoritma tersebut sudah tua, si penulis sendiri juga tidak terlalu ingat detailnya). Pemahaman konsep jauh lebih penting daripada mengingat proses kerja algoritmanya. Dengan memahami konsepnya, kita bisa dengan leluasa mengaplikasikan sebuah algoritma.
Sebagai contoh sederhana,
index pada database pada umumnya diimplementasikan dengan menggunakan hashtable atau B+Tree. Hashtable sangat bagus untuk point query, tetapi sangat buruk untuk range query, sedangkan B+Tree bagus untuk range query, walaupun untuk point query sedikit kalah dibandingkan Hashtable. Database designer dapat mengaplikasikan konsep ini untuk menentukan index database berdasarkan workload query yang sering dilakukan pada database tersebut. Bagaimana dengan attribut yang akan diindex, jumlah buffer yang optimal untuk sebuah sistem? tentunya para database designer sangat akrab dengan hal ini (konsep struktur data, dan buffer replacement sangat berguna di sini).

Independent study

Ujian ini termasuk modul tanpa kuliah. Persiapannya dilakukan sendiri oleh mahasiswa. Kemampuan belajar secara independen merupakan hal yang sangat penting.
Banyaknya materi yang perlu dipersiapkan melatih saya untuk belajar memetakan framework, pengetahuan, dan konsep-konsep yang ada. Selain itu saya menjadi terbiasa untuk bertanya mengapa sesuatu harus didesain seperti itu, dan mengevaluasi pro dan kontra suatu konsep.
Pada dasarnya, semua informasi yang kita perlukan tersedia dan sangat mudah diakses di internet. Tidak ada masa yang lebih mudah dari saat, di mana kita bisa mendapat akses informasi dan pengetahuan secara mudah dan cepat di internet.

Banyak konsep dasar yang tidak pernah saya ketahui selama undergraduate study saya

Pelajaran berharga terakhir ini cukup ironis. Ternyata banyak hal yang merupakan konsep dasar, tidak pernah saya pelajari sebelumnya. Contohnya: query optimization, concurrency control dan recovery (database), konsep dasar P dan NP (algoritma), decidability dan semi-decidability (teori komputasi), hoare logic. Membuktikan kebenaran dan menganalisa kompleksitas (space and time) algoritma yang dikembangkan juga termasuk kebiasaan baru yang dibentuk dari persiapan ini. Believe me, this is very important if you are software developer.
Ada banyak hal yang sudah pernah saya pelajari sebelumnya, dan tidak sedikit juga yang belum pernah saya pelajari sebelumnya. Pada akhirnya, kembali lagi bahwa belajar adalah sebuah proses. Sudah pernah belajar sebelumnya bukan berarti benar-benar paham, dan semakin saya belajar pemahaman terhadap suatu hal akan semakin diperkuat (Remember, learning is an iterative process!!).

    Secara pribadi, saya merasa topik-topik  yang diujikan ini merupakan topik-topik mendasar. Walaupun saya lebih banyak mendalami data mining, machine learning dan artificial intelligence, saya merasa pemahaman terhadap konsep-konsep dasar sangat perlu terutama bagi orang-orang yang membangun sebuah sistem.