Gara-gara terlalu ambisius untuk bikin software CAD baru, saya akhirnya berkutat dengan bermacam-macam bahasa pemrograman baik yang sudah saya kenal ataupun yang benar-benar baru untuk saya.
Ambil contoh C/C++ ini bagus untuk speed tapi akhirnya saya harus utak-atik bermacam-macam sampai ke Qt, Glide, etc untuk user interfacenya. Berhubung Qt bukan pure open source, jadinya agak males juga ngoprek Qt. Begitu liat Glade, kok dokumentasinya kayaknya terlalu ribet. Belum lagi kompilasinya yang ngga sederhana. Yang berikutnya lagi, C++ STL. Idenya sangat amat menarik, jadinya saya oprek itu untuk paling tidak bisa baca program yang ditulis dengan STL. Yang repot terutama karena pada umumnya STL menggunakan terlalu banyak typedef di dalam kelas, yang walaupun mungkin menyederhanakan pembacaan algoritmanya, tapi untuk merunut dan mengurut typedef ini berasal dari mana, itu bukan sebentar.
Jadi saya simpan C++ ini untuk low level programming, misalnya untuk mengindeks struktur data, membaca file, dll. Termasuk yang saya oprek (sampe beli bukunya) adalah tentang OpenMP, yaitu ekstensi C untuk parallel programming.
Kedua, Tcl/Tk. Nah ini bahasa pemrograman yang ‘dulu’-nya merupakan saingan Perl, tapi bunyinya tidak senyaring Perl. Akibatnya user support, kelas tambahan dsb nya masih kurang. Kelebihannya, seperti Perl yang tidak mengenal tipe data, juga ada tipe data berbentuk List (hmm, bahasa Indonesianya apa ya, dulu waktu SMA katanya ’senarai berantai’), yang pengoperasiannya jauh lebih mudah ketimbang List dalam C++ atau Java. Misalnya perintah seperti :
foreach {a b} $list_baru {
puts [expr {$a*$b}];
}
yang artinya ambil data setiap dua buah dan masukkan ke variabel a dan b. Ini sangat berguna untuk pengolahan koordinat, misalnya poligon yang merupakan list dari beberapa titik, sehingga pemrosesannya lebih sederhana. Sebetulnya bisa juga tiap titik itu dianggap sebagai Class, cuma secara pribadi sepertinya cara representasi seperti ini lebih boros memori dan waktu untuk inisialisasi Class tersebut dan reservasinya di memory.
Lalu kenapa Tcl/Tk? Pertama, bahasa ini adalah bahasa yang digunakan salah satu vendor CAD yang perusahaan saya gunakan. Tujuannya jelas untuk portabilitas makro-makro yang sudah dibuat selama ini untuk vendor tersebut. Kedua, pembuatan user interfacenya benar-benar mudah dan straight forward. Juga banyak widgets yang sudah siap digunakan untuk tinggal diintegrasikan dalam suatu program. Selain itu, ini yang menarik, ternyata portabilitas Tcl/Tk juga sudah lumayan banyak, yang artinya seperti Java, write once run many. Saat ini Tcl/Tk banyak digunakan untuk administrasi otomatis antar beberapa server/workstation dengan berbagai sistem operasi, sistem window, atau pun hardwarenya.
Bahasa berikutnya, yaitu Java. Sebenarnya secara pribadi saya paling benci belajar Java. Mungkin manual, buku, atau web link yang saya punya benar-benar tidak user friendly. Terlalu banyak istilah-istilah baru yang menurut saya tidak self-explanatory. Misalnya, Struts, Beans, Swing, SWT, JFace, JBoss, what the heck. Bahasa pemrogramannya sendiri sih ok, mirip dengan C, tapi yang juga tambah pusing adalah object oriented languagenya yang menurut saya sangat rumit, misalnya Interface, Extend, Implement, dll. Saya sudah baca konsepnya bolak balik, tapi waktu saya coba integrasikan atau coba buat program sendiri dari nol, hmm… pusing.
Anyway, kenapa akhirnya saya nyerah juga harus pake Java? Alasannya MDT (model development tools) dari Eclipse. Ok, idenya sangat amat elegan. Pada dasarnya kita bisa membuat software yang membuat software. Artinya kita manusia, sebagai arsitek dari software tersebut, hanya perlu berfikir secara garis besar, yang kita rumuskan dalam bentuk Model. Model ini bisa berupa UML, Ecore, XSD, yang menentukan bagaimana hubungan satu objek dengan objek lain. Di UML, objek-objek ini bahkan dapat berinteraksi baik secara Use Case (siapa dan melakukan apa), aksi, sekuensial, event, ataupun dapat dilihat dari sudut pandang deployment (bagaimana objek-objek tersebut dikumpulkan dalam satu paket, dan hubungan antar paket satu dengan paket lain, serta kalau perlu di mana secara fisik paket tersebut ditempatkan)
Model ini akan dianalisis oleh suatu algoritma yang kemudian menerjemahkan model ini ke dalam bahasa pemrograman. Beberapa software komersil untuk UML bahkan bisa menghasilkan 10 bahasa pemrograman, misalnya C++, Java, PHP, Phyton, dll.
Di Eclipse sendiri, Ecore menyajikan hanya sebatas model dalam arti Class. Tapi yang menakjubkan, Eclipse bukan cuma menghasilkan kode Java dari model kelas tersebut, tapi juga menghasilkan editornya! Ini benar-benar luar biasa. Yang saya bayangkan apabila model to code ini bisa direalisasikan untuk menghasilkan kode yang jauh lebih kompleks daripada hanya sebuah editor.
Misalnya (hayalan ON) kita ingin buat mobil dengan model dan spesifikasi tertentu, kemudian software akan menerjemahkan model dan spesifikasi tersebut hingga menjadi mobil sungguhan (hayalan OFF). Saya cuma berfikir tentang potensi model based programming ini di masa depan. Mungkin kelak bahasa pemrograman yang ada saat ini hanya menjadi bahasa assembler yang sekarang hanya dioprek oleh pembuat compiler (saya sendiri sudah ngga pernah liat bahasa assembler selain HC11 Motorola dan Intel, dan ngga kepikiran untuk mencari tahu bahasa assembler untuk handphone Nokia atau Sony Erricsson, karena toh sudah ada compilernya)
Anyway, jalan masih panjang untuk mewujudkan impian jadi kenyataan. Masih banyak yang harus dilihat dan ditimbang-timbang, sekaligus bahan pembelajaran buat diri saya sendiri dan yang baca blog ini. Kalo ada saran mau nambahin ide atau ikut berkhayal, silakan..

