- Tulisan ini mengusulkan mata kuliah ilmu komputer yang realistis sekaligus satir, yang seharusnya dipelajari para pengembang perangkat lunak, meskipun sebenarnya tidak ada
- Setiap mata kuliah secara kritis menyingkap masalah dalam budaya pengembangan modern dan pola pikir yang bias
- Misalnya, dibahas keyakinan berlebihan pada paradigma berorientasi objek, pengabaian UX pada alat baris perintah, dan kesalahpahaman tentang performa bahasa yang lambat
- Juga mencakup mata kuliah yang membahas obsesi psikologis dan kebiasaan tidak produktif para pengembang
- Secara keseluruhan, tulisan ini secara humoris menunjukkan keterbatasan pendidikan ilmu komputer dan perlunya refleksi diri dalam budaya pengembangan
CSCI 2100: Melupakan Pemrograman Berorientasi Objek
- Mata kuliah ini mempelajari konsep variabel dan fungsi yang tidak termasuk dalam hierarki objek
- Keluar dari pola pikir yang berpusat pada object-oriented, lalu mengeksplorasi fleksibilitas dan kesederhanaan dari pemrograman fungsional
- Memperkenalkan “fungsi (function)” sebagai konsep yang lebih umum dan dapat digunakan ulang dibanding “metode (method)”
- Prasyaratnya adalah mata kuliah apa pun yang pernah menggunakan istilah “abstract base class”
- Tujuannya adalah membongkar ketergantungan berlebihan pada paradigma berorientasi objek dan menata ulang cara berpikir yang lebih mendasar tentang pemrograman
CSCI 3300: Studi Perangkat Lunak Klasik
- Kelas ini menganalisis dan mendiskusikan produk-produk perangkat lunak yang penting secara historis
- Contoh yang dibahas mencakup VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint
- Fokusnya tertuju pada antarmuka pengguna (UI) dan pengaruh keterbatasan perangkat keras terhadap kreativitas
- Melalui inovasi yang lahir dari berbagai keterbatasan masa lalu, mata kuliah ini menyoroti kembali prinsip-prinsip dasar desain perangkat lunak modern
CSCI 4020: Menulis Kode Cepat dalam Bahasa yang Lambat
- Membahas cara menulis kode berperforma tinggi bahkan dengan bahasa interpreter (seperti Python)
- Mengeksplorasi strategi untuk melakukan analisis performa di tingkat tinggi sekaligus mencapai efisiensi setara C++
- Secara bersamaan mengejar pengurangan kerapuhan kode dan tetap terjaganya kesenangan dalam pengembangan
- Mata kuliah ini mematahkan anggapan bahwa “bahasa yang lambat memang lambat”, sambil menunjukkan potensi optimasi dalam desain bahasa dan lingkungan eksekusi
CSCI 2170: Pengalaman Pengguna (UX) untuk Alat Baris Perintah
- Mata kuliah pengantar yang membahas prinsip-prinsip desain pengalaman pengguna untuk program berbasis baris perintah
- Relevansi, keterbacaan, dan minimalisme dalam output menjadi topik utamanya
- Menggunakan perintah UNIX
ls sebagai studi kasus untuk menganalisis masalah opsi yang berlebihan dan antarmuka yang terlalu kompleks
- Menekankan bahwa alat baris perintah pun, seperti UI grafis, memerlukan desain yang berpusat pada pengguna
PSYC 4410: Psikologi Obsesi Programmer
- Mengeksplorasi obsesi tidak produktif dan pola pikir kompulsif yang sering menjerat pengembang perangkat lunak
- Contoh: pemformatan kode, taksonomi, sistem tipe, pemecahan file yang berlebihan, dan sebagainya
- Menganalisis secara psikologis reaksi kritik spontan (knee-jerk criticism) yang muncul saat menghadapi sistem yang tidak familier
- Kelas ini membantu memahami bias kognitif dan kecenderungan perfeksionis para pengembang, serta mencari keseimbangan antara kolaborasi dan kreativitas
Konteks Keseluruhan
- Daftar ini bukan rencana kuliah sungguhan, melainkan kritik satir terhadap pendidikan ilmu komputer dan budaya pengembangan
- Setiap mata kuliah menyingkap titik buta dalam cara berpikir yang terlalu berpusat pada teknologi, sambil mendorong pengembang untuk memiliki keluwesan berpikir dan refleksi diri
- Meski dipublikasikan pada 2015, tulisan ini memuat keprihatinan yang tetap relevan hingga hari ini
1 komentar
Opini Hacker News
CSCI 3300: Kajian Perangkat Lunak Klasik
Hal yang telah ditekankan Alan Kay selama beberapa dekade adalah bahwa kita terus menemukan kembali konsep-konsep yang sebenarnya sudah mapan sejak akhir 1970-an
Saya memahami kekecewaannya bahwa programmer juga perlu mempelajari sejarah ilmu komputer, sebagaimana seniman mempelajari sejarah seni
Rasanya sulit membandingkan komputasi yang bergantung pada performa perangkat keras fisik dengan seni
Menganggap cara menyelesaikan masalah pada 1970 bisa diterapkan begitu saja pada 2025 berarti mengabaikan realitas
Menarik melihat pengulangan penemuan ulang ketika tiap generasi mengira merekalah yang pertama menemukannya
Mempelajari masalah dan solusi masa lalu sama sekali bukan pemborosan waktu
Melalui proses itu saya jadi sangat memahami evolusi Unix dan perangkat lunak komersial, dan sepenuhnya setuju dengan Alan Kay
CSCI 3240: Mengabaikan Hype
Ini adalah mata kuliah untuk belajar mengabaikan tren platform atau library terbaru
Lalu CSCI 3120: Novelty Driven Development justru membahas cara mengikuti tren agar tetap tertarik dan termotivasi
Kedua mata kuliah ini tidak bisa diambil bersamaan
Mata kuliah lain yang serupa mencakup keterampilan rapat (PSYC 4870), menerima friksi organisasi (PSYC 5630), dan lain-lain,
yang membahas komunikasi dan motivasi di tempat kerja secara realistis
CSCI 4810: The Refusal Lab
Mata kuliah laboratorium yang mensimulasikan permintaan produk yang tidak etis dan tekanan tenggat, dan hanya bisa lulus jika mampu menolaknya dengan standar profesional
Usulan mata kuliah debugging
Akan bagus jika ada mata kuliah untuk mempelajari cara menemukan akar penyebab bug dan menggunakan berbagai alat
printPerlu ada waktu untuk membahas penyelamat bernama interactive debugging
CSCI 0001: Functional programming and type theory
Istilah dan rumus akademis yang sulit dipahami telah lama menghambat popularisasi functional programming
Sekarang saatnya belajar langsung mengapa monad adalah monoid dalam kategori endofunctor
CSCI 4020: Menulis Kode Cepat dalam Bahasa yang Lambat
Mata kuliah yang mengajarkan kompleksitas algoritma lewat bahasa yang lambat (VB, Ruby, dan sebagainya), sambil menunjukkan bahwa O(N) di Ruby bisa mengalahkan O(N²) di C++
dan saya terkejut karena BASIC ternyata menunjukkan hasil yang lebih cepat
Dari situ saya bisa benar-benar merasakan mengapa Python berguna dalam AI
Kode tervectorisasi pada memori linear jauh lebih cepat daripada data yang tersebar di heap
Kumpulan seri sebelumnya
Seri “Computer science courses that don't exist, but should” berlanjut dalam
edisi 2015 (247 comments),
edisi 2017,
edisi 2018
Saya teringat mata kuliah Software Archaeology yang pernah saya ambil saat kuliah
Itu adalah kelas yang mengimplementasikan ulang soal latihan compiler dari tahun 1970-an,
dan walaupun saat itu terasa tidak berguna, belakangan sangat membantu dalam memahami desain sistem
Kemampuan menelusuri bug lama, wiki, riwayat versi, dan riwayat tim adalah hal yang esensial
Saat ini banyak program ilmu komputer pada dasarnya telah berubah menjadi sekolah kejuruan coding
Mahasiswa bisa memakai framework, tetapi tidak memahami filosofi perancangan bahasa atau evolusi sistem
Kita tidak boleh lupa bahwa komputasi bukan hanya soal implementasi, tetapi juga disiplin tentang gagasan dan ide
Karena standar akreditasi, kurikulum sulit menyimpang jauh
CSCI 3210: Encoding dan pemrosesan teks modern
Kelas untuk mempelajari Unicode dan UTF-8, serta meninggalkan gagasan bahwa ‘1 karakter = 1 byte’
Tidak hanya encoding, tetapi juga mencakup pencarian, pengurutan, rendering font, dan pemrosesan emoji
Dasarnya penting, tetapi hanya sedikit orang yang benar-benar memahaminya