<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Agilinius &#187; Pemrograman</title>
	<atom:link href="http://agilini.us/category/pemrograman/feed/" rel="self" type="application/rss+xml" />
	<link>http://agilini.us</link>
	<description>Sebuah Seni Rekayasa Perangkat Lunak Agile</description>
	<lastBuildDate>Fri, 20 Jan 2012 06:37:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Generative Programming</title>
		<link>http://agilini.us/2012/01/20/generative-programming/</link>
		<comments>http://agilini.us/2012/01/20/generative-programming/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 06:37:53 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Domain Specific Language]]></category>
		<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=290</guid>
		<description><![CDATA[Pertama kali mengenal istilah ini adalah pada saat membaca tentang Model Driven Engineering (MDE), dimana istilah &#8211; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>Pertama kali mengenal istilah ini adalah pada saat membaca tentang Model Driven Engineering (MDE), dimana istilah &#8211; 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.</p>
<p>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.</p>
<p>Bagi yang berminat mempelajari Generative Programming dapat membaca tesis <a href="http://www.issi.uned.es/doctorado/generative/Bibliografia/TesisCzarnecki.pdf">Generative Programming &#8211; Principles and Techniques of Software Engineering Based on Automated Configuration and Fragment-Based Component Models</a></p>
<p><a href="http://www.issi.uned.es/doctorado/generative/Bibliografia/TesisCzarnecki.pdf"></a>Berbagai paper/jurnal tersedia secara online, maupun buku Generative Programming edisi cetak.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2012/01/20/generative-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Informatika Eksakta?</title>
		<link>http://agilini.us/2011/09/23/informatika-eksakta/</link>
		<comments>http://agilini.us/2011/09/23/informatika-eksakta/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 23:45:26 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=273</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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?</p>
<p>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.</p>
<p>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.</p>
<p>Contoh pertanyaan sederhana seputar informatika:</p>
<ol>
<li>Bagaimana cara mengukur besarnya suatu perangkat lunak?</li>
<li>Apa perbedaan data dengan informasi?</li>
<li>Apa yang dimaksud dengan software, program, dan aplikasi?</li>
</ol>
<p>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 &#8211; 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..</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2011/09/23/informatika-eksakta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Design</title>
		<link>http://agilini.us/2011/05/10/software-design/</link>
		<comments>http://agilini.us/2011/05/10/software-design/#comments</comments>
		<pubDate>Tue, 10 May 2011 13:53:29 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=252</guid>
		<description><![CDATA[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:

Requirement Analysis and Specification
Architectural Design
Detailed Design
Coding
Testing

Jika kita melakukan desain dengan menggambarkan diagram kelas dengan UML, [...]]]></description>
			<content:encoded><![CDATA[<p>Menyambung tulisan saya sebelumnya <a href="http://agilini.us/2010/10/30/software-engineering-vs-electrical-engineering/">1</a>, <a href="http://agilini.us/2010/12/08/source-code-design-atau-implementasi/">2</a>, <a href="http://agilini.us/2011/05/08/mitos-seputar-software-engineering/">3</a>, masih berhubungan tentang perdebatan mengenai posisi source code (apakah desain atau implementasi). Ada yang menarik dari buku <a href="http://www.amazon.com/Software-Modeling-Design-Patterns-Architectures/dp/0521764149">Software Modeling and Design</a> yang belum lama ini diterbitkan. Disana disebutkan bahwa software life cycle activities meliputi:</p>
<ol>
<li>Requirement Analysis and Specification</li>
<li>Architectural Design</li>
<li>Detailed Design</li>
<li>Coding</li>
<li>Testing</li>
</ol>
<p>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 <a href="http://www.amazon.com/Software-Modeling-Design-Patterns-Architectures/dp/0521764149">Software Modeling and Design</a> 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.</p>
<p>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.</p>
<p>Dengan kata lain, detailed design dapat dilakukan tanpa bantuan PDL atau pseudocode, melainkan langsung dengan bahasa pemrograman &#8220;asli&#8221;. Sehingga source code merupakan dokumen desain, dan coding adalah aktivitas perancangan perilaku (bahavior) suatu perangkat lunak.</p>
<p>Mengapa PDL atau pseudocode &#8220;gagal&#8221;? 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 &#8217;sama&#8217;, 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 &#8217;sama&#8217;, keduanya berbeda.</p>
<p>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 &#8211; embel implementasi.</p>
<p>(*) Artikel ini pendapat pribadi penulis, tidak untuk dijadikan referensi</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2011/05/10/software-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mitos Seputar Software Engineering</title>
		<link>http://agilini.us/2011/05/08/mitos-seputar-software-engineering/</link>
		<comments>http://agilini.us/2011/05/08/mitos-seputar-software-engineering/#comments</comments>
		<pubDate>Sun, 08 May 2011 10:17:30 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=241</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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:</p>
<ol>
<li><strong>Code adalah implementasi</strong></li>
<p>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 &#8216;tinggal mengerjakan aja, sedikit pakai otak&#8217;, 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 &#8216;rendah&#8217;, 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 &#8211; 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.<br />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.</p>
<li><strong>Proses analisis kebutuhan dan desain tidak mempedulikan implementasi</strong></li>
<p>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.<br />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.<br />
Hal lain yang mungkin terjadi adalah biaya pembuatan software menjadi sangat mahal, termasuk karena software yang dihasilkan tidak efisien sehingga kebutuhan akan hardware meningkat.</p>
<li><strong>Dokumen perangkat lunak hanyalah analisis kebutuhan (spesifikasi) dan desain</strong></li>
<p>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.</p>
<li><strong>Mempelajari &#8220;konsep pemrograman&#8221;, otomatis menguasai berbagai bahasa pemrograman</strong></li>
<p>Ini salah satu upaya mencari &#8217;silver bullet&#8217;. 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: &#8220;Saya telah menguasai konsep menghitung luas, apapun metodenya&#8221;. 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 &#8216;pemberian pengaruh&#8217;, 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.</p>
<li><strong>Perangkat lunak itu abstrak, tidak nyata. Sehingga software engineering berbeda dengan engineering lainnya</strong></li>
<p>Ini biasanya menjadi &#8216;kambing hitam&#8217; 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 &#8216;dianggap berhubungan dengan BENDA NYATA&#8217;, 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.
</ol>
<p>*ini hanya pendapat pribadi, tidak untuk dijadikan referensi</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2011/05/08/mitos-seputar-software-engineering/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Source Code = Design atau Implementasi?</title>
		<link>http://agilini.us/2010/12/08/source-code-design-atau-implementasi/</link>
		<comments>http://agilini.us/2010/12/08/source-code-design-atau-implementasi/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 14:59:33 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=212</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Menyambung posting sebelumnya, <a href="http://agilini.us/2010/10/30/software-engineering-vs-electrical-engineering/">Software Engineering vs Electrical Engineering</a>, dan masih seputar masalah perdebatan seputar source code.<br />
Kita kembali menggunakan metode analogi. Kali ini bukan dengan electrical engineering tetapi dengan arsitek. </p>
<p>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.<br />
Bisakah kita menyeberang dari pulau Jawa ke pulau Madura dengan desain jembatan Suramadu? Jelas tidak bisa.<br />
Bisakah kita menyeberang dari pulau Jawa ke pulau Madura dengan implementasi jembatan Suramadu? Bisa.<br />
Dari sini bisa disimpulkan bahwa sesuatu dikatakan sebagai implementasi jika dapat digunakan oleh end-user.</p>
<p>Sebagai perbandingan, sekarang banyak software open source, ambil satu contoh Mozilla Firefox. Anda dapat mengunduh file installer (binary) maupun source code-nya.<br />
Pertanyaan yang sama, kalau saja source code itu dianggap sebagai implementasi, bisakah kita menjelajahi halaman web dengan source code Firefox? Tidak bisa.<br />
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 &#8211;DIIMPLEMENTASIKAN&#8211; OLEH COMPILER MAUPUN INTERPRETER SUPAYA DAPAT DIGUNAKAN OLEH END USER.</p>
<p>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?</p>
<p>Source Code = Design atau Implementasi?</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/12/08/source-code-design-atau-implementasi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Software Engineering vs Electrical Engineering</title>
		<link>http://agilini.us/2010/10/30/software-engineering-vs-electrical-engineering/</link>
		<comments>http://agilini.us/2010/10/30/software-engineering-vs-electrical-engineering/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 03:48:18 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=207</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Tulisan ini sebagai tanggapan atas pendapat yang menyatakan bahwa programmer/coder = do-er dan programming/coding = implementation.</p></blockquote>
<p>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.<br />
Dalam merancang, digunakan gambar rangkaian elektrik. Misal gambar rangkaian penyearah arus seperti di bawah ini:<br />
<div id="attachment_208" class="wp-caption aligncenter" style="width: 410px"><img src="http://agilini.us/wp-content/uploads/2010/10/jembatan-dioda.jpg" alt="Rangkaian Penyearah Arus" title="Rangkaian Penyearah Arus" width="400" height="309" class="size-full wp-image-208" /><p class="wp-caption-text">Rangkaian Penyearah Arus</p></div></p>
<p>Gambar tersebut menjadi acuan kita dalam membuat sirkuit PCB (Printed Circuit Board). Misal, dari gambar tersebut, dapat menghasilkan PCB seperti gambar di bawah ini.<br />
<div id="attachment_209" class="wp-caption aligncenter" style="width: 410px"><img src="http://agilini.us/wp-content/uploads/2010/10/dioda-pcb.jpg" alt="PCB Rangkaian Penyearah Arus" title="PCB Rangkaian Penyearah Arus" width="400" height="216" class="size-full wp-image-209" /><p class="wp-caption-text">PCB Rangkaian Penyearah Arus</p></div></p>
<p>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.<br />
Dari desain PCB, kita dapat melakukan proses manufaktur untuk membuat PCB yang sebenarnya.</p>
<p>Terus apa hubungannya dengan Software Engineering? Kalau di Software Engineering kita sering mendengar istilah SDLC (Software Development Life Cycle). Biasanya berisi tahapan analisis &#8211; desain &#8211; implementasi &#8211; pengujian &#8211; pemeliharaan. Tahap programming atau coding biasanya dimasukkan ke dalam tahap implementasi. </p>
<p>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.</p>
<p>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.<br />
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.</p>
<p>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.</p>
<p>Lalu siapa yang melakukan impementasi? Bisa compiler atau interpreter.</p>
<p>Kesimpulan saya, posisi source code setara dengan posisi gambar PCB pada electrical engineering. Baik source code maupun gambar PCB adalah desain yang<strong> paling low-level</strong>.</p>
<p>Pendapat yang mengatakan bahwa coding hanya urusan lulusan SMK, sedangkan coding adalah pekerjaan yang &#8216;menjijikkan&#8217; untuk kalangan S1 (atau lebih tinggi), adalah pernyataan yang tidak memiliki dasar ilmiah. Ini pendapat berbau &#8216;feodalism&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/30/software-engineering-vs-electrical-engineering/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Supervision Principles</title>
		<link>http://agilini.us/2010/10/24/supervision-principles/</link>
		<comments>http://agilini.us/2010/10/24/supervision-principles/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 15:56:40 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Skalabilitas]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=196</guid>
		<description><![CDATA[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 &#8220;Let It Crash&#8221;". Pada model ini (supervision), ada tiga komponen utama, yaitu workers, supervisors, [...]]]></description>
			<content:encoded><![CDATA[<p>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 &#8220;Let It Crash&#8221;". Pada model ini (supervision), ada tiga komponen utama, yaitu workers, supervisors, dan supervision tree.</p>
<p><strong>Workers</strong> adalah proses-proses yang melakukan komputasi</p>
<p><strong>Supervisors</strong> adalah proses yang memonitor perilaku workers. Supervisor akan melakukan restart terhadap workers jika terjadi hal yang salah.</p>
<p><strong>Supervision tree</strong> merupakan struktur hierarki aplikasi yang tersusun atas supervisors dan workers.</p>
<p>Supervisor dapat melakukan supervise terhadap workers maupun supervisors.</p>
<p>Berikut contoh gambar supervision tree:</p>
<div id="attachment_198" class="wp-caption aligncenter" style="width: 377px"><img src="http://agilini.us/wp-content/uploads/2010/10/supervision-tree1.png" alt="Supervision Tree" title="supervision-tree" width="367" height="333" class="size-full wp-image-198" /><p class="wp-caption-text">Supervision Tree</p></div>
<p>Keterangan:<br />
- Kotak melambangkan supervisor<br />
- Lingkaran menggambarkan workers</p>
<p>Dalam kotak (supervisor) ada yang berisi &#8220;1&#8243; dan &#8220;a&#8221;. Kalau &#8220;1&#8243; berarti supervisor tersebut menggunakan strategi one for one, sedangkan kalau &#8220;a&#8221; berarti supervisor tersebut menggunakan strategi one for all.</p>
<p><strong>Seperti apa strategi one for one dan one for all tersebut? berikut penjelasannya.</strong></p>
<p><strong>One for one</strong><br />
<div id="attachment_199" class="wp-caption aligncenter" style="width: 479px"><img src="http://agilini.us/wp-content/uploads/2010/10/one-for-one-supervision.png" alt="One For One Supervision" title="one-for-one-supervision" width="469" height="235" class="size-full wp-image-199" /><p class="wp-caption-text">One For One Supervision</p></div><br />
Bila terjadi hal yang salah pada salah satu child, maka supervisor hanya akan melakukan restart terhadap child yang bermasalah tersebut.</p>
<p><strong>All for one</strong><br />
<div id="attachment_200" class="wp-caption aligncenter" style="width: 530px"><img src="http://agilini.us/wp-content/uploads/2010/10/one-for-all-supervision.png" alt="All For One Supervision" title="one-for-all-supervision" width="520" height="255" class="size-full wp-image-200" /><p class="wp-caption-text">All For One Supervision</p></div><br />
Bila terjadi hal yang salah pada salah satu child, maka supervisor akan melakukan restart terhadap semua child.</p>
<p>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.</p>
<p>Supervision sangat populer di lingkungan bahasa pemrograman Erlang. Selain itu ada beberapa library, seperti Akka yang memiliki API untuk bahasa pemrograman Scala dan Java.</p>
<p>Untuk lebih jelas tentang Supervision Principles, khususnya dalam bahasa pemrograman Erlang, anda dapat membaca <a href="http://www.erlang.org/documentation/doc-4.9.1/pdf/design_principles-4.9.1.pdf">Erlang Design Principles versi 4.9</a></p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/24/supervision-principles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cara Install SBT di OS X Snow Leopard</title>
		<link>http://agilini.us/2010/10/24/cara-install-sbt-di-os-x-snow-leopard/</link>
		<comments>http://agilini.us/2010/10/24/cara-install-sbt-di-os-x-snow-leopard/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 03:23:06 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=189</guid>
		<description><![CDATA[SBT (Simple Build Tool) merupakan build tool untuk bahasa pemrograman Scala. Banyak project yang menggunakan SBT, misalnya Lift dan Scalatra. SBT mirip dengan Apache Maven dan Apache Ant (Ivy), SBT bisa mengunduh semua dependencies project yang sedang kita kembangkan secara otomatis. Bagi Anda yang tidak suka konfigurasi melalui file XML, maka SBT bisa menjadi pilihan [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/simple-build-tool/">SBT (Simple Build Tool)</a> merupakan build tool untuk bahasa pemrograman <a href="http://scala-lang.org">Scala</a>. Banyak project yang menggunakan SBT, misalnya <a href="http://liftweb.net/">Lift</a> dan <a href="http://scalatra.org/">Scalatra</a>. SBT mirip dengan <a href="http://maven.apache.org/">Apache Maven</a> dan <a href="http://ant.apache.org/">Apache Ant</a> (<a href="http://ant.apache.org/ivy/">Ivy</a>), SBT bisa mengunduh semua dependencies project yang sedang kita kembangkan secara otomatis. Bagi Anda yang tidak suka konfigurasi melalui file XML, maka SBT bisa menjadi pilihan yang menarik. Menggunakan SBT sangat menyenangkan karena kesederhanaannya.</p>
<p>Berikut ini langkah-langkah instalasi SBT di sistem operasi Mac OS X 10.6 Snow Leopard. Cara ini kurang lebih juga dapat diimplementasikan di sistem operasi lain yang masih dalam keluarga *NIX, seperni Linux dan BSD.<br />
Jalankan perintah di bawah ini melalui terminal Anda:<br />
<script src="http://gist.github.com/643051.js?file=gistfile1.sh"></script><br />
Pada saat tulisan ini ditulis, versi terbaru SBT adalah 0.7.4.</p>
<p><strong>Lalu bagaimana cara melakukan update SBT?</strong></p>
<p>Mudah saja, pada dasarnya kita hanya perlu mengganti file JAR yang lama dengan file JAR yang lebih baru. Perintahnya kurang lebih seperti ini:<br />
<script src="http://gist.github.com/643051.js?file=gistfile2.sh"></script></p>
<p>Catatan: Ganti [latest-version] dengan versi SBT terbaru yang tersedia.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/24/cara-install-sbt-di-os-x-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSL Dengan Interpreter Pattern</title>
		<link>http://agilini.us/2010/10/20/dsl-dengan-interpreter-pattern/</link>
		<comments>http://agilini.us/2010/10/20/dsl-dengan-interpreter-pattern/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 08:10:44 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Domain Specific Language]]></category>
		<category><![CDATA[Pemrograman]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=178</guid>
		<description><![CDATA[Beberapa waktu yang lalu saya sempat menulis tentang Membuat DSL Tanggal Dengan Scala. Kali ini sebenarnya hampir sama, hanya saja implementasinya dengan bahasa Java dan memiliki grammar yang sedikit berbeda. Kebetulan sedang membaca-baca tentang behavioral design pattern, salah satunya adalah interpreter pattern, maka DSL yang ini dibuat menggunakan interpreter pattern. Karena saya sendiri masih belum [...]]]></description>
			<content:encoded><![CDATA[<p>Beberapa waktu yang lalu saya sempat menulis tentang <a href="http://agilini.us/2010/08/15/membuat-dsl-tanggal-dengan-scala/">Membuat DSL Tanggal Dengan Scala</a>. Kali ini sebenarnya hampir sama, hanya saja implementasinya dengan bahasa Java dan memiliki grammar yang sedikit berbeda. Kebetulan sedang membaca-baca tentang behavioral design pattern, salah satunya adalah <a href="http://en.wikipedia.org/wiki/Interpreter_pattern">interpreter pattern</a>, maka DSL yang ini dibuat menggunakan interpreter pattern. Karena saya sendiri masih belum begitu paham dengan konsep interpreter pattern, maka<strong> tidak ada jaminan bahwa code yang saya tulis telah memenuhi kriteria interpreter patter</strong>.<br />
Berikut ini grammar-nya:</p>
<div id="attachment_179" class="wp-caption aligncenter" style="width: 558px"><img class="size-full wp-image-179" title="Grammar DSL Tanggal" src="http://agilini.us/wp-content/uploads/2010/10/Untitled-1.png" alt="Grammar DSL Tanggal" width="548" height="165" /><p class="wp-caption-text">Grammar DSL Tanggal</p></div>
<p>Contoh implementasi DSL-nya:</p>
<blockquote><p>Kemarin dikurangi 3 tahun ditambah 7 bulan</p></blockquote>
<p>Hampir mirip dengan versi Scala di tulisan terdahulu, hanya saja DSL kali ini tidak menggunakan Conjunction (kalau yang versi Scala ada Conjunction &#8220;dan&#8221; nya).<br />
Dalam interpreter pattern, semua expression dijadikan class, baik non-terminal expression maupun terminal expression.<br />
Beruikut ini source code-nya:<br />
<script src="http://gist.github.com/635996.js?file=Interpreter.java"></script><br />
Code di atas bukanlah code untuk produksi, mungkin lebih cocok sebagai prototype saja, hanya sebagai contoh bagaimana kita membuat DSL dengan interpreter pattern. Code di atas sangat tidak efisien dan harus di-refactor ulang, jadi jangan coba-coba memasukannya ke dalam production code, karena secara coding tidak elegan dan performanya juga payah. Silahkan dicoba sendiri dan Anda akan mengetahui bahwa waktu eksekusi code tersebut tergolong lambat.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/20/dsl-dengan-interpreter-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caching Function Result</title>
		<link>http://agilini.us/2010/10/17/caching-function-result/</link>
		<comments>http://agilini.us/2010/10/17/caching-function-result/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 03:23:24 +0000</pubDate>
		<dc:creator>Agi Putra Kharisma</dc:creator>
				<category><![CDATA[Pemrograman]]></category>
		<category><![CDATA[Pemrograman Fungsional]]></category>

		<guid isPermaLink="false">http://agilini.us/?p=175</guid>
		<description><![CDATA[Pada tulisan sebelumnya, Referential Transparency, disebutkan bahwa syarat referential transparancy adalah sebuah fungsi harus dapat dipastikan selalu menghasilkan nilai return yang sama jika dipanggil dengan parameter yang sama, kapanpun dan dimanapun itu. Dari ide tersebut, karena fungsi dapat dipastikan akan selalu menghasilkan hasil yang sama bila diberi parameter yang sama, kita dapat dengan mudah membuat [...]]]></description>
			<content:encoded><![CDATA[<p>Pada tulisan sebelumnya, <a href="http://agilini.us/2010/10/16/referential-transparency/">Referential Transparency</a>, disebutkan bahwa syarat referential transparancy adalah sebuah fungsi harus dapat dipastikan selalu menghasilkan nilai return yang sama jika dipanggil dengan parameter yang sama, kapanpun dan dimanapun itu. Dari ide tersebut, karena fungsi dapat dipastikan akan selalu menghasilkan hasil yang sama bila diberi parameter yang sama, kita dapat dengan mudah membuat cache untuk hasil-hasil fungsi tersebut. Mirip dengan cache pada halaman web, dimana HTTP request dengan method GET yang bersifat idempotent, bisa dengan mudah dibuat cache-nya, sehingga client bisa sama sekali tidak menyentuh application server dan basis data. Hal ini memiliki konsekuensi yang menguntungkan, yaitu peningkatan performa.</p>
<p>Kembali ke pemrograman fungsional, menampung hasil fungsi ke dalam cache juga biasa disebut dengan istilah <strong><em>memoize</em></strong>. Berikut ini adalah contoh memoized function dengan bahasa Erlang:</p>
<p><script src="http://gist.github.com/630498.js?file=makan.erl"></script></p>
<p>Kita tahu bahwa sebagian besar orang makan 3 kali dalam satu hari, sehingga dapat dipastikan bila sebagian besar pemanggilan fungsi akan menggunakan parameter 3. Oleh karena itu, fungsi frekuensi_makan_perhari(3) dapat kita buat cache-nya, sehingga beban kerja CPU berkurang karena tidak melakukan perhitungan matematika setiap mengeksekusi fungsi dengan parameter 3. jadi setiap kali ada yang memanggil fungsi dengan parameter 3, maka yang dipanggil adalah frekuensi_makan_perhari(3) bukan frekuansi_makan_perhari(N), karena memang itulah yang secara pattern sesuai (dengan <em>pattern matching</em>).</p>
<p>Ini adalah contoh yang sangat sederhana, mungkin masih belum menggambarkan bagaimana potensi memoized function yang sebenarnya.</p>
]]></content:encoded>
			<wfw:commentRss>http://agilini.us/2010/10/17/caching-function-result/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

