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.
0 Komentar