Browse By

Belajar Programming Sendiri Dalam Sepuluh Tahun

Bookshelf at NEU CCIS Lab

Bookshelf at NEU CCIS Lab by djitz!

oleh: Peter Norvig

(disadur dari Teach Yourself Programming in Ten Years)

Mengapa semua orang terburu-buru?

Masuklah ke sebuah toko buku dan anda akan melihat buku mengenai bagaimana “Belajar Java dalam 7 Hari” dan banyak variasi lainnya yang menawarkan untuk mengajarkan Visual Basic, Windows, Internet, dan sebagainya dalam beberapa hari atau jam. Saya melakukan power search di Amazon.com:

pubdate: after 1992 and title: days and (title: learn or title: teach yourself)

dan mendapatkan 248 hasil. 78 hasil pertama adalah buku komputer (no. 79 adalah “Belajar Bahasa Bengali dalam 30 hari“). Lalu saya mengganti “hari” dengan “jam” dan mendapatkan hasil yg luar biasa mirip: 253 buku, dengan 77 buku komputer dan diikuti dengan “Belajar Grammar dan Tata Bahasa dalam 24 jam” di nomor 78. Dari 200 hasil pertama, 96% adalah buku-buku komputer.

Kesimpulannya adalah entah orang-orang sekarang ini terburu-buru untuk belajar tentang komputer, atau komputer adalah hal yang sangat mudah dipelajari dari hal-hal lainnya. Tidak ada buku untuk belajar Beethoven, atau Fisika Kuantum, atau bahkan Melatih Anjing dalam beberapa hari. Dr. Felliesen et al. mengakui tren ini dalam buku mereka “Bagaimana Mendesign Program“, dimana mereka mengatakan “Memprogram dengan jelek sangat mudah. Orang-orang Idiot bisa mempelajarinya dalam 21 hari, bahkan walaupun mereka betul-betul bodoh.”

Mari menganalisa bagaimana judul seperti “Belajar C++ dalam 3 Hari” bisa memiliki arti sebagai berikut:

  • Belajar: Dalam 3 hari anda tidak akan punya cukup waktu untuk menulis beberapa program yang berguna, dan belajar dari keberhasilan dan kesuksesan program-program ini. Anda tidak akan punya cukup waktu untuk bekerja dengan seorang programmer berpengalaman dan mengerti seperti apa hidup dalam lingkungan C++. Singkatnya, anda tidak akan punya cukup waktu untuk belajar banyak. Jadi buku tersebut hanya bisa berbicara tentang hal-hal yg superfisial, dan tidak pengertian yg mendalam. Seperti Alexander Pope pernah berkata, mengerti sesuatu hal dengan sedikit adalah hal yang berbahaya.
  • C++: Dalam 3 hari anda akan bisa belajar sedikit sintaks C++ (bila anda telah mengetahui bahasa pemrograman yg lain), tapi anda tidak bisa belajar banyak bagaimana cara menggunakan bahasa tersebut. Singkatnya, bila anda seorang programmer Basic, anda bisa belajar menulis program dalam gaya Basic menggunakan sintaks C++, tapi anda tidak bisa memahami keunggulan (dan kekurangan) dari C++. Jadi apa gunanya? Alan Perlis pernah berkata: “Sebuah bahasa pemrogramman yang tidak mengubah cara berpikir anda tentag programming, tidak berguna untuk dipelajari.” Satu kemungkinan yg terjadi adalah anda perlu belajar sedikit tentang C++ (atau mungkin JavaScript atau Flash Flex) karena anda perlu membuat sebuah interface dari program yang sudah ada untuk melakukan sebuah hal. Tapi kembali lagi anda tidak mempelajari bagaimana untuk memprogram; anda hanya belajar bagaimana melakukan hal tersebut.
  • dalam 3 Hari: Sayangnya, hal ini tidak cukup, seperti yg sudah dijelaskan di atas.
