Buy Me A Coffee!

GoPay
Showing posts with label Lecture Note. Show all posts
Showing posts with label Lecture Note. Show all posts

Sunday, May 11, 2014

Lecture Note: Apa itu P dan NP problem?



Sewaktu saya pertama kali mengikuti mata kuliah Analisis dan Desain Algoritma saya disuguhkan Big O Notation. Ini adalah notasi untuk menyatakan kompleksitas dari sebuah algoritma dalam memecahkan permasalahan. Ngomongin permasalahan, ada yang manya P dan NP problem. Saya kurang tahu mengenai problem ini, untung saja pak Lala Septem Riza menulis tentang ini di grup jurusan saya. Haha. Berikut tulisan yang beliau buat: 

[LECTURE NOTE] Apa itu P dan NP problem ? apakah P = NP atau P != NP ? pasti pernah mendengar itu kan ? Saya hanya menulis sedikit dari topik itu, tambahan/koreksi lebih diharapkan . Suatu algoritma bisa dimasukkan dalam P problem jika alg itu bisa menyelesaikan (SOLVE) problem secara efisien/polinomial. Sedangkan NP adalah algorithm yang hanya bisa melakukan verifikasi (VERIFY) permasalahan itu secara efisien. Saat ini masalah apakah P = NP atau P != NP masih jadi misteri yang tak terpecahkan di computer science. Jadi jika anda bisa memecahkannya dengan memberikan pembuktian secara matematika maka rekening bank anda pasti dipenuhi dengan jutaan dollar . Apa contoh P dan NP ? Misalkan gini, kalau anda diberi problem perkalian: 131 * 71 = ?, maka komputer anda/anda sendiri dengan kurang dari 1 detik, bisa menjawab 9301, bukan ? Karena complexity dari perkalian hanya O(n^2) (maksimal, krn bisa dibuat kurang dari itu). Itu artinya perkalian adalah P (polynomial) problem. Tapi sekarang kalau diberi soal seperti ini: x * y = 9301, maka algo yang anda buat butuh waktu komputasi yg panjang. Tentu saja untuk kasus ini, anda tahu jawabannya xixixi. Ini hanya kasus sederhana, karena bisa jadi jumlah digitnya bisa puluhan/ratusan dan butuh puluhan/ratusan tahun untuk tahu jawabannya. Inilah yg disebut permasalahan faktorisasi, dan ini digolongkan sebagai NP (nondeterministic polynomial) problem. Tapi sekalinya anda bisa menemukan solusi x dan y, anda gampang untuk memverifikasinya bukan .Permasalahan yang timbul adalah apakah P = NP atau P != NP ? jika anda bisa membuktikan bahwa P = NP itu artinya, apapun masalah yang sulit (tak bs dipecahkan scr efisien) bisa dibuatkan algorithm yang efisien (P). Kalau ini terjadi, maka seluruh bank di dunia ini akan TUTUP karena pembuktian anda . Anda akan dapat turing award (nobelnya di computer). Kenapa begitu ? karena semua bank mengandalkan enkripsi berdasarkan faktorisasi (rsa). Akan tetapi sebaliknya, walaupun secara intuitif P != NP, nyatanya untuk membuktikannya pun juga tidak gampang, bahkan sampai skrgpun belum ada yang bisa. Jadi mangga bagi yang tertarik dapat jutaan dollar .

Demikian tulisan beliau. Btw, di tulisan beliau tersebut ada x*y = 9301. Nah loh, jawabannya apa? Problem ini bisa dipecahkan dengan Linear Diophantine. Tentang Linear Diophantine bisa baca di blognya alijaya di http://alijayameilio.blogspot.com/2012/08/linear-diophantine.html, tutorial yang dia buat enak banget! :D 

UPDATE, linear diophantine kata ali nggak bisa buat perkalian, hehe (baca comment), tapi teteup, postingan dia enak buat dibaca :p

Lecture Note: No Free Lunch

Setelah lama berkecimpung di dunia digital, saya sering mendapati tulisan "Free as speech, not free as beer." Ya kurang lebih maksudnya tentang kebebasan berpendapat. Masih ada hubungannya dengan kata "Free", tulisan lecture note yang dibuat oleh Pak Lala Septem Riza kali ini membahas tentang "No Free Lunch".
Berikut tulisan lecture note yang ditulis di grup jurusan Ilmu Komputer UPI:

[LECTURE NOTE] "No free lunch" theorem. Atau berarti "tak ada makan siang yang gratis". Dulu di Amerika, pernah punya kebiasaan memberikan makanan (camilan) gratis jika kita pesan bir di siang hari. Tapi kemudian, kebiasaan ini dihapuskan karena alasan ekonomi, dll. Sehingga, dikatakan tak ada lagi makan siang yang gratis. Walaupun, sampai saat ini di Spanyol masih punya budaya makan siang (camilan) gratis, kalau kita pesan minum bir (atau teh kalau buat saya :D), yang biasa dinamakan "Tapas". Jadi kita bayarnya seharga teh, tapi kita disuguhi camilan, seperti ikan goreng, udang goreng, burger, dll. Trus, "No free lunch" juga bisa berarti bahwa tak ada traktir - traktiran di budaya barat (Eropa dan Amerika). Jadi, jangan berharap bakal ditraktir jika diajakin makan siang bareng. Bahkan untuk pesta syukuran teman yg baru aja defense S3 sekalipun, kita harus bayar sendiri - sendiri. Jadi curcol nihh ceritanya hehehe, tapi inilah salah satu indahnya Indonesia, yang orangnya suka saling traktir .Tapi apa hubungannya budaya "no free lunch" dengan computer science ? . Teorema "no free lunch" menyatakan bahwa "tak ada satupun algoritma yang bisa mendapatkan akurasi terbaik untuk segala masalah". Jadi, jika ada algoritma A yang hebat di masalah x, maka algorithma A itu bisa jadi memberi akurasi yang jelek untuk masalah y. Itulah yang disebut tak ada makanan siang gratis, karena algorithma itu pasti membayar (jelek akurasinya) untuk masalah yang lain. Bahkan, bisa dikatakan bahwa algoritma yang baru dikembangkan dan dirasa canggih itu sebenarnya tak lebih baik dari algoritma acak/random atau brute force yang sederhana sekalipun untuk segala masalah. Teorema ini berlaku untuk algoritma di bidang supervised machine learning (classification) dan pelacakan&optimasi.
Apa efek teorema ini bagi kita ? Kita terkadang (entah di tugas akhir, dll) ingin membandingkan suatu algoritma dengan algoritma lain pada suatu kasus tertentu. Maka dengan memahami teorema ini, kita jadi lebih hati - hati dalam memutuskan hipotesa kita. Misalkan, tak lagi berkata: algoritma kita lebih baik dari algoritma lain. Karena kalaupun algoritma kita lebih bagus, maka sebenarnya algoritma kita bagus untuk kasus itu saja, untuk kasus lain algoritma kita bisa jadi lebih jelek. Disamping itu, untuk membandingkan algoritma kita dengan yang lain diperlukan mekanisme penarikan kesimpulan tertentu (secara statistik), tak bisa hanya membandingkan dengan satu kasus saja. Akhir kata, kalaupun kita tak pernah membandingkan algoritma - algoritma di tugas akhir, minimal kita jadi tahu kalau diajakin makan siang ama orang bule, maka kita harus siapin duit sendiri :D(kecuali dibilangin bakal dibayar-RED).

Lecture Note: Induktif

Cara berpikir Induktif adalah berpikir mendapatkan kesimpulan dari serangkaian kejadian yang sudah ada. Kadang saya suka kebalik-balik antara induktif dan deduktif. Jadi supaya ingat induktif itu berpikir secara "in" (dari khusus ke general), dan deduktif berpikir secara "de" (dari general ke khusus). Haha.

Tulisan Lecture Note kali ini dibuat oleh Pak Lala Septem Riza. Tulisan ini sebenarnya adalah tulisan sebelum lecture note mengenai cara berpikir induktif. Berikut tulisan yang beliau buat di grup jurusan saya:

[LECTURE NOTE] Bagi yang sudah membaca LECTURE NOTE beberapa hari yang lalu, mungkin masih ingat tentang pertanyaan saya: "apakah anda seorang scientist atau engineer ?". Bagi yang belum bisa menjawab, ndak papa, karena sekarang kita akan bahas salah satu karakter dari scientists. Salah satu karakteristik dari scientists adalah mereka sangat getol ("keen on") pada metode inductivism (induktif). Apa itu induktif/generalisasi ? Arti gampangannya adalah generalisasi. Misalkan gini, anda dapat mangga dari pohon tetangga. Anda kupas dan makan, dan ternyata rasanya manis. Trus, tetangga yang kasih mangga itu bilang: "Buah mangga dari pohon ini memang selalu manis rasanya". Itulah generalisasi, karena anda dan tetangga tidak makan semua mangga di pohon itu, bukan ? Dan sepertinya tidak perlu, karena kalau anda lakukan, itu namanya panen dan perut anda bisa kembung karena mangga . Anda bisa menyimpulkan sesuatu secara generalisasi dengan hanya mengambil sample sebagian dari mangga itu. Contoh lain, bagi yang belum pernah lihat dan pergi ke Australia, pasti punya kesimpulan bahwa "angsa selalu berwarna putih". Karena setiap kali kita ketemu angsa, selalu berwarna putih. Padahal sebenarnya ada angsa berwarna hitam di Australia.
Ada langkah2x dan syarat2x dalam melakukan induktif, agar diperoleh kesimpulan yang kuat. Pada dasarnya ada 2 langkah, yaitu:
1. Lihat/observasi SATU data/fakta. Misalkan, angsanya pak Ali berwarna putih. Cuman ada 1 angsa yg kita lihat, yaitu miliknya pak Ali saja. Sehingga kita punya hipotesa, misal: "angsa selalu berwarna putih".
2. Kemudian, lakukan GENERALISASI. Syarat melakukan generalisasi adalah:
a. pengambilan sample untuk observasi harus banyak. Misal, kita kumpulkan banyak angsa yg lain.
b. sample harus mencerminkan berbagai kondisi. Misal, kita ambil angsa dari indonesia, Belanda, Australia, dll.
c. tidak boleh satupun dari observasi tersebut memiliki kesimpulan yang berbeda. Dan ternyata hipotesa kita salah yg menyatakan bahwa "angsa selalu berwarna putih", karena setelah observasi tyt angsa Australia berwarna hitam!.
Itulah proses dari induksi yang harus kita ikuti agar diperoleh kesimpulan dgn tingkat ke-valid-an yg kuat. Saya katakan kuat, karena kita sesungguhnya TIDAK dapat mengimpulkan KEBENARAN ABSOLUT dgn metode Induktif ini, yang ada hanya kuat, lemah, dan tak valid. Contoh yg menunjukkan kita tak bisa menyimpulkan secara absolut adalah hari ini ada matahari, kemarin juga ada, 100 th yg lalu juga ada, bisakah kita simpulkan secara absolut kalau besok masih ada matahari ??, tentu tidak bukan , "but we strongly believe that tomorrow we can still see the sun". Hopefully... xixixi.
Banyak contoh dari proses induksi di bidang science, misalkan teorema (e.g., teorema no free lunch, pada LECTURE NOTE yang lalu), hukum (e.g., hukum Newton), model, dll. Dan hampir setiap saat di kehidupan, kita berkubang dengan induktif/generalisasi. Misal, kita baca berita banyak anggota partai A yang korupsi, trus kita katakan: "Partai A adalah partai korup". Kita juga sering bilang "Eeh si A orangnya bager pisan euy", padahal kita tak amati tiap detiknya. "Dosen itu tuh selalu marah di kelas", "Wah pagi-pagi kok udah mendung, pasti bentar lagi mau hujan", dan lain sebagainya . Yang terpenting disini adalah jika kita melakukan generalisasi maka kita perlu sadar bahwa pernyataan/kesimpulan kita bukanlah kebenaran yang absolut.
Apakah Induktif adalah metode terbaik di science ? ternyata metode ini ada kelemahannya, salah satunya adalah data yang kita punya, harus bisa kita observasi/lihat/rasakan/hitung. Bagaimana dengan surga ? tak ada satupun orang di dunia ini yang pernah lihat surga, apakah trus kita katakan surga tidak ada ?? tentu tidak . Maka dari itu, kita butuh metode yang lain, semisal Deduktif, Paradigm, dan tentu saja kita perlu menambah iman . Adakah yang tahu apa kelemahan lain dari metode Induktif ini ?
Semoga artikel ini bisa sedikit memberi "rasa scientists" di diri kita dalam kehidupan sehari-hari.

