Ajar Diri Anda Pengaturcaraan selama 10 Tahun

Photo by Hu Chen on Unsplash

Ajar Diri Anda Pengaturcaraan selama 10 Tahun

Teach Yourself Programming in Ten Years

·

11 min read

Artikel asal: norvig.com/21-days.html

Penterjemah: Ammar Azman

Pembaca pruf: Ilham Nordin

Kenapa semua orang kelam-kabut?

Menapak ke mana-mana toko buku, anda akan lihat buku bertajuk How to Teach Yourself Java in 24 hours bersama lambakan buku yang lain yang menawarkan pembelajaran dalam beberapa hari atau jam untuk C, SQL, Ruby, Algoritma, dan lain-lain. Carian canggih Amazon untuk [title: teach, yourself, hours, since: 2000] telah menjumpai sebanyak 512 buku. Dalam carta sepuluh teratas, sembilan daripadanya adalah buku-buku pengaturcaraan (sebuah lagi tentang pembukuan). Hasil carian yang sama juga terhasil dengan menukar kata kunci "teach yourself" kepada "learn" atau "hours" kepada "days".

Tuntasnya adalah, sama ada semua orang sedang kelam-kabut untuk belajar tentang pengaturcaraan, atau ilmu pengaturcaraan itu kadang-kadang kelihatan terlalu mudah untuk dituntut berbanding hal-hal yang lain. Felleisen et al. bersetuju dengan tren ini dalam buku mereka How To Design Programs, apabila mereka mengatakan, "Pengaturcaraan yang teruk itu mudah. Si bebal mampu mempelajarinya dalam masa 21 hari, walaupun mereka itu bodoh." Dalam komik Abstruse Goose juga mengatakan sedemikian.

Mari kita cerakin apa maksud yang boleh difahami melalui tajuk buku seperti Teach Yourself C++ in 24 hours:

  • Teach Yourself: Dalam masa 24 jam, anda tidak punya masa yang cukup untuk menulis beberapa program yang berkesan dan belajar sesuatu daripada kejayaan dan kegagalan anda melaluinya. Anda tidak punya masa untuk bekerja dengan pengatur cara yang berpengalaman, dan memahami bagaimana hidup dalam suasana dikelilingi C++. Pendek kata, anda tak akan belajar banyak dalam masa yang singkat. Maka, buku ini hanya mampu berbicara tentang perkara-perkara asas, bukannya sesuatu yang mendalam pemahamannya. Sepertimana yang dikatakan Alexander Pope, pelajaran yang singkat itu mengundang nahas.

  • C++ : Dalam masa 24 jam, anda mungkin mampu mempelajari beberapa sintaks C++ (jika anda telah pun mengetahui bahasa lain), namun anda tidak mampu untuk belajar bagaimana cara untuk menggunakan bahasa ini. Pendek kata, jika anda, misalnya, seorang pengatur cara Basic, anda boleh mempelajari untuk menulis program dalam langgam Basic menggunakan sintaks C++, namun anda tidak akan mampu belajar apakah kelebihan (dan kekurangan) C++ itu. Jadi, apa gunanya? Alan Perlis pernah menukilkan, "Sebuah bahasa yang tidak memberi impak langsung kepada cara kamu berfikir dalam pengaturcaraan, tidak berbaloi pun untuk kamu tahu." Mungkin anda kena mempelajari secubit C++ (ataupun sesuatu seperti Javascript atau Processing), kerana anda perlu meggunakan alat yang sudah tersedia untuk menyempurnakan tugas tertentu. Tetapi sayangnya, anda tidak belajar untuk mengatur cara, hanya belajar untuk menyelesaikan tugasan.

  • in 24 Hours: Malang sekali, ini tidak memadai; sebagaimana yang diterangkan dalam bahagian seterusnya.

Ajar Diri Anda Pengaturcaraan Selama Sepuluh Tahun

