Kita sering memakai jasa programmer ketika urus BPJS, memakai Facebook, dan membaca artikel ini. Menjadi programmer, seperti impian sulit, apalagi membayangkan mereka seperti yang ditampilkan di budaya pop Hollywood lewat film-filmnya. Di balik itu, sebenarnya kita bisa selami bagaimana para programmer berpikir dan belajar.
Tulisan ini tentang rahasia berpikir dan belajar sebagai programmer. Dengan belajar seperti mereka, kita bisa terapkan secara luas di luar dunia pemrograman, ketika mempelajari subject lain.

Info Buku
Judul: Pragmatic Thinking and Learning – Refactor Your Wetware
Penulis: Andrew Hunt
Edisi: Paperback, Edisi Pertama
Tahun Terbit: 2014
Halaman: 244 hlm.
ISBN 10: 1934356050
ISBN 13: 9781934356050
Hanya ikan mati yang mengikuti arus.
Peter Senge dalam The Fifth Discipline: The Art and Practice of the Learning Organization memperkenalkan “pemikiran sistemik”, yaitu membayangkan suatu objek sebagai titik koneksi dari beberapa sistem — bukan sebagai objek diskrit untuk dirinya sendiri. Seperti itulah cara programmer berpikir. Mereka memikirkan “sistem apa yang bekerja di sini?”. Jika belum ada, mereka membuat sistem itu.
Perbedaan antara Pemula dan Ahli dalam Berpikir
Pemula membutuhkan aturan bebas konteks yang jelas di mana mereka dapat beroperasi; sedangkan ahli dianggap tak-efektif jika dibatasi untuk beroperasi di bawah aturan yang sama.
Ahli tidak mengikuti aturan berpikir tertentu. Membuat orang menjadi tidak-ahli, bisa dengan cara memaksa mereka mengikuti aturan tertentu (yang statis, tidak kreatif).
Belajar dari pemula menuju ahli adalah tentang cara memandang dunia secara berbeda. Pendekatan masal, model mental yang kamu pakai, serta faktor-faktor eksternal yang membantu kinerja.
“Ketidaktahuan lebih sering melahirkan kepercayaan daripada pengetahuan.” (Charles Darwin)
Orang-orang dengan tingkat keterampilan yang lebih rendah cenderung melebih-lebihkan kemampuan mereka sendiri.
Cara menilai diri dengan benar: tingkatkan kemampuan individu, agar kemampuan metakognitif meningkat.
Ahli punya ciri khas ini: memakai intuisi dan kemampuan untuk mengenali pola dalam konteks.
Keahlian bisa dibangun, menurut Dr. K. Anderson Ericsson, dengan mengkondisikan “latihan yang disengaja”. Misalnya, ingin bisa pemrograman Java untuk membuat aplikasi Android, seseorang bisa mengikuti kursus pemrograman online dan mematuhi sistem pembelajaran di kursus itu. Ini contoh latihan-yang-disengaja.
4 Kondisi dalam Latihan yang-Disengaja
#1 – Tugas yang kamu definisikan
#2 – Tugas harus cukup sulit dan menantang, tetapi bisa dilakukan.
#3 – Lingkungan memberikan umpan balik informatif yang bisa kamu tindak-lanjuti.
#4 – Ada kesempatan untuk pengulangan dan koreksi kesalahan.
Itu sebabnya, para programmer mengandalkan jenis materi pembelajaran yang bisa diandalkan. Mereka belajar berbasis project. Misalnya, setelah mendapatkan konsep dasar, mulai mengerjakan project dari yang termudah, meningkat ke yang sulit dan menantang. Misalnya, pada awalnya belajar membuat aplikasi “to do list” (ini yang mudah) kemudian diintegrasikan ke “alarm”, kemudian ditambah dengan menuliskan catatan, dst. Mereka bertanya ke forum semacam StackOverflow (SO) untuk troubleshooting, atau bertanya kepada mentor. Setelah mengetahui kesalahan, mereka memperbaiki lagi dan meningkat ke materi yang lebih sulit.
Mereka tidak mendapat doktrin, tidak mau dikte, dan “tanpa buku”. Mereka memanfaatkan intuisi dalam mengenal dan menerapkan pola dalam pemecahan masalah dan meningkatkan pemahaman kepada komunitas yang lebih pintar. Mereka tidak pernah berhenti belajar. Terus berlatih agar tetap ahli.
Ketergantungan yang berlebihan pada model formal akan cenderung menghargai perilaku kawanan dan mendevaluasi kreativitas individu.
Dengan menargetkan metodologi kamu untuk pemula, kamu akan menciptakan lingkungan kerja yang buruk untuk anggota tim yang berpengalaman,
Kalau kamu mendengar orang berkata, “Yang perlu kamu lakukan adalah …” atau “Lakukan saja ini …,” — kemungkinan, mereka salah. Setidaknya, jangan dengarkan itu sebagai keharusan. Itu hanya peluang atau pilihan dalam memecahkan masalah.
Misalnya, kita berhadapan dengan situasi ini: “Saya ingin membuka pintu yang terkunci ini.”. Situasi ini kita perlakukan dengan bertanya lebih lanjut:
- Apa konteksnya?
- Mengapa pintu perlu dibuka?
- Apakah pantas menggunakan kapak, gergaji mesin, atau alat pemecah kunci?
- Bisah kita menggunakan pintu lain?
- Mengapa harus buka kuncinya, tidak buka engselnya?
Cara berpikir seperti ini, akan berguna dalam kehidupan sehari-hari. Ketika seseorang “lupa password” (ini mirip situasi “Saya ingin membuka pintu terkunci ini.”), seorang programmer berpikir lain. Bisa saja ini kita reset tanpa harus tahu password (tidak punya kunci). Mereka tidak panik karena dalam pikiran mereka sudah tergambar pertanyaan awal, “Sistem apa dan bagaimana sistem itu bekerja di situasi ini?”.
Dalam pemikiran sistemik, seperti dalam pemrograman berorientasi objek, seringkali yang lebih menarik adalah hubungan antara hal-hal yang kamu hadapi.
Hubungan ini membentuk konteks yang membuat semua perbedaan.
Pemula membutuhkan kesuksesan cepat dan aturan yang bebas-konteks. Kamu tidak dapat mengharapkan mereka untuk dapat menangani situasi baru sendiri. Mengingat ruang masalah, mereka akan berhenti untuk mempertimbangkan semuanya, apakah itu relevan atau tidak. Jangan bingung mereka tidak perlu dengan gambaran besar.
Para ahli, sebaliknya, perlu memiliki akses ke gambar besar; jangan membatasi mereka dengan birokrasi yang membatasi, yang bertujuan untuk menggantikan penilaian.
Model Dreyfus untuk Mengukur Keahlian
Pilih salah satu masalah, kemudian selesaikan, setelah itu coba kita lakukan penilaian, terhadap diri sendiri, dengan Model Dreyfus.
Pada Model Dreyfus, kamu di posisi mana?

