Praktis & Idealisme

 Monday, June 13, 2005

Gw lagi seneng... ketemu sumber lagu dan berhasil mendonlot sebagian musik-musiknya >:). Gue berhasil dapetin hampir semua lagu dari album "Giant Steps" (1959) punyanya John Coltrane. Ada juga musik-musik dari album beken "Kind of Blue" punyanya Miles Davis, dan juga musik-musik Miles Davis bersama quintet-nya seperti musik yang berjudul "Airegin", "It never entered my mind". Asik bisa dapetin musik-musik yang katanya fenomenal lebih-lebih album Kind of Blue itu. Katanya sekarang musik-musik itu udah jadi "Jazz Standard", mungkin juga Mainstream. Dapet juga lagu-lagunya Antonio Carlos Jobim yang terkenal sebagai pencetus musik Bossa Nova (New Wave?).... benar-benar hasil downlotan musik yang sangat jarang ditemukan & didapat :) Jarang-jarang gue bisa dapet donlotan seberuntung ini. Oh iya ngomong-ngomong kedua album itu (Kind of Blue & Giant Step) masuk top list 500 list album terbesar sepanjang masa menurut Rolling Stone.

Pengen juga sih gue punya musik-musik itu yang asli... asli bener bukan asli bajakan :p tapi cari album mereka susah untuk dicari (setidaknya di bogor) kalo ada yang kaset pasti harganya lebih murah, pernah gue nemu toko di suatu mall di bogor yang jual CD impor asli album "Time Out"-nya Dave Brubeck Quartet, harganya alamakk... sampe 150 rebu! gimana bazakan gak laris, duit 7-8 rebu bisa dapet satu CD MP3 yang isinya bisa 110+ lagu!. Yah bagaimanapun emang sebaiknya beli yang asli lah... tapi kalo yang asli juga gak ada yang jual kan susah juga...

Minggu ini, musiknya coltrane & davis sering menemani gue di tengah malam di saat gue sedang berasik-asikan dalam urusan debug-mendebug kodingan (huuuh emang ngedebug asik ya?). Kalo denger musik-musik yang lembut model "Naima", "To Young to Go Steady", "Dear Loard", atau "It never entered my mind" wah rasanya... seperti terhanyut oleh musiknya...

