Abstraksi Saya Menyembunyikan Hal-Hal yang Justru Perlu Saya Lihat

Saya menyukai abstraksi yang bersih. Ada kenikmatan estetis yang nyata dalam mengambil sesuatu yang berantakan dan rumit lalu membungkusnya dalam antarmuka yang rapi yang menyembunyikan kekacauannya, sehingga Anda bisa berpikir pada tingkat yang lebih tinggi dan melupakan detail di baliknya. Maka saya pun terus-menerus meraih abstraksi — sejak dini, dengan penuh semangat, dan terlalu sering. Dan dalam jumlah yang mengejutkan, abstraksi yang saya raih itu sama sekali tidak mengelola kerumitannya. Ia menyembunyikan justru hal-hal yang paling perlu saya lihat, dan sebagai gantinya membebani saya dengan satu lapisan kebingungan baru.

Ini adalah pelajaran yang berat justru karena abstraksi benar-benar baik dan benar-benar ampuh. Kesalahannya bukan pada penggunaan abstraksi itu sendiri. Kesalahannya adalah menggunakannya dengan keliru, dan salah mengira kecintaan saya pada permukaan yang bersih sebagai pertimbangan rekayasa yang baik.

Apa yang seharusnya dilakukan abstraksi yang baik

Ada baiknya kita memperjelas untuk apa abstraksi itu ada, karena keseluruhan kegagalan ini adalah distorsi dari sesuatu yang nyata. Abstraksi yang baik menyembunyikan detail yang tidak perlu Anda pikirkan saat ini, sehingga Anda dapat bernalar pada tingkat yang lebih tinggi tanpa harus menampung seluruh kekacauan itu di kepala sekaligus. Ia adalah salah satu alat paling ampuh dalam seluruh rekayasa — bisa dibilang alatnya, hal yang memungkinkan Anda membangun sistem yang jauh terlalu rumit untuk dipahami sekaligus.

Ketika sebuah abstraksi bekerja, ia nyaris tak terlihat. Anda menggunakannya tanpa memikirkan apa yang ada di baliknya, sebagaimana Anda mengemudikan mobil tanpa memikirkan pembakaran. Ia membebaskan perhatian Anda yang terbatas untuk tingkat yang benar-benar Anda pedulikan. Itulah impiannya, dan itu impian yang baik, dan itu nyata. Itu pula yang membuat mode kegagalannya begitu menggoda: setiap abstraksi menjanjikan hal ini, dan hanya sebagian yang menepatinya.

Apa yang justru dilakukan abstraksi yang salah

Abstraksi yang buruk melakukan kebalikan dari yang baik, dan ia melakukannya sambil tampak nyaris identik dari luar. Alih-alih menyembunyikan detail yang tidak Anda butuhkan, ia menyembunyikan detail yang Anda butuhkan. Ia menarik batasnya di tempat yang salah, sehingga hal-hal yang justru perlu Anda nalar berakhir di sisi seberang tembok yang Anda bangun sendiri, tiba-tiba tak terjangkau.

Dan ia melakukan dosa kedua di atas dosa pertama. Ia sebenarnya tidak menghilangkan kerumitan di baliknya — kerumitan itu masih ada, tak tersentuh, terus bekerja di bawah permukaan. Abstraksi itu hanya menambahkan satu lapisan baru di atasnya. Maka kini, alih-alih satu hal rumit yang harus dipahami, Anda punya dua: realitas berantakan di bawahnya, dan abstraksi yang tidak-cukup-tepat yang Anda hamparkan di atasnya, ditambah hubungan yang selalu membingungkan di antara keduanya. Anda berniat mengurangi apa yang harus Anda pikirkan, tetapi malah berhasil menambahnya.

Abstraksi prematur: berkomitmen sebelum Anda paham

Bentuk paling umum dari kesalahan saya adalah membuat abstraksi terlalu dini. Saya membangun struktur yang bersih, umum, dan elegan sebelum saya benar-benar memahami masalahnya cukup baik untuk tahu apa struktur yang tepat itu sebenarnya. Rasanya seperti desain yang baik dan berpandangan jauh ke depan. Biasanya justru sebaliknya.

Sebuah abstraksi pada dasarnya adalah komitmen pada suatu bentuk tertentu — sebuah keputusan tentang di mana batas-batasnya ditarik, apa yang disembunyikan dan apa yang ditampilkan, bagaimana bagian-bagiannya saling terkait. Dan berkomitmen pada suatu bentuk sebelum Anda memahami hal yang sedang Anda bentuk adalah cara yang andal untuk mengunci bentuk yang salah. Lebih buruk lagi, begitu ia terpasang, Anda mulai membangun di atasnya, dan setiap hal baru yang Anda bangun memperdalam investasi Anda pada struktur yang ditebak alih-alih dipelajari. Abstraksi prematur bukan sekadar berisiko salah; ia secara aktif mengakarkan kesalahannya sendiri.

Abstraksi yang bocor membuat Anda men-debug dua hal