Belajar Programming Sendiri Dalam Sepuluh Tahun
Para periset (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) telah menunjukkan bahwa diperlukan sekitar sepuluh tahun untuk mengembangkan keahlian di berbagai macam bidang, termasuk bermain catur, mengomposisi musik, mengoperasikan telegraf, melukis, bermain piano, berenang, bermain tenis, dan riset dalam bidang neuropsychology dan topology.
Kuncinya adalah latihan dengan penuh perhatian: tidak hanya melakukannya lagi dan lagi, tapi menantang diri anda sendiri dengan suatu hal yang diluar kemampuan anda saat ini, mencobanya, menganalisa performa anda dan setelah itu, membetulkan kesalahan-kesalahan yang ada. Lalu ulangi lagi, dan lagi.
Sepertinya memang tidak ada jalan singkat: Mozart sekalipun, yang sudah memiliki bakat musik luar biasa di umur 4 tahun, membutuhkan 13 tahun lagi sebelum ia mulai membuat musik kelas dunia. Di aliran musik yang berbeda, The Beatles seakan-akan mencuat dengan beberapa hit #1 dan sebuah penampilan dalam acara Ed Sullivan pada tahun 1964. Tapi mereka telah bermain di club-club kecil di Liverpool dan Hamburg sejak 1957, dan walaupun mereka mampu menarik perhatian massa dari awal, kesuksesan terpenting mereka, Sgt. Peppers, dirilis pada tahun 1967.
Malcolm Gladwell membuat laporan dalam sebuah studi murid-murid di Berlin Academy of Music yang membandingkan 1/3 tertinggi, tengah, dan terbawah dari sebuah kelas dan bertanya kepada mereka berapa lama mereka latihan:
Setiap orang, dari ketiga group ini, mulai bermain kira-kira pada umur yang sama, sekitar umur 3 – 5 tahun. Dalam tahun-tahun pertama ini, semua latihan sekitar 2 – 3 jam seminggu. Tetapi sekitar umur 8 tahun, perbedaan yang sesungguhnya mulai muncul. Murid-murid yang akan menjadi terbaik di kelasnya mula berlatih lebih banyak dari yg lainnya: 6 jam seminggu pada umur 9, 8 jam pada umur 12, 16 jam pada umur 14, dan terus bertambah hingga saat mereka berumur 20 tahun mereka berlatih lebih dari 30 jam seminggu.
Saat mereka berumur 20 tahun, orang-orang terbaik ini telah berlatih selama 10,000 jam dalam hidup mereka. Murid-murid yg cukup baik hanya 8,000 jam, dan yang menjadi guru musik di masa depan hanya sedikit lebih dari 4,000 jam.
Jadi mungkin saja 10,000 jam, bukan 10 tahun, adalah angka ajaibya. Samuel Johnson (1709-1784) berpikir bahwa angkanya lebih banyak: “Kesempurnaan di bidang apapun bisa didapatkan hanya dengan usaha seumur hidup; hal tersebut tidak bisa dibeli dengan harga yang kurang dari itu.” Dan Chaucer (1340-1400) mengatakan “hidup ini terlalu pendek, keahlian terlalu banyak untuk dipelajari.” Hippocrates (sekitar 400SM) dikenal untuk potongan berikut “ars longa, vita brevis”, yang adalah bagian dari kata-kata yang lebih panjang “Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, yang berarti “Hidup ini pendek, keahlian lama, kesempatan menghilang, eksperimen berbahaya, keputusan sulit.” Walaupun dalam bahasa Latin, ars bisa berarti seni atau keahlian, dalam bahasa Yunani aslinya kata “techne” hanya berarti “keahlian”, bukan “seni.”

Belajar Programming Sendiri Dalam Sepuluh Tahun

Para periset (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) telah menunjukkan bahwa diperlukan sekitar sepuluh tahun untuk mengembangkan keahlian di berbagai macam bidang, termasuk bermain catur, mengomposisi musik, mengoperasikan telegraf, melukis, bermain piano, berenang, bermain tenis, dan riset dalam bidang neuropsychology dan topology.

Kuncinya adalah latihan dengan penuh perhatian: tidak hanya melakukannya lagi dan lagi, tapi menantang diri anda sendiri dengan suatu hal yang diluar kemampuan anda saat ini, mencobanya, menganalisa performa anda dan setelah itu, membetulkan kesalahan-kesalahan yang ada. Lalu ulangi lagi, dan lagi.

Sepertinya memang tidak ada jalan singkat: Mozart sekalipun, yang sudah memiliki bakat musik luar biasa di umur 4 tahun, membutuhkan 13 tahun lagi sebelum ia mulai membuat musik kelas dunia. Di aliran musik yang berbeda, The Beatles seakan-akan mencuat dengan beberapa hit #1 dan sebuah penampilan dalam acara Ed Sullivan pada tahun 1964. Tapi mereka telah bermain di club-club kecil di Liverpool dan Hamburg sejak 1957, dan walaupun mereka mampu menarik perhatian massa dari awal, kesuksesan terpenting mereka, Sgt. Peppers, dirilis pada tahun 1967.