Oh iya ngomong-ngomong soal ngedebug, gue ada pengalaman nih dengan Java. Kalo yang pernah koding pake Java pasti tau lah kalo hasil query itu disimpan di variabel objek bertipe interface ResultSet. Nah suatu saat gue pengen ngambil nilai bertime date (pake .getDate("nama_kolom"). Karena ngambilnya pake method getDate pasti returnnya bertipe objek Date (ya iyalah). Nah rencananya gue mau manipulasiin data bertipe Date ini untuk dijadiin bahan buat melakukan query. Nah repotnya ternyata waktu pas mau bikin query itu gue kan harus dapetin data 'tahun','bulan', dan 'tanggal'. Masalahnya waktu pas gue baca JavaDoc, ternyata getYear(), getMonth(), dsb adalah method Deprecated yang ada di objek Date. Karena ditulisnya Deprecated ya gue sebisa mungkin menghindari takut-takut method ini gak bakal ada di JDK versi mendatang...

Setelah deprecated di kelas Date, harus ada doong alternatifnya, dan emang ada tapi harus melalui beberapa langkah dengan bantuan kelas Calendar. Gue jadi mikir, gila gue mau melakukan langkah yang sederhana aja musti melakukan banyak hal dulu. Contoh misal gue mau bikin query dari result set yang sederhana.

ResultSet rs = smt.executeQuery(...);
Date d = rs.getDate("tgl_lahir");
String sDate = d.getMonth()+"/"+d.getDate()+"/"+d.getYear();
String newQuery = "SELECT * FROM some_table WHERE tanggal LIKE '"+sDate+"'";

Tapi karena di kelas Date udah deprecated, langkah memanggil fungsi getMonth(), getYear(), getDate() harus pake kelas Calendar. maka langkah diatas bisa menjadi

ResultSet rs = smt.executeQuery(...);
Date d = rs.getDate("tgl_lahir");
Calendar cal = Calendar.getInstance();
cal.setTime(d);
String sDate = cal.get(Calendar.MONTH)+"/"cal.get(Calendar.DAY_OF_MONTH)+"/"+cal.get(Calendar.YEAR);
String newQuery = "SELECT * FROM some_table WHERE tanggal LIKE '"+sDate+"'";

Sekarang mana yang lebih praktis? cari pertama atau kedua? jelas cara pertama lebih praktis! tapi apakah cara kedua yang tidak praktis itu tidak berguna? justru berguna lebih-lebih bagi pengguna yang tidak menganut sistem kalender yang umum seperti masehi sekarang ini. Btw gue agak surprise juga kok Tomcat gak nampilin pesan error, padahal gue import java.util.Date dan java.sql.Date waktu pas declare var obj Date tidak secara lengkap...

Kalo ngomongin contoh date coba kalo gue hidup di mana sistem penanggalan menggunakan tahun masehi jelas penggunaan fungsi getDate(), getMonth(), getYear() dkk lebih praktis. Tapi bagiamana jika kita hidup di sistem yang tidak menggunakan penanggalan masehi seperti kalender Cina, Jepang, Islam, Jawa cara penggunaan Calendar tentu lebih masuk akal meski tidak praktis.

Gue kadang jadi kepikiran sebenarnya lebih baik memikirkan Kepraktisan atau Idealisme? Masih berkaitan dengan Java, sepertinya bahasa Java di ciptakan oleh orang yang memegang teguh konsep pemrograman berorientasi objek (Object Oriented Programming), setidaknya menurut pendapat gue sih. Bahasa Java dibuat dengan sintaks yang mirip dengan bahasa C,C++ dan menghilangkan beberapa konsep-konsep tertentu. Menghilangkan konsep pointer tentu ide yang baik, lebih-lebih JVM memiliki konsep Garbage Collection yang lebih memudahkan programmer berfokus pada program yang di buatnya daripada memikirkan masalah penanganan memory, hardware dan hal-hal "kasar" lainnya. Tapi disisi yang lain sepertinya konsep yang OOP banget membuat konsep yang bermanfaat tidak ikut dibawa dalam bahasa Java. Contoh, sejak jaman jebot bahasa C,C++ memiliki konsep enumeration, kenapa ini gak diterapkan sejak awal di Java? para programmer dipaksa membuat suatu "konstanta" secara manual seperti dengan mendekalarasikan:

public static int NAMA_KONSTANTA_1 = 1;
public static int NAMA_KONSTANTA_2 = 2;
dst...

padahal kalo dengan enumeration, paling 'cuma' declare nama-nama konstanta saja. Udah gitu java kayaknya gak menyerap konsep template yang sebelumnya udah ada di C++. Berpegang teguh pada konsep OOP dimana suatu superclass selalu bisa menyimpan semua subclass-nya membuat programmer harus selalu melakukan casting setiap mau memanfaatkannya. Contoh Framework Collectionnya si Java model-model HashMap, TreeMap, LinkedList, Vector dsb. Kita buat variabel objek bertipe Object, nanti untuk Subclass itu disimpak ke kelas Object (Di java, semua kelas adalah subclass dari kelas Object). Ketika akan mengakses data-datanya kita harus selalu melakukan casting dengan tipe subclass itu, kadang kerjaan seperti ini bisa menyebalkan lhoo. Kayaknya baru di Java 5 (JDK 1.5) ini pembuatnya 'insyaf' untuk memasukan konsep enumeration dan konsep Template, waktu yang cukup lama mengadopsi teknologi yang jelas-jelas sudah ada puluhan tahun sebelumnya (teknologi tahun70,80,90-an?)

Oh ya ada juga nih contoh, kalo di php kita mau dapetin suatu digest dengan algoritma MD5 kita cukup panggil fungsi (kalo gak salah) $digest = MD5($str); kalo di Java wah bisa berapa kelas tuh dibutuhin cuma buat dapetin nilai digest. Gak salah sih kalo harus berlangkah-langkah, karena memang pada prinsipnya konsep Object Oriented itu membuat suatu Object sebaiknya berdasarkan "tujuan utama" object... Karena object string berguna untuk memanipulasi string makanya mereka gak memasukan fungsi md5 yang merupakan fungsi yang berkaitan dengan security ke kelas String.... ya emang seharusnya kebisaan make PHP yang serba praktis jangan dibawa ke Java yang serba "Object Oriented" (yang kadang boleh jadi tidak praktis, tapi secara konsep OOP OK punya).

gue kadang kepikiran hal itu juga terjadi di alam nyata dalam hubungan antar manusia... Apakah memang segala sesuatu harus selalu berpegang teguh pada suatu prinsip atau berpegang teguh pada azas kepraktisan (pragmatisme?). Yah semuanya memang kembali kepada selera dan keyakinan sih... Kalo sekedar urusan bahasa pemrograman itu beda soal kepraktisan & idealisme mah tergantung kebutuhan, tapi kalo urusan keyakinan & prinsip hidup seperti menjalankan ajaran agama sesuai prinsip agama atau pragmatisme dalam beribadah di pertentangkan, gimana jadinya ya? bisa hancur tatanan sosial?, perang? kejahatan merajalela? dll?

Jadi gimana ya proporsi antara soal "Prinsip/Idealisme" vs "Kepraktisan"....?

0 Comments: