Selama ini kita sering dijejalkan dengan berbagai teori pemrograman. Di sini marilah kita bersama2 diskusi mengenai esensi dari teori tersebut. Apakah betul bermanfaat, apakah hanya teori yang terlihat indah belaka. Mari kita selalu bertanya mengenai "why"nya, dan berdiskusi dengan asyik.
Salam,
Nelvin
Localization adalah Esensi dari Object Oriented Programming
Begitu banyak buku mengenai Object Oriented Programming(OOP) telah ditulis. Akan tetapi hingga saat ini, pemahaman mengenai OOP dirasamasih kurang. Begitu banyak code OOP yang saya lihat, tetapi yang digunakanhanyalah syntax nya saja. Sedangkan esensi terpenting dari OOP nya sendirijustru tidak ada, tidak disadari, atau tidak dimengerti. Sehingga code nyatetap saja penuh dengan bug yang tidak dengan mudah bisa dicari untuk di-fix.(As you know : creating bugs is human nature, but creating bugs that cannot befixed easily is a showcase of lack of skill.)
Artikel ini mengajak para pembaca untuk kembali ke pemahamanmengenai OOP dari esensi paling dasar, tanpa terlebih dahulu dipengaruhi olehbanyak distraction / dengungan tidak jelas yang justru membuat kabur esensipaling dasar tersebut. Karena hanya dengan pemahaman terhadap esensi palingdasar inilah, baru akan terbuka kunci untuk menerapkan semua teknik OOP turunannya dengan tepat.
Mengapa OOP gagal diimplementasikan
Mari kita mulai dengan pertanyaan mengapa OOP setelah sekianpuluh tahun, masih juga gagal diimplementasikan. Berikut adalah pendapat saya.(Apakah para pembaca mempunyai jawaban lain – silahkan share di thread ini.)
- Kebanyakan pelajaran mengenai OOP selalu dimulai denganpembahasan mengenai SYNTAX bahasa OOP, yang memang paling popular yaitu :Encapsulation, Inheritance, dan Polymorphism. Padahal ketiga hal ini merupakanimplikasi dari teknik OOP, bukan esensi dari OOP, atau the reason behind atau “why”teknik OOP sangat powerful. Tanpa mengerti “why” nya, kita tidak akan pernahtahu dengan tepat kapan kapan ketiga hal tersebut seharusnya digunakan. Danbahkan lebih parah lagi karena banyak esensi dari OOP yang tidak dicover olehketiga syntax tersebut, malah tidak dipergunakan. Jadi walaupun telah menggunakanOOP, coding nya tidak jauh berbeda dengan cara coding 30 tahun yang lalu.
- Contoh yang digunakan hampir selalu menggunakan contohparadigma keluarga buah-buahan, atau kendaraan, atau jenis-jenis binatang, tanpamenunjukkan secara gamblang kenapa sebuah teknik sangat powerful. Maksud sayagamblang adalah seharusnya ditunjukkan dengan sebuah “technicaljustification” sehingga tidak terbantahkan. Technical justification yangdimaksud adalah sedikitnya harus mempunyai satu dari dua unsur berikut. Unsurpertama adalah : dinyatakan dengan sebuah angka seperti halnya membuktikansebuah persamaan matematika. Jadi BUKAN dengan istilah-istilah abstract seperti: “lebih mudah dicari bug nya”. Tetapi tunjukkan dengan pernyataan seperti :dengan cara ini jika ada bug kita hanya cukup mencari di bug di satu file,sedangkan dengan cara yang lain kita harus search bug tersebut di tiga ribufile. Unsur kedua adalah jika somehow tidak bisa dinyatakan dengan angka, harusada sebuah postulat bersama, atau sebuah definisi bersama, yang sangatsederhana sehingga dengan mudah bisa dijadikan dasar untuk membuktikan sebuah codingstyle adalah lebih baik – tidak terbantahkan. Simply kita berbicara programmingseperti halnya kita berbicara persamaan matematika yang tidak terbantahkan.
Technical justification
Hanya jika kita bisa lepas dari kedua kesalahan tersebut,barulah kita bisa membangun skill OOP kita. Skill hanya bisa dibangun dengandilatih. Melatih hal yang salah, hanya membuat kesalahan kita menjadi perfect.Technical justification yang gamblang dan terang benderang, dan dalam banyakcase dinyatakan dalam angka yang terang benderang, akan menjamin bahwa kitatidak berlatih hal yang salah.
Errhh... berlatih?? Ya seharusnya jelas bukan bahwa skillharus dilatih. Akan tetapi yang terjadi di dunia programming (dan untung nyajuga terjadi di dunia martial art), adalah justru sebaliknya. Orang cenderungmengumpulkan teknik, bukan melatih teknik tersebut.
Berbeda dengan pandangan kebanyakan pandangan programmeryang kurang berpengalaman, atau para teoritis / pengamat pemrograman yang hanyapernah juggling beberapa baris code untuk contoh artikel, tetapi tidak pernahberlatih pemrograman secara real, selalu beranggapan bahwa programming bisadikonseptualkan sejak awal. Well konseptor yang paling berpengalaman di duniapun paling banter hanya sanggup mencapai 10% dari aplikasi. Sisanya baru bisa ditemukanpada saat programming dilakukan. Tanpa pernah berlatih, kita tidak akanmempunyai kepekaan terhadap pola-pola code yang dihasilkan, yang sepintas laluhanya seperti random, sehingga miss opportunity untuk menerapkan konsep yangbagus. Bahkan konsep yang paling sederhana / esensi seperti localization punbisa luput dari pandangan (apalagi konsep turunan dari localization yang lebihkompleks seperti object oriented). Karena itu tidak ada cara untuk meningkatkanskill programming adalah dengan mengenali banyak, sebanyak-banyaknya aplikasi darisebuah teknis, dan terus berlatih seperti itu, sampai mempunyai kepekaanterhadap pola-pola yang ditemukan pada saat programming. Berlatih sampaidaya reflex nya terbentuk.
Karena itu pula saya sangat against kebiasaan yangmemberikan contoh pengaplikasian dengan konsep abstrak yang lain. Ini hanyamembuat orang tenggelam dalam lautan teknik dan kehilangan awareness terhadapesensi dari teknik. Contoh aplikasi haruslah dalam bentuk seperti persamaanmatematika, yang dalam kasus ini harus dengan gampang ditunjukkan dengan codesecara gamblang, yang kemudian bisa dihitung 1-2-3 dengan mudah... that iscontoh yang memenuhi kriteria technical justification.
Syntax OOP bukanlah esensi dari OOP
Salah satu tujuan paling hakiki dari semua teknikpemrograman adalah bagaimana membuat program yang berjalan baik dengan waktuyang secepat-cepatnya. Atau dengan kata lain adalah produktifitas. Peningkatanproduktifitas paling significant adalah pada saat pertama kali diciptakanbahasa tingkat tinggi. Dari tadinya kita harus mengetik berbaris-baris syntaxbahasa assembly / mesin, atau bahkan puluhan syntax, cukup hanya digantikanhanya dengan satu-dua syntax bahasa tingkat tinggi. Ini jelas peningkatan produktifitas,karena jelas technical justification nya. Yaitu : misalnya 5 syntax menjadi 1syntax, jelas terjadi peningkatan produktifitas sebesar 5 kali. (Perhatikan: ada angka yang menjadi technical justification.)
Bahasa tingkat tinggi berevolusi terus sampai yang palingsignficant adalah dengan diciptakannya bahasa tingkat tinggi yang menerapkankonsep prosedural. Dan kita tahu setelah itu popular bahasa tingkat tinggi yangsyntax-syntax nya dapat digunakan untuk menerapkan konsep object orienteddengan nyaman, yang disebut bahasa pemrograman object oriented.
Masalah nya adalah banyak programmer yang terpaku padasyntax dari object oriented, sedangkan produktifitas yang didapat dari bahasaobject oriented JELAS bukanlah dari perubahan syntax prosedural menjadi objectoriented. Coba perhatikan dua syntax ini, dimana yg pertama merupakan syntaxprosedural, sedangkan yang kedua merupakan object oriented:
- ResizeWindow(chartObject, …)
- chartObject.ResizeWindow(…)
Kedua syntax tersebut mempunyai jumlah karakter yang hampirsama. Sehingga jelas tidak ada peningkatan produktifitas dalam hal syntaxseperti halnya perubahan dari bahasa assembly ke bahasa tingkat tinggi. Tentumenjadi jelas jika dikatakan kegunaan dari teknik / bahasa object orientedbukanlah sekedar perubahan syntax seperti di atas. Padahal inilah jawaban yangselalu saya dapatkan, mungkin 9 dari 10 jawaban, setiap kali saya bertanya keseorang programmer mengapa object-oriented sangat powerful. Tidak heran jikaakhirnya pemanfaatan object oriented tidak terlihat benefit nya jika digunakanoleh programmer dengan pemahaman yang serendah itu.
Beberapa orang akan beragumen : dengan cara object oriented,syntax nya menjadi lebih jelas. Saya akan challenge dengan pertanyaan “berapa banyaklebih jelas??”. Adakah kadar mengenai “lebih jelas” dari case di atas yang bisadinyatakan dalam angka?? Bisakah ditunjukkan claim lebih jelas itu dengan angkaseperti 10% lebih jelas atau 3000% lebih jelas?? Jika tidak bisa, alasan iniadalah alasan kabur yang dengan gampang dibantahkan, karena “lebih jelas” disini hanya sekedar masalah preferensi. Dengan konsep technical justificationdimana selalu harus ada angka atau sebuah postulat sederhana, argumen di atasyang sekedar berisi claim “lebih jelas” dengan sendirinya tidak berharga. Dansaya pribadi, diharapkan juga para pembaca, tidak mau menghabiskan waktu untuk berdebatmengenai hal-hal mengambang seperti ini. Lets kita fokuskan waktu yang sangatberharga kepada hal-hal yang lebih jelas seperti statement “peningkatanproduktifitas 100 kali”. Sangat gamblang dan terang benderang karena ada angka“100” tersebut – atau whatever angka. Bahkan angka yang “hanya” “dua kali” punmasih jauh jauh lebih berharga dibandingkan argumen yang tidak mempunya angkaatau technical justification.
Jika pembaca masih setuju dengan saya, mari kita lanjut.
”WHY” OOP
Setelah kita membahas mengapa semua hal yang popular di atasbukanlah esensi dari OOP, diharapkan semua pemikiran yang salah seperti di atassudah dibuang jauh-jauh dari kepala kita, dan kita ready dengan lembaran baru.
Bahasa tingkat tinggi memberikan produktifitas denganmagnitude yang luar biasa. Seiring dengan meningkatnya produktitas, jumlah codeyang ditulispun kembali menjadi luar biasa. Dan ini menimbulkan challenge baru.Kenapa? Karena simply otak manusia terbatas, sehingga tidak mungkin dalam satuwaktu seorang manusia normal sanggup mengatasi kompleksitas dari jumlah code yangsangat banyak tersebut. Cara mengatasi kompleksitas tersebut tentu saja adalahdengan membagi program yang berukuran super besar tersebut menjadibagian-bagian yang lebih kecil yang masih sanggup dihandle oleh otak manusia.
Teknik yang memecah-belah kompleksitas menjadi sub-bagianyang bisa dihandle oleh otak manusia,adalah teknik umum yang digunakan diberbagai bidang apapun. Khusus utk bidang programming ini, saya sebut sebagai LOCALIZATION.Lhoooww??? Kok bukan object-oriented??? Object oriented memang mempunyai fituryang lebih banyak dibandingkan hal yang lain, sehingga by-default object orientedmenjadi lebih popular. Tetapi perlu diingat bahwa object oriented ada karena kebutuhanmelakukan localization. Sehingga tanpa memahami localization terlebih dahulu,tentu tidak akan dapat menerapkan object oriented dengan maksimal.
Encapsulation, inheritance, dan polymorphism, merupakanpengembangan dari teknik-teknik pemrograman yang sudah dimulai sejak ilmu programmingtercipta, yang disempurnakan dengan bahasa tingkat tinggi, disempurnakan denganprosedural, hingga yang sekarang disebut object oriented, tetapi dasar konsepnya tidak pernah berubah yaitu untuk menerapkan localization. Sayang dengansemakin banyaknya teknik, kita cenderung melupakan esensi “why” teknik tersebutdiciptakan, sehingga pengaplikasian nya menjadi salah dan benefit nya menjadihilang. Oleh karena itu, kita akan membahas localization terlebih dahulu,sebelum akhirnya kita akan kembali ke pembahasan object oriented tentu saja.




Reply With Quote
).







Bookmarks