Code Review dalam Tinjauan Hermeneutika: Pendekatan Studi Filsafat Interpretasi Paul Ricoeur

Utsman Muhammad
Gravel Product & Tech
7 min readJul 17, 2023

Catatan: Ini bukan tutorial atau tulisan yang bersifat teknikal seperti tulisan-tulisan penulis sebelumnya, tapi ini adalah opini pribadi berdasarkan empiris penulis yang miskin pengalaman dan ilmu pengetahuan.

Dalam praktek pengembangan perangkat lunak, umum dimengerti bahwa bidang ini adalah bidang yang baku, eksak dan penuh dengan perhitungan aritmatika dan teridentifikasi dengan jelas. Kejelasan ini lah yang membuat praktek ini terlihat jauh dari ilmu filsafat yang sering disalah-pahami sebagai ilmu yang bersifat abstrak dan inkoheren.

Dalam tulisan ini, penulis mencoba mengelaborasi bidang pengembangan perangkat lunak melalui salah satu kegiatannya yakni code review, dalam pandangan hermeneutika Paul Ricoeur.

Paul Ricoeur by Sesawi.net

Pengantar

Code review adalah proses penting dalam pengembangan perangkat lunak untuk mengevaluasi, mengecek kualitas dan mendeteksi kesalahan. Namun, proses code review tidak hanya terbatas pada aspek teknis saja, ada dimensi interpretasi dan makna yang terkandung dalam kegiatan tersebut.

Melalui hermeneutika Ricouer, kita akan beranjak dari memahami code sebagai sebuah algoritma kepada memahami code dengan interpretasi refleksi yang bertujuan untuk memahami maksud asli dari si penulis code (coder).

Meskipun interpretasi Ricouer menjadikan teks-teks suci sebagai makanan utama sehingga melahirkan simbol dan metafora, penulis kira prinsip-prinsip yang dikemukakan masih bersifat universal sehingga dapat juga diimplementasi pada ranah duniawi seperti kegiatan code review. Ricouer menyebut ada beberapa prinsip dalam interpretasi teks, yakni semantik, refleksi dan eksistensial. Ketiga prinsip tersebut merupakan tahapan yang secara langsung Ricoeur mengajak untuk memahami teks secara ontologi.

Pendekatan Rioeur menjadi relate pada kegiatan code review sebab untuk mengevaluasi dan mengkritisi code, reviewer perlu memahami ke segala arah sampai paham maksud dan tujuan penulis code sehingga dapat dikritisi dengan tepat.

Photo by Alvaro Reyes on Unsplash

Penulis mengangkat kegiatan code review tidak lepas dari sisi empiris penulis yang sehari-hari berjibaku dengan code review. Juga mengingat proses ini membutuhkan ketelitian dan kecakapan cukup mumpuni sehingga dapat memberikan feedback yang tepat. Dalam prosesnya terdapat dialektika yang koheren, hal ini membuktikan bahwa kegiatan ini merupakan kegiatan “memahami” melalui olah pikir dengan kualifikasi yang telah dicapai oleh reviewer. Hal utama ini yang menjembatani filsafat hermeneutika dengan code review.

Penulis tidak ingin terkesan memaksakan memadu dua bidang yang dianggap berbeda. Namun harus disadari bahwa, kegiatan interpretasi teks code merupakan aksiologi dari filsafat hermeneutika yang mempunyai kedalaman nilai tersendiri.

Tahapan Hermeneutika Ricoeur

Dalam sejarah perkembangan ilmu filsafat telah banyak metode yang digagas oleh ratusan filusuf, dari timur sampai barat, dari Plato hingga Gadamer. Gagasan-gagasan itu muncul oleh sebab karakteristik ilmu ini yang sangat universal.

