Selasa, 05 Mei 2020

Belajar Programming itu Butuh Waktu 10 Tahun

Beberapa waktu lalu, saya melihat link di salah satu group programming di facebook. Isinya menuju sebuah artikel yang ditulis oleh Peter Norvig dengan judul “Teach Yourself Programming in Ten Years”, yang apabila diterjemahkan berarti “Belajar Programming secara mandiri dalam 10 tahun”. Artikel ini sebenarnya sudah cukup lama, dari komentar yang ada tercatat sudah sekitar 3 tahun yang lalu.


Terus terang judul artikel tersebut membuat penasaran, betulkah belajar programming itu butuh 10 tahun? Dan siapakah Peter Norvig ini?


Saya kemudian melakukan riset kecil-kecilan. Ternyata Peter Norvig bukan orang sembarangan. Ia adalah seorang programmer dan ilmuwan senior di bidang komputer. Saat ini bekerja di Google (sebagai director of research), NASA (sebagai kepala intelligent systems division), dan pioneer di bidang penelitian Artificial Intelligence kelas dunia.


Peter Norvig

Peter Norvig (sumber: wikipedia)


Dan ternyata artikel “Teach Yourself Programming in Ten Years” tersebut juga bukan artikel biasa. Isinya sangat dalam mengkritisi buku-buku dan metode belajar programming yang serba instan. Misalnya, mahir dalam 24 jam, jadi ahli dalam 1 minggu, dst.


Artikel itu sangat terkenal dan sudah diterjemahkan ke dalam 20 bahasa. Banyak diskusi yang membahas isinya, salah satunya dari quora.com.


Jika anda biasa membaca artikel bahasa inggris, tidak ada salahnya langsung buka artikel tersebut. Namun saya akan coba terjemahkan ke dalam bahasa Indonesia. Sebagai desclaimer, ini hanya terjemahan bebas. Beberapa istilah saya ganti agar lebih mudah dipahami.


Baik, berikut hasil terjemahan bebas dari artikel dengan judul asli “Teach Yourself Programming in Ten Years” oleh Peter Norvig.




Teach Yourself Programming in Ten Years


oleh Peter Norvig


Ilustrasi waktu 10 tahun belajar programming


Mengapa semuanya serba terburu-buru?


Berjalanlah ke toko buku manapun, dan anda bisa menemukan buku yang berjudul “Teach Yourself Java in 24 Hours” (“Belajar Java secara mandiri dalam 24 jam”) diantara buku-buku lainnya. Tidak hanya itu, buku tentang bahasa C, SQL, Ruby dan Algoritma juga memiliki judul yang sama, yakni bisa dipelajari dalam hitungan jam atau hari.


Pencarian di situs online Amazon dengan kata kunci yang mengandung “teach”, “yourself”, dan “hour” menghasilkan 512 buku semacam itu. Di sepuluh besar, sembilan diantaranya adalah buku programming, 1 lagi tentang pembukuan (bookkeeping). Hasil yang sama juga didapat ketika mengganti kata “teach yourself” dengan “learn” atau “hours” dengan “days”.


Kesimpulannya, entah setiap orang memang sedang buru-buru, atau programming itu ternyata sangat mudah dipelajari dibandingkan bidang keilmuan lain.


Matthias Felleisen (seorang professor bidang komputer) serta beberapa rekannya sudah memprediksi tren ini dalam buku berjudul “How to Design Programs”. Disitu tertulis: “Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies“. Jika diterjemahkan menjadi: “Programming yang buruk itu mudah, orang idiot bisa mempelajarinya dalam 21 hari, bahkan jika mereka bodoh”. Konsep satir ini disadur menjadi sebuah komik “Abtruse Goose” berikut ini:


How to Teach Yourself Programming


Mari kita analisa apa arti sebenarnya dari buku dengan judul “Teach Yourself C++ in 24 Hours (Belajar C++ secara mandiri dalam 24 jam)”:


Teach Yourself (Belajar mandiri): Dalam waktu 24 jam, anda tidak akan memiliki cukup waktu untuk membuat program yang layak. Juga tidak akan sempat mengambil pelajaran dari berhasil atau tidaknya program tersebut. Misalnya mengambil kesimpulan dari error yang terjadi.


Anda juga tidak akan memiliki waktu untuk belajar dengan programmer berpengalaman dan memahami seperti apa lingkungan pemrograman C++ yang sebenarnya.


Singkatnya, anda tidak akan bisa belajar banyak. Buku ini hanya akan mengajari kulit luar saja, bukan sebuah pemahaman yang mendalam. Seperti yang dikatakan Alexander Pope: “paham sedikit adalah hal yang berbahaya”.


