Ajari Diri Anda Pemrograman dalam Sepuluh Tahun

Satu artikel menarik ditulis oleh Peter Norvig tentang belajar pemrograman. Kita bisa membaca versi aslinya di sini Teach Yourself Programming in Ten Years dan versi bahasa Indonesia Belajar Programming Sendiri Dalam Sepuluh Tahun. Saya merasa perlu menulis ulang ini di blog untuk mempermudah saya :)

Mengapa semua orang terburu-buru?

Norvig melakukan riset dan menemukan bahwa sekarang ini banyak sekali buku dengan judul “Belajar X dalam Y hari” atau bahkan jam. 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.

Terlalu cepat, sebatas permukaan

Dalam waktu sesingkat 3 hari kita tidak akan punya cukup waktu untuk menulis beberapa program yang berguna, dan belajar dari keberhasilan dan kegagalan program-program ini. Kita tidak akan punya cukup waktu untuk bekerja dengan seorang programmer berpengalaman dan mengerti seperti apa hidup dalam lingkungan C++. Singkatnya, kita tidak akan punya cukup waktu untuk belajar banyak. Jadi buku dengan judul semacam itu hanya bisa berbicara tentang hal-hal yg superfisial, bukan pengertian yg mendalam.

“Mengerti sesuatu hal dengan sedikit adalah hal yang berbahaya.” - Alexander Pope

Belajar memrogram

Dalam 3 hari kita bisa belajar sedikit sintaks C++ (jika kita telah mengetahui bahasa pemrograman yg lain), tapi tidak bisa belajar banyak bagaimana cara menggunakan bahasa tersebut. Singkatnya, jika kita adalah seorang programmer Basic, kita bisa belajar menulis program menggunakan sintaks C++ dalam gaya Basic, tapi kita tidak bisa memahami keunggulan dan kekurangan dari C++. Satu contoh lain adalah kita perlu belajar sedikit tentang JavaScript karena perlu membuat sebuah interface dari program yang sudah ada. Yang sebenarnya terjadi adalah kita tidak sedang mempelajari bagaimana untuk memrogram; kita hanya belajar bagaimana melakukan hal tersebut. Jadi apa gunanya?

“Sebuah bahasa pemrograman yang tidak mengubah cara berpikir anda tentang pemrograman, tidak berguna untuk dipelajari.” - Alan Perlis

Mengapa Belajar dalam Sepuluh Tahun?

Banyak bukti ilmiah yang menunjukkan bahwa perlu waktu yang panjang bagi seseorang untuk mengembangkan keahliannya.

  • Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973) 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.
  • Malcolm Gladwell mengatakan itu perlu 10,000 jam, berdasarkan laporan dalam sebuah studi murid-murid di Berlin Academy of Music yang membandingkan 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 mulai berlatih lebih banyak dari yg lainnya:
    6 jam seminggu pada umur 9
    8 jam seminggu pada umur 12
    16 jam seminggu 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.

  • 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 karena kata-kata 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.”

Resep Sukses Belajar Pemrograman

  • Miliki ketertarikan kepada programming dan lakukan karena itu mengasyikan. Pastikan bahwa itu akan tetap mengasyikan sehingga kita akan mau melakukannya untuk 10 tahun.
  • Bicara dengan programmer-programmer lain; baca program-program lain. Hal ini lebih penting daripada sebuah buku atau kursus.
  • Membuat program (learning by doing). Ini adalah bentuk latihan dengan penuh perhatian. Kita akan merasakan bagaimana menghadapi sebuah masalah dan menemukan solusinya.
  • Buat kesalahan, dapatkan feedback, perbaiki. Pengalaman tidak dihitung dari sekedar melakukan sesuatu berulang-ulang selama periode waktu tertentu. Dalam berlatih, pastikan ini dilakukan dengan tingkat kesulitan yang tepat, mulai dari yang paling mudah lalu tingkatkan kesulitannya sedikit demi sedikit. Lakukan seperti sebuah eksperimen, buatlah kesalahan lalu perbaiki.
  • Kuliah (jika mau), gunakan empat tahun di kampus (atau lebih jika S2). Hal ini akan memberi kita akses untuk pekerjaan-pekerjaan yang membutuhkan sebuah gelar, dan hal ini juga akan memberi kita pengertian mendalam tentang bidang ini.
  • Cari pekerjaan. Jika tidak menyukai sekolah, kita bisa (dengan cukup dedikasi) mendapatkan pengalaman yang mirip di pekerjaan. Belajar dari buku saja tidak akan cukup.

    “Pendidikan Computer Science tidak bisa membuat siapapun menjadi programmer, sama halnya mempelajari kuas dan warna tidak bisa membuat seseorang menjadi pelukis.” - Eric Raymond, penulis “The New Hacker’s Dictionary”.

  • Kerjakan project bersama programmer-programmer lain. Jadilah programmer terbaik di dalam beberapa project; dan jadilah yg terburuk di project lainnya. Saat kita menjadi yang terbaik, kita punya kesempatan mencoba kemampuan memimpin sebuah project, dan menginspirasi orang lain dengan visi kita. Saat kita menjadi yang terburuk, kita belajar apa yang dilakukan oleh para ahli, dan belajar apa yang mereka tidak suka lakukan (karena mereka membuat kita melakukannya untuk mereka).
  • Kerjakan project yang telah dikerjakan programmer-programmer lain. Ikutlah terlibat untuk mengerti sebuah program yang ditulis orang orang lain. Coba untuk mengerti dan membetulkannya saat pembuatnya sedang tidak ada. Berpikirlah bagaimana membuat desain program kita mudah untuk orang lain memaintainnya.
  • Pelajari paling sedikit 6 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).
  • Pahami komputer Ingat bahwa terdapat kata “komputer” dalam “ilmu komputer”. Ketahuilah bagaimana komputer bekerja, misalnya berapa lama dibutuhkan komputer untuk mengeksekusi sebuah instruksi, mengambil sebuah kata dari memori, membaca beberapa kata dari disk, dan mencari lokasi baru pada disk.
  • Terlibat dalam usaha standarisasi sebuah bahasa. Kita 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.

Perlis mengatakan bahwa para pemain hebat memiliki kualitas internal yang melampaui pelatihan mereka. Tapi dari mana kualitasnya berasal? Apakah itu bawaan? Atau apakah mereka mengembangkannya melalui ketekunan?

“Siapa pun bisa memasak, tapi hanya mereka yang tak kenal takut yang bisa menjadi hebat.” - Auguste Gusteau (koki fiksi di Ratatouille)

Norvig menganggap pernyataan tersebut sebagai keberanian untuk bersedia mengabdikan sebagian besar hidup seseorang untuk melakukan praktik deliberatif.

“Tidak semua orang bisa menjadi seniman hebat, tapi seniman hebat bisa datang dari mana saja.” Anton Ego (kritikus Gusteau)

Jadi, silakan beli buku Java/Ruby/Javascript/PHP itu; kita mungkin akan mendapat manfaat darinya. Namun itu tidak akan mengubah hidup kita, atau keahlian kita secara keseluruhan sebagai seorang programmer dalam 24 jam atau 21 hari. Bagaimana jika kita mencoba bekerja keras untuk terus berkembang selama 24 bulan?


Written by@mmdmthr
My notes in public space

GitHubLinkedIn