20
Jan 12

Generative Programming

Pertama kali mengenal istilah ini adalah pada saat membaca tentang Model Driven Engineering (MDE), dimana istilah – istilah seperti Domain Specific Language (DSL) dan Code Generator sering dijumpai. Saat ini cukup banyak penelitian mengenai teknologi Model-Driven, termasuk yang telah terstandarisasi seperti Model-Driven Architecture (MDA) oleh OMG.

Dalam generative programming, kita juga akan menemukan konsep Aspect-Oriented Programming serta Generic Programming. Dapat dikatakan bahwa dengan mempelajari generative programming, kita akan mempelajari berbagai konsep/paradigma sekaligus. Ini dapat menjadi nilai tambah tersendiri.

Bagi yang berminat mempelajari Generative Programming dapat membaca tesis Generative Programming – Principles and Techniques of Software Engineering Based on Automated Configuration and Fragment-Based Component Models

Berbagai paper/jurnal tersedia secara online, maupun buku Generative Programming edisi cetak.


24
Sep 11

Komputer dan Pendidikan

While we’re living, the dreams we have as children fade away…

Begitulah petikan lirik lagu Oasis berjudul Fade Away.

Sewaktu saya kecil (SD/SMP), komputer masih tergolong langka. Waktu itu saya beranggapan bahwa komputer adalah mesin pintar yang dapat membantu kita belajar. Dengan kemampuan interaksi pembelajaran yang lebih baik, anggapan bahwa dengan komputer kita dapat memahami suatu ilmu dengan lebih baik, apalagi dengan adanya internet, informasi menjadi terbuka lebar, pembelajaran seharusnya menjadi jauh lebih maju. Semangatnya adalah, jika komputer semakin canggih dan terjangkau, belajar jadi lebih menyenangkan dan mudah dipahami. Biaya pendidikan seharusnya semakin murah, ruang pembelajaran lebih fleksibel, serta waktu pembelajaran menjadi semakin efisien.

Tapi apa fakta yang terjadi saat ini? Sekarang kita hidup dikelilingi komputer, mulai yang ada di atas meja, dalam genggaman tangan, hingga di “awan” (cloud computing). Menariknya, hingga saat ini software pendukung pembelajaran jumlahnya jauh lebih sedikit dibanding software hiburan, seperti game misalnya. Pendek kata, inovasi yang dilakukan untuk dunia pendidikan jauh tertinggal bila dibanding inovasi untuk dunia hiburan.

Mengapa ini terjadi? Banyak faktor, termasuk faktor politis (tidak akan dibahas di tulisan ini). Kita sering mengkambinghitamkan resource/sumber daya, kita mengeluh bahwa kita tidak dapat melakukan sesuatu karena keterbatasan resource/sumber daya, misalnya komputer yang dianggap kurang canggih, dsb. Ironisnya, kini dengan resource berupa komputer yang semakin terjangkau, kita memiliki potensi yang sangat besar untuk membangun peradaban yang jauh lebih baik, tapi tampaknya itu hanya sebatas angan-angan, fakta malah sebaliknya, komputer (dan internet) yang seharusnya membuat kita menjadi lebih produktif dan efisien, ada kalanya justru menjadi faktor penghambat produktivitas. Tidak jarang kita harus mematikan koneksi internet untuk bisa fokus ke pekerjaan.

Apa penyebabnya? Banyak, salah satunya adalah komputer merupakan alat multi fungsi, biasanya alat multi fungsi memiliki tingkat gangguan yang cukup tinggi yang dapat mengalihkan fokus kita (distraction). Dengan kata lain, kita cenderung melakukan multitasking ketika berhadapan dengan komputer (atau peralatan multi fungsi lainnya), bahkan saya menulis artikel ini secara multitasking juga (sambil mendengar musik). Melalui berbagai penelitian ilmiah, multitasking sudah terbukti tidak baik bagi produktivitas, butuh usaha ekstra bagi kita untuk menghindarinya supaya tidak selalu terjebak di dalam ilusi multitasking (anggapan bahwa suatu pekerjaan dikerjakan secara bersamaan, maka lebih cepat).

Apa yang dibayangkan tidak selalu sejalan dengan kenyataan.

