Belajar Computational Theory Untuk Pertama Kali

Tulisan ini pernah saya kirim ke satu milis. Tapi untuk tujuan diskusi saya pikir tidaklah masalah kalau dituliskan sekali lagi di blog ini.

I) DISKUSI PERTAMA
Ada yang bertanya, apakah yang perlu dipelajari kalau mau belajar computational theory untuk pertama kali.
Jawaban saya adalah:
Ada baiknya bapak mempelajari hal-hal berikut ini:
1. Data Definition
* Self-referential Data Definition
* Mutually-referential Data Defition
* Function dan Variable Definition
* Symbolic Information
* Simple dan Compound Data
* Lambda
2. Recursion
* Structured Recursion
* Generative Recursion
3. Abstration
4. Accumulation of Knowledge
5. Assignment

Dan untuk bahasanya saya sarankan Scheme atau Haskell atau ML atau
Logo. Keempat bahasa itu sangat bagus untuk mempelajari computation
theory. Setelah itu bapak bisa menggunakan bahasa yang jauh lebih
practical dan *useful* seperti Python.

Untuk mempelajari tentang computation theory, bapak bisa bergabung di
lambda the ultimate www.lambda-the-ultimate.org.

II DISKUSI KEDUA
Kemudian ada yang komplain bahwa topik-topik tersebut terlalu advance, dan kemudian jawaban saya adalah:
Memang topic-topic tersebut kalau kita sepandang melihat memang
terlihat sangatlah advance. Begitu juga kalau kita melihat topic-topic
dalam bidang matematika seperti Eucledian Geometry, Number Infinities
proof, menemukan Maxima dan Minima dalam Calculus, Cartesian Geometry,
dan topic-topic lainnya.

Tetapi tentu saja ada buku-buku level introduction yang menjelaskan
topic-topic tersebut dengan cara yang menawan hati. Lihatlah bagaimana
Mathematical Universe memperkenalkan konsep Circle dalam Eucledian
Geometry dengan begitu gampang dicerna.