Lecture Note: Apakah anda Scientist Atau Engineer?

Pak Lala Septem Riza kali ini membahas apakah anda adalah seorang scientist atau engineer. Hmm.. topik ini bagus sekali untuk ditanyakan di grup jurusan saya. Kenapa? Karena jurusan saya adalah Ilmu Komputer yang seharusnya berbasis keilmuan dan menelurkan scientist, tapi pada kenyataannya pekerjaan yang diambil kebanyakan adalah pekerja industri (e.g: programmer, admin, dsb). 

Lecture note yang beliau buat membuat saya berkontemplasi banyak. Hehe. Berikut note beliau:

[LECTURE NOTE] Siapakah Anda sebetulnya ??? Kalau kita ditanya begitu, apa jawab kita ? Apakah kita seorang ilmuwan (scientist) atau kah kita seorang insinyur (Engineer)? Kalau diliat dari kita yang sekolah di Ilmu Komputer atau Computer Science, mungkin saja kita seorang scientist/ilmuwan karena ada kata science -nya . Tapi memangnya apa itu computer science ? Apa bedanya dengan teknik komputer/computer engineering ? Benar- benar yakinkah kita kalau kita adalah seorang ilmuwan ? Apa buktinya kalau kita seorang ilmuwan bukan insinyur ?Coba kalau kita tanya ke pengemudi kereta api, Beliau dengan yakinnya akan menjawab: "Saya adalah seorang masinis". Begitu juga ada yang bilang: "saya adalah seorang pilot"; "saya adalah seorang tukang kayu", "saya adalah insinyur sipil", dst. Sekarang kita tanya pada diri sendiri: "siapakah anda ?" seorang ilmuwan kah atau seorang insinyur ? "Ahhh kok cari pusing sihh, emang gue pikirin, yang penting lulus lah". Kalau itu jawaban kita, maka kita tak ingin tahu siapa diri kita. Masak kita kalah dengan masinis, pilot, dan tukang kayu yang bisa menjawab dengan lantangnya.... hayoo, jawab pertanyaan ini "siapakah diri kita" ?  Dan sejatinya apa itu science, engineering, computer science, computer engineering, apa syarat untuk menjadi ilmuwan/scientist (orang yang belajar/bekerja di science), dan apa kriteria dikatakan sebagai insinyur/engineer (orang yang belajar/bekerja di engineering).
Mangga bagi yang ingin berpendapat....

Lecture Note: Turing

Alan Turing dikenal sebagai pemrakarsa komputer moderen. Sampai sekarang namanya dikenal oleh masyarakat luas. Err.. mungkin tidak terlalu luas, ya setidaknya kebanyakan penggiat teknologi tahu lah dengan beliau. Hehe.

Lecture note kali ini dibahas oleh pak Lala Septem Riza. Berikut lecture note dari beliau:

[LECTURE NOTE] Jika ditanya, "Siapakah Bapak dari Ilmu Komputer (Computer science)? Jawabannya adalah Alan Mathison Turing. Hidup sejaman dengan Albert Einsten, penemu E=MC^2, dan Von Neumann, designer architecture komputer, di tahun 1912 - 1954. Disaat meninggalnya, diketahui didalam tubuhnya mengandung racun sianida dengan sebuah apel yang sudah tergigit disamping tubuhnya. Mirip dongeng di cerita anak. Dan, walau Steve Jobs mengatakan hanya kebetulan saja mengambil simbol untuk produk "Apple" adalah sebuah apel tergigit, dia senang ketika ternyata simbolnya itu mirip cerita hidup Alan Turing. Sampai saat ini, masih jadi spekulasi mengapa ada racun didalam tubuhnya. Satu dugaan yaitu dia mengalami stress berat dan bunuh diri setelah dijatuhi hukuman oleh pemerintah Inggris (dan Gereja) dengan cara diasingkan dan harus meminum obat untuk menekan hawa nafsu homoseksualnya. Dugaan lainnya adalah karena diracun oleh orang lain.
Salah satu karya besar dalam hidup Turing adalah decipher kode enigma yang digunakan oleh German pada perang dunia ke 2. Dengan keahliannya, Inggris dan sekutu dapat menyadap dan menerjemahkan komunikasi Hitler dan tentaranya. Mungkin, secara tak langsung ini juga mempengaruhi kemerdekaan Indonesia seperti halnya bom Nuklir di Jepang. Selain itu, karya Turing yang fenomenal adalah paper tentang Turing test. Jika sempat melihat film keluaran 2014 "The Machine", disitu ada adegan untuk uji Turing. Satu orang dan satu komputer dimasukkan ke ruangan tertutup yg berbeda, kemudian penguji menanyakan pertanyaan sembarang/apapun. Misalkan ditanya, "Describe love in three words?", kamar A menjawab: "Home, hapiness, reproduction", sedang kamar B menjawab: "Hapiness, sadness, life". Setelah memberikan beberapa pertanyaan, jika penguji tak juga dapat membedakan mana manusia dan mana komputer, maka komputer telah lulus uji Turing. Tentu ini tak mudah membuat komputer seperti ini karena melibatkan banyak aspek, e.g., machine learning, artificial intelligence, data mining, computer vision, natural language processing, pattern recognition, dan voice recognition. Dan, sampai sekarangpun, belum ada satu mesin yang telah lulus uji Turing. So, Anda berniat menciptakannya ? 

Lecture Note: Nasib Pembelajaran TIK

Di grup jurusan saya muncul sebuah lecture note dari adik kelas, namanya Tommy Putra Pratama Gunawan. Lecture note yang dibuatya seperti ini:

[LECTURE NOTE]Ini adalah salah satu Opini berbentuk surat yang ditujukkan kepada menteri penedidikan kita mengenai nasib mata pelajaran TIK saat ini, oleh bapak Onno, yang kalau kita ingat pernah menjadi pemateri seminar nasional di Dinamik 9 kemarin. Silahkan dibaca 
http://opensource.telkomspeedy.com/wiki/index.php/2014/04/30_-_Surat_ke_MENDIKNAS_tentang_Mata_Pelajaran_TIK
Iya sih, mata pelajaran TIK dihapuskan oleh pemerintah. Saya juga kurang begitu mengerti apa rencana ke depan dari kementrian pendidikan sekarang. Ya... lucu aja, apalagi mata pelajaran ini bisa dianggap sebagai tujuan utama dari lulusan jurusan saya.

Seandainya saja di Indonesia juga ada mata pelajaran Computer Science ya.

Lecture Note: Holy War

Tulisan lecture note dari pak Lala Septem Riza kali ini mengenai Holy War. Saya baru tahu ada istilah ini yang mengacu ke debat penggunaan bahasa pemrograman. Ada-ada saja ya. Walaupun kelihatannya "ada-ada saja" tapi ada benarnya juga loh, soalnya di dunia industri orang-orang dituntut untuk mengetahui cara penggunaan bahasa pemrograman agar bisa mengimplementasikan keilmuannya.
Berikut kutipan tulisan beliau:

