Tulisan ini merupakan napak tilas kuliah bersama Ibu Inggriani Liem(selanjutnya disebut Ibu Inge) sebanyak 19 sks termasuk mengulang. Hal tersebut berikut ini telah saya ketahui sejak saya kuliah bersama beliau, namun saya tidak mengerti sama sekali waktu itu, mengapa harus demikian?. Untung saya masih bisa mengulang agar dapat mengerti materi yang beliau sampaikan. Beberapa minggu ini saya dapatkan tulisan-tulisan DR Edsger W. Dijsktra(RIP 2001). Dari tulisan EWD ini saya dapatkan beberapa alasan mengapa Ibu Inge mengajarkan pemograman seperti yang diajarkan kepada kami.
0. Bahasa Saya (Bahasa Algoritmik karangan Bu Inge), sebenarnya setahu bahasa ini tidak ada namanya, cuma saja beliau pernah bercerita ketika ada orang yang menanyakan bahasa apa yang diajarkan sebagai dosen pemrograman, terus beliau menjawab "bahasa saya".
Bahasa Saya oleh Bu Inge disarankan tidak dibuat kompilatornya. Mengapa? Tulisan Dijkstra pada EWD1036 menjelaskan bahwa pemrograman adalah penulisan dalam bahasa formal matematika, tidak ada kompilatornya sehingga mahasiswa tidak tergoda untuk mencoba program, tapi meyakini kebenarannya dari sketsa. Formula ini cocok untuk fresh man yang belum pernah belajar memprogram, karenanya Bu Inge menekankan untuk tidak mengulang kuliah dasar yang beliau ajarkan. Memang sih, pas mengulang rasanya rada aneh ketika diajar lagi dengan joke yang lebih kurang sama dengan tahun sebelumnya, tapi saya gak mengerti juga tuh. Tulisan ini lebih banyak saya sarikan dari pengambilan kuliah yang pertama daripada yang kedua. Mungkin pas ngambil yang kedua sudah mulai sombong jadi kurang memperhatikan, tapi dasar bego masih saja tidak dapat A.
Meskipun seharusnya menggunakan bahasa yang tidak dapat dikompilasi pada prakteknya bahasa pemrograman yang nyata juga diajarkan. Mungkin ini merupakan suatu bentuk kompromi atas kebutuhan dunia nyata dan kebutuhan kemampuan memprogram pada kuliah-kuliah lainnya. Pilihan sulit memang.
1. Perilaku Program.
Masih EWD1036. "we should reason about programs without even mentioning their possible behaviour". Ini merupakan hal yang sangat sulit dilakukan oleh mahasiswa rata-rata seperti saya. Sungguh. Hal ini ditekankan ketika mengajarkan bahasa fungsional, dan rekursif, dimana perilaku program sulit sekali dilacak. Tapi bukan masalah bisa dilacak atau tidak, toh ada debugger. Namun hal ini merupakan pendekatan bahwa program yang ditulis akan benar, adalah jika secara skematik formal benar, bukan jika dijalankan benar. Oleh karena itu penggunaan flowchart benar-benar dilarang dalam kuliah beliau.
Seingat saya beliau terkadang juga tidak konsisten mengenai hal ini, mengingat tidak semua mahasiswa mampu mencerna dan membuat abstraksi dan meyakini kebenaran program dengan hanya membacanya. Sehingga terkadang perlu menjalankan dengan tangan atau bahkan mengkode di mesin. Ya kemampuan mahasiswa kan macam-macam dari berbagai daerah yang pendidikan dasarnya bervariasi, kalau saya ya tidak mampu dan tidak percaya suatu program benar kalau tidak mencoba, bahkan sampai sekarang ketika sudah mengajar.
Lebih lanjut EWD sangat melarang penggunaan "anthropomorphic terms", anggap saja personifikasi program. Menurut EWD analogi ini sangat dangkal, dan menyesatkan, karena akan menggiring pola berpikir menurut perilaku komputasi, bukan lagi kebenaran semantic operasi. Bagaimanapun perilaku program di mesin berbeda dengan manusia, dimana manusia terus ada dan terus beraksi, sementara program seharusnya dievaluasi berdasarkan kebenarannya bukan perilakunya, apalagi analogi perilakunya pada manusia? Saya perkirakan secara implikatif juga larangan penggunaan flow chart dalam pembuatan kode program juga berkaitan dengan teori ini, namun saya masih belum saya temukan referensinya.
Nah selanjutnya muncul lagi pertanyaan besar, bagaimana dengan Object Oriented yang biasanya menggunakan obyek manusia sebagai model?
Dalam pemahaman saya Kebenaran program D.E. Knuth dalam jilid 1 TAOCP nya menggunakan induksi matematika untuk membuktikan kebenaran program. Benar-benar suatu kekejaman dalam bidang pemograman.
jika
P(1) Benar
P(2),P(3), ..., P(n) Benar
maka
P(n+1) Benar
Benar-benar matematika yang bakal membuat mahasiswa pemrograman mabuk, apalagi yang asal-asalan kuliah kalkulus, atau bahkan tidak mendapat kuliah kalkulus. Dalam buku kalkulus purcell varberg edisi 8, topik ini malah cuma menjadi topik tambahan.
2. Bahasa Ketat Type
Ini merupakan kategori bahasa yang diajarkan untuk fresh man. Mengapa? saya belum temukan referensinya. Namun sedikit banyak dapat saya simpulkan bahwa bahasa ketat tipe akan membentuk pola pikir dan pola kerja yang baik, dimana operasi hanya bisa dilakukan atas data yang tipenya sama. Hal ini dapat dijarkan dengan menggunakan bahasa pascal, karangan Niklaus Wirth, atau bahasa ada. Sebagai programmer yang dibesarkan dengan paradigma ini saya merasa bahwa saya menjadi berhati-hati terhadap type. Pelacakan kesalahan yang cepat juga terbentuk dengan paradigma ini. Program yg ditulis dengan paradigma ini jauh lebih mudah dipahami, karena konsistensi tipenya.
Dalam "plea for lean software", Wirth mengemukakan bahwa abstraksi hanya bisa dilakukan pada suatu bahasa yang ketat type. Bahasa longgar yang memungkinkan semuanya bisa terjadi tidak dapat membuat abstraksi yang jelas. Misalnya casting dalam C, yang memungkin suatu parameter bertype char* bisa-bisa saja dipassing dengan matriks*.
Dalam hal kajian bahasa ketat type menurut Wirth, C telah gagal.
Tidak ada komentar:
Posting Komentar