Waspada terhadap kemungkinan inkompetensi tingkat kedua saat melakukan evaluasi ini. Benar-benar uji lagi dan lagi, agar kamu bisa identifikasi, kamu di level mana.
Putuskan, apa yang kamu butuhkan untuk ke level berikutnya.
Langkah Berikutnya, Versi Programmer
Apa yang dapat kamu lakukan secara berbeda ke depan?
Emosi positif sangat penting untuk belajar dan berpikir kreatif. Menjadi “bahagia” memperluas proses berpikir kamu dan membawa lebih banyak perangkat keras otak online.
Berusaha keras untuk desain yang baik; itu benar-benar bekerja lebih baik.
Selama kamu percaya neuroplastisitas pikiran, maka jumlah maksimum hal-hal yang bisa kamu pelajari dan kemampuan yang bisa kamu capai, tidak ada batasnya.
Neuroplastisitas dan Metafora
Neuroplastisitas: kemampuan otak untuk memodifikasi, mengubah, dan mengadaptasi struktur dan fungsi sepanjang hidup dan sebagai respons terhadap pengalaman.
Setiap sistem perangkat lunak harus dapat dipandu oleh metafora yang sesuai.
Misalnya, sistem penggajian dapat dianggap analog dengan kantor pos, dengan kotak surat terpisah, jadwal pengiriman, dan sebagainya. Semua metafora akhirnya rusak (tidak sepenuhnya berjalan), tetapi idenya adalah bahwa metafora yang cukup kaya dapat membantu memandu desain sistem dan membantu menjawab pertanyaan yang muncul selama pengembangan.
Pemrogram ceroboh dalam penggunaan metafora – seperti “tabel”.
Humor sering didasarkan pada mengidentifikasi hubungan dan mendistorsinya.
Merlin mengubah Arthur menjadi hewan dan burung yang berbeda sehingga ia dapat mengalami dunia dengan cara yang berbeda. Sebagai angsa yang melihat ke bawah pada lanskap di bawah, Arthur dikejutkan dengan wawasan bahwa batas-batas adalah konstruksi buatan: tidak ada garis dicat di tanah yang menunjukkan kerajaan atau negara. Dia mulai menyadari bahwa seluruh Inggris bisa bersatu di bawah satu raja.
Dari sudut pandang yang berbeda, mesin-pencari dalam pikiran kamu akan dipaksa untuk mengumpulkan ide-ide yang berbeda.
Asah kecerdasan cepat. Carilah koneksi atau analogi antara hal-hal yang tidak berhubungan.
Masalah Besar Menurut Programmer
Bacalah sesuatu yang berbeda dari materi yang biasa kamu baca.
4 Kategori Masalah Besar
Baru dianggap masalah besar kalau berada di 4 kategori berikut ini.
4 Kategori Besar Masalah
- Bias Kognitif. Apa saja yang membuat pikiran menjadi tersesat.
- Afinitas Generasi. Pengaruh teman sebaya.
- Kecenderungan Kepribadian.
- Bug Perangkat Keras. Bagian otak yang lebih tua dapat mengesampingkan bagian yang lebih cerdas.
*) Menyadari bug ini adalah langkah pertama untuk menguranginya.
Efek Hawthorne: Orang memiliki kecenderungan untuk mengubah perilaku mereka ketika mereka tahu bahwa mereka sedang dipelajari. *) Misalnya, dalam survey, ketika menjawab pertanyaan, dll.
Memperbaiki keputusan sebelum waktunya mengurangi pilihan kamu, mungkin sampai menghilangkan pilihan yang berhasil.
Pengulangan dalam berlatih, sangat penting. Pengulangan bisa memastikan seberapa cepat kamu memahami, seberapa cepat kamu bisa melakukan ini, dan seberapa cepat kamu “terserap” dalam mengatasi masalah.
Jangan mengandalkan ingatan. Dokumentasikan pembelajaran dan pekerjaan kamu. Itu satu-satunya yang bisa kamu andalkan untuk “mengingat” apa yang sudah lewat.
“Tinta paling pucat lebih baik daripada memori terbaik.” (Chinese Proverb)
“Apa pun yang ada di dunia, saat kamu lahir, adalah normal dan biasa dan hanya bagian alami dari cara dunia bekerja. Apa pun yang kamu temukan antara umur 15 – 35 tahun adalah hal baru, menarik, dan revolusioner, dan bisa kamu kembangkan menjadi karir. Apa pun yang ditemukan setelah usia 35 tahun bertentangan dengan tatanan alam.” (Douglas Adams)
Ekstrovert dan Introvert
Ekstrovert diberi energi dengan berada bersama orang-orang dan bersosialisasi.
Introvert tidak; introvert bersifat teritorial dan membutuhkan ruang mental dan lingkungan pribadi. Introvert menarik kekuatan dari aktivitas menyendiri dan menemukan situasi sosial yang melelahkan. 75% populasi mengarah ke ujung skala yang ekstrovert. 25% dari kita, berharap mereka meninggalkan kita sendirian.
Orang yang intuitif (para ahli) sangat imajinatif dan menghargai metafora, sangat inovatif, dan melihat banyak kemungkinan – hidup selalu ada di tikungan berikutnya. Intuitif dapat melompat ke aktivitas baru tanpa menyelesaikan apa pun.
Izinkan bug yang berbeda pada orang yang berbeda. Kalau kamu melihat orang yang cara berpikirnya selalu sama dalam menghadapi masalah, loading lama, atau nggak bisa naik-level, biarkan saja. Itulah “bug” yang terjadi pada orang itu.
Berpura-puralah kamu adalah tipe kebalikan dari diri kamu sendiri pada setiap sumbu. Akan seperti apa dunia bagi orang seperti ini? Bagaimana kamu akan berinteraksi dengan orang ini?
Berada di Pikiran Orang Lain Ketika..
Programmer berpikir dengan kepala pemakai aplikasi ketika ia merancang aplikasi. Programmer membutuhkan riset dan empati untuk menjadi “umumnya pemakai”.
Ada cerita menarik tentang laporan dari Jurnal Nature tentang masalah modern: “kemarahan di jalan”.
Prediktor utama kecenderungan kemarahan di jalan adalah jumlah personalisasi pada kendaraan: pekerjaan cat kustom, stiker, stiker bemper, dan sebagainya. Yang lebih menakjubkan lagi, isi dari stiker bumper sepertinya tidak masalah, hanya kuantitasnya saja. Lima stiker “Selamatkan Paus” sebenarnya bisa terbukti lebih berbahaya daripada satu stiker “Hak untuk Membawa Senjata”, misalnya. Mengapa? Karena manusia suka menandai wilayahnya.
Baca penelitan itu di sini:
Territorial Markings as a Predictor of Driver Aggression and Road Rage
*) Link di atas, berbeda dari yang tertulis di buku ini.
Menulis surat, di masa lalu, membutuhkan “tulisan tangan” dan “penundaan-bawaan” (harus mengunggu petugas pengirim surat). Kedua aktivitas ini memungkinkan neokorteks yang lebih dingin untuk campur tangan dan mengingatkan kamu. Era internet, membuat arus pendek neokorteks dan memperlihatkan respons reptil kita. Ini memungkinkan kamu untuk sepenuhnya melampiaskan reaksi visceral awal kamu.
Reaksi Visceral: Reaksi fisik terhadap pengalaman non-fisik, suatu emosi. Contoh reaksi fisik: ekspresi wajah kamu berubah cerah ketika melihat makanan kesukaanmu tersaji.
Melatih Intuisi Menjadi Lebih Ahli
Kamu membutuhkan unit pengujian untuk diri-sendiri, untuk mendapatkan perspektif gambar-besar, menguji pemahaman, dan model mental kamu.
- Bagaimana kamu tahu?
- Kata siapa?
- “Bagaimana” secara spesifik?
- Bagaimana apa yang saya lakukan menyebabkan kamu..?
- Dibandingkan dengan apa atau dibandingkan dengan siapa?
- Apakah itu selalu terjadi dalam pola sama?
- Bisakah kamu memikirkan pengecualian?
- Apa yang akan terjadi jika kamu melakukan? Atau tidak melakukan?
- Apa yang membuatmu berhenti dari..?
- Apakah ada sesuatu yang benar-benar dapat kamu ukur?
- Adakah angka atau data yang sulit?
- Ada statistik tentang ini?
Sumber: Pertanyaan-pertanyaan ini dari penelitian tentang model Meta-NLP (Neuro-Linguistic Programming).
Jika kamu sudah definisikan sesuatu, coba definisikan kebalikannya.
Menguasai pengetahuan saja, tanpa pengalaman, tidak efektif.
Metode SMART
SMART (Specific, Measurable, Achievable, Relevant, dan Time-Boxed).
Gunakan SMART untuk apapun. Setiap “tujuan” harus memiliki karakter SMART di dalamnya.
Baca tentang SMART di sini:
“Apa itu tujuan SMART?”
https://www.dropbox.com/id/business/resources/smart-goals
Perbedaan utama antara investasi pengetahuan dan investasi keuangan adalah semua investasi pengetahuan memiliki beberapa nilai.
Teknik mempelajari buku atau barang cetakan lainnya dikenal sebagai SQ3R (Survey Question Read Recite Review).
Selalu Melakukan Pengujian
Pembelajaran berbasis tes. Saat menguji diri sendiri, kamu bisa dapat memanfaatkan efek spasi.
- Ambil topik baru, dan cobalah untuk mengajarkannya.
- Bayangkan kamu mengikuti kelas tari, hanya untuk mengetahui bahwa kamu harus lulus ujian “fakta tari” sebelum benar-benar menari. (Ingat sekali lagi: pengetahuan tanpa pengalaman, tidak akan efektif).
Kita tidak benar-benar dirancang untuk hanya menerima informasi melainkan untuk mengeksplorasi dan membangun model mental kita sendiri. Setiap pemikir dan programmer memiliki model mental. Kita harus mampu mendesak masalah, menjelajahinya, atau “membiasakan”.
Seperti apa “model mental” itu? Kamu bisa baca ini: “Model Mental Versi Saya“.
Pertanyaan untuk Memecahkan Masalah
Untuk memecahkan masalah, tanyakan pada diri sendiri pertanyaan-pertanyaan ini:
- Apa aspek yang tidak diketahui?
- Apa yang kamu tahu?
- Data apa yang kamu miliki?
- Kendala apa dan aturan apa yang berlaku?
Kemudian buat rencana, jalankan, dan tinjau hasilnya. Cobalah untuk memikirkan masalah yang sudah dikenal yang memiliki hal yang tidak diketahui yang sama atau serupa.
Gambar masalah ini, coba pikirkan secara visual.
Memecahkan masalah terkait atau lebih sederhana; drop beberapa kendala atau menggunakan subset dari data. Apakah semua data dan batasan digunakan? Jika tidak, mengapa tidak? Coba ulangi masalahnya. Cobalah bekerja mundur dari yang tidak diketahui menuju data.
Kita belajar paling baik dengan penemuan, bukan instruksi.
Izin untuk gagal mengarah pada kesuksesan. *) Berikan toleransi untuk menerima kegagalan. Gagal itu penting ketika belajar.
Pat Metheny: “Selalu menjadi pria terburuk di setiap perkumpulan yang kamu ikuti. Jika kamu pria terbaik di sana, kamu harus berada di band yang berbeda.”
Berpura-puralah kamu adalah ahlinya. Anggap saja kamu sudah bisa, tetapi lakukan ujian untuk diri-sendiri, alias jangan berhenti. Bagian mana yang saya belum bisa? Benarkah saya sudah bisa?
Pengalaman menggunakan perancah. Perenang melakukan ini dengan diikat ke tali dan ditarik melalui air dengan kecepatan tinggi. Sebelum seorang perenang dapat mencapai kecepatan seperti itu sendiri, mereka harus mengalami seperti apa rasanya berenang dengan bantuan tali.
Kelimpahan informasi telah mengakibatkan kemiskinan pengetahuan dan perhatian.
Informasi adalah data mentah dalam konteks tertentu. Misalnya, fakta bahwa Microsoft membeli beberapa perusahaan seharga satu miliar dolar hanyalah informasi, dan tidak ada kekurangan informasi akhir-akhir ini. Pengetahuan memberikan makna pada informasi tersebut. Kamu menerapkan waktu, perhatian, dan skill kamu pada informasi untuk menghasilkan pengetahuan. Melihat akuisisi Microsoft tertentu dan mengetahui bagaimana hal itu dapat mengubah pasar, memberikan peluang baru, dan menghancurkan yang lain merupakan pengetahuan.
Apakah kamu masih bisa disebut “sedang memasak” ketika kamu membiarkan sesuatu diasinkan selama dua belas jam? Apakah kamu masih bisa disebut “bekerja” ketika sedang duduk memikirkan masalah? Iya.
Jika tugas itu adalah sesuatu yang benar-benar tidak ingin kamu lakukan, kemungkinan pengalihan apa pun hanyalah penundaan. Jika kamu masih tertarik tetapi merasa “macet”, maka ide-idenya masih membara, dan tidak apa-apa.
Jika kamu tidak dapat memikirkan 3 cara (bisa salah, bisa berhasil) atau 3 solusi berbeda untuk suatu masalah, berarti kamu belum cukup memikirkannya.
Berpikir dan belajar seperti programmer itu menyenangkan. [dm]