Plato dengan silogisme logikanya berusaha menggambarkan lewat dialog sehingga muncul teori tentang kebenaran. Di era lama, hermeneutika berusaha mendapatkan tempat dengan memaknai teks suci untuk mencari kebenaran. Sedikit berbeda di era modern hermeneutika begitu luas aplikasinya. Scheleiermacher dengan hermeneutik reproduktif tetap dengan kitab suci namun meluas ke arah hukum dan filologi. Heidegger dengan hemeneutik faktisitasnya berusaha mengungkap eksistensi manusia secara umum melalui teks-teks kuno yang tidak hanya terikat dengan teks suci. Sementara Ricoeur dengan hermeneutik kritis nya berada diranah ideologi, ilmu sosial kritis namun tetap membedah teks suci sesuai dengan karakteristik asli hermeneutika.

Seperti yang telah penulis singgung di awal, konsep Ricoeur tentang interpretasi makna memiliki model yang bagus dan cendrung tidak abstrak. Dalam arti lain interpretator dapat membuat interpretasi tentang sesuatu menggunakan konsep hermeneutika yang digagas oleh Ricouer.

Dimulai dari tahapan semantik atau bahasa, tahapan ini sangat fundamental karena proses ini adalah jembatan antara penulis teks dengan penafsir. Lanjut pada tahap berikutnya adalah refleksi. Menurut Ricoeur, tahap ini adalah penyingkapan intensi yang tersembunyi dibalik teks, maka menurut Hardiman, memahami bagi Ricoeur adalah menyingkap (Hardiman: 2015). Tahap terakhir adalah eksistensial. Proses ini pada akhirnya akan menyingkap tujuan dari si penulis, atau setidaknya mendekati objektifitas penulis.

Semantik, Konteks dan Kualifikasi

Dalam sudut pandang seorang reviewer, mengkritisi baris code seringkali terlepas dari subjektifitas pribadi dan fokus terhadap substansi matan, proses ini secara langsung bersifat objektif terhadap teks. Terdapat kualifikasi-kualifikasi tertentu yang harus dicapai oleh reviewer, tingkat kritis dan pemahaman reviewer tentu bergantung pada hal ini. Sebut saja seorang junior android developer tentu tidak akan mengkritisi secara dalam pada kode yang berhubungan dengan arsitektur aplikasi. Di sinilah letak proses semantik dalam hermeneutika Ricoeur.

Pemaknaan secara literal, baris perbaris kode dihubungan dengan pra-konteks. Secara teknis pada tahap ini, reviewer berfokus pada pemahaman literal kode, seperti sintaks, variabel, dan fungsi. Reviewer menguraikan makna kata-kata kode program dan mencoba memahami struktur keseluruhan dari perspektif bahasa pemrograman yang digunakan.

Bahasa tidak hanya jadi tools satu-satunya. Diperlukan kualifikasi khusus yang membimbing interpretasi terhadap konteks agar interpretasi menjadi mungkin. Kemungkinan interpretasi tersebut menjadi dasar sejauh mana konteks yang dihadapi.

Konteks pada tahap semantik menjadi sangat penting. Ini adalah temuan awal bagi seorang penafsir akan hal yang sedang ditafsirkannya. Konteks dalam interpretasi seperti aliran darah, membawa teks demi teks menuju tujuan ke-maksud-an.

Semakin dalam seorang reviewer mengerti konteks, semakin dalam pula kritikan yang timbul pada dinding komentar code review. Kedalaman itu merupakan hasil dari refleksi reviewer terhadap kode yang ditulis. Konteks disini juga akan melahirkan perenungan yang tepat.

Refleksi dan Kecurigaan

Jatuh pada tahap kedua, perenungkan atau refleksi akan menghasilkan kritik yang sesuai dengan makna lingual. Tahap ini membutuhkan “kecurigaan” sehingga interpretator memiliki interpretasi yang tidak sempurna secara subjektif. Ricoeur menyebut ini dengan Hermeneutika Kecurigaan.