C++: Dalam 24 jam, anda mungkin bisa belajar tata bahasa (syntax) dari bahasa C++, terutama jika sebelumnya sudah mengenal bahasa pemrograman lain. namun Anda tidak dapat banyak belajar tentang bagaimana menggunakan bahasa tersebut.


Singkatnya, jika Anda, katakanlah, seorang programmer bahasa Basic. Anda bisa belajar menulis program dengan gaya bahasa Basic menggunakan sintaks C ++, namun tidak dapat mempelajari di sisi mana keunggulan dan kelemahan dari bahasa C++ ini.


Jadi, apa gunanya? Alan Perlis pernah berkata “A language that doesn’t affect the way you think about programming, is not worth knowing“, terjemahannya: “Sebuah bahasa yang tidak mengajarkan anda cara berfikir tentang programming, itu tidak layak dipelajari”.


Anda mungkin bisa paham sedikit tentang bahasa C++ (atau juga tentang JavaScript), karena anda harus menggunakan aplikasi tersebut untuk mengerjakan sebuah tugas. Tapi disini anda tidak sedang belajar cara membuat kode program, tapi belajar cara mengerjakan tugas tersebut.


in 24 Hours: Sayangnya, ini tidak akan cukup. Sebagaimana yang akan dijelaskan berikutnya.




Ilustrasi latihan untuk berhasil


Teach Yourself Programming in Ten Years


Ahli riset (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) telah memperlihatkan bahwa butuh sekitar sepuluh tahun untuk mengembangkan keahlian di berbagai disiplin ilmu, termasuk permainan catur, menjadi komposer musik, mengoperasikan telegraf, melukis, bermain piano, berenang, bermain tenis, dan riset di bidang neuropsychology and topology.


Kuncinya adalah deliberative practice. Yang artinya tidak mengulang itu itu saja, tapi menantang diri sendiri dengan hal yang di luar kemampuan yang ada saat ini, mencobanya, menganalisa performa sebelum dan sesudahnya, hingga memperbaiki kesalahan yang dilakukan. Lalu ulangi, dan ulangi lagi.


Tidak ada cara pintas, bahkan Mozart yang dikatakan sebagai jenius di bidang musik sejak usia 4 tahun, butuh 13 tahun lagi sebelum dia bisa menghasilkan musik kelas dunia.


Di bidang lain, the Beatles tampaknya langsung menjadi hits nomor 1 dan tampil di Ed Sullivan show pada tahun 1964. Tapi mereka telah bermain di klub-klub kecil di Liverpool dan Hamburg sejak 1957, dan meskipun mereka sudah cukup lama eksis, kesuksesan pertama baru ada di perilisan Sgt. Peppers pada tahun 1967.


Malcolm Gladwell telah mempopulerkan ide yang serupa, meskipun dia berfokus pada 10.000 jam, bukan 10 tahun. Henri Cartier-Bresson (1908-2004) punya analisis lain: “Your first 10,000 photographs are your worst” (10.000 foto pertama anda adalah yang paling buruk). Dia memang tidak mengantisipasi tren kamera digital, karena beberapa orang bisa mencapai angka itu dalam hitungan minggu.


Untuk menjadi pakar yang sebenarnya bisa butuh seumur hidup. Samuel Johnson (1709-1784) berkata: “Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.” (Menjadi ahli di suatu bidang hanya bisa dicapai dengan kerja seumur hidup, itu bukanlah sesuatu yang bisa dicapai dengan upaya yang lebih mudah).


Chaucer (1340-1400) memprotes bahwa “the lyf so short, the craft so long to lerne.” (Keahlian itu lama untuk dipelajari, tapi hidup ini sangat singkat).


Hippocrates (400 SM) terkenal dengan kutipan “ars longa, vita brevis“, yang mana diambil dari “Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile“, yang diterjemahkan menjadi “Hidup itu singkat, keahlian itu butuh waktu lama, peluang berlalu dengan cepat, eksperimen itu berbahaya, dan pengambilan keputusan itu sulit


Tentu saja, tidak ada angka pasti. Tidak masuk akal untuk mengasumsikan setiap keahlian (seperti programming, catur, puzzle, dan bermusik) butuh waktu yang sama untuk menjadi ahli. Selain itu tiap orang juga butuh waktu yang berbeda untuk bisa menjadi ahli.


Seperti kata professor K. Anders Ericsson: “Dalam setiap bidang, sangat mencengangkan berapa banyak waktu yang harus dicurahkan oleh seseorang (bahkan yang sudah berbakat sekalipun) untuk mencapai performa terbaiknya. Sepuluh ribu jam memberikan kesan bahwa perlu beberapa tahun dengan 10 sampai 20 jam tiap minggu. Namun masih ada yang berpendapat bahwa seharusnya butuh lebih dari itu itu mencapai yang terbaik.


Ilustrasi semangat berjuang belajar programming


