Apa yang dimaksud dengan berpikir komputasi?
Yang dimaksud dengan berpikir komputasi adalah berpikir layaknya komputer. Secara terminologi, berpikir komputasi adalah istilah yang digunakan untuk menjelaskan keahlian-keahlian yang dibutuhkan di dunia perkomputeran, programming, dan digital. Nah, sebelum kita menyelesaikan masalah menggunakan komputer, ada baiknya kita memecah masalah tersebut menjadi bagian-bagian kecil dan mencari pendekatan yang cocok.
Disinilah, berpikir komputasi bermain peran. Teknik-teknik dan metode-metode berpikir komputasi memiliki peran penting dalam merumuskan sebuah masalah dan mengekspresikan suatu solusi agar dapat di selesaikan oleh komputer secara efektif.
Bidang berpikir komputasi sendiri mencakup banyak topik dan pembahasan. Namun, terdapat empat prinsip dasar yang bertindak sebagai landasan. Empat prinsip tersebut adalah: dekomposisi, rekognisi pola, abstraksi, dan algoritma.
4 Cornerstone dalam Berpikir Komputasi
Dekomposisi
Dekomposisi adalah proses pemecahan suatu masalah yang kompleks menjadi serangkaian masalah-masalah yang lebih sederhana. Setiap ‘sub-masalah’ tersebut lalu dapat diselesaikan masing-masing, yang membuat menyelesaikan masalah di awal menjadi lebih mudah.
Saat mengembangkan kode untuk sebuah masalah atau proyek yang besar dan kompleks, dekomposisi dapat digunakan untuk memecah kode yang akan diketik menjadi bagian-bagian kecil yang dapat dikerjakan agar tidak kewalahan. Bagian-bagian ini umumnya diselesaikan menggunakan subroutine, yaitu serangkaian kode yang fokusnya hanya untuk menyelesaikan satu jenis masalah. Setelah subroutine dibuat, mereka dapat dipergunakan untuk menyelesaikan masalah-masalah yang mirip pada proyek-proyek lain. Selain itu, dekomposisi juga membantu dalam mendeteksi eror dan proses debugging dikarenakan pemecahan masalah yang dapat mengisolir kesalahan-kesalahan kode.
Contoh Teknik Dekomposisi
Di dalam dekomposisi sendiri terdapat berbagai pendekatan. Salah satunya adalah pendekatan top-down, dimana kita melihat masalah secara menyeluruh terlebih dahulu dan mengidentifikasi komponen-komponen dasarnya. Lalu, kita secara sistematis menganalisa komponen-komponen tersebut lebih lanjut hingga kita menemukan komponen-komponen yang dapat digunakan sebagai pembangun terhadap solusinya. Kemudian, kita akan memperlakukan komponen-komponen ini sebagai modul-modul tersendiri yang dapat diimplementasikan menggunakan berbagai metode, seperti classes atau subroutines.
Selain pendekatan top-down, ada juga yang namanya pendekatan divide and conquer. Pendekatan ini menangani suatu masalah dengan menggunakan rekursi untuk terus membagi suatu masalah menjadi masalah-masalah kecil yang seragam/mirip hingga suatu base-case (masalah yang sangat mudah untuk diselesaikan) tercapai. Lalu, setiap masalah-masalah kecil tersebut digabungkan untuk membentuk solusi terhadap masalah di awal tadi. Pendekatan ini sangat umum digunakan pada algoritma pencarian, penyortiran, dan pathfinding.
Rekognisi Pola
Rekognisi pola adalah kemampuan untuk mencari pola-pola atau tema-tema yang sering muncul dalam suatu masalah. Saat kita ingin memecah suatu masalah menjadi masalah-masalah kecil, kita mungkin dapat melihat suatu pola yang nantinya akan membantu kita menyelesaikan masalah tersebut. Prinsip ini juga kadang disebut sebagai generalisasi.
Saat kita ingin mencari suatu pola, kita harus:
- Mencari kesamaan atau sifat-sifat yang sering muncul/mirip pada masalah
- Melihat pola apapun pada masalah
Mengidentifikasi kesamaan dan pola-pola dapat membantu kita membuat suatu solusi yang dapat diterapkan secara berulang-ulang. Suatu masalah kompleks menjadi lebih mudah untuk diselesaikan saat ia memiliki pola-pola yang sama, yang memungkinkan kita untuk menyelesaikannya dengan lebih efisien.
Abstraksi
Abstraksi merupakan sebuah skill yang selalu digunakan oleh para developers. Abstraksi adalah menghilangkan kompleksitas suatu masalah dengan cara menyembunyikan detail latar belakang dan menghapus informasi-informasi yang tidak diperlukan.
Abstraksi memungkinkan para developer untuk fokus ke hal-hal yang penting dari suatu masalah untuk merumuskan suatu solusi. Dengan ini, masalah-masalah besar dapat disederhanakan dan lebih mudah untuk dipahami. Intinya adalah, saat kita mengabstraksi sesuatu, kita hanya fokus ke hal-hal yang penting saja.
Jenis-Jenis Abstraksi
- Abstraksi menggunakan representasi
Representational abstraction adalah teknik abstraksi yang dilakukan dengan cara menghapus detail-detail yang tidak diperlukan. Contoh dari teknik ini adalah peta jalur transportasi umum suatu kota seperti The London Tube Map, dimana hanya nama pemberhentian dan jalur kereta yang ditampilkan.
- Abstraksi menggunakan generalisasi
Abstraction by generalisation merupakan teknik dasar yang sangat sering digunakan dalam pemrograman berbasis objek. Contohnya, kita ingin membuat kelas untuk jenis-jenis spesies kucing. Setiap spesies kucing memiliki karakteristik tersendiri, namun ada pula karakteristik umum yang dimiliki oleh setiap kucing, seperti berkaki empat, memiliki kumis, dan bersuara meow.
- Abstraksi dengan menyembunyikan informasi
Information hiding adalah konsep esensial di dunia perkomputeran. Ambil sistem operasi sebagai contoh. Sistem operasi menyembunyikan kompleksitasnya melalui interface untuk pengguna. Jadi, sebagai pengguna, kita tidak perlu khawatir tentang bagaimana komputer mengeksekusi sebuah program atau menyalin sebuah file. Kita hanya perlu menggunakan opsi yang sudah disediakan dalam interface tersebut.
- Abstraksi prosedural
Abstraksi prosedural adalah proses membuat prosedur terabstraksi yang tergenenalisir sebaik mungkin. Contohnya, kita ingin membuat prosedur untuk menghitung luas suatu talenan. Kita dapat mulai dari prosedur dibawah:
Prosedur tersebut dapat disederhanakan lebih lanjut dengan mengurangi jumlah variabel yang digunakan:
Lalu, prosedur tersebut dapat digeneralisir agar dapat menghitung luas dari semua bangun persegi panjang:
- Abstraksi fungsional
Dalam abstraksi fungsional, detail penerapan dari suatu metode komputasi disembunyikan. Kita bisa ibaratkan suatu fungsi layaknya sebuah kotak hitam. Fungsi tersebut menerima sederet input yang akan diproses untuk mengasilkan suatu output. Sebagai pengguna, kita tidak perlu tahu detail proses fungsi tersebut.
- Abstraksi data
Abstraksi data adalah teknik yang memungkinkan pemisahan antara bagaimana suatu objek data gabungan dibuat dari detail pembuatannya. Hal ini penting saat menangani struktur-struktur data yang kompleks agar kita tidak terlalu mengkhawatirkan bagaimana struktur data tersebut diterapkan.
- Problem reduction
Reduksi masalah adalah proses generalisasi atau mereduksi (mengurangi) masalah menjadi suatu masalah yang sudah pernah diselesaikan sebelumnya.
Berpikir Algoritmik
Sebelum mengenal prinsip berpikir algoritmik, mari kita pahami apa itu algoritma terlebih dahulu. Secara sederhana, algoritma adalah sekumpulan langkah-langkah saksama yang saat dieksekusi akan menyelesaikan suatu masalah. Langkah-langkah tersebut harus kelas, tidak ambigu, dan mudah untuk diikuti agar mereka dapat direplikasi oleh siapapun.
Lalu, apa itu berpikir algoritmik? Berpikir algoritmik adalah proses pengembangan suatu algoritma untuk menyelesaikan suatu masalah. Untuk dapat berpikir secara algoritmik, kita harus mampu mengidentifikasi komponen-komponen pembangun dari suatu masalah, lalu menjabarkan langkah-langkah secara spesifik untuk menghasilkan suatu solusi. Algoritma yang baik adalah algoritma yang menjabarkan semua langkah secara jelas dan saksama yang dapat direplikasi berulang-ulang.