[LECTURE NOTE] Holy war! Ini bukan holy war (perang suci) pada abad 16 dan 17 antara tentara Muslim dan Kristen di daratan Eropa dan Asia. Tetapi, ini adalah perang suci yang terjadi diantara programming language di science . Kata "holy war" sering dipakai oleh scientists untuk melukiskan perdebatan sengit di antara mereka. Mungkin karena dua/lebih pihak yang beradu, sama - sama memberikan kontribusi bagi perkembangan ilmu dan pengetahuan walau bertentangan. Dan karena itu mungkin disebut "suci".
Di bidang programming language, kita bisa melakukan kategorisasi/taksonomi, misalkan: ada low dan high level. Dua pembagian ini, bisa mengakibatkan dua hal yang bersifat trade off, yaitu antara kecepatan computation time (run time) dan kecepatan programmer menuliskan program. C dan FORTRAN (kalau boleh dimasukkan-RED) adalah contoh bahasa yang tercepat dari sisi run time karena low level, tapi memakan waktu lama untuk membuat codenya. Butuh puluhan/ratusan Line of Code (LoC) untuk membuat grafik/plot sederhana. Tapi, bahasa JAVA, R, PYTHON, MATLAB, RUBY, VB, etc., lebih lambat dalam komputasi, tapi programmer lebih cepat dalam membuat code. Pembagian lain yang bisa kita buat, misalkan antara prosedural, object oriented (OOP), dan functional programming (FP). Kita sangat familiar dengan prosedural (e.g., PASCAL, dll) dan OOP (e.g., JAVA, C++, dll), sedangkan contoh dari FP adalah SCALA, LISP, HACKELL, etc. Mereka saling mengunggulkan diri mereka masing2x . FP mengganggap dirinya "pure", karena FP punya definisi yang jelas tentang sebuah fungsi. Secara matematis, fungsi akan memberikan nilai yang pasti dan sama ketika argumen yang dimasukkan ke dalam fungsi itu adalah sama. Dan definisi ini dipenuhi oleh FP, tapi tidak oleh OOP (e.g., JAVA). Dengan kata lain FP lebih "jujur" dari pada OOP (Jangan marah buat penggemar OOP, karena saya juga penggunanya :D). Disisi lain, konsep OOP sangat bagus karena memudahkan kita merepresentasikan code kita sedekat mungkin dengan dunia real. Dan masih banyak lagi pembagian yang bisa kita buat, seperti: batch vs interaktif, general vs specific purpose, dll.
Salah satu holy war yang berkecamuk saat ini adalah perang antara bahasa R dan PYTHON. Dua bahasa itu sangat sering dipakai di science, khususnya di data analysis . Data analysis adalah bidang baru yang mirip/beririsan dengan data mining, mmm sepertinya dua bidang ini pun mungkin bakal mendeklarasikan peperangannya, kita tunggu saja xixixi. Beberapa survey dan pendapat tentang R dan PYTHON, menunjukkan betapa sengitnya peperangan mereka. Kita bisa lihat dibeberapa website, misal:
http://r4stats.com/articles/popularity/http://www.kdnuggets.com/2013/06/kdnuggets-annual-software-poll-rapidminer-r-vie-for-first-place.htmlhttp://readwrite.com/2013/11/25/python-displacing-r-as-the-programming-language-for-data-science#awesm=~oCUp7LydXhqqhgBahkan, di level fakultas di sinipun, berdebatan antara dosen R dan dosen PYTHON sangat panas .
Alasan saya menulis ini, agar kita semua sadar akan adanya dinamika di bidang kita. Tak jadi soal anda ada di pasukan R, PYTHON, JAVA, C, atau apapun itu. Karena apapun pasukan anda, anda dituntut untuk tahu/belajar ttg bidang anda, bahkan kalau bisa, tahu tentang kelemahan musuh anda, bukan . Dan itu, bagus untuk karier kita kedepan (khususnya bagi mahasiswa).

Lecture Note: Deduktif

Lecture note kali ini dari pak Lala Septem Riza lagi. Beliau memang paling rajin membuat tulisan ini sih di grup. Salut deh! Tulisan beliau kali ini mengenai cara berpikir secara deduktif. Cara berpikir seperti ini diperlukan oleh seorang ilmuwan. Ciye.

Oh ya, kutipan dari grup yang saya muat ulang di blog ini mungkin tidak berurut karena saya mengambilnya secara langsung tanpa memperhatikan keterurutan tanggal :).

Baiklah, mari langsung kita simak tulisan beliau ya!