Kabar baiknya, ada beberapa pihak yang tetap memperjuangkan pendidikan melalui komputer, salah satunya adalah Game Edukasi.


23
Sep 11

Informatika Eksakta?

Jurusan Informatika atau ada juga yang menyebut Teknik Informatika atau Ilmu Komputer, merupakan jurusan yang cukup banyak diminati pelajar Indonesia. Informatika termasuk rumpun Ilmu Alam (IPA) atau eksakta (ilmu pasti), tapi apakah benar Informatika adalah eksakta?

Fakta yang ada, Informatika cenderung bukan eksakta, Informatika cukup sulit digolongkan sebagai suatu ilmu (science), rekayasa (engineering), atau bahkan seni (art). Tidak seperti science atau engineering lainnya, Informatika minim standarisasi dan banyak berisi perdebatan serta klaim-klaim yang cenderung membuatnya malah mirip ilmu sosial.

Misal, kita bertanya pada para Fisikawan, apa itu geombang supersonik? apa itu kecepatan cahaya? apa itu medan elektromagnetik? apa perbedaan kecepatan dengan percepatan? maka kita akan dapatkan jawaban seragam walaupun dari sumber yang berbeda-beda. Hal ini tidak berlaku di Informatika.

Contoh pertanyaan sederhana seputar informatika:

  1. Bagaimana cara mengukur besarnya suatu perangkat lunak?
  2. Apa perbedaan data dengan informasi?
  3. Apa yang dimaksud dengan software, program, dan aplikasi?

Pertanyaan sederhana yang sangat mendasar seperti di atas saja sudah memiliki variasi jawaban yang sangat beragam, dan sebagian besar jawaban tersebut hanyalah ARGUMEN, bukan sesuatu yang pasti (dapat dibuktikan secara ilmiah) seperti pada ilmu pasti lainnya. Alhasil dunia teknologi informasi dibanjir buzzword – buzzword yang bahkan berbau hoax. Inilah fenomena yang terjadi, semua ini mungkin karena informatika memang minim standarisasi. Tapi apakah informatika membutuhkan standarisasi? Masih perlu diperdebatkan lagi.. Debat lagi, debat lagi..


10
May 11

Software Design

Menyambung tulisan saya sebelumnya 1, 2, 3, masih berhubungan tentang perdebatan mengenai posisi source code (apakah desain atau implementasi). Ada yang menarik dari buku Software Modeling and Design yang belum lama ini diterbitkan. Disana disebutkan bahwa software life cycle activities meliputi:

  1. Requirement Analysis and Specification
  2. Architectural Design
  3. Detailed Design
  4. Coding
  5. Testing

Jika kita melakukan desain dengan menggambarkan diagram kelas dengan UML, ER Diagram, Activity Diagram, Sequence Diagram, Collaboration Diagram, dsb sejatinya kita sedang melakukan perancangan arsitektur (struktur). Padahal ada dua macam perancangan, yaitu perancangan arsitektur (struktur) dan perancangan behavior (perilaku). Pada buku Software Modeling and Design disebutkan bahwa perancangan behavior (perilaku) ada pada tahap ke-3, yaitu detailed design. Perancangan ini dilakukan dengan menggunakan Program Design Language (PDL) atau pseudocode. Setelah itu baru dilakukan proses coding.

Jika kita cermati, PDL maupun pseudo code tidak terlalu populer, baik di lingkungan akademik maupun industri. Bahasa pemrograman tingkat tinggi sudah sangat ekspresif, apalagi dengan semakin banyaknya domain specific language (DSL) yang jauh lebih ekspresif lagi. Jadi boleh dikatakan bahwa tahapan PDL atau pseudocode dapat dihilangkan. Alasannya adalah perbedaan level of abstraction pada bahasa pemrograman dengan PDL atau pseudocode tidak terlalu signifikan.

Dengan kata lain, detailed design dapat dilakukan tanpa bantuan PDL atau pseudocode, melainkan langsung dengan bahasa pemrograman “asli”. Sehingga source code merupakan dokumen desain, dan coding adalah aktivitas perancangan perilaku (bahavior) suatu perangkat lunak.