Ricoeur menyadari bahwa dalam proses interpretasi, penafsir cenderung membawa prasangka atau bias tertentu yang dapat mempengaruhi pemahaman kita terhadap teks atau fenomena yang diinterpretasikan. Hermeneutika kecurigaan mengajarkan kita untuk mempertanyakan prasangka kita sendiri dan berusaha memahami interpretasi secara lebih objektif.

Dalam konteks kegiatan code review di dunia software engineering, hermeneutika kecurigaan memiliki relevansi aksiologis yang dapat mendorong praktik-praktik yang lebih baik dalam proses tersebut.

Dalam hermeneutika kecurigaan, seorang reviewer akan menerapkan distansi kritis terhadap kode yang sedang ditinjau. Reviewer tidak hanya melihat kesesuaian kode dengan persyaratan teknis, tetapi juga mempertanyakan kualitas kode secara keseluruhan. Reviewer mungkin menyoroti potensi masalah keamanan, efisiensi, atau keberlanjutan kode yang dapat meningkatkan kualitas keseluruhan proyek.

Hermeneutika kecurigaan mengajarkan untuk menyadari bias dan prasangka yang dapat muncul dalam proses interpretasi. Dalam konteks code review, ini berarti reviewer harus berhati-hati terhadap bias yang mungkin muncul berdasarkan preferensi personal, pengalaman, atau penilaian subyektif. Reviewer harus berusaha untuk menjadi objektif dan berdasarkan fakta serta pedoman yang telah ditetapkan tentunya berdasarkan kualifikasi yang telah mereka capai.

Penulis ingin memberikan contoh konkret dengan beberapa baris kode.

@GetMapping
suspend fun getCurrentBookingCustomer(
@RequestParam(value = "status") status: Booking.BookingStatus
): BaseResponse<Booking> {
val userId = SecurityContextHolder.getContext().authentication.principal as? String
return bookingServices.getCurrentBookingCustomer(userId.orEmpty(), status).toResponses()
}

Dalam menganalisa kode diatas, terdapat beberapa aspek yang dapat dikritisi:

  1. Fungsi tersebut menggunakan anotasi @RequestParam untuk mendapatkan nilai dari parameter status. Anotasi ini menunjukkan bahwa nilai status harus disediakan dalam permintaan HTTP sebagai parameter. Namun, ada potensi masalah jika nilai status tidak disertakan dalam permintaan. Sebaiknya, ditambahkan validasi atau penanganan kesalahan yang sesuai untuk mengatasi skenario tersebut.
  2. Fungsi bookingServices.getCurrentBookingCustomer(userId.orEmpty(), status).toResponses() memanggil fungsi getCurrentBookingCustomer dari layanan bookingServices. Terlebih lagi, hasil panggilan tersebut diubah menjadi respons melalui pemanggilan toResponses(). Dalam analisa lebih lanjut, perlu dipastikan bahwa layanan bookingServices telah diimplementasikan dengan benar dan mengembalikan hasil yang diharapkan.
  3. Fungsi ini mengembalikan objek BaseResponse<Booking> yang berisi data booking saat ini. Dalam analisis lebih lanjut, reviewer perlu memastikan bahwa struktur BaseResponse dan objek Booking telah didefinisikan dengan benar dan mengikuti konvensi yang sesuai. Juga, pastikan bahwa respons yang dikembalikan berisi informasi yang diperlukan dan disusun dengan benar.

Analisa di atas tidak terbatas pada aspek teknis, namun juga diperlukan pemahaman tetang konteks yang lebih dalam. Dalam kajian hermeneutika Ricoeur, analisa ini dilakukan dengan kritis mempertanyakan asumsi-asumsi yang mendasarinya. Dengan demikian, reviewer dapat memberi pertanyaan-pertanyaan konstruktif agar penulis dapat memperbaiki kualitas kode.

Eksistensial dan Kesenjangan

Tahap terakhir hermeneutika menurut Paul Ricoeur adalah tahap eksistensial. Dalam tahap ini, interpretasi mencapai tingkat yang lebih dalam dengan menyingkap hakikat dari pemahaman yang ada. Tahap eksistensial menempatkan penekanan pada pengalaman hidup yang terlibat dalam proses interpretasi.