Penyelidik (Bloom (1985), Bryan & Harter (1998), Hayes (1989), Simmon & Chase (1973)) telah membuktikan bahawa ia akan mengambil masa selama 10 tahun untuk membina seorang pakar dalam apa jua bidang, termasuklah bermain catur, komposisi muzik, operasi telegraf, mengecat, bermain piano, berenang, bermain tenis, dan penyelidikan dalam neuropsikologi, dan topologi. Kuncinya adalah, latihan secara berterusan yang bermatlamat: bukan hanya mengulang dan mengulang, namun mencabar diri dengan tugasan di luar nalar kemampuan, mencuba, menganalisa prestasi semasa dan selepas melakukannya, dan membetulkan kesilapan. Kemudian ulang. Dan ulang lagi. Sepertinya tiada jalan singkat: walaupun Mozart sendiri, seorang prodigi muzik seawal usia 4 tahun, memakan masa 13 tahun sebelum menghasilkan muzik berkelas dunia. Dalam genre lain, kumpulan Beatles seperti muncul secara tiba-tiba dengan sejumlah lagu bercarta #1, dan membuat kemunculan dalam rancangan Ed Sullivan pada tahun 1964. Namun sebelum itu, mereka telah membuat persembahan di kelab-kelab kecil di Liverpool dan Hamburg sejak 1957, dan meskipun mereka mendapat perhatian ramai sejak awal lagi, kejayaan besar mereka yang pertama, Sgt. Peppers, telah diluncurkan pada 1967.

Malcolm Gladwell telah mempopularkan idea ini, walaupun dia memberi penekanan pada 10,000 jam, bukan 10 tahun. Henri Cartier-Bresson (1980-2004) mempunyai metrik berbeza: "10,000 gambar pertama kamu adalah yang terburuk." (Beliau tidak menyangka bahawa dengan kamera digital, sesetengah orang mampu mencapai jumlah gambar tersebut dalam masa seminggu.) Kepakaran yang sebenar mungkin mengambil masa seumur hidup: Samuel Johnson (1709-1784) berkata "Kecemerlangan dalam mana-mana bidang hanya boleh dicapai dengan hasil kerja seumur hidup; ia tidak akan dapat dibeli pada harga yang lebih murah." Chaucer (1340-1400) pula mengeluh, "Hidup terlalu pendek, menjadi pakar mengambil waktu untuk dipelajari." Hippocrates (c. 400 sebelum masihi) dikenali dengan "ars longa, vita brevis" yang merupakan cebisan daripada madah "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", yang mana dalam Bahasa Melayu diterjemah sebagai, "Hidup pendek, belajar banyak, peluang sebentar, eksperimen berliku, penilaian sukar." Sudah tentu, tiada nombor tunggal yang boleh menjadi jawapan akhir: tidak munasabah untuk diandaikan bahawa semua kemahiran (misalnya, pengaturcaraan, bermain catur, bermain dam, bermain muzik) mampu digapai dengan jumlah waktu yang sama untuk menjadi mahir, atau diandaikan bahawa semua orang akan mengambil waktu yang sama untuk menggapainya. Sepertimana yang dikatakan Prof. K, Anders Ericsson, "Dalam kebanyakan domain, luar biasa benar, betapa banyak masa yang diperlukan untuk mencapai prestasi pencapaian tertinggi, walaupun oleh individu yang paling berbakat. Nombor 10,000 jam hanya memberi satu anggaran bahawa kita sedang berbicara tentang 10 hingga 20 jam seminggu, buat bertahun-tahun lamanya; tahun-tahun yang dikatakan perlu dicapai, meskipun mereka yang semula jadinya, paling berbakat."

Jadi Anda Mahu Jadi Pengatur Cara