Mengapa PDL atau pseudocode “gagal”? Karena abstraksi yang dilakukan tidak tepat pada tempatnya. Kalau kita ambil analogi di bidang electrical engineering, antara komponen elektronika tube dan transistor memiliki fungsi yang sama (dalam bahasa software engineering: memenuhi kebutuhan fungsional yang sama). Walalupun ’sama’, desain yang dihasilkan dapat menjadi sangat berbeda. Misal, desain amplifier dengan tube dan desain amplifier dengan transistor akan berbeda. Dalam perancangan, kita tidak bisa membuat komponen X yang merupakan abstraksi dari transistor dan tube, karena walaupun ’sama’, keduanya berbeda.

Kalau kita amati secara lebih teliti, mayoritas buku yang terbit belakangan ini sudah jarang yang menggunakan kata implementasi untuk proses coding. Coding ya ditulis coding, tanpa embel – embel implementasi.

(*) Artikel ini pendapat pribadi penulis, tidak untuk dijadikan referensi


08
May 11

Mitos Seputar Software Engineering

Ketika mendengar kata software engineering, yang ada dalam pikiran sebagian orang adalah sederetan proses bernama SDLC (Software Development Life Cycle). Istilah software engineering sendiri pertama kali muncul pada tahun 1968, yaitu pada NATO Software Engineering Conference. Namun sayangnya, sejak saat itu (diperkenalkannya software engineering) sampai sekarang, pekerjaan membuat software masih saja error-prone. Berikut ini beberapa mitos (versi saya pribadi) seputar software engineering:

  1. Code adalah implementasi
  2. Ini mungkin pendapat yang sudah sangat umum, tapi sebenarnya masalah ini tidak dapat dianggap sepele. Ini dapat menjadi awal dari sebuah kehancuran. Ada kesalahpahaman di sini, banyak yang menyalah artikan bahwa implementasi itu ‘tinggal mengerjakan aja, sedikit pakai otak’, mirip seperti (maaf) tukang, padahal kenyataannya di dunia software tidak seperti itu. Sehingga saat ini berkembang pendapat bahwa programming (dalam hal ini coding) adalah pekerjaan yang levelnya paling ‘rendah’, bahkan untuk lulusan S1 dianggap tidak pantas berprofesi sebagai programmer. Konon, programming itu urusan lulusan SMK. Pendapat seperti ini sangat umum di Indonesia. Akan tetapi, jika Anda lihat pekerja di luar negeri, Twitter atau Google misalnya, syarat untuk menjadi programmer (coding), ada yang sampai level Phd. Mitos ini harus dibuang jauh – jauh kalau IT Indonesia mau maju. Dampak lainnya yang dapat kita lihat, gaji programmer di Indonesia tergolong rendah, ini juga akibat dari anggapan bahwa source code adalah implementasi, sehingga programmer dapat disamakan dengan (maaf) tukang, maka programmer dapat dibayar relatif rendah. Coba saja bila anggapan yang beredar dalam masyarakat adalah source code = desain, maka kondisinya akan sangat berbeda.
    Pada kenyataannya, sebenarnya source code itu adalah desain, hanya saja dia memeiliki level abstraksi yang beragam (ada yang tinggi dan ada pula yang rendah). Kita bisa saja membuat suatu source code dengan level abstraksi yang lebih tinggi daripada diagram UML sekalipun. Jadi, source code sebenarnya adalah dokumen desain, dia memiliki representasi berupa teks. Sedangkan dokumen desain lainnya yang cukup populer adalah UML, yang memiliki representasi berupa grafis.

  3. Proses analisis kebutuhan dan desain tidak mempedulikan implementasi
  4. Ini anggapan yang dapat berakibat fatal, menyebabkan kegagalan perangkat lunak. Kalau kita bandingkan dengan engineering lain, mungkin dapat dianalogikan seperti merancang alat elektronika tanpa mempedulikan hukum fisika.
    Misal, seorang arsitek atau desainer perangkat lunak disuruh membuat aplikasi bioinformatika untuk membuat simulasi DNA. Kalau dia tidak mempedulikan implementasi, bagaimana mungkin dia akan menghasilkan desain suatu perangkat lunak yang dapat bekerja dengan baik pada komputer performa tinggi, baik dengan arsitektur GPU (misal nVidia Tesla), CPU (misal Intel Xeon), maupun campuran keduanya, yang notabene ketiganya memiliki arsitektur dan teknik pemrograman yang sangat berbeda. Karena ketiga arsitektur prosesor tersebut sangat berbeda, maka membutuhkan analisis dan desain yang sangat berbeda juga.
    Hal lain yang mungkin terjadi adalah biaya pembuatan software menjadi sangat mahal, termasuk karena software yang dihasilkan tidak efisien sehingga kebutuhan akan hardware meningkat.

  5. Dokumen perangkat lunak hanyalah analisis kebutuhan (spesifikasi) dan desain
  6. Ini adalah salah satu akibat dengan kesalah pahaman dalam memahami bahwa source code adalah implementasi (lihat poin 1). Sejatinya source code juga termasuk dokumen analisis dan desain perangkat lunak, hanya saja pada umumnya dia memiliki level abstraksi yang lebih rendah.

  7. Mempelajari “konsep pemrograman”, otomatis menguasai berbagai bahasa pemrograman
  8. Ini salah satu upaya mencari ’silver bullet’. Seperti matematika, untuk menghitung luas persegi, anda dapat menggunakan perkalian, penjumlahan (sigma), atau integral. Perkalian, penjumlahan, dan integral merupakan bahasa matematika. Dengan mempelajari konsep menghitung luas dengan perkalian, tidak akan menjamin anda dapat menguasai konsep menghitung luas dengan menggunakan metode penjumlahan (sigma) atau integral. Jadi setelah mempelajari konsep menghitung luas dengan perkalian, kita tidak bisa berkata bahwa: “Saya telah menguasai konsep menghitung luas, apapun metodenya”. Demikian pula pada pemrograman, dengan mempelajari suatu bahasa tertentu, tidak ada jaminan dapat mengerti bahasa lainnya. Yang perlu dicatat, dalam pemrograman, konsep pemrograman tidak memonopoli ‘pemberian pengaruh’, justru sering kali bahasa pemrograman-lah yang memengaruhi konsep pemrograman, sehingga melahirkan konsep-konsep baru. Bahasa pemrograman dan konsep pemrograman merupakan dua hal yang tidak terpisahkan.

  9. Perangkat lunak itu abstrak, tidak nyata. Sehingga software engineering berbeda dengan engineering lainnya
  10. Ini biasanya menjadi ‘kambing hitam’ atas payahnya kualitas software engineering saat ini. Kalau kita telusuri, justru software engineering itu berhadapan dengan sesuatu yang sangat nyata. Kita dapat mengetahui perilaku software yang kita buat sampai pada level yang paling kecil, yaitu kode mesin. Kita tidak perlu melakukan prediksi atau eksperimen terhadap perilaku dari kode mesin tersebut, karena itu sudah pasti, kode tersebut akan dieksekusi sesuai desain arsitektur prosesor yang digunakan, kecuali ada kesalahan pada hardware. Justru engineering lainnya (engineering klasik), yang ‘dianggap berhubungan dengan BENDA NYATA’, tidak memiliki kelengkapan informasi seperti ini. Seperti kita tahu bahwa sampai sekarang para ilmuan masih belum menemukan kepastian terhadap bagian terkecil dari materi, ada berbagai teori yang muncul, seperti yang dipelajari dalam fisika kuantum, string theory, dan m-theory. Justru engineering klasik itulah yang sebenarnya bermain dengan hal yang tidak nyata, karena tidak semua informasi yang tersedia telah diketahui. Sehingga engineering klasik lebih sering melakukan eksperimen daripada software engineering. Sedangkan eksperimen pada software engineering mungkin hanya dilakukan saat stress test atau pengukuran kinerja, reliabilitas, dan skalabilitas. Ini semakin memperjelas, bahwa sebenarnya eksperimen dalam software tersebut dilakukan ketika berhubungan dengan hardware, yaitu berkaitan dengan performa prosesor, memory, I/O, dsb. Akan sulit memprediksi secara akurat penurunan kinerja prosesor atau memory pada kondisi tertentu (misal suhu tertentu), kecuali melalui eksperimen. Sedangkan source code, yang menjadi inti dari software, itu sudah sangat nyata, tidak ada yang abstrak, walaupun tidak kasat mata, perilakunya dapat ditentukan secara pasti tanpa perlu melakukan eksperimen.

