- Pendidikan formal berguna untuk menyampaikan keterampilan secara efisien, tetapi memiliki batasan dalam mengembangkan intuisi untuk menyelesaikan masalah yang tak terduga
- Trial-and-error berulang yang disengaja (algoritme) adalah faktor yang paling meningkatkan keterampilan karena melalui proses gagal dan memperbaiki langsung di situasi nyata
- Dalam contoh nyata, berbagai tokoh seperti Linus Torvalds dan Margaret Hamilton mengalami kegagalan lalu mengatasinya, hingga membangun kemampuan yang luar biasa
- Mentoring adalah akselerator yang penting, tetapi inti pertumbuhan pada akhirnya adalah eksperimen yang digerakkan sendiri dan pengalaman langsung
- Eksperimen berorientasi tujuan dengan menghadapi masalah secara langsung dan belajar dari benturan adalah fondasi peningkatan kemampuan yang sesungguhnya
Kekuatan yang Membentuk Insinyur Perangkat Lunak Terbaik: Trial-and-Error yang Disengaja
Mitos Kelas
- Pendidikan formal unggul dalam transfer pengetahuan yang bernilai, tetapi prosesnya dioptimalkan agar sesuai untuk skala besar
- Pengalaman kerja nyata yang kompleks diringkas ke dalam prosedur yang telah dipoles, lalu disampaikan dalam bentuk yang bisa diselesaikan dalam satu semester
- Dalam proses ini, keterampilan dasar yang dibutuhkan untuk pekerjaan nyata memang bisa dipelajari, tetapi ada batas dalam membangun kemampuan untuk menyelesaikan masalah secara intuitif saat menghadapi krisis tak terduga
- Terutama ketika masalah layanan nyata muncul pada pukul 3 pagi, resep yang dipelajari di kelas saja tidak cukup untuk menyelesaikannya
Pertumbuhan Nyata dengan Belajar dari Benturan Langsung
Praktik Terbaik
- Linus Torvalds menciptakan Linux dengan menulis ulang MINIX
- Margaret Hamilton di proyek Apollo memperbaiki masalah kode secara langsung dalam waktu nyata, dan dari sana melahirkan konsep reliabilitas modern
- Banyak maintainer open source juga berkembang dengan merusak laptop mereka sendiri lalu memperbaikinya kembali
- Mereka tidak lebih dulu mengikuti kuliah berurutan; justru kegagalan dan dampak nyata yang ditimbulkannya membuat mereka memperoleh kemampuan yang mendalam
Mengapa Trial-and-Error Lebih Unggul daripada Resep
- Loop umpan balik terjadi seketika. Menganalisis crash dari log memberikan pembelajaran yang jauh lebih cepat daripada kuis
- Edge case muncul secara alami di lingkungan nyata, sehingga kita bertemu kasus penggunaan yang bahkan tidak dibayangkan oleh buku ajar
- Masalah yang berhasil dipecahkan dengan susah payah akan tertanam kuat dalam ingatan. Ia menjadi memori otot
- Saat tidak ada panduan yang tersedia, kreativitas meledak dan bekerja maksimal
Meninjau Ulang Mentorship: Pelengkap, Bukan Pengganti
- Mentor yang baik mempercepat umpan balik dan memperluas wawasan, tetapi pada akhirnya subjek utama dari eksperimen dan pengalaman tetap diri kita sendiri
- Code review bernilai karena membagikan hasil eksperimen, tetapi tidak menggantikan pengalaman langsung
Menumbuhkan Kebiasaan Eksperimen Mandiri
- Mencoba side project yang membuat diri sendiri sedikit tidak nyaman
- Mengukur semuanya agar saat gagal tersedia data yang bisa dianalisis
- Memberi batasan seperti pembatasan framework atau harus selesai dalam 48 jam untuk melatih kemampuan solusi yang kreatif
- Mempublikasikan kode agar mendapatkan validasi dari luar
- Menulis retrospektif mingguan untuk mencatat penyebab kegagalan dan pelajaran yang didapat
Ringkasan
- Mentorship, kursus, blog, dan sejenisnya berperan sebagai akselerator, tetapi kemampuan sejati dibangun dalam proses benturan keras di lapangan
- Insinyur terbaik mencapai pemecahan masalah nyata dan pertumbuhan melalui pengulangan trial-and-error yang bebas namun disengaja
- Pengalaman yang diperoleh dalam proses ini menjadi aset terbesar bagi diri sendiri di masa depan
1 komentar
Opini Hacker News
Saya sendiri adalah pengembang otodidak, dan menghabiskan sebagian besar karier saya di perusahaan besar bersama rekan-rekan berlatar belakang CS.
Dari pengalaman saya, pengembang otodidak, jika cukup cerdas, pada akhirnya akan menemukan cara menyelesaikan masalah yang diberikan.
Lulusan CS sering kali bahkan tidak mencoba ketika berhadapan dengan domain yang benar-benar asing bagi mereka (tentu ada variasi tergantung watak, tapi menurut saya ini berlaku pada sekitar 85%).
Mereka sulit melangkah di hadapan ketidakpastian yang tinggi.
Pada akhirnya, lulusan CS lebih cocok dengan lingkungan perusahaan besar, bekerja mengikuti pola seperti roda gigi yang bisa diganti.
Pengembang otodidak selalu berinovasi, bekerja untuk mengurangi pengulangan yang tidak efisien, dan sikap orisinal seperti ini sering membuat orang di sekitarnya gelisah.
Namun justru orang-orang otodidak seperti ini menghasilkan hasil yang jauh lebih baik.
Kebanyakan pengembang tampaknya lebih mementingkan mempertahankan pekerjaan dan mengurangi kecemasan daripada menulis kode yang benar-benar hebat.
Banyak insinyur dengan pendidikan formal juga sangat proaktif dalam memecahkan masalah baru.
Ini lebih merupakan soal karakter—rasa ingin tahu, ketekunan, kreativitas, kecerdasan—daripada isu otodidak vs pendidikan formal.
Orang otodidak harus memiliki sifat-sifat itu agar bisa berhasil, jadi mungkin karena itu sifat tersebut terlihat lebih kuat dalam kelompok itu.
Jika seorang insinyur berpendidikan formal juga memiliki sifat-sifat itu, sering kali mereka cenderung lebih unggul daripada siapa pun dari kedua kelompok.
Mungkin perbedaan terbesar justru ada pada kepribadian.
Saya sebagai pengembang otodidak seperti ini mengandalkan ketekunan.
Saya tidak terlalu bagus melihat 'gambaran besar' secara teknis, tetapi sebagai gantinya saya berusaha menghasilkan output terbanyak di tim.
Saya membuat sampai tiga prototipe hanya dalam beberapa hari lalu mengujinya langsung di lapangan.
Rekan-rekan lulusan CS membuat desain sekali di whiteboard lalu hanya menulis kode sekali.
Kedua pendekatan itu tidak pernah benar-benar dicoba pada pekerjaan yang sama, jadi sulit mengatakan mana yang hasilnya lebih baik.
Di kepala saya, cara saya terasa sebagai cara yang sudah 'teruji di lapangan'.
Memang benar pendekatan CS dipandang lebih ideal.
Namun saya juga merasa banyak belajar berkat mentoring dari insinyur lulusan CS.
Setelah sekitar 10 tahun pengalaman industri, pada akhirnya semua orang jadi mirip terlepas dari titik awalnya, dan intuisi tentang 'jawaban yang benar' pun mulai serupa.
Mungkin saya agak melebih-lebihkan atau menggeneralisasi, jadi saya berharap orang lain bisa melengkapi lewat balasan.
Saya setuju sebagian.
Sebagian besar kurikulum CS memang cukup jauh dari praktik kerja nyata, jadi ijazah bukan indikator kemampuan yang langsung akurat.
Tapi saya sama sekali tidak bisa setuju bahwa 85% lulusan CS tidak mampu memecahkan masalah yang asing.
Jika ada keutamaan dari gelar CS, itu adalah bahwa jalur tekniknya mencakup mata kuliah yang sangat berat dan menuntut kapasitas intelektual tinggi.
Sulit membayangkan orang yang sanggup melewati begitu banyak mata kuliah seperti itu justru tidak mampu dalam pengembangan perangkat lunak nyata.
Kalau masuk ke area pengembangan yang benar-benar sulit, justru banyak orang di sana punya gelar lanjutan CS.
Saya rasa sifat seperti itu muncul dari minat yang mendalam terhadap software, dan di antaranya tentu banyak yang berlatar belakang CS.
Dalam pengalaman saya, orang otodidak tersaring secara alami.
Artinya, orang otodidak yang bahkan tidak bisa menyelesaikan masalah asing memang tidak akan pernah direkrut.
Lulusan pendidikan formal biasanya rata-rata atau di atas rata-rata, tetapi tidak selalu luar biasa.
Orang yang memahami semuanya sendiri dan sekaligus lolos validasi pendidikan universitas benar-benar menunjukkan daya tempur kerja yang sangat kuat.
Menurut saya inti masalahnya bukan cara belajar, melainkan 'gairah'.
Kalau motivasinya lemah, apa pun metode belajarnya batasannya akan jelas.
Topik ini juga sulit dibahas secara kuantitatif.
Pendidikan formal bisa membangun fondasi konsep dasar yang kokoh (matematika, hardware, OS, compiler, dan sebagainya).
Belajar mandiri cenderung berorientasi tujuan, jadi bisa saja mengabaikan dasar-dasarnya.
Saat kita bahkan tidak tahu apa yang belum kita tahu, memiliki mentor yang baik (profesor, buku yang bagus) bisa sangat menghemat waktu.
Banyak insinyur, termasuk saya, menjalani pembelajaran formal sekaligus informal.
Kalau punya gairah, kita akan terus membuat sesuatu sendiri, dan bereksperimen di luar pembelajaran formal.
Yang benar-benar membedakan insinyur hebat bukanlah cara pendidikannya, melainkan gairah yang jelas.
Contoh seperti Linus dan Margaret pun pada akhirnya adalah orang-orang dengan hasrat belajar yang luar biasa.
Saya juga sangat setuju sebagai programmer otodidak.
Saya belajar sendiri sejak era komputer 8-bit tahun 80-an, dan tidak pernah kuliah.
Saat mendapat pekerjaan pemrograman formal pertama pada usia 19, saya sudah 9 tahun menekuni pemrograman.
Saat kebanyakan orang lulus universitas, saya sudah hampir 15 tahun menulis kode.
Menurut saya gairah dan dorongan seperti itu sulit diabaikan.
Bahkan sekarang pun, setelah hampir 40 tahun, saya masih menikmati software dengan semangat yang sama.
Proses membuatnya sendiri menyenangkan, saya terus membaca paper, mengikuti perkembangan industri, dan masih menulis sangat banyak kode.
Hanya saja, saya agak menyayangkan anggapan bahwa orang otodidak pasti lemah di fundamental.
Faktanya, banyak orang otodidak juga mendalami sisi akademis dengan sangat serius—tergantung bidangnya.
Mungkin waktu untuk belajar mendalam memang kurang, tetapi setelah puluhan tahun pengalaman, justru ada banyak kasus di mana fundamental mereka lebih tebal daripada orang yang hanya pernah sekolah.
Saya juga sudah banyak merekrut dan memberhentikan orang, dan cukup sering orang otodidak menghasilkan hasil yang lebih baik.
Pada akhirnya mereka jauh lebih banyak 'jam terbang'—gairah mendorong total volume belajar.
Bagian "saat kita tidak tahu bahwa kita tidak tahu, ada orang yang membimbing secara efisien" itu sangat saya rasakan.
Saya sendiri kasus yang berada di antara formal dan informal.
Saya tidak pernah mengambil matematika diskrit tingkat lanjut atau aljabar linear, jadi latar belakang pengetahuan saya banyak bolongnya.
Saya bahkan tidak tahu kata kunci apa yang harus dicari.
Untuk beberapa bidang, benar-benar perlu ada orang yang membimbing.
Di usia akhir 30-an, mencari tutor yang bisa memverifikasi program matematika vektor pun sangat sulit.
Gairah memang mendorong pembelajaran mandiri, tetapi di lingkungan kelas selalu ada orang yang menjaga kita tetap berada di jalur, jadi mungkin kebutuhan akan gairah tidak sebesar itu.
Dan selain belajar mandiri yang 'berorientasi tujuan', ada juga orang otodidak yang tujuannya memahami prinsip kerja sistem itu sendiri.
Walaupun ada orang yang memaksa membawamu ke tepi air, itu tidak berarti kamu tidak pernah pergi ke sana sendiri.
Saya rasa perbedaan yang konsisten adalah semua orang otodidak setidaknya pernah sekali mencapai tepi air dengan usahanya sendiri.
Saya tipe campuran formal + otodidak.
Saya mengambil banyak kelas universitas, tetapi tidak lulus karena tidak berhasil dalam ujian.
Fakta bahwa saya bisa mempelajari sisanya sendiri dimungkinkan karena kelas-kelas itu sudah lebih dulu membangun fondasinya.
Menurut saya kelas universitas itu luar biasa.
Kalau tidak tahu apa-apa, saya tak akan pernah secara spontan menggali sendiri hal-hal seperti socket API di C, proyek bash, sistem terdistribusi, struktur data, atau algoritma.
Saya benar-benar sudah mewawancarai banyak orang otodidak atau lulusan bootcamp, dan mereka cenderung hanya mendalami area yang sudah familiar bagi mereka atau mudah runtuh saat diberi pertanyaan akademis.
Sebaliknya, orang yang kuliah tapi tidak pernah benar-benar banyak menulis kode juga sangat lemah, dan bahkan saat masih kuliah pun mereka melupakan semua yang dipelajari sebelumnya.
Menurut saya kombinasi terbaik adalah sudah mencoba coding sampai tingkat tertentu sebelum masuk universitas.
Harus ada pengalaman susah payah menabrak masalah sendiri agar solusi teoritis dan elegan yang diperkenalkan di kelas benar-benar menjadi milikmu.
Semakin sering seseorang pernah dibuat sengsara oleh kesalahan manajemen memori seperti RAII, semakin dalam ia bisa menghargai konsep seperti itu.
Lulusan bootcamp dan orang otodidak harus dipisahkan.
Tentu ada orang hebat dari bootcamp juga, tetapi banyak yang saya kenal memilih bootcamp sebagai alternatif yang lebih murah setelah merasa tidak bisa belajar sendiri lalu hendak pergi ke universitas atau bidang lain.
Dulu tidak ada bootcamp, dan saya juga menjauh dari kursus online atau metode belajar tradisional.
Saya ingin membuat sesuatu yang keren, dan terasa lebih seru memecahkan masalah secara mandiri daripada mencoba lagi dengan sekadar mengikuti buku teks.
Alasan saya belajar C sendiri saat masih kecil juga karena ada hal yang tidak bisa saya lakukan dengan materi atau kode yang sudah ada, dan saya sangat menginginkan hasil yang keren, jadi saya tidak punya pilihan selain menjelajahi forum, membaca dokumentasi, dan mencapainya lewat trial and error.
Menurut saya, yang lebih penting daripada metode belajar adalah keinginan yang kuat untuk belajar.
Sebelum kuliah saya sudah mahir C dan socket API, serta punya pengalaman mengirimkan software.
Saya juga punya teman yang sudah menghasilkan uang dari menjual game untuk C64 saat SMA.
Kami berdua jauh lebih unggul daripada mahasiswa baru dalam kemampuan coding praktis.
Yang kurang dari saya adalah sisi teori seperti kalkulus, aljabar linear, matematika diskrit, dan kadang saya juga belum tahu struktur data atau algoritma tertentu.
Program CS memang menutup celah-celah itu, tetapi tidak meningkatkan kemampuan coding saya sendiri.
Mata kuliah pemrograman sama sekali tidak sulit bagi saya, yang berat justru pelajaran matematika dan teori.
Program CS membuat saya jadi insinyur yang lebih seimbang, tetapi bukan pengembang yang lebih baik.
Dulu saat masa kuliah saya, suasana jurusan CS justru kebalikan dari kelebihan kampus yang sekarang sering dibicarakan.
Karena alasan-alasan itulah saya tidak memilih jurusan CS di universitas (sekarang saya pengembang senior di perusahaan teknologi AS), dan saat itu, meski kampus tersebut universitas elite yang hanya menerima nilai tertinggi, tingkat kegagalan, pengangguran, dan suasana fakultasnya termasuk yang terburuk.
Tentu ada orang yang memperoleh banyak dari universitas, tetapi kenyataannya tidak selalu begitu.
Banyak lulusan CS yang saya temui di dunia kerja sangat kesulitan dalam komunikasi, memahami bisnis, dan memprioritaskan pekerjaan.
Banyak juga yang hanya bisa menulis kode (itu pun tidak terlalu bagus), dan justru jarang ada orang yang benar-benar siap sepenuhnya untuk kerja nyata hanya dari satu program CS universitas.
Bahkan saya rasa metode kuliah universitas itulah contoh klasik tetap berada di 'zona nyaman'.
Kita juga harus mengakui bahwa akses dan biaya kuliah universitas sendiri merupakan persoalan kelas sosial dan ekonomi.
Dan ada juga orang otodidak yang benar-benar sudah cukup banyak mencoba hal seperti socket API, proyek bash, dan sebagainya.
Sebagai catatan, orang otodidak dan lulusan bootcamp adalah tipe yang sama sekali berbeda.
Saya mungkin runtuh dalam situasi tertentu yang dipaksakan dari luar (misalnya wawancara ala audisi), tetapi saat sendirian saya bisa menyelesaikan masalah nyata dengan baik.
Mungkin terdengar agak boomer, tapi saya juga berasal dari generasi ketika kampus dulu benar-benar bagus.
Kami pernah membuat compiler, toy OS, antarmuka GPS, dan sebagainya.
Beberapa tahun lalu saya diundang mengajar sebagai profesor di kampus lain, dan saya sangat kecewa.
Kurikulumnya terasa seperti bootcamp zaman sekarang yang diperpanjang beberapa tahun lalu ditambahi mata kuliah yang nyaris tidak relevan.
Fundamentalnya hampir tidak ada; selain mata kuliah algoritma, isinya hampir semua React dan framework yang sedang populer di startup lokal.
(Edit: ketika saya melihat kurikulum aslinya, ternyata memang ada kelas bisnis, manajemen, humaniora, kimia, lingkungan, kewirausahaan, dan e-sports.)
Rasanya banyak upaya dicurahkan untuk berdamai dengan ketiadaan pendidikan diri sendiri.
Ada orang otodidak yang hebat, dan ada pemegang gelar yang tidak terlalu cerdas, tetapi dari pengalaman saya sendiri, saya pikir memiliki gelar CS akan lebih membantu jalan hidup saya.
CS pada dasarnya bukan cuma coding, dan seperti ME (teknik mesin), tiap profesi punya harapan dan peran yang berbeda.
Insinyur mesin juga kalah jauh dari montir dalam memperbaiki hal-hal kecil seperti kebocoran oli mobil atau ban bocor.
Tetapi itu bukan alasan untuk meremehkan gelar teknik.
Di awal karier saya juga pernah turun langsung di lantai pabrik, tangan berlumur oli, memecahkan hal-hal yang bahkan teknisi tidak bisa benahi, tetapi itu lebih karena selera pribadi dan rasa ingin tahu saya.
Alasan orang otodidak sering menghasilkan performa yang unggul adalah karena mereka memang orang-orang yang cukup termotivasi, penuh gairah, dan punya inisiatif diri sampai menjadi otodidak.
Pada akhirnya, kalau seseorang punya rasa ingin tahu, fokus, dan disiplin, dia akan berada di atas rata-rata baik lewat jalur formal maupun informal.
Ada juga survivorship bias—yang kita lihat hanyalah kasus orang otodidak yang benar-benar bertahan di lapangan.
Sebaliknya, orang otodidak yang gagal mungkin akan lebih baik hasilnya jika mendapat pengajaran yang layak.
Saya sendiri menikmati pendidikan CS dan matematika, tetapi secara kerangka belajar saya justru merasa belajar mandiri lebih cocok untuk saya.
Kata 'sering' hanyalah ungkapan untuk membungkus ketidakjelasan.
Saya adalah pengembang perangkat lunak sekaligus pengajar CS di universitas.
Kesamaan pada insinyur yang benar-benar sukses pada akhirnya adalah 'ketertarikan' dan 'gairah'.
Orang otodidak tentu sangat tertarik pada bidang itu, jadi motivasinya sendiri sudah terverifikasi.
Pemegang gelar lebih campuran—ada yang murni mengejar ijazah, sehingga mereka hanya tahu istilah teoretis dan sulit dibedakan kemampuan nyatanya.
Orang otodidak pada dasarnya adalah orang yang memiliki motivasi dan minat yang cukup kuat untuk keluar dari sistem yang ada dan belajar sendiri.
Bayangkan pengetahuan sebagai lingkaran di atas papan.
https://matt.might.net/articles/phd-school-in-pictures/
Lingkaran yang dipelajari di universitas ternyata sangat sempit dan umumnya kurikulumnya sama.
Misalnya, tidak ada waktu untuk mengajarkan algoritma dmc (yang dipakai dalam algoritma kompresi terbaik).
Sebagai gantinya, semua orang hanya mengulang kurikulum umum yang seragam.
Tetapi ada orang-orang yang melangkah keluar dari lingkaran itu.
Orang seperti itulah programmer terbaik di industri—mereka bahkan mengenal algoritma langka yang biasanya hanya muncul di paper, sehingga menunjukkan kemampuan yang berbeda dari yang lain.
Hal yang sama berlaku untuk orang otodidak; mereka bisa memiliki celah pengetahuan pada lingkaran umum yang dipelajari semua orang, sehingga sering kali mereka berangkat dari motivasi diri dan kerendahan hati.
Namun lingkaran pengetahuan yang mereka miliki dibangun secara organik oleh gairah.
Saya rasa gairah inilah sinyal terbaik untuk memprediksi performa insinyur.
Dengan kata lain, 'orang yang sudah menunjukkan kemampuan untuk secara mandiri menentukan apa yang perlu dipelajari, lalu benar-benar mempelajarinya, akan unggul dalam pekerjaan yang menuntut kemampuan seperti itu.'
Torvalds pada saat merilis versi pertama Linux pada 1991 sebenarnya hampir belum mendapat pendidikan CS secara khusus.
Saya juga setuju.
Dalam program sarjana kami juga ada tugas menulis OS multiproses langsung dalam assembly 68K.
Berkat pengalaman seperti itu, jauh lebih mudah bagi kami memahami struktur dan prinsip kerja kernel Linux.
Kalau bahkan tidak tahu apa itu kernel, kami tidak akan bisa mulai sama sekali.
Belakangan ini saya sedang mencoba belajar sendiri masalah analisis numerik yang belum pernah saya tangani sebelumnya (membuat sparse LU solver).
Materi yang paling berguna bukan mengimplementasikan semuanya langsung atau membongkar kode solver yang sudah ada, melainkan catatan kuliah yang membahas topik terkait.
Dengan melihat keseluruhan kuliahnya, saya juga jadi memahami konsep-konsep terkait yang sebelumnya tidak saya ketahui.
Di bidang lain juga sama, materi kuliah universitas sering kali merupakan sumber dengan kualitas terbaik.
Jika argumennya adalah kuliah universitas tidak diperlukan, maka sulit menjelaskan mengapa justru materi terbaik sering berasal dari universitas.
Ada juga argumen bahwa cara terbaik untuk meningkatkan kemampuan adalah dengan membangun sesuatu sendiri, tetapi proyek universitas pun pada dasarnya selalu memasukkan evaluasi 'membangun secara nyata' sebagai bagian penting.
Saya sepenuhnya setuju.
Buku teknis yang mendalam juga luar biasa, tetapi nilai yang didapat benar-benar berbeda tergantung bagaimana kita mendekatinya.
Kalau hanya belajar teori tanpa penerapan nyata sama sekali, minat cepat turun dan semuanya cepat terlupakan.
Namun ketika mempelajari teori yang terkait dengan kebutuhan nyata atau pekerjaan yang relevan, teori itu langsung berubah menjadi pengetahuan praktis yang sangat berguna.
Jika seseorang sudah cukup berpengalaman dari belajar mandiri di awal lalu masuk universitas sambil tetap menjaga gairahnya, dalam waktu singkat ia bisa mencapai hal-hal yang luar biasa.
Pada akhirnya, teori tentu penting.
Hanya saja, jika kita membuat sesuatu terlebih dahulu lalu mempelajari teorinya, kita bisa memahami dengan lebih jelas apa yang benar-benar merupakan insight.