Ricoeur percaya bahwa interpretasi tidak hanya tentang memahami teks atau konteks secara objektif, tetapi juga melibatkan interpretator secara subjektif. Dalam tahap eksistensial, interpretator (baca: penafsir) harus berurusan dengan pertanyaan tentang dirinya sendiri dan menghadapi tantangan-tantangan eksistensial yang mungkin timbul dalam proses interpretasi.

Pada tahap ini, berbagai metode interpretatif digunakan untuk menjembatani kesenjangan antara teks dan interpretator. Konflik interpretasi yang muncul dalam tahap semantik dan reflektif harus diatasi untuk mencapai pemahaman yang lebih dalam. Menurut Ricoeur, interpretasi harus melibatkan dialog dan negosiasi antara interpretator dan teks. Juga melibatkan banyak sisi seperti aspek historis, budaya dan sosial untuk membentuk pemahaman yang tepat.

Dengan demikian, tahap eksistensial dalam hermeneutika Ricoeur memungkinkan interpretasi untuk melampaui pemahaman semantik dan reflektif, dan mencapai pemahaman yang lebih dalam melalui penggalian hakikat dari interpretasi itu sendiri.

Code review melibatkan pemahaman dan interpretasi subjektif terhadap kode sumber. Setiap coder memiliki latar belakang, pengetahuan, dan pengalaman yang berbeda. Dalam tahap eksistensial, interpretator (reviewer) perlu menyadari pengaruh nilai-nilai, keyakinan dan pengalaman pribadi mereka terhadap penilaian dan interpretasi kode.

Interpretator harus mempertimbangkan konteks yang lebih luas, termasuk arsitektur perangkat lunak, tujuan bisnis, dan persyaratan pengguna. Mereka perlu memiliki pemahaman holistik tentang sistem yang sedang dikembangkan. Dalam tahap eksistensial, interpretator harus menyadari konteks ini dan mempertimbangkan implikasi kode terhadap keseluruhan sistem dan pengalaman pengguna.

Kegiatan ini dapat menjadi kesempatan bagi coder untuk melakukan refleksi tentang kode yang ditulis dan menerima masukan dari rekanan (reviewer). Dalam tahap eksistensial, reviewer perlu merenungkan keputusan mereka, mempertanyakan keberlanjutan solusi yang diberikan, dan memperbaiki pemahaman mereka tentang baris-baris kode yang dianalisanya. Ini juga menjadi kesempatan bagi coder untuk belajar dari masukan dan pengalaman interpretator, membantu mereka tumbuh dan berkembang sebagai pengembang yang lebih baik.

Tahap eksistensial dalam hermeneutika Ricoeur menggarisbawahi pentingnya melibatkan subjektivitas, dialog, refleksi dan pemahaman holistik dalam interpretasi. Penerapan prinsip-prinsip ini dalam kegiatan code review dapat meningkatkan kualitas, keandalan dan keselarasan kode, serta mendorong pertumbuhan dan pengembangan pengembang perangkat lunak.

Penutup

Pada akhir tulisan ini, penulis ingin menyampaikan gagasan singkat bahwa, kegiatan code review atau bahkan coding itu sendiri adalah kegiatan yang tidak semata-mata mengurutkan dan mengevaluasi algoritma, namun terdapat aspek filosofis yang bermakna dan menjadikan baris dan kritiknya sebagai karya seni yang pantas untuk dihargai.

Referensi

Budi Hardiman, Seni Memahami. (Sleman: KANISIUS, 2015).
E. Sumaryono, Hermeneutik: Sebuah Metode Filsafat. (Sleman: KANISIUS, 1999).
Paul Ricouer, Theory of Implementation: Discource and the Surplus of Meaning, Terj. Musnur Hery (Jogjakarta: IRCiSoD, 2014).

Historia Vitae Magistra

--

--