[LECTURE NOTE] Kali kita akan mendiskusikan pasangan dari induktif, yaitu deduktif. Jika hipotesa induktif di bangun dari proses generalisasi atau bottom up, maka deduktif adalah top down. Pada tema induktif di LECTURE NOTE sebelumnya, kita punya contoh tentang mangga dan angsa. Sekarang, kita coba rasakan bedanya dengan contoh deduktif berikut ini. Ketika, saya jalan-jalan di suatu tempat yang tak saya kenal, tiba - tiba saya lihat ada pohon mangga yang berbuah lebat, saya katakan pada pemiliknya (dimana saya juga tak kenal beliau): "Pak, saya yakin deh mangga di pohon ini pasti manis rasanya". Saat itu juga, saya punya hipotesa deduktif bahwa mangga di pohon tersebut manis, karena saya belum pernah mencicipi satupun dari mangga itu. Pertanyaannya kemudian, bagaimana kita tahu kalau hipotesa kita benar ttg mangga tersebut ? Jawabannya adalah selama anda belum bisa menemukan mangga yang tak manis rasanya, maka hipotesa anda diterima sebagai kebenaran. Itulah deduktif. Deduktif mengharuskan kita memiliki hipotesa lebih dahulu. Kita uji hipotesa itu, dengan cara "mempertanyakannya" dan mencari "kesalahan" dari hipotesa itu. Satu saja kita temukan contoh data yang membuat hipotesa kita tak valid, maka hipotesa kita jadi gugur. Sebaliknya, selama kita belum bisa menemukan kesalahannya maka hipotesa tersebut kita terima. Jadi, sudah terasa perbedaannya dengan induktif, bukan?
Pertanyaan berikutnya: apakah kita bisa buat sembarang hipotesa ? Tentu tidak! Hipotesa yang kita buat HARUS hipotesa yang bisa bernilai SALAH. Contoh hipotesa yang tak bisa memiliki nilai salah adalah "Sebab bumi bulat adalah karena bumi mencintai bulan yang juga berbentuk bulat". Secara objektif, kita sulit membuktikan benar atau salah hipotesa ini, maka hipotesa seperti ini tak bisa kita gunakan sebagai hipotesa di deduktif.
Dari sisi matematika, ada mekanisme sehingga deduktif bisa memiliki kebenaran ABSOLUT, tapi kita tidak membahasnya disini. Sedangkan tinjauan science yang umum, kebenaran deduktif masih relatif. Kenapa relatif ? karena tergantung dari temuan kesalahan, jadi bisa saja sekarang masih valid, tapi setahun kemudian ditemukan data/fakta yang menggagalkan hipotesa. Dan inilah salah satu kelemahan deduktif, "kebenaran yang tak bisa dipastikan".
Bagian terakhir ini, saya ingin mengajak berdiskusi, kira - kira pernahkah kita melakukan induktif dan deduktif di Ilmu Komputer ? Bagi mahasiswa pendidikan yg sedang/sudah tugas akhir, mungkin tak lagi asing, tapi bagi mahasiswa lain, mungkin tak menyadarinya. Jika anda suka mata kuliah data mining, anda pasti ingat betul tentang metode clustering (misal, c means, fuzzy, dll). Ketika kita mengenerate pusat kluster dari ribuan baris data, saat itulah kita melakukan induktif. Hipotesa yang kita bangun adalah pusat kluster tersebut. Kemudian, ketika kita punya data uji (data baru), trus kita ingin mengetahui data tersebut ada di kluster mana, maka pada saat itulah kita melakukan deduktif. Begitu juga, bagi penggemar artificial neural network, pada saat learning process kita sebenarnya mencari hipotesa (dalam hal ini berupa fungsi) dengan cara mencari bobot (w) yang tepat. Sedangkan deduktif, ketika kita melakukan testing atas bobot tersebut dengan testing data. Dan masih banyak contoh lain yang menunjukkan bahwa induktif dan deduktif biasa kita gunakan. Kalau begitu, sedikit kejawab bukan bahwa disadari atau tidak, anda adalah seorang scientist. Semoga ini bisa jadi berita yang menggembirakan, horeee kita adalah scientist, coolll... hehehe 

Lecture Note: Pemrograman

Sekilas lecture note
Saya beruntung masuk di sebuah grup Facebook jurusan yang isinya bagus-bagus. Di dalam grup ini seringkali ada post yang menggunakan kode [LECTURE NOTE] di awal tulisannya. Berhubung grup ini tertutup dan lecture note yang disampaikan bagus-bagus, saya rasa ada baiknya jika disimpan, hehe

Lecture note ini dibuat oleh pak Lala Septem Riza. Di postingan mengenai Lecture Note beliau menghimbau untuk membuat tulisan pendek yang bermuatan keilmuan. Idenya bagus ya? Jadi nggak bosan dan ngegeje kalau buka Facebook.