*ini hanya pendapat pribadi, tidak untuk dijadikan referensi


24
Apr 11

Tips Mencari Paper Berkualitas Di Internet (Gratis)

Jika Anda mencari pengetahuan yang sifatnya ‘bleeding-edge’, maka Anda tidak bisa mengandalkan buku, bacalah paper. Beberapa paper didistribusikan secara berbayar, namun tidak sedikit penulis paper yang menerbitkan versi gratisnya juga. Asal Anda jeli mencarinya, sebenarnya tidak terlalu susah mencari paper berkualitas dan gratis di internet. Ini BUKAN WAREZ, ini LEGAL. Salah satu contoh penerbit yang terkenal adalah Springer, biasanya secara berkala mereka menerbitkan kumpulan paper dalam bentuk buku. Paper yang dimuat dalam buku tersebut adalah paper – paper pilihan dengan kualitas yang terjamin.

Mari kita mulai perburuan.

  1. Buka Google Books, cari buku yang berisi kumpulan paper (misal: Models in Software Engineering)
  2. Lihat daftar isinya, cari judul yang Anda anggap menarik. (misal: Domain-specific Model Editors with Model Completion)Daftar Paper
  3. Cari judul tersebut di Google Search, Anda dapat mempertajam kata kunci dengan jenis file-nya (misal: filetype:pdf Domain-specific Model Editors with Model Completion). Pengalaman pribadi, > 80% berhasil memperoleh versi gratis.Hasil Pencarian

