Cara Belajar Algoritma

Beberapa pembaca blog ini menanyakan “bagaimana sih caranya belajar algoritma?”. Daripada saya harus menjelaskan ulang berkali-kali, akan saya coba tuliskan di sini. Pertama perlu diingat bahwa cara belajar setiap orang berbeda-beda, jadi cara yang saya sebutkan mungkin tidak berlaku 100% bagi Anda. Misalnya jka Anda penyuka matematika, Anda bisa mempelajari aspek matematis algoritma, tapi dalam tulisan ini saya asumsikan bahwa anda bukan matematikawan.

Cara yang paling baik dalam memahami algoritma adalah dengan berlatih. Di tahap ini orang akan mulai bertanya: saya harus latihan apa? Cobalah berlatih membuat struktur data dasar, misalnya tree, atau linked list.

Ada banyak algoritma dasar yang bisa dipelajari dari sebuah struktur data, misalnya cobalah membuat binary tree. Pertama Anda bisa mencoba melihat buku, tapi setelah itu cobalah dengan menggunakan logika sendiri. Beberapa hal dasar dalam membuat binary tree: menyisipkan elemen tree, menghitung jumlah node daun (leaf node/node yang tidak punya anak), menghapus node, melakukan traversal, dsb. Lalu kemudian Anda bisa membuat pohon biner terurut. Setelah itu Anda bisa mencoba mengaplikasikan pohon biner itu pada masalah nyata, misalnya membuat kompresi dengan algoritma hufman.

Sebagian orang akan merasa bosan berlatih hal-hal seperti ini, tapi hal ini penting. Cobalah lihat para atlit, mereka tetap melakukan latihan dasar setiap hari. Lihatlah jumlah waktu yang dihabiskan para musisi untuk berlatih. Waktu kita belajar matematika, ratusan soal penjumlahan dan perkalian sederhana diberikan pada kita sampai kita bisa melakukannya tanpa berpikir. Saya sudah belajar memprogram sejak SMP (otodidak), tapi saya baru merasa mulai bisa memahami banyak algoritma setelah saya “dipaksa” berlatih dengan puluhan tugas selama kuliah. Untuk Anda yang ingin belajar sendiri, coba disiplinkan diri berlatih.

Anda juga bisa memulai dari membuat program sederhana, membuat solusinya, lalu berusaha memperbaikinya. Misalnya membuat sebuah kamus. Bagaimana struktur data yang efisien untuk kamus, bagaimana jika memori terbatas (misalnya Anda ingin memprogram untuk PDA atau komputer lama). agar bisa lebih merasakan cepatnya atau lambatnya sebuah algoritma, Anda bisa menggunakan komputer yang lebih lambat, atau programlah PDA/ponsel. Selain itu Anda bisa mencoba meningkatkan jumlah data yang diproses. Jika Anda membuat aplikasi web, coba simulasikan ribuan user login pada waktu yang bersamaan.

Jika Anda berhasil menyelesaikan sesuatu, cobalah menyelesaikan masalah itu lagi dengan cara yang lebih baik. Coba pahami penggunaan “profiler”. Profiler adalah program yang bisa menunjukkan berapa lama bagian suatu program dieksekusi. Anda akan bisa menemukan bagian program yang paling lambat dengan menggunakan profiler. Mungkin Anda akan berpikir: ah beda 2 detik saja tidak perlu dioptimasi. Untuk memotivasi Anda, coba pikirkan berapa kali program itu akan dieksekusi, dan oleh berapa ribu orang program itu akan digunakan. Hasilnya Anda bisa menghemat waktu bertahun-tahun. Atau kalau menurut legenda Steve Jobs “Well, let’s say you can shave 10 seconds off of the boot time. Multiply that by five million users and thats 50 million seconds, every single day. Over a year, that’s probably dozens of lifetimes. So if you make it boot ten seconds faster, you’ve saved a dozen lives. That’s really worth it, don’t you think?” Sumber: Folklore.org

Masih belum punya ide juga? cobalah http://projecteuler.net/, di situ ada banyak persoalan yang bisa Anda coba. Persoalan yang ada di situ bisa Anda gunakan untuk melatih diri Anda. Kalau saya sendiri dulu lebih suka membuat game. Dalam membuat game kita dipaksa belajar berbagai algoritma dasar.