Berikut adalah resepi saya dalam kejayaan pengaturcaraan:

  • Harus ada minat dalam pengaturcaraan, juga buatlah sesetengahnya kerana rasa seronok. Pastikan ia kekal dan cukup seronok agar anda rela hati untuk berkorban selama 10 tahun/10,000 jam.

  • Mengatur cara. Cara pembelajaran yang paling baik adalah belajar sambil buat. Secara teknikalnya, "Prestasi aras maksimum setiap individu dalam setiap domain tidak akan diperoleh secara automatik hasil daripada pengalaman yang panjang, namun aras prestasi boleh ditingkatkan, walaupun individu tersebut berpengalaman tinggi, hasil usaha yang bermatlamat untuk menambah baik." (p.366) dan "pembelajaran paling efektif memerlukan tugasan dengan definisi yang jelas bersama kesukaran yang bersesuaian untuk individu tertentu, maklum balas berinformasi, dan peluang untuk mengulangi dan membetulkan ralat." (p. 20-21). Buku Cognition in Practice: Mind Mathematics, and Culture in Everyday Life merupakan rujukan yang menarik untuk sudut pandang ini.

  • Bercakap dengan pengatur cara lain; baca program orang lain. Ini lebih mustahak daripada membaca mana-mana buku atau kursus latihan.

  • Jika anda mahu, luangkan 4 tahun di kolej (atau lebih, di sebuah universiti). Ini akan memberikan anda akses kepada sesetengah pekerjaan yang memerlukan tauliah, dan ini akan memberikan anda pemahaman yang mendalam dalam bidang ini, namun, jika anda tidak menikmati sekolah, anda boleh (dengan sedikit dedikasi) mendapatkan pengalaman yang sama, secara sendiri atau dengan cara bekerja. Dalam apa jua keadaan, membaca buku tidak akan pernah memadai. "Pembelajaran sains komputer tidak akan menjadikan sesiapa pakar pengatur cara sebagaimana mempelajari berus dan pigmen tidak akan menjadikan seseorang pakar pelukis." kata Eric Raymond, penulis The New Hacker's Dictionary. Salah seorang pengatur cara terbaik yang pernah bekerja dengan saya hanya mempunyai lulusan sekolah menengah; dia telah menghasilkan pelbagai perisian yang baik, mempunyai kumpulan akhbarnya tersendiri, dan cukup berharta dengan stok saham untuk membeli kelab malamnya sendiri.

  • Ceburkan diri dalam projek dengan pengatur cara lain. Jadi pengatur cara terbaik dalam sesetengah projek, jadi yang paling teruk dalam sesetengah yang lain. Bila anda merupakan yang terbaik, anda mampu menguji kemampuan anda untuk mengetuai projek tersebut, dan menginspirasi orang lain dengan visi anda. Bila anda yang paling teruk, anda akan belajar apa yang dilakukan oleh mereka yang mahir, dan anda akan belajar apa yang mereka tidak suka lakukan (kerana mereka menyuruh anda lakukan perkara itu untuk mereka!)

  • Ceburkan diri dengan projek pasca pengatur cara lain. Fahamkan program yang ditulis oleh orang lain. Lihat bagaimana untuk memahami dan membaikinya apabila pengatur cara asal tidak berada di sekeliling. Fikir tentang bagaimana untuk menggubah program untuk menjadikan ia lebih mudah untuk mereka yang akan mengekalkannya selepas anda.

  • Belajar sekurang-kurangnya enam bahasa pengaturcaraan. Masukkan bahasa yang mementingkan pengabstrakan (seperti Java atau C++), satu yang mementingkan pengabstrakan fungsi (seperti Lisp, ML, atau Haskell), satu yang menyokong pengabstrakan sintaktik (seperti Lisp), satu yang menyokong spesifikasi deklaratif (seperti Prolog atau templat C++), dan satu yang mementingkan paralelisme (seperti Clojure atau Go).

  • Ingat bahawa adanya "komputer" dalam "sains komputer". Ketahui masa yang diambil untuk komputer anda menjalankan arahan, mendapatkan perkataan daripada memori (dengan dan tanpa cache miss), membaca perkataan berturutan daripada cakera, dan mencari lokasi baru pada cakera. (Jawapan disini)

  • Libatkan diri dengan usaha pempiawaian bahasa. Sama ada dengan jawatankuasa ANSI C++, atau menetapkan cara pengekodan anda mempunyai 2 atau 4 aras ruang perenggan. Dengan apa cara pun, anda akan belajar mengenai kegemaran orang lain dalam bahasa, sedalam mana perasaan mereka tentangnya, dan mungkin juga sedikit tentang sebab-sebab mereka rasa sedemikian.

  • Mempunyai firasat yang baik untuk keluar daripada usaha pempiawaian bahasa secepat mungkin.

  • Dengan segala yang di atas, sejauh mana anda mampu belajar hanya melalui buku menjadi sebuah keraguan. Sebelum kelahiran cahaya mata pertama saya, saya telah membaca kesemua buku How To, dan masih rasa seperti seorang pemula yang dangkal. 30 bulan kemudian, sementara menanti kelahiran cahaya mata kedua, adakah saya kembali kepada buku-buku tersebut sebagai ulang kaji? Tidak. Malah, saya bergantung pada pengalaman peribadi, yang terbukti lebih berguna dan lebih meyakinkan saya berbanding beribu muka surat tulisan pakar-pakar.

