Everything is Function

CeritaFasilkomFunctional ProgrammingHaskellKuliah
Share This Post

Halo, akhirnya gue menulis lagi setelah terakhir menulis tentang cara download dari torrent ke gdrive, dan ternyata pas gue lihat statistiknya lumayan banyak yang search, muhehehe. Di tengah kesibukan banyaknya tugas dan kemarin malam ada lomba CTF gemastik, gue akhirnya coba nge-post.

Jadi kali ini gue mau nge-post tentang refleksi gue selama belajar di kuliah pemrograman fungsional selama sebulan terakhir. Karena sebenarnya deadline nya udah jam 9 tadi, tapi gue udah ngumpulin essay nya duluan di scele. Sayang aja kalo gak di post karena ada perintah buat bikin blog juga. Gapapalah sekalian dua-duanya aja, hehe.

Disclaimer, karena tulisan berikut ini awalnya untuk essay (yang artinya dinilai), jadi bahasanya agak formal, meskipun gue gak bakat nulis formal. Dengan sedikit perubahan, essay nya gue jadiin post, jadi silakan dibaca!


Motivasi

Sebagai kalimat pembuka dari post ini, mungkin saya akan memberitahukan motivasi saya mengambil mata kuliah pemrograman fungsional di Fasilkom. Pertama yang harus diketahui adalah mata kuliah ini merupakan mata kuliah pilihan, yang artinya boleh diambil kalau berminat dan memang tidak harus diambil. Itu artinya (lagi) jika saya tidak lulus mata kuliah ini, saya tidak perlu mengulang karena memang bukan mata kuliah wajib, muehehehe.

Motivasi selanjutnya adalah karena saya selama dua tahun terakhir ini banyak mengerjakan proyek dengan library (atau framework ya?) ReactJS. ReactJS adalah sebuah library JavaScript untuk membuat tampilan web berbasis komponen yang reusable. Karena JavaScript merupakan bahasa pemrograman yang multiparadigma dan terkadang sulit dimengerti, saya juga belajar dan mendalami JavaScript. Pertama saya mulai belajar ReactJS sekaligus belajar JavaScript dengan paradigma OOP di class component React. Kemudian saya juga belajar Redux yang merupakan global state management yang menurut saya pada saat itu sangat sulit untuk dimengerti. Suatu hari di React Conf, Dan Abrahamov, salah satu developer ReactJS, memberitahukan sebuah API baru bernama React Hooks yang membuat function component di React bisa memiliki state, yang sebelumnya state hanya bisa ada di class component. Kemudian saya pun tertarik dengan pendekatan berbasis fungsi yang digunakan React Hooks dan juga saya sangat menyukai fungsi-fungsi yang ada di JavaScript seperti map, filter, dan reduce karena terlihat sangat elegan saat di-coding. Itulah yang membuat saya tertarik dengan functional programming dan mengambil mata kuliah pemrograman fungsional di Fasilkom.

Impresi Pertama

Pertama kali masuk kelas pemfung, saya pada akhirnya melihat sosok Pak Ade secara langsung karena sebelumnya hanya mendengar nama beliau dan tidak pernah bertemu secara langsung. Pak Ade kemudian membagikan kertas yang berisi kode JavaScript, wah saya pun semakin tertarik, apakah pemfung kali ini akan memakai JavaScript. Kemudian Pak Ade mulai menjelaskan tentang apa itu pemrograman fungsional, latar belakangnya, kelebihan dibandingkan OOP, dan banyak lainnya. Lalu di akhir kelas Pak Ade mulai membahas tentang kode JavaScript yang tadi dibagikan dan ternyata merupakan kode JavaScript dengan pendekatan fungsional. Saya yang tidak pernah coding JavaScript dengan pendekatan tersebut merasa tertarik mencoba gaya coding seperti itu.

Di pertemuan berikutnya, Pak Ade mulai menjelaskan tentang Haskell. Menurut saya syntax Haskell agak kurang familiar dan juga pendekatan fungsional yang baru saya pelajari membuat saya agak bingung. Kalo kata Pak Ade, ini saatnya kita mengubah cara berpikir kita, dari yang tadinya imperatif menjadi cara berpikir deklaratif. Lalu di tengah kelas, ada salah satu teman saya, Steven Kusuman, bertanya yang saya lupa pertanyaannya apa, hehe. Lalu Pak Ade menjawab dan di akhir jawaban beliau, saya sangat ingat sekali, beliau mengatakan “Biasanya pertanyaan seperti itu sering ditanyakan oleh orang-orang anti deklaratif”. Woah! Baru minggu pertama dan Kusuman sudah seperti disuruh “Keluar kamu dari kelas saya, kamu bukan kaum kami!”. Oke pernyataan yang tadi cuma bercanda ya. Sehabis kelas itu saya dan teman-teman saya bercanda ke Kusuman tentang dia yang merupakan orang anti deklaratif.