Cara lain adalah dengan melihat daftar referensi yang digunakan pada paper yang Anda baca, kemudian mencarinya di Google Search.

Selamat berburu paper.


13
Dec 10

Ngasih Makan Telkom

Agak OOT tapi masih ada kaitannya dengan IT.

Saya menggunakan Speedy sejak Agustus 2007. Awalnya berjalan lancar, saat itu speed 384 kbps dapat sekitar 36kB/s. Sekitar setahun kemudian terjadi masalah, speed turun jadi 4kB/s. Saya laporkan ke Telkom, dengan sigap dalam waktu sekitar 30 menit petugas Speedy sudah berada di rumah saya. Setelah diselidiki, ternyata ada masalah di jaringan telepon, dalam waktu sekitar 45 menit koneksi Speedy telah normal kembali. Salut buat Telkom!

Mungkin itu adalah sedikit kisah manis dengan Telkom, khususnya Speedy. Namun banyak kisah yang tidak menyenangkan selama bekerjasama dengan pihak Telkom, antara lain:

  1. Saya berlangganan Speedy paket 50 jam dengan biaya Rp. 200rb/bulan dan Rp. 25/menit bila terjadi kelebihan pemakaian. Beberapa bulan yang lalu, secara “diam-diam” paket 50 jam harganya diturunkan menjadi Rp. 145rb/bulan. Berjalan beberapa bulan, tagihan saya tetap dikenakan tarif lama (Rp. 200rb/bulan) padahal paket 50 jam telah turun menjadi Rp. 145rb/bulan. Akhirnya setelah sadar bahwa tarif telah turun, baru lapor ke Telkom. Telkom berdalih bahwa pelanggan sendiri yang harus lapor bila ingin pindah paket. Sebuah mekanisme yang sangat konyol, bagaimana mungkin ada dua paket yang identik memiliki tarif yang berbeda. Yang lebih konyol lagi, paket 50 jam itu diberi nama Paket Chat, padahal kita tahu orang yang kebutuhan chatting-nya tinggi bisa chatting berjam-jam dalam sehari, ini Telkom sepertinya malah ingin menjerumuskan pelanggannya untuk mengeruk kantong lebih dalam lagi. Kalau Telkom peduli pelanggan, Paket Chat seharusnya berupa paket yang volume based atau unlimited, jangan kasih yang time based, kecuali jika asumsinya adalah audio/video chat. Beberapa rupiah mengalir sia-sia untuk ngasih makan Telkom.
  2. Setelah melihat brosur promosi Speedy, akhirnya saya memasang jaringan telpon baru beserta layanan Speedy paket Socialia. Dalam brosur tertulis bahwa paket Socialia merupakan layanan unlimited berkecepatan 384 kbps dengan tarif 195rb/bulan (tarif promo kalau tidak salah 145rb/bulan). Ketika mengisi formulir permohonan Speedy, tertulis bahwa paket Socialia merupakan layanan unlimited dengan kecepatan 384 kbps dengan tarif 195rb/bulan. Di bagian bawah terdapat tanda * bahwa untuk paket Family dan Load terjadi penurunan kecepatan jika penggunaan telah melebihi 3GB (lihat gambar).
    Formulir Paket Speedy

    Formulir Paket Speedy


    Jadi, dalam pikiran saya waktu itu, paket Socialia tidak memiliki batas pemakaian yang berakibat pada penurunan kecepatan akses internet. Menunggu satu minggu lebih, proses pemasangan jaringan telpon baru maupun Speedy belum juga beres. Saya iseng-iseng buka web Telkom Speedy dan di luar dugaan saya, ternyata paket Socialia terdapat batas maksimum penggunaan yang berakibat kecepatan turun dari 384 kbps menjadi 128 kbps. Sampai hampir dua minggu masih saya tunggu, pemasangan telpon dan Speedy tidak kunjung beres, akhirnya setelah tepat dua minggu saya ke Plasa Telkom untuk membatalkan alias memutus Speedy beserta jaringan telponnya (walaupun pada kenyataannya keduanya belum terpasang karena lambatnya kinerja Telkom). Saya tanya ke CS-nya, apa memang proses pemasangan memakan waktu yang lama? Si CS menjawab tidak, biasanya 3 hari atau paling lambat 1 minggu beres. Kemudian saya tanya apakah Socialia ada batas pemakaian 3 GB? Si CS menjawab iya. Kemudian saya tanya kenapa di formulir pengisian tidak disebutkan, hanya disebutkan untuk paket Family dan Load saja? (lihat gambar) Si CS berkata bahwa paket Socialia dulunya bernama Family, yang tercantum di formulir belum diperbarui. Ini alasan yang paling tidak masuk akal, kalau memang benar Socialia dulu bernama Family, kenapa Socialia-nya sudah di-update sedangkan Family-nya belum, padahal itu ada dalam satu formulir yang sama? Yang bikin lebih membingungkan lagi, ada paket lain bernama Familia (lihat gambar). Seharusnya yang paling masuk akal adalah paket Family itu sama dengan paket Familia, bukan paket Family sama dengan Socialia. Sepertinya telkom sudah tahu dari dulu namun membiarkannya saja, dan konsumenpun bisa terjebak. Kejadian menarik lain adalah nomor telpon yang saya terima (tercantum dalam kwitansi pembayaran) ternyata berbeda dengan nomor telpon yang tersimpan dalam database telkom, kekeliruan yang seharusnya tidak perlu terjadi untuk perusahaan sebesar Telkom.

