Abstraksi dan Implementasi
Pendahuluan
The purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise
- Edsger W. Dijkstra
Kalau kita coba terjemahkan secara bebas :
Abstraksi bukan ditujukan untuk membuat sesuatu menjadi samar. Akan tetapi lebih kepada membuat cara pandang secara semantik yang lebih tepat.
- Edsger W. Dijkstra
Quote diatas merupakan salah satu Quote dari Edsger W. Dijkstra.
Salah satu Computer Scientist yang terkenal dengan ide dan konsep Imperative Programmingnya.
Semantik disini artinya ilmu tentang makna.
Semantics, also called semiotics, semology, or semasiology, the philosophical and scientific study of meaning in natural and artificial languages.
dari Britannica
Artinya kalau kita berbicara tentang Abstraksi, maka kita dituntut untuk lebih berbicara tentang makna.
Bukan berbicara mengenai teknis detail, tetapi konsep atau ide yang ada.
Abstraksi
Abstraksi adalah istilah yang akan kita temui ketika berbicara terkait Programming.
Di level mana saja di programming.
Misalnya :
- Bahasa Java melakukan abstraksi terhadap pengelolaan memori menggunakan Garbage Collector dan JVM.
- Solusi sebuah masalah di selesaikan dengan cara abstraksi menggunakan Design Pattern tertentu.
- Solusi algoritma sorting dan merging, bisa diselesaikan dengan abstraksi Algoritma Divide And Conquer, Greedy, atau Dynamic Programming.
- Fitur fungsional di Java 8 menggunakan abstraksi dimana dibawahnya sebenarnya tetap menggunakan fasilitas imperative programming.
- AWS Step Function menggunakan abstraksi framework agar persoalan yang membutuhkan banyak tahapan bisa diselesaikan secara abstrak.
- AWS Lambda mengeliminasi kerumitan konfigurasi server dan memori dengan mengabstraksikan nya menggunakan lingkungan instance dari AWS Lambda.
- dll.
Lihat kaan..
Abstraksi is everywhere. !
Sebenarnya Abstraksi secara umum membungkus kerumitan dari code/solusi yang ada secara implementasi teknis, menjadi solusi yang sederhana.
Tujuannya tentu saja untuk membuat otak dan pikiran kita fokus kepada solusi umum - solusi gamblang - solusi to the point.
Tidak di ganggu oleh tetek-bengek konfigurasi, kerumitan spesifik dari solusi, dll.
Leveling ini dari dulu selalu dicari caranya oleh semua Computer Scientist, Computer Analyst, Software Engineering, Solution Architect, dll.
Karena pada dasarnya :
- Teknologi beserta implementasinya akan selalu berkembang. Technology Hype akan bermunculan di banyak tempat dan waktu.
- Sistem akan lebih kompleks dibandingkan sebelumnya, karena berkembangnya detail implementasi setiap teknologi.
- Beragamnya teknologi dan implementasi tersebut, membuat orang susah untuk berkomunikasi secara gamblang, lugas, dan to the point. Karena harus mengetahui spesifik istilah atau teknologi terbaru.
- Padahal dalam realitanya, komunikasi dalam sebuah solusi adalah penting, agar bisa menyelesaikan masalah yang dihadapi.
Oleh karena itu maka muncullah Abstraksi ini.
Dan Abstraksi ini tidak terbatas pada penggunaannya saja.
Tetapi lebih kepada cara kita berpikir ketika menghadapi sebuah masalah dengan solusi yang kita kesampingkan dahulu detail teknisnya.
Apa implikasinya ?
Berpikir Abstraksi itu bagi sebagian orang tidak mudah.
Hal ini karena kita terbiasa untuk menghadapi hal teknis di dalam kehidupan keseharian, apalagi sebagai Software Engineer.
Justru Abstraksi ini datangnya biasanya dari tim Bisnis, client, atau pun dari management level atas.
Atau kalau kita terbiasa dalam memahami sebuah masalah dan solusi dengan pemahaman Context yang benar, maka kita membuat Abstraksi yang cukup tepat terhadap sesuatu.
Oleh karena itu, berpikir Abstraksi memaksa kita untuk menemukan dahulu mengenai :
- Apa yang mau dicapai ?
- Apa saja secara umum komponen yang mau dibuat atau di ubah ?
- Bagaimana solusi umumnya ?
- dll.
Biasanya kita akan melihat semakin Senior seorang Software Engineer, maka dia akan lebih mampu membuat solusi dengan tingkat Abstraksi yang lebih bagus.
Karena biasanya dia sudah selesai dengan hal-hal yang berbau teknis, dan lebih fokus kepada hal-hal berbau umum.
Atau bisa saja kita lihat dari Software Engineer yang mempunyai konsep teoritis yang bagus.
Tetapi masih kurang di sisi implementasi teknis.
Kedua sisi diatas yaitu Abstraksi dan Implementasi tetaplah sama-sama diperlukan untuk memastikan bahwa ide/solusi/design yang ditawarkan bisa diimplementasikan sampai kelihatan hasilnya.
Itu..