Malcolm Gladwell membuat laporan dalam sebuah studi murid-murid di Berlin Academy of Music yang membandingkan satu per tiga group terbaik, menengah, dan terakhir dari sebuah kelas dan bertanya kepada mereka berapa lama mereka latihan:

Setiap orang, dari ketiga group ini, mulai bermain kira-kira pada umur yang sama, sekitar umur 3 – 5 tahun. Dalam tahun-tahun pertama ini, semua latihan sekitar 2 – 3 jam seminggu. Tetapi sekitar umur 8 tahun, perbedaan yang sesungguhnya mulai muncul. Murid-murid yang akan menjadi terbaik di kelasnya mula berlatih lebih banyak dari yg lainnya: 6 jam seminggu pada umur 9, 8 jam pada umur 12, 16 jam pada umur 14, dan terus bertambah hingga saat mereka berumur 20 tahun mereka berlatih lebih dari 30 jam seminggu.

Saat mereka berumur 20 tahun, orang-orang terbaik ini telah berlatih selama 10,000 jam dalam hidup mereka. Murid-murid yg cukup baik hanya 8,000 jam, dan yang menjadi guru musik di masa depan hanya sedikit lebih dari 4,000 jam.

Jadi mungkin saja 10,000 jam, bukan 10 tahun, adalah angka ajaibya.

Samuel Johnson (1709-1784) berpikir bahwa angkanya lebih banyak: “Kesempurnaan di bidang apapun bisa didapatkan hanya dengan usaha seumur hidup; hal tersebut tidak bisa dibeli dengan harga yang kurang dari itu.”

Dan Chaucer (1340-1400) mengatakan “hidup ini terlalu pendek, keahlian terlalu banyak untuk dipelajari.”

Hippocrates (sekitar 400SM) dikenal untuk potongan berikut “ars longa, vita brevis”, yang adalah bagian dari kata-kata yang lebih panjang “Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, yang berarti “Hidup ini pendek, keahlian lama, kesempatan menghilang, eksperimen berbahaya, keputusan sulit.” Walaupun dalam bahasa Latin, ars bisa berarti seni atau keahlian, dalam bahasa Yunani aslinya kata “techne” hanya berarti “keahlian”, bukan “seni.”

Berikut adalah resep yang saya buat untuk sukses dalam programming:

  • Tertarik kepada programming, dan melakukannya karena itu mengasyikan. Pastikan bahwa itu akan tetap mengasyikan sehingga anda akan mau melakukannya untuk 10 tahun.
  • Bicara kepada programmer-programmer lain; baca program-program lain. Hal ini lebih penting daripada sebuah buku atau kursus.
  • Membuat program. Cara terbaik untuk belajar adalah learning by doing. Dalam bahasa teknis, “level kemampuan maksimal untuk individual dalam sebuah bidang tidak didapatkan secara otomatis hasil dari jumlah pengalaman, tapi level kemampuan bisa ditambahkan bahkan oleh individual yang berpengalaman sebagai hasil dari latihan dengan penuh perhatian untuk melakukan lebih.” (p. 366) dan “cara belajar paling efektif membutuhkan sebuah tugas yang telah direncanakan dengan tingkat kesulitan yang tepat untuk individual tertentu, saran yang informative, dan kesempatan untuk melakukan dan membetulkan kesalahan.” (p. 20 – 21) Buku “Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life” adalah sebuah referensi yang menarik untuk pandangan ini.
  • Bila anda mau, gunakan empat tahun di kuliah (atau lebih di S2). Hal ini akan memberi anda akses untuk pekerjaan-pekerjaan yang membutuhkan sebuah gelar, dan hal ini juga akan memberi anda pengertian mendalam tentang bidang ini, tapi bila anda tidak menyukai sekolah, anda bisa (dengan cukup dedikasi) mendapatkan pengalaman yang mirip di pekerjaan. Bagaimanapun, belajar dari buku saja tidak akan cukup. “Pendidikan Computer Science tidak bisa membuat siapapun menjadi programmer lebih dari mempelajari kuas dan pigmen bisa membuat seseorang menjadi pelukis” kata Eric Raymond, penulis “The New Hacker’s Dictionary”. Salah satu programmer terbaik yang pernah saya dapatkan hanya memiliki gelar SMA; dia telah menghasilkan banyak software hebat, memiliki news group, dan mendapatkan cukup uang dari saham untuk membeli sebuah nightclub.
  • Mengerjakan project bersama programmer-programmer lain. Jadilah programmer terbaik di dalam beberapa project; dan jadilah yg terburuk di project lainnya. Saat anda menjadi yang terbaik, anda mempunyai kesempatan mencoba kemampuan anda memimpin sebuah project, dan menginspirasi orang lain dengan visi anda. Saat anda menjadi yang terburuk, anda belajar apa yang dilakukan oleh para ahli, dan anda belajar apa yang mereka tidak suka lakukan (karena mereka membuat anda melakukannya untuk mereka).
  • Mengerjakan project yg telah dikerjakan programmer-programmer lain. Ikutlah terlibat untuk mengerti sebuah program yang ditulis orang orang lain. Coba untuk mengerti dan membetulkannya saat programmer-programmer yg pembuatnya sedang tidak ada. Berpikirlah bagaimana membuat design program-program anda sehingga mudah untuk orang berikutnya yang akan memaintainnya.
  • Pelajari paling sedikit setengah lusin bahasa pemrogramman. Pelajari satu bahasa yang mendukung abstraksi class (seperti Java atau C++), satu yang mendukung abstraksi fungsi (seperti Lisp atau ML), satu yang mendukung abstraksi syntaks (seperti Lisp), satu yang mendukung spesifikasi deklaratif (seperti template Prolog atau C++), satu yang mendukung coroutines (seperti Icon atau Scheme), dan satu yang mendukung parallelisme (seperti Sisal).
  • Ingat bahwa terdapat kata “komputer” dalam “ilmu komputer”. Ketahuilah berapa lama dibutuhkan komputer anda untuk mengeksekusi sebuah instruksi, mengambil sebuah kata dari memori (dengan dan tanpa cache miss), membaca beberapa kata dari disk, dan mencari lokasi baru pada disk. (Jawabannya disini)
  • Terlibatlah dalam usaha standarisasi sebuah bahasa. Boleh jadi dalam komite ANSI C++, atau lainnya. Apapun itu, anda akan belajar apa yang orang lain sukai dalam sebuah bahasa, seberapa dalam perasaan itu, dan mungkin sedikit tentang mengapa mereka memiliki perasaan tersebut.
  • Miliki sebuah perasaan untuk lepas dari usaha standarisasi bahasa secepat mungkin.