Nah, untuk computational theory, ada juga buku seperti itu. Kita bisa
menemukan salah satunya dalam How to Design
Program(http://en.wikipedia.org/wiki/How_to_Design_Programs) yang mana
juga bukunya bisa diakses secara online(http://www.htdp.org/).

Bahkan, satu dan dua bab pertama menjelaskan tentang computational
seperti sedang menjelaskan kepada anak kecil. Tetapi memang benar,
dalam buku tersebut ada bagian yang sungguh teramat sangat sulit,
yaitu bagian Generative Recursion.

Intinya, selamat membaca.

III DISKUSI KETIGA
Kemudian ada yang komplain bahwa kalau mau mempelajari sesuatu harus dari awal mula atau pengenalan, dan inilah jawaban saya:
Bentar pak XXX, tentu saja orang yang baru belajar matematika tidak
langsung belajar calculus. Tetapi, tentu saja dalam hal ini merupakan
perkecualian. Saya mengatakan demikian karena kita semua paling tidak sudah
pernah mempelajari sedikit tentang matematika pada waktu kita sekolah
menengah dahulu. Oleh karena itulah saya bisa mengatakan bahwa hal-hal
advance di dalam dunia matematika juga sangat mengasikkan untuk dibahas dan
mudah untuk dipahami bilamana ada buku yang memungkinkan. Dan disitulah
Mathematical Universe berperan, sebagaimana yang saya katakan dulu.

Mungkin bapak ada keinginan untuk membaca buku tersebut. Bila iya, bapak
bisa mendatangi perpustakaan Departemen Pendidikan di daerah
Sudirman(samping Ratu Plaza). Perpustakaan tersebut dahulu mendapatkan
banyak bukunya dari perpustakaan The British Council Indonesia Jakarta. Saya
yakin, setelah membaca buku tersebut, bapak akan setuju dengan saya dalam
hal ini.

Untuk membaca HTDP, saya sendiri juga membuat sebuah asumsi yang sama dengan
pendapat yang sudah saya utarakan di muka, yaitu bahwa kita pernah
mempelajari sedikit matematika pada waktu kita sekolah menengah dahulu. Saya
berkeyakinan bahwa dengan sedikit pengetahuan akan matematika, akan
memungkinkan kita untuk membaca HTDP.

Mengenai bahasa yang leibh useful dan practical daripada Python, mohon maaf
sebelumnya mungkin penjelasan saya kurang memuaskan dikarenakan keterbatasan
pengetahuan saya akan computational theory terbatas pada literature.

Secara sederhana, saya sendiri pada dasarnya adalah seorang pedagang(saya
juga memberikan jasa pelayanan teknikal support). Computational Theory bagi
saya adalah sebuah bidang yang menggairahkan(sebagaimana juga Geometry,
Number Theory, Sport, Music dan bidang-bidang lainnya). Tetapi saya belum
pernah sekalipun terjun ke dunia produksi perangkat lunak. Oleh karena itu,
mohon maaf sekali saya tidak bisa memberikan jawaban terhadap pertanyaan ini
dikarenakan tidak adanya pengalaman dalam industri ini.

Tetapi kalau boleh, mungkin saya bisa sedikit menulis tentang beberapa
system yang pernah saya pakai dan pendapat saya tentang system tersebut:
1. GNU Emacs
Ini adalah system yang benar-benar sangat saya cintai dan sayangi. Sekilas
memandang, Emacs terkesan hanyalah sebuah text editor. Dan sebenarnya memang
betul, karena pada mulanya Emacs didesign sebagai sebuah text editor. Tetapi
sebetulnya, GNU Emacs adalah sebuah user environment dan sebuah Lisp machine
yang bernama ELisp(kepanjangan dari Emacs Lisp).
Banyak program telah ditulis untuk dijalankan oleh ELisp ini(tentu saja
dalam user environment Emacs). Dan sebagian besar pekerjaan saya yang
berhubungan dengan komputer saya kerjakan didalam environment ini dengan
menggunakan program-program yang dijalankan oleh ELisp tersebut).
2. PLT Scheme
PLT Scheme adalah sebuah implementasi dari bahasa Scheme. PLT Scheme
didistribusikan dengan sebuah environment, yaitu DR Scheme. PLT Scheme
sangatlah tidak practical untuk memproduksi sebuah program komersial
dikarekan sedikitnya library yang bisa dipakai dan banyak hal-hal yang
sering digunakan tidak terdapat secara penuh disini, misalnya library untuk
membuat graphical user interface.
3. Lisp
Bahasa ini mempunyai banyak sekali anak. Salah duanya adalah ELisp dan
Scheme(tetapi kemudian Scheme dianggap merupakan sebuah kebudayaan diluar
Lisp). Dewasa ini Common Lisp adalah yang paling luas dipakai dan
sesungguhnya, bisa digunakan dalam level system programming. Tetapi
sebagaimana interpreter dan compiler Cobol(bahkan yang paling baru
sekalipun) yang hanya digunakan untuk memaintenance kode-kode lama, begitu
juga dengan Lisp.
4. Haskell
Pendapat saya mengenai Haskell kurang lebihnya sama dengan pendapat saya
mengenai Scheme.
5. Logo
Banyak pendapat yang mengaitkan Logo dengan kura-kura yang manis. Ini memang
benar, tetapi yang paling menggairahkan adalah kemampuannya untuk mengolah
kata-kata(sebagaimana yang sering kita lakukan dengan Perl).
6. ML
Pendapat saya mengenai ML kurang lebihnya sama dengan pendapat saya mengenai
Scheme.
7. Squeak(sebuah implementasi dari SmallTalk)
Jika kita ingin memandang sebuah aktifitas komputasi sebagai sebuah dunia,
maka cobalah Squeak.
8. Python, Perl, Java
Jika ingin memproduksi software untuk dijual, maka, produksilah dengan
bahasa-bahasa ini. Java adalah standar industri sebagaimana Cobol pada jaman
dahulu. Tetapi Perl banyak digunakan untuk unix system administration dan
untuk mengolah text. Adapun Python, mungkin saya hanya bisa berkata bahwa
Python adalah bahasa yang seperti Java, hanya saja Python lebih mudah,
sederhana, dan lebih cepat digunakan untuk memproduksi software(dengan kata
lain lebih efficient, cost saving-nya tinggi).

Tentu saja ini adalah opini saya pribadi. Dan pasti, kemungkinan akan salah
sangatlah besar. Adapun untuk kekurangan tersebut saya memohon maaf yang
sebesar-besarnya.