Fred Brooks, dalam bukunya No Silver Bullet mengenal pasti rancangan 3 bahagian untuk mencari pereka perisian terbaik:

  1. Mengenal pasti pereka terbaik secara sistematik, seawal yang mampu.

  2. Meletakkan seorang mentor karier yang bertanggungjawab membangunkan prospek dan menyimpan fail karier secara teliti.

  3. Menyediakan peluang bagi pereka yang sedang bertumbuh untuk berinteraksi dan merangsang satu sama lain.

Ini dengan andaian bahawa sesetengah orang telah pun mempunyai kualiti yang diperlukan untuk menjadi pereka yang baik, yang tinggal hanyalah memujuk mereka untuk kerja bersama. Alan Perlis mengatakannya dengan lebih ringkas, "Semua orang boleh diajar untuk mengukir: Michelangelo sepatutnya diajar bagaimana untuk tidak mengukir. Begitu jugalah dengan pengatur cara yang hebat." Perlis mengatakan yang kecemerlangan itu hadir daripada kualti dalaman yang terpancar dengan latihan. Namun, daripada manakah kualiti itu datang? Adakah secara semula jadi? Atau mereka membangunkannya dengan kerajinan? Sepertimana kata Auguste Gusteau (chef fiksyen dalam Ratatouille), "Semua orang boleh memasak, tetapi hanya yang berani akan cemerlang." Saya memandangnya lebih kepada kerelaan hati untuk menumpukan sebahagian besar kehidupan seseorang kepada latihan yang bermatlamat. Mungkin, berani adalah cara untuk mengatakannya dengan ringkas. Atau, seperti kata pengkritik Gusteau, Anton Ego: "Tidak semua orang boleh menjadi artis yang hebat, namun artis yang hebat boleh hadir daripada mana-mana."

Maka, pergilah beli buku Java/Ruby/Javascript/PHP itu; anda mungkin akan beroleh sedikit manfaat daripadanya. Namun, anda tidak akan mengubah hidup anda, atau keseluruhan kemahiran sebenar anda sebagai pengatur cara dalam masa 24 jam atau 21 hari. Bagaimana kalau anda bekerja keras dengan tekal untuk menambah baik selama 24 bulan? Mungkin lepas itu ada progres yang boleh dilihat.


Apendiks: Pemilihan Bahasa