Harus diakui, Telkom cukup lihai dalam membuat jebakan ke konsumen, dan untuk yang kesekian kalinya, beberapa rupiah harus mengalir secara sia-sia untuk ngasih makan Telkom.

Dalam syariah ada “Ta’auanu ala birri wa’t−taqwa” (mutual co−operation for the cause of goodness or piety). Selain itu transaksi harus transparan, konsumen harus memeriksa dan tahu betul tentang layanan yang akan ia gunakan sebelum ia melakukan pembayaran, bukannya malah ditutup-tutupi dengan berbagai trik seperti tanda bintang diikuti dengan tulisan dengan font ukuran kecil atau penggunaan nama paket yang menyesatkan. Semoga ke depannya Telkom menjadi perusahaan yang jauh lebih baik lagi.


08
Dec 10

Source Code = Design atau Implementasi?

Menyambung posting sebelumnya, Software Engineering vs Electrical Engineering, dan masih seputar masalah perdebatan seputar source code.
Kita kembali menggunakan metode analogi. Kali ini bukan dengan electrical engineering tetapi dengan arsitek.

Anda pernah melihat jembatan Suramadu? Jembatan itu pasti memiliki desain, sedangkan jembatan yang berdiri kokoh menghubungkan pulau Jawa dengan pulau Madura tersebut merupakan implementasi dari desain tersebut.
Bisakah kita menyeberang dari pulau Jawa ke pulau Madura dengan desain jembatan Suramadu? Jelas tidak bisa.
Bisakah kita menyeberang dari pulau Jawa ke pulau Madura dengan implementasi jembatan Suramadu? Bisa.
Dari sini bisa disimpulkan bahwa sesuatu dikatakan sebagai implementasi jika dapat digunakan oleh end-user.