Jadi, anda ingin menjadi seorang programmer, ini tips dari saya agar anda bisa menjadi programmer yang sukses:



  • Buat diri anda tertarik dan senang dengan programming. Pastikan itu adalah hal yang menyenangkan sehingga anda mau mencurahkan 10 tahun waktu anda atau 10.000 jam.

  • Buat program tersebut. Cara belajar yang paling efektif adalah dengan melakukannya. Teknisnya, “kemampuan maksimum dari seseorang untuk bidang apa saja tidak didapat hanya dari pengalaman, tapi juga dari kerja keras dan dorongan untuk terus maju. Ini juga berlaku bagi yang paling berpengalaman sekalipun” (p. 366). Serta “Cara belajar yang paling efektif membutuhkan fokus yang jelas dan tingkat kesulitan yang sesuai untuk setiap individu. Masukan yang baik, serta kesempatan untuk mengulang dan memperbaiki kesalahan” (p. 20-21). Buku “Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life” adalah referensi yang pas untuk pendapat ini.

  • Bangun komunikasi dengan programmer lain, baca kode program orang lain. Ini lebih penting daripada buku atau kursus.

  • Jika anda ingin, kuliah di bidang komputer. Ini memberikan anda kesempatan untuk pekerjaan yang butuh ijazah, dan memberikan pemahaman yang lebih dalam tentang bidang tersebut. Tapi jika anda tidak suka sekolah, anda pun bisa (dengan sedikit dedikasi dan fokus) untuk memiliki pengalaman serupa dan mendapatkan pekerjaan. Dalam kedua kasus ini, buku tidak akan cukup. “Kuliah di bidang komputer tidak akan membuat siapapun menjadi programmer yang ahli, sama halnya mempelajari kuas dan cat warna tidak akan membuat seseorang jadi pelukis yang ahli”, ini adalah kata Eric Raymond, penulis dari “The New Hacker’s Dictionary”. Salah satu programmer terbaik yang pernah saya pekerjakan hanya tamat SMA. Dia menghasilkan banyak software bagus, memiliki forum (news group) sendiri, serta memiliki cukup modal dari saham untuk memiliki sebuah cafe.

  • Buat program dengan programmer lain. Jadilah yang terbaik di beberapa bidang dan abaikan bidang lain. Dengan punya skill yang sangat bagus di satu bidang, anda berkesempatan untuk memimpin project dan menginspirasi orang lain. Jika anda jadi anggota tim (untuk bidang lain), pelajari apa yang dilakukan programmer lain, termasuk apa yang mereka tidak suka, karena mereka akan menyuruh anda untuk mengerjakannya.

  • Bekerja di project yang sudah dikerjakan programmer lain. Pahami bagaimana cara membaca kode program yang dibuat oleh orang lain. Lihat cara kerjanya dan perbaiki jika ada yang dirasa kurang. Pikirkan bagaimana caranya agar kode program yang anda buat bisa mudah dikelola oleh orang lain.

  • Pelajari sekitar setengah lusin bahasa pemrograman. Termasuk diantaranya yang butuh class abstractions (seperti Java atau C++), yang fokus ke functional abstraction (seperti Lisp atau ML atau Haskell), yang fokus ke syntactic abstraction (seperti Lisp), yang fokus ke declarative specifications (seperti Prolog atau C++ templates), dan yang menekankan pada parallelism (seperti Clojure atau Go). Ingat bahwa ada kata “computer” (alat hitung – compute) di dalam “Ilmu Komputer”. Pelajari berapa lama komputer anda menjalankan sebuah kode program, termasuk lama waktu untuk mengambil variabel dari memory (tanpa atau dengan “cache miss”), lama pembacaan dari harddisk, serta proses pencarian.

  • Ikut dalam proses standarisasi. Seperti ANSI C++ committee, atau memutuskan coding style (gaya penulisan kode program) bagi komunitas anda, seperti 2 atau 4 spasi untuk indenting. Apapun itu, anda bisa mempelajari apa yang disukai seseorang dari sebuah bahasa pemrograman, seberapa dalam pemahamannya, dan mungkin anda bisa mengetahui alasan dibalik itu.

  • Pelajari hal-hal baru dari sebuah standar bahasa pemrograman secepat mungkin.


Ilustrasi belajar programming dari buku


Dengan poin-poin ini, sangat dipertanyakan apa yang akan anda dapat dari sekedar baca buku. Sebelum anak pertama saya lahir, saya telah membaca semua buku “How To” (Buku tentang bagaimana cara membuat ini, bagaimana cara membuat itu, dst) namun masih seperti pemula yang kebingungan.


30 bulan setelah itu, ketika anak kedua saya lahir, apakah saya kembali ke buku tersebut untuk pengingat? Tidak. Saya mengandalkan pengalaman saya sendiri, dan ini jauh lebih baik daripada ribuan halaman yang ditulis oleh para ahli.