Dengan semua hal di atas, sangat dipertanyakan seberapa jauh anda bisa dapatkan hanya dari mempelajari buku. Sebelum anak pertama saya lahir, saya membaca semua buku-buku ‘How To’, dan tetap merasa seperti pemula yg tidak mengerti apa-apa. Tiga puluh bulan kemudian, saat anak kedua saya lahir, apakah saya kembali ke buku untuk mengingat sesuatu? Tidak. Saya lebih mengandalkan pengalaman pribadi saya, yang hasilnya jauh lebih berguna dan lebih pasti bagi saya daripada ribuan halaman-halaman yang ditulis oleh para ahli.

Fred Brooks, dalam essaynya ‘No Silver Bullet‘ mengidentifikasi sebuah rencana yang terbagi dalam tiga bagian untuk mencari seorang designer software hebat:

  1. Secara sistematis identifikasi designer-designer top secepat mungkin.
  2. Tugaskan seorang mentor untuk bertanggung jawab atas perkembangan prospek tersebut dan dengan hati-hati buat sebuah file karir.
  3. Berikan kesempatan-kesempatan untuk designer-designer yang sedang berkembang ini untuk berinteraksi dan menstimulasi satu dengan lain.

Hal ini tentu dengan asumsi bahwa beberapa orang telah memiliki kualitas-kualitas yang dibutuhkan untuk menjadi seorang designer yang hebat; yg perlu dilakukan adalah bagaimana menggabungkan mereka bersama. Alan Perlis mengatakannya dengan lebih tepat: “Semua orang bisa diajarkan bagaimana cara membuat patung: seorang Michaelangelo yg perlu diajari adalah bagaimana untuk tidak melakukannya. Sama halnya dengan programer-programmer hebat”.

Jadi pergi dan belilah buku Java tersebut; anda mungkin akan mendapatkan sesuatu yang berguna dari buku itu. Tapi anda tidak akan mengubah hidup anda, atau keahlian anda sebagai programmer dalam 24 jam, hari, atau bahkan bulan.

Referensi

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Bryan, W.L. & Harter, N. “Studies on the telegraphic language: The acquisition of a hierarchy of habits. Psychology Review, 1899, 8, 345-375

Hayes, John R., Complete Problem Solver, Lawrence Erlbaum, 1989.

Chase, William G. & Simon, Herbert A. “Perception in Chess” Cognitive Psychology, 1973, 4, 55-81.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

Jawaban

Perkiraan waktu yang dibutuhkan untuk berbagai operasi pada sebuah PC biasa:

mengeksekusi instruksi biasa 1/1,000,000,000 detik = 1 nanodetik
mengambil data dari L1 cache memory 0.5 nanodetik
branch misprediction 5 nanodetik
mengambil data dari L2 cache memory 7 nanodetik
Mutex lock/unlock 25 nanodetik
mengambil data dari memory utama 100 nanodetik
mengirim 2k bytes data melalui jaringan 1Gbps 20,000 nanodetik
membaca 1MB secara sequential dari memori 250,000 nanodetik
mengambil dari lokasi disk baru (mencari) 8,000,000 nanodetik
membaca 1MB secara sequential dari disk 20,000,000 nanodetik
mengirim packet dari Amerika ke Eropa dan kembali 150 millidetik = 150.000.000 nanodetik

Appendix : Pilihan Bahasa Pemrograman

Beberapa orang bertanya mengenai bahasa pemrograman apakah yang mereka harus pelajari pertama. Tidak ada satu jawaban tepat, tapi pertimbangan poin-poin berikut:

  • Manfaatkan teman-teman anda. Saat ditanya “Sistem operasi apa yg harus saya gunakan, Windows, Unix, atau Mac?”, jawaban saya biasanya adalah : “Gunakan apa saja yang teman-teman anda gunakan.” Manfaat yang anda dapatkan dari belajar bersama teman-teman anda akan menutupi segala perbedaan intrinsik antara OS, atau antara bahasa-bahasa pemrograman. Juga pertimbangkan teman-teman anda yg akan datang:  komunitas programmer-programmer yang anda akan menjadi bagian bila anda akan menekuninya. Apakah bahasa pilihan anda memiliki komunitas besar yang bertumbuh atau memiliki komunitas kecil yg sedang sekarat? Apakah ada buku-buku, website-website, dan forum-forum online untuk mendapatkan jawaban-jawaban? Apakah anda menyukai orang-orang di forum-forum tersebut?
  • Keep it simple. Bahasa-bahasa pemrograman seperti C++ dan Java didesign untuk pengembangan aplikasi secara profesional oleh team besar yang terdiri dari programmer-programmer berpengalaman yang memperhatikan tentang efisiensi run-time dari kode mereka. Akibatnya, bahasa-bahasa ini memiliki bagian-bagian yg rumit yang didesign untuk situasi-situasi ini. Anda hanya perlu untuk belajar untuk memprogram. Anda tidak butuh semua kerumitan tersebut. Anda hanya mau sebuah bahasa yang didesign untuk mudah dipelajari dan diingat oleh seorang programmer pemula.
  • Bermain. Cara mana yang anda inginkan bila anda belajar bermain piano: cara normal dan interaktif dimana anda mendengar sebuah nada segera setelah anda menekan tuts piano, atau cara “batch”, dimana anda bisa mendengar seluruh nada-nada setelah anda selesai memainkan sebuah lagu? Tentu saja, cara interaktif membuat belajar lebih mudah untuk piano, dan juga untuk programming. Cari sebuah bahasa yang mempunyai mode interaktif dan gunakanlah.

Dari kriteria-kriteria ini, rekomendasi saya untuk bahasa pemrograman pertama adalah Python atau Scheme. Tapi keadaan anda bisa berbeda, dan ada juga beberapa pilihan bagus lainnya. Bila umur anda satu digit, anda mungkin akan lebih menyukai Alice atau Squeak (orang yg lebih tua juga mungkin menyukainya). Yang terpenting disini adalah anda memilihnya dan memulainya.

Appendix : Buku-buku dan Sumber-sumber Lainnya

Beberapa orang telah bertanya buku-buku dan halaman-halaman web apa saja yang mereka harus pelajari. Saya ulangi bahwa “belajar dari buku saja tidak akan pernah cukup” tapi saya bisa merekomendasikan yang berikut ini:

Catatan

T. Capey menunjukkan bahwa halaman “Complete Problem Solver” di Amazon sekarang memiliki buku-buku “Teach Yourself Bengali in 21 days” dan “Teach Yourself Grammar and Style” pada bagian “Pelanggan yang mencari barang ini juga mencari barang-barang ini”. Saya rasa sebagian besar dari orang-orang yang mencari buku tersebut datang dari halaman ini. Terima kasih kepada Ross Cohen untuk bantuannya dengan Hippocrates.

Peter Norvig (Copyright 2001)

33 thoughts on “Belajar Programming Sendiri Dalam Sepuluh Tahun”

Leave a Reply to sbachrun Cancel reply

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