Sebagai perbandingan, sekarang banyak software open source, ambil satu contoh Mozilla Firefox. Anda dapat mengunduh file installer (binary) maupun source code-nya.
Pertanyaan yang sama, kalau saja source code itu dianggap sebagai implementasi, bisakah kita menjelajahi halaman web dengan source code Firefox? Tidak bisa.
Bagi yang tetap bersikeras mungkin akan mengatakan bisa, asal source code tersebut di-compile dulu. Nah, pendapat seperti ini justru semakin mempertegas bahwa source code bukanlah implementasi, karena masih harus di-compile atau di-interpret dulu, atau dengan kata lain SOURCE CODE HARUS –DIIMPLEMENTASIKAN– OLEH COMPILER MAUPUN INTERPRETER SUPAYA DAPAT DIGUNAKAN OLEH END USER.

Mungkin masih ada lagi pendapat yang mengatakan bahwa setelah source code, tidak ada lagi campur tangan manusia, proses kompilasi dilakukan sepenuhnya oleh mesin, sehingga source code dianggap sebagai implementasi. Menurut saya pendapat ini tidak valid karena seharusnya suatu aplikasi juga dapat di-generate secara otomatis (dari diagram UML misalnya) tanpa melibatkan coding yang dilakukan oleh manusia. Kalau kasus ini apakah diagram UML dianggap sebagai implementasi?

Source Code = Design atau Implementasi?


30
Oct 10

Software Engineering vs Electrical Engineering

Tulisan ini sebagai tanggapan atas pendapat yang menyatakan bahwa programmer/coder = do-er dan programming/coding = implementation.

Sebelum melanjutkan studi di teknik informatika (rekayasa perangkat lunak aka software engineering), saya sempat mengenyam pendidikan teknik elektro (informatika) di salah satu PTN. Saya diajari menghitung rangkaian elekrik dan juga merancangnya. Rangkaian elektrik dihitung dan dirancang dengan menggunakan hukum-hukum yang berlaku, misal hukum Ampere.
Dalam merancang, digunakan gambar rangkaian elektrik. Misal gambar rangkaian penyearah arus seperti di bawah ini:

Rangkaian Penyearah Arus

Rangkaian Penyearah Arus

Gambar tersebut menjadi acuan kita dalam membuat sirkuit PCB (Printed Circuit Board). Misal, dari gambar tersebut, dapat menghasilkan PCB seperti gambar di bawah ini.

PCB Rangkaian Penyearah Arus

PCB Rangkaian Penyearah Arus

Dua gambar tersebut adalah desain. Yang satu desain rangkaian elektrik, yang satunya lagi desain PCB. Rangkaian elektrik dapat menghasilkan berbagai gambar PCB yang berbeda, tergantung yang merancang PCB tersebut.
Dari desain PCB, kita dapat melakukan proses manufaktur untuk membuat PCB yang sebenarnya.

Terus apa hubungannya dengan Software Engineering? Kalau di Software Engineering kita sering mendengar istilah SDLC (Software Development Life Cycle). Biasanya berisi tahapan analisis – desain – implementasi – pengujian – pemeliharaan. Tahap programming atau coding biasanya dimasukkan ke dalam tahap implementasi.

Karena masuk di tahap implementasi, maka muncul pendapat bahwa yang dilakukan hanya men-translate apa-apa yang ada di desain/perancangan menjadi source code. Dan kegiatan ini (coding) dianggap tidak membutuhkan effort yang besar.