Jadi di minggu pertama ini, saya memutuskan untuk tidak drop matkul pemfung.

Kuliah Dosen Tamu

Perkuliahan selanjutnya dijalani dengan saya mendapatkan banyak hal baru tentang pemfung dan Haskell. Kemudian ada satu minggu, atau dua pertemuan, ada perkuliahan dengan dosennya merupakan dosen tamu dari luar negeri. Nama dosennya adalah, Profesor Joao dari Portugal. Dalam pikiran saya, wah sepertinya akan seru nih.

Selama dua pertemuan kuliah, beliau menjelaskan tentang Haskell dengan cara membuat parser untuk Regex dan Context Free Grammar. Wah, ini malah jadi kuliah teknik kompilator nih. Saya yang tidak terlalu suka mata kuliah Teori Bahasa dan Automata memutuskan untuk tidak mengambil mata kuliah Teknik Kompilator. Karena saya tidak tertarik dengan materinya dan juga belum terlalu mengerti tentang Haskell, akhirnya tidak terlalu memperhatikan apa yang beliau jelaskan. Maafkan saya ya Prof. Joao.

Untuk diketahui bahwa kuliah pilihan teknik kompilator jumlah mahasiswanya sangat sedikit, karena mungkin sulit atau banyak yang trauma setelah belajar TBA. Lalu karena perkuliahan dengan Prof. Joao membahas tentang pembuatan parser, akhirnya muncul jokes seperti ini, “Jika mahasiswa tidak ingin mengambil teknik kompilator, maka teknik kompilator lah yang akan mendatangi mahasiswa”. Oke, itu bercanda aja ya.

Epilognya adalah suatu siang saya sedang berada di lab RSE Fasilkom dan sedang mengedit file HTML. Lalu Pak Ade dan Prof. Joao masuk dan sepertinya Prof. Joao akan mengakhiri kunjungannya di Indonesia. Mungkin beliau mengenali saya karena saya duduk di depan saat di kelas, akhirnya sebelum beliau keluar ruangan, beliau melihat layar laptop saya dan berkata “This is XML, this is not Haskell!”, lalu satu ruangan tertawa.

Mengerjakan Latihan

Ini adalah bagian terakhir dari post yang mungkin tidak terlalu ada esensinya ini. Karena sebelum mengerjakan essay/post saya harus mengerjakan latihan terlebih dahulu, saya pun mencoba beberapa soal latihan. Selain itu saya juga memperhatikan pembahasan latihan yang ada di kelas pada pertemuan terakhir di tanggal 2 Oktober. Hal menarik yang terjadi pada tanggal tersebut, sebelum kelas pemfung saya ada kelas Desain dan Analisis Algoritma yang membahas tentang algoritma Quick Sort. Lalu pada sore harinya ada latihan untuk membuat Quick Sort dengan Haskell. Hasilnya mengejutkan, kodenya hanya dua baris. Saya pun berpikir apakah ini kompleksitasnya sama jika dikerjakan secara prosedural dan juga bagaimana analisis nya kalau cuma dua baris?

Saya akan terus belajar tentang pemrograman fungsional, setidaknya sampai semester ini berakhir. Saya juga ingin belajar Haskell, karena lumayan menambah pengetahuan tentang bahasa baru. Karena Pak Ade menyuruh para mahasiswa untuk membuat repo latihan dan juga bulan ini adalah bulan Oktober dan sedang diselenggarakan HacktoberFest, saya ingin mencoba one day one commit di repo latihan Haskell saya di link berikut ini https://github.com/gagahpangeran/functional-programming-exercise, siapa tau ada yang mau pull request.

Terakhir, saya teringat bahwa Reyhan, salah satu teman saya di kelas pemfung, pernah bertanya pada saya tentang syntax Haskell. Karena saya yang pada saat itu belum mengerti, akhirnya saya jawab saja “Karena di Haskell semua itu fungsi”. Dia pun masih belum terima dengan penjelasan tersebut. Tapi biar keren (meskipun saya belum ngerti), saya katakan “Everything is Function!”.

Comments

© 2020 - GPR - Go To Top