Beberapa orang telah bertanya apakah bahasa pengaturcaraan yang mereka harus belajar dahulu. Tiada jawapan yang tetap, namun timbangkan hujah-hujah berikut:

  • Gunakan rakan anda. Apabila ditanya, “Apa sistem pengoperasian yang sepatutnya saya guna, Windows, Unix, atau Mac?” jawapan saya biasanya, “Guna apa sahaja yang rakan anda guna.” Kelebihan yang anda akan dapat dengan pembelajaran daripada rakan-rakan, akan membuatkan perbezaan intrinsik antara sistem operasi atau antara bahasa pengaturcaraan menjadi kecil. Juga pertimbangkan rakan-rakan anda di masa depan: komuniti pengatur cara yang anda akan turut bersama jika anda masih mengatur cara. Adakah anda memilih bahasa yang mempunyai komuniti yang berkembang, atau yang kecil dan sedang nazak? Adakah terdapat buku, laman sesawang, dan forum dalam talian untuk mendapatkan jawapan? Adakah anda suka orang-orang di dalam forum-forum tersebut?

  • Ringkaskan. Bahasa pengaturcaraan seperti C++ dan Java direka untuk pembangunan professional oleh pengatur cara berpengalaman dalam sebuah kumpulan besar di mana mereka cakna mengenai kecekapan “run-time” dalam kod mereka. Hasilnya, bahasa-bahasa ini mempunyai bahagian-bahagian rumit yang direka khas untuk keadaan tertentu. Anda mahu mempelajari pengaturcaraan. Anda tidak perlukan kerumitan itu. Anda mahukan bahasa yang rekaannya mudah untuk dipelajari dan diingati oleh setiap pengatur cara baharu.

  • Bermain. Cara mana yang anda mahu untuk pembelajaran piano, secara normal dan interaktif, di mana anda mendengar setiap not sejurus selepas anda menekan kekunci; atau mod "kumpulan", di mana anda hanya akan mendengar not selepas keseluruhan lagu tamat? Jelaslah, mod interaktif membuatkan pembelajaran lebih mudah untuk piano, dan juga pengaturcaraan. Pilih bahasa dengan mod interaktif dan gunakannya

Berdasarkan kriteria ini, cadangan saya untuk bahasa pengaturcaraan pertama seharusnya Python atau Scheme. Pilihan lain adalah Javascript, bukan sebab ia direka dengan baik dan sempurna untuk pemula, tetapi kerana terdapat banyak tutorial dalam talian, seperti tutorial Khan Academy. Namun, situasi anda mungkin berbeza, dan terdapat pilihan lain yang lebih baik. Jika umur anda adalah nombor tunggal, anda mungkin lebih suka Alice atau Squeak atau Blockly (pelajar lama juga mungkin gemarkan yang ini). Paling utama adalah anda pilih, dan mula.


Apendiks: Buku dan Sumber-sumber Lain

Beberapa orang telah bertanya daripada buku dan laman sesawang apa yang mereka harus belajar. Saya ulang, “buku sahaja tidak mencukupi”, tapi saya akan mencadangkan berikut:

  • Skema: Structure and Interpretation of Computer Programs (Abelson & Sussman) berkemungkinan merupakan pengenalan terbaik untuk sains komputer, dan ia mengajarkan pengaturcaraan sebagai satu cara memahami sains komputer. Anda boleh lihat syarahan dalam talian tentang buku ini, dan juga teks lengkapnya. Buku ini mencabar dan akan menyingkirkan beberapa orang yang mungkin akan berjaya dengan pendekatan berbeza.

  • Skema: How to Design Programs (Felleisen et al.) adalah salah satu buku terbaik berkaitan perekaan atur cara dengan cara yang berfungsi dan anggun.

  • Python: Python Programming: An Intro to CS (Zelle) adalah bagus untuk pengenalan menggunakan Python.

  • Python: Beberapa tutorial dalam talian berada di Python.org.

  • Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi) dilihat oleh beberapa orang hari ini sebagai pengganti Abelson & Sussman. Ia sebuah perjalanan menyusuri idea-idea besar pengaturcaraan, melingkupi julat yang lebih luas berbanding Abelson & Sussman tetapi lebih mudah untuk dibaca dan diikuti. Ia menggunakan satu bahasa, Oz, yang tidak digunakan secara meluas namun menyediakan asas untuk mempelajari bahasa-bahasa lain.


Nota

T.Capey menyatakan yang muka Complete Problem Solver di Amazon sekarang mempunyai buku "Teach Yourself Bengali in 21 days" dan "Teach Yourself Grammar and Style" di bawah bahagian “pelanggan yang membeli barangan, juga membeli barangan ini”. Saya merasakan sebagian besar orang yang melihat buku itu datang daripada muka surat ini. Terima kasih Ross Cohen untuk bantuan bagi Hippocrates.