Lecture note kali ini disampaikan oleh pak Lala sendiri mengenai pemrograman. Berikut isinya

[LECTURE NOTE] Dalam belajar, satu keahlian yang mesti kita punya agar dapat hasil yang maksimal adalah kemampuan memisahkan mana yang penting dengan yang tidak penting. kalau diterjemahkan dalam satu kata adalah "simplicity" (penyerdehanaan). Karena dari diskusi para dosen, matkul algorithma dan pemrograman adalah mata kuliah favorit mahasiswa (terutama di tahun awal) maka kali ini saya mencoba membuat penyerdehanaan dalam belajar algoritma dan pemrograman. Semoga saja bener-bener sederhana sehingga terlihat jelas mana yang penting. Bagi teman-teman yang punya ide lain mangga ditambah dgn tujuan membuat semakin sederhana yaa .
Ada dua hal yang penting di bahasa pemrograman, selain dari dua ini adalah "tak penting", yaitu:
1. PENYIMPANAN DATA (i.e., data type/data structure): dikala kita membuat program, kita harus menyimpan data kita khan. Maka pertanyaan pertama adalah pake apa kita simpan data kita ? Inilah yang harus kita pelajari. Misal,
- Java: int, double, String, Array, List, Set, object, dll.
- Python/R/MATLAB/OCTAVE: list/vector, matrix, dll.
2. PROCEDURE: Di bagian ini kita harus belajar IDE DASAR dari prosedur, fungsi, kondisi (if), pengulangan (for), dan langkah - langkah (algoritma). Ini memang agak tricky tapi sekalinya kita paham maka kita bisa menggunakannya untuk semua bahasa pemrograman yang ada. Agar kita paham dengan bagian ini, kita perlu menjawab 3 pertanyaan berikut: apa data masukan kita (input) ? apa yang mau kita lakukan dengan data masukan ini (proses) ? trus apa yang mau dikeluarin (output) ?
Percayalah, dua point itu saja yang penting. Lhoo trus apa kita tak perlu belajar sintax ? saya katakan kita perlu tahu sintax, tapi SINTAX ITU GAK PENTING, jadi ndak usah dipusingkan . Analoginya gini: Walau anda punya kamus bhs Spanyol, Inggris, dan Perancis tapi jika anda tak punya sesuatu yang mau diucapkan, kira - kira anda bakal berbicara tidak ? . Tapi, jika anda punya sesuatu yang mau diucapkan, anda tinggal buka kamus dan kemudian baca/bicara. Kalau grammarnya salah, kan paling compiler error, malah kita bakal ditunjukin di baris mana salahnya, bukan . Sintax bisa berbeda-beda, sehingga jika kita ingin menguasai beberapa bahasa pemrograman, maka kita harus tak perlu lagi merisaukan tentang sintax.
Contoh: Kita diberi suatu deret bilangan, dan kita diminta untuk mengurutkan.
Sang Otak bekerja: mmm bilangan ini mau disimpan dimana ya ? Ok deh, saya pilih vector saja. Habis itu,bagaimana saya mengurutkannya ya ? Mengurutkan kan artinya ambil 2 bilangan lalu bandingkan (if). Bagian kiri kasih yang kecil, sedangkan yang besar taruh dikanannya. Karena saya mau urutkan semuanya, yaa saya perlu bandingin semuanya, kalau gitu saya ulangi saja semuanya (for). Done!!!
Terlihat bukan pertanyaan dan jawaban dari point pertama dan kedua diatas. Trus bagaimana cara naruh ke vector, cara ambil bilangan ke vector, bagaimana cara nulis if dan for ? ahh gitu aja kok repot, baca halaman tentang vector, if, dan for.... selesai kekeke .
Paragraph akhir ini, saya ingin katakan bahwa (i) jangan terlalu risau dengan algoritma yang efektif/optimal, karena itu hanya bisa dicapai SETELAH anda menulis algoritma yang jorok, lemot, bahkan bodoh, tapi memberi nilai yang sesuai. (ii) pikirkan untuk memberi comment di tiap barisnya, bukan agar orang lain mengerti, tapi agar anda yakin dengan yg anda tulis . Selamat belajar yaa.