Fred Brooks, dalam tulisannya “No Silver Bullet” mengidentifikasi 3 rencana untuk mencari programmer yang bagus:



  • Sedapat mungkin identifikasi programmer yang bagus dari awal.

  • Berikan mentor atau senior yang bertanggung jawab untuk pengembangan dirinya.

  • Berikan kesempatan untuk berinteraksi dengan programmer lain, serta memberi inspirasi satu sama lain.


Semua ini dengan syarat bahwa beberapa orang sudah memiliki kualitas untuk menjadi programmer yang baik. Kerja kita hanya tinggal membentuknya.


Alan Perlis menekankan lebih jauh lagi: “Setiap orang bisa diajari untuk memahat patung. Michelangelo (seorang pemahat patung terkenal di abad pertengahan) mungkin tidak perlu diajari. Begitu pula para programmer hebat”. Disini Perlis mengatakan bahwa seorang yang hebat memiliki kualitas yang melampaui cara latihannya.


Tapi dari mana kualitas tersebut berasal? Apakah dari bakat atau di dapat dari latihan dengan penuh ketekunan?


Seperti kata Auguste Gusteau (juru masak di film fiksi Ratatouille): “anyone can cook, but only the fearless can be great.” (Setiap orang bisa memasak, tapi hanya yang tidak takut akan menjadi hebat.)


Menurut saya, hal itu (menjadi orang hebat), berasal dari ketekunan dan kemauan untuk mencurahkan waktu latihan. Tapi mungkin tidak takut (fearless) adalah kata untuk menyimpulkannya. Atau seperti kata Anton Ego (kritikus dari masakan Gusteau): “Not everyone can become a great artist, but a great artist can come from anywhere.” (“Tidak semua orang bisa menjadi seniman hebat, tapi seorang seniman hebat bisa datang dari mana saja.”)


Jadi silahkan lanjut dan beli buku Java/Ruby/Javascript/PHP. Kamu mungkin akan menemukan manfaat dari sana. Tapi itu tidak akan merubah hidupmu, atau keahlianmu sebagai programmer dalam 24 jam atau 21 hari. Tapi bagaimana dengan bekerja keras untuk belajar selama 24 bulan? Nah… disana barulah anda bisa mendapat sesuatu.


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.




*** Akhir Artikel Teach Yourself Programming in Ten Years ***




Ilustrasi Teamwork Programming


Artikel diatas memang cukup panjang, namun isinya sangat “mencerahkan”. Intinya, tidak ada jalan instan menuju sukses, semua butuh kerja keras dan perjuangan.


Saya juga menulis beberapa buku tentang programming namun tetap tidak berani mengklaim bisa mahir dalam sekian hari, sekian bulan, bahkan sekian tahun. Jika ada yang curhat ia mulai dari nol dan bertanya kapan bisa sampai ke tahap ahli, saya selalu jawab bahwa itu butuh waktu tahunan dan harus membaca puluhan buku.


Tidak jarang saya malah mengarahkan tidak belajar programming sama sekali karena memang sedang buru-buru. Misalnya jika anda butuh website kantor yang akan dipakai bulan depan, sebaiknya cari jasa programmer untuk membuatkan. Waktunya tidak akan cukup jika ngebut belajar programming. Jika pun bisa, hasilnya tidak maksimal.


Belajar programming juga ada tingkat-tingkatnya. Untuk sekedar “tahu”, dalam beberapa bulan saya rasa sudah bisa dengan membaca beberapa buku. Tapi kalau untuk sampai ke tahap ingin bekerja sebagai programmer professional, itu memang butuh waktu tahunan.


Ibarat bermain sepak bola, dalam beberapa jam saya rasa sudah cukup untuk mengajari seseorang bagaimana aturan dan cara main bola. Tapi jika ingin jadi pesepakbola professional (untuk jadi profesi), jalan yang ditempuh tentu akan lebih panjang.


Artikel ini bukan untuk menakut-nakuti programmer pemula, tapi sekedar membuka mata bahwa tidak mungkin jadi programmer yang ahli dalam waktu singkat. Semua butuh proses, namun jika anda benar-benar suka dengan programming, proses belajar ini akan terasa sangat menyenangkan.


Jika pun anda nanti kesampaian jadi programmer professional, tetap dituntut untuk terus belajar. Misalkan saat ini memutuskan jadi programmer android, siapa yang bisa menjamin 5 tahun lagi android masih ada?


Jadi kita tidak bisa berhenti di sebuah titik. Apabila memutuskan ingin jadi programmer, bulatkan tekad untuk belajar dan terus belajar.



Sumber wk.com


EmoticonEmoticon