Kurikulum Pemrograman

Tujuan pengajaran universitas adalah mengajarkan secara umum sebuah ilmu. Setelah itu masing-masing bisa mengambil bidang spesifik. Semua dokter yang Anda tahu (baik umum maupun spesialis) telah mendapatkan ilmu dasar mengenai tubuh manusia, pertolongan pertama. Meskipun sebagian besar dokter ini tidak akan pernah membedah dalam hidupnya, mereka pasti diajari juga ilmu dasarnya.
Saat ini banyak kurikulum pemrograman yang dibuat untuk mengikuti tren terbaru. Sayangnya tren ini bisa cepat sekali berlalu, dan kadang baru disadari kemudian betapa jeleknya tren sebelumnya (misalnya Microsoft yang menyadari Visual Basic merupakan bahasa yang tidak scalable, tidak cocok untuk enterprise). Di posting ini saya akan menceritakan kurikulum yang dulu saya alami ketika belajar pemrograman di ITB. Sayangnya saat ini kurikulumnya sudah berubah, tapi saya tetap ingin menunjukkan di sini, kira-kira kurikulum yang baik itu seperti apa.

Ketika saya belajar pemrograman di ITB, kurikulumnya dimulai dengan dasar pemrograman. Dalam dasar pemrograman kami diajari LISP. LISP merupakan bahasa dengan paradigma fungsional. Tidak semua aspek LISP diajarkan (misalnya do-loop yang sifatnya imperatif). Ketika belajar LISP, fokusnya adalah memanipulasi struktur data (list, tree) secara rekursif dan mengenai stateless programming.


Pelajaran tentang LISP ini nantinya akan berguna di lambda calculus. Aspek stateless dalam LISP ini kelak akan berguna juga di pemrograman parallel. Bahkan framework yang dipatenkan Google yang bernama MapReduce diinspirasi dari fungsi “map” dan “reduce” di bahasa fungsional.

Setelah itu ada pelajaran algoritma dan pemrograman yang diajarkan dalam Pascal dan C. Kelas ini mengajarkan pemrograman dalam paradigma prosedural. Aspek fungsional sudah dipelajari di LISP, jadi dalam aspek prosedural, kami hanya perlu belajar mengenai aspek imperatif (state program, loop tanpa rekursi) dari sebuah program. Di sini terlihat bahwa paradigma prosedural juga mengandung aspek fungsional. Dalam kelas ini kami juga diajari cara menstrukturkan sebuah program (menjadi unit).

Pelajaran berikutnya ada dalam kelas Pemrograman Berorientasi Objek (obect oriented programming/OOP) yang sesuai namanya, mengajarkan paradigma OOP. Apa yang sudah dipelajari ketika belajar paradigma prosedural tetap terpakai di kelas ini. Semua jenis loop, kondisional, dsb semua masih terpakai. Jadi ketika masuk kelas OOP, hal tersebut tidak diajarkan lagi. Hanya aspek OOP saja yang perlu dipelajari, jadi kelas OOP benar-benar berfokus pada aspek OOP, bukan mengajari mahasiswa cara menulis loop atau mengajari konsep assignment.

Di antara konsep prosedural dan OOP, ada pelajaran mengenai paradigma deklaratif dengan menggunakan Prolog. Di sini kita diajarkan bahwa menyatakan setiap langkah program bukanlah satu-satunya cara untuk menyelesaikan masalah. Dalam pemrograman deklaratif, kita hanya menyatakan apa yang perlu dilakukan, tanpa perlu menjelaskan langkah-langkahnya. Ada banyak bahasa deklaratif di dunia ini (CSS, SQL, dsb), tapi pelajaran prolog ini kelak akan berguna di kelas Intelegensia Buatan, di mana kami diminta mengimplementasikan mesin inferensi untuk bahasa prolog sederhana. Saya senang pernah mengenal paradigma deklaratif, karena sangat memudahkan ketika saya terjun dalam bidang math modelling language yang memakai paradigma constraint programming

Kalau Anda menengok wikipedia, ada masih banyak lagi paradigma pemrograman, tapi tidak semuanya diajarkan secara khusus. Sebagian besar paradigma dimasukkan ke kelas yang paling dekat (misalnya event driven programming ketika memprogram GUI dalam OOP, metaprogramming ketika belajar template C++, dsb). Sebagian paradigma sangat sempit pengunaannya dan bisa dipelajari sendiri nanti ketika diperlukan.

Beberapa bahasa lain juga perlu dipelajari dalam kuliah yang berbeda. Dalam metode numerik, kami belajar memakai FORTRAN. Setelah mempelajari beberapa bahasa, FORTRAN sangat mudah dipelajari. Selain itu dalam kelas arsitektur komputer, ada pelajaran mengenai bahasa assembly. Bagi sebagian orang ini agak sulit, karena memang urutan kuliahnya tidak diberikan sesudah Teori Bahasa Formal (yang mengajarkan konsep turing machine, dan sudah cukup dekat dengan assembly).

Bisa Anda lihat bahwa setiap pelajaran merupakan dasar dari pelajaran berikutnya (paradigma yang satu mengandung paradigma yang lain). Aneh sekali jika di kelas OOP yang diajarkan adalah tentang loop dan assignment (aspek prosedural) atau tentang rekursi (aspek fungsional). Di kelas OOP yang diajarkan seharusnya adalah hal-hal yang spesifik OOP, seperti masalah inheritance, polymorphism dsb.
Jadi menurut saya kurikulum yang baik seharusnya mengajarkan banyak paradigma (bukan cuma satu saja) secara bertahap. Setiap tahap akan membuat mahasiswa bisa memahami setiap paradigma dengan baik, dan membentuk proses berpikir yang lebih baik.

9 thoughts on “Kurikulum Pemrograman”

  1. Seprtinya masih belum berubah jauh kurikulumnya pak 🙂 Saat ini baru saja selesai OOP. Dan ya, assembly yang diajarkan di kelas arsitektur komputer terasa susah. Apakah teori bahasa formal yang dimaksud sama dengan teori bahasa dan otomata? Tapi di kelas tersebut hanya diajar hingga CFL dan PDA, tidak hingga ke mesin turing yang berada di bab selanjutnya.

    1. Dulu sih seingat saya di teori bahasa dan otomata sampai ke mesin turing. Sekarang mesin turing diajarkan di kuliah mana?

  2. menarik sekali, tanyreta pensil ada filosofinya juga ya. terimakasih buat postingnya yang menginspirasi. btw tangan tangan itu digerakkan oleh pikiran, terkadang pikiran menggunakan hati untuk meyakini apa yang dilakukan tangan untuk mengguratkan pensil diatas kertas. betul tidak ya. he he he. salam kenal

Leave a Reply

Your email address will not be published. Required fields are marked *