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 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.
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.
Cara Belajar Algoritma