Coba kita bandingkan dengan yang terjadi pada Electrical Engineering, setelah membuat rangkaian elektrik, insinyur elektro dapat membuat gambar PCB. Tapi saya tidak pernah mendengar satu orangpun insinyur elektro yang mengatakan bahwa gambar PCB adalah implementasi, mereka sepakat bahwa gambar tersebut adalah desain. Padahal jelas-jelas PCB dibuat dengan 100% mengacu pada rangkaian elektrik. Karena membuat PCB-pun tidak sembarangan, butuh keahlian khusus, karena antara satu komponen elektrinik dengan komponen lainnya dapat saling interferensi. Selain itu PCB yang dihasilkan dapat bervariasi tergantung desainer yang membuat.
Implementasi adalah proses ketika PCB tersebut di-manufaktur/dibuat ke papan PCB kemudian komponen-komponen elektronika yang dibutuhkan dipasang (disolder) di PCB tersebut, dan perangkat tersebut dapat berfungsi sebagaimana mestinya.

Jika analogi seperti ini yang digunakan, maka coding seharusnya bukan masuk di tahapan implementasi. Karena dalam proses coding, walaupun harus 100% mengacu pada desain (yang sifatnya lebih high-level), tetap saja ada perhitungan lain yang harus dilakukan, hal ini menjadi bagian dari proses refactoring.

Lalu siapa yang melakukan impementasi? Bisa compiler atau interpreter.

Kesimpulan saya, posisi source code setara dengan posisi gambar PCB pada electrical engineering. Baik source code maupun gambar PCB adalah desain yang paling low-level.

Pendapat yang mengatakan bahwa coding hanya urusan lulusan SMK, sedangkan coding adalah pekerjaan yang ‘menjijikkan’ untuk kalangan S1 (atau lebih tinggi), adalah pernyataan yang tidak memiliki dasar ilmiah. Ini pendapat berbau ‘feodalism’.


24
Oct 10

Supervision Principles

Mengambil dari design principles bahasa pemrograman Erlang, supervision principles digunakan untuk membuat aplikasi yang fault tolerant. Aplikasi fault tolerant memiliki kemampuan untuk tetap berjalan walaupun terjadi kesalahan, dan kesalahan tersebut dianggap sesuatu yang wajar. Salah satu istilah yang cukup populer, yaitu “Let It Crash”". Pada model ini (supervision), ada tiga komponen utama, yaitu workers, supervisors, dan supervision tree.

Workers adalah proses-proses yang melakukan komputasi

Supervisors adalah proses yang memonitor perilaku workers. Supervisor akan melakukan restart terhadap workers jika terjadi hal yang salah.

Supervision tree merupakan struktur hierarki aplikasi yang tersusun atas supervisors dan workers.

Supervisor dapat melakukan supervise terhadap workers maupun supervisors.

Berikut contoh gambar supervision tree:

Supervision Tree

Supervision Tree

Keterangan:
- Kotak melambangkan supervisor
- Lingkaran menggambarkan workers

Dalam kotak (supervisor) ada yang berisi “1″ dan “a”. Kalau “1″ berarti supervisor tersebut menggunakan strategi one for one, sedangkan kalau “a” berarti supervisor tersebut menggunakan strategi one for all.

Seperti apa strategi one for one dan one for all tersebut? berikut penjelasannya.

One for one

One For One Supervision

One For One Supervision


Bila terjadi hal yang salah pada salah satu child, maka supervisor hanya akan melakukan restart terhadap child yang bermasalah tersebut.

All for one

All For One Supervision

All For One Supervision


Bila terjadi hal yang salah pada salah satu child, maka supervisor akan melakukan restart terhadap semua child.

Strategi one for one biasa digunakan bila proses-proses yang di-supervisi adalah proses yang independen, sedangkan strategi all for one digunakan bila proses-proses tersebut saling bergantung satu sama lain.

Supervision sangat populer di lingkungan bahasa pemrograman Erlang. Selain itu ada beberapa library, seperti Akka yang memiliki API untuk bahasa pemrograman Scala dan Java.

Untuk lebih jelas tentang Supervision Principles, khususnya dalam bahasa pemrograman Erlang, anda dapat membaca Erlang Design Principles versi 4.9