Beberapa orang juga bertanya: saya sebaiknya berlatih menggunakan bahasa apa. Jika Anda benar-benar sekedar berlatih, cobalah bahasa C. Bahasa ini sangat dekat dengan mesin, jadi Anda akan benar-benar memikirkan alokasi memori, dealokasi memori, dsb. Di bahasa yang menggunakan garbage collector (Java, C# dsb), Anda kadang akan melupakan faktor alokasi dan dealokasi memori. Bahasa C juga sudah terbukti ada berpuluh-puluh tahun. Bandingkan dengan berbagai bahasa yang sempat sangat populer seperti Visual Basic (yang bukan .NET), Clipper (bahasa untuk dBase) atau Perl. Bahasa-bahasa yang saya sebutkan tadi belum mati, tapi coba bandingkan masa kejayaannya dulu dengan sekarang. Anda juga bisa belajar C++ jika Anda suka konsep objek, tapi berhati-hatilah karena C++ merupakan bahasa yang lebih rumit dari C. Jika Anda perhatikan, program-program yang membutuhkan efisiensi tinggi masih ditulis dalam C, misalnya kernel sistem operasi Linux, decoder gambar (jpeg, png), audio dan video (lame, ffmpeg).

Jika Anda tidak ingin belajar algoritma sampai level yang sangat detail, Anda bisa belajar menggunakan Java dan C#, kedua bahasa tersebut sifatnya terbuka, dan memiliki spesifikasi yang cukup jelas. Saya cukup yakin kedua bahasa tersebut akan bertahan cukup lama di pasaran. Kelemahan bahasa seperti PHP dan Ruby adalah meskipun sifatnya terbuka, spesifikasi bahasanya tidak ada, sehingga bahasanya berubah sangat cepat. Bahasa Python meski tidak memiliki spesifikasi, designnya cukup sederhana, dan didukung beberapa perusahaan besar (misalnya Google), dan digunakan sebagai bahasa pengantar pemrograman di MIT. Bahasa Pascal juga bagus untuk belajar, meski secara komersial kurang banyak dipakai sejak popularitas Delphi menurun.

Update: Tulisan ini dibuat tahun 2010, pada tahun 2012, bahasa Ruby sudah memiliki standar ISO.

Jika pembelajaran dilakukan sambil membuat aplikasi, Anda bisa menggunakan bahasa manapun juga. Jangan khawatir masalah bahasa, karena ilmu Anda akan tetap bisa digunakan ketika beralih ke bahasa lain.

15 thoughts on “Cara Belajar Algoritma”

  1. mantap mantap

    berbobot
    isinya berbobot

    terasa beda ketika membaca dari programmer biasa dengan sang master programmer

    top top

    makasih pak

  2. Ini bapak bener-benar master, saya kagum sama anda, karena saya anak elektronika yang mau belajar IT, memang kebanyakan orang IT tidak mau tahu soal low level seperti anda. mohon bimbinganya

  3. terimakasi pak atas info ya sngat berguna sekali
    dlu saya kliah pernah blajar,krna kerja tdk hbngan ya keprogram jd lupa semua
    skarang saya mau bljar pemograman lg sbaik ya blajar dari mna ya pak mhon pncerahan ya trimakasih

  4. kalo dilengkapin sama image2 pendukung, makin mancap ni blog. apalagi tema bladjar alogaritma untuk (yg bukan cuma matematikawan ato matematitemen), mlainken juga buwat non-programmer yg mo bladjar programming :D

  5. setuju sama komen @andri. Kebetulan saya mahasiswa baru jur SI . Saya pingin banget bisa menguasai algoritma dan pemrograman, tapi dari dasarnya sendiri saya belum tahu seperti apa dan kayak gimana . Kira-kira belajar darimananya dulu yah?
    Mohon bimbingannya, terima kasih :)

  6. saya siswa SMA kls 2,,
    saya sama sekali tidak mengerti dengan bahasa pemograman,
    tp saya ingin sekali bisa dan mengerti dengan bahasa pemograman,
    how???
    tq

  7. Saya mulai belajar bahasa pemrograman dengan cara menghindari pemrograman berbasis object.

    Kalau sudah dirasa mantap ya baru dimulailah belajar bahasa pemrograman berbasis object.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>