Ada siksaan khusus yang disediakan bagi abstraksi yang menyembunyikan secara tidak sempurna — yang sebagian besar bekerja, sampai tidak lagi bekerja. Ketika ada yang tidak beres jauh di dalam realitas yang seharusnya disembunyikan oleh abstraksi itu, kebocoran tersebut memaksa Anda memahami kedua lapisan sekaligus: permukaan bersih yang dijanjikan bisa menjadi tempat Anda berpikir, dan kekacauan di baliknya yang gagal ia sembunyikan sepenuhnya.

Ini melelahkan secara unik. Seluruh inti abstraksi adalah membiarkan Anda memikirkan satu hal. Kini sebuah kegagalan telah menyeret Anda untuk memikirkan dua hal, ditambah pemetaan di antara keduanya, ditambah pertanyaan di lapisan mana sebenarnya bug itu berada. Anda men-debug abstraksi dan hal yang diabstraksikannya secara bersamaan, dan abstraksi yang seharusnya membantu itu kini menjadi rintangan tambahan antara Anda dan masalahnya. Abstraksi yang bocor bisa lebih buruk daripada tanpa abstraksi sama sekali, karena setidaknya tanpa abstraksi Anda hanya punya satu lapisan yang membingungkan Anda.

Biaya dari sebuah lapisan yang tidak Anda butuhkan

Hal yang belum saya perhitungkan dengan benar adalah bahwa setiap lapisan abstraksi juga merupakan lapisan ketaklangsungan (indirection) — satu hal lagi yang berdiri di antara Anda dan apa yang sebenarnya terjadi. Ketika semuanya bekerja, jarak itu adalah manfaatnya; itulah yang membiarkan Anda tidak memikirkan tingkat yang lebih rendah. Tetapi pada saat Anda perlu memahami atau men-debug, jarak yang sama itu menjadi biaya murni. Setiap lapisan adalah satu tempat lagi yang harus Anda periksa, satu terjemahan lagi yang harus Anda lakukan di kepala, satu lagi kandidat lokasi tempat masalah mungkin bersembunyi.

Jadi abstraksi yang tidak benar-benar membayar dirinya sendiri bukanlah sesuatu yang netral. Ia adalah pajak tetap, dipungut setiap kali Anda harus bernalar tentang sistem, ditukar dengan kemudahan yang ternyata tidak Anda butuhkan. Saya telah menambahkan pajak-pajak ini dengan penuh semangat, terpesona oleh permukaan-permukaan yang bersih, tanpa menyadari bahwa saya membayar untuk sebagian besar di antaranya dan hanya memetik manfaat dari sebagian saja.

Dapatkan abstraksi Anda dari yang konkret

Disiplin yang akhirnya membantu adalah nyaris kebalikan dari naluri saya. Jangan memaksakan abstraksi di awal, dari tebakan tentang apa yang pada akhirnya akan Anda butuhkan. Dapatkanlah ia, dari pengalaman yang konkret dan berulang. Bangun dulu hal yang spesifik, jelek, dan khusus itu beberapa kali. Rasakan di mana sambungan yang sesungguhnya berada — di mana batas-batas alami benar-benar jatuh, detail mana yang benar-benar mengelompok bersama dan mana yang tidak. Dan baru setelah itu, setelah realitas menunjukkan sendi-sendinya kepada Anda, buatlah abstraksi mengikuti garis-garis yang benar-benar ia tarik.

Abstraksi yang baik, akhirnya saya pahami, ditemukan dari yang konkret, bukan dipaksakan ke atasnya. Ia adalah kompresi dari hal-hal yang sudah Anda pahami secara mendalam, bukan jalan pintas untuk menghindari pemahamannya. Yang saya bangun dengan cara itu — terlambat, dengan enggan, setelah yang konkret mengajari saya di mana tempatnya — adalah yang benar-benar bertahan. Yang saya bangun terlalu dini, dari kepintaran dan estetika, adalah yang saya lawan selama berbulan-bulan setelahnya.

Pelajaran yang lebih dalam: abstraksi mengelola kerumitan, ia tidak menggantikan pemahaman

Semuanya bermuara pada kebingungan tentang untuk apa abstraksi itu ada. Saya telah meraihnya sebagai pengganti pemahaman atas masalahnya — seolah-olah antarmuka yang bersih bisa membiarkan saya melompati kerja keras untuk benar-benar memahami hal berantakan di baliknya. Tidak bisa. Abstraksi adalah alat untuk mengelola kerumitan yang sudah Anda pahami, bukan untuk menghindari kerja keras memahaminya.

Anda tidak bisa berabstraksi untuk keluar dari ketidakpahaman akan sesuatu. Anda hanya bisa menyembunyikan kebingungan Anda sendiri di bawah permukaan yang tampak lebih rapi, tempat ia akan menunggu dengan sabar untuk menyergap Anda nanti, kini mengenakan antarmuka yang bersih. Pahami dulu hal itu. Abstraksikan kemudian. Dan ketika Anda melakukannya, tariklah batas-batas sepanjang sambungan yang diungkapkan oleh pemahaman, bukan yang sekadar tampak elegan sebelum Anda tahu di mana sebenarnya segala sesuatu berada.

— Tanpa sinyal, tanpa imbal hasil, bukan nasihat investasi.