Memikirkan cara berpikir

Obrolan fundamental tentang bagaimana cara berpikir

Memikirkan cara berpikir

Kemarin gue membuat tweet iseng tentang mindset pemrogram berdasarkan latar belakang. Kenapa spesifiknya ke seorang pemrogram? Karena gue adalah seorang pemrogram. Sederhana.

Dan berikut cuplikan tweet nya:

Sumber

Gue kepikiran untuk nge-tweet begitu karena teringat nasihat orang tua gue tentang kenapa gue dikuliahin. Menurut beliau, akan berbeda cara berpikir seseorang yang pernah mengemban pendidikan di bangku perkuliahan dengan yang tidak.

Pemikiran beliau terlihat kolot—and actually he is—dan waktu itu pada tahun ~2015, kalau tidak salah ingat. Kalau mengambil prinsip I/O, mungkin bisa saja apa yang beliau yakini tersebut benar. Tapi bukan disitu poinnya.

Poin yang gue garis bawahi adalah "Mengapa? Kenapa?" nya.

Dan pastinya, apa "ruang kosong" yang menjadi pembeda tersebut.

Sebagai sangkalan, gue salah satu orang yang berada disisi self-taught, otodidak.

Walau gue pernah duduk dibangku perkuliahan (yang mengambil subjek CS) selama ~5 tahun (still counting?), gue tidak menyebut diri gue dari latar belakang CS karena gue belum sampai kesitu.

Ya, gue belum memiliki sebuah 'tanda penentu' apakah gue berhasil & layak mendapatkan kredibilitas bahwa 'gue dari latar belakang CS'. Kalau penentu tersebut hanya karena berdasarkan dari 'hobi' nya saja, bokap gue yang Msc berarti harusnya berlatar belakang CS juga dan subjek studi Ilmu Komputer harusnya tidak perlu ada :)

Insight

Ada beberapa jawaban menarik dari pengguna Twitter yang berkontribusi, yang kalau dirangkum, pembeda paling kontras antar keduanya antara lain:

  • Alasan mengambil sebuah pilihan
  • Alasan menentukan sebuah pilihan (berikut dengan tradeoff nya)

Bila berbicara secara umum, faktor lain yang menjadi penentu tersebut adalah faktor pengalaman. Hal inti yang ingin gue telusuri disini adalah tentang Cara Berpikir, tentang mindset, tentang alasan dasar.

Sampai-sampai bisa membangun kerangka berpikir yang berbeda.

Gue pernah berdiskusi ringan seputar ini bersama seorang teman, panggil saja misalnya Rin. Disitu kita ngobrolin santai tentang perbedaan ketika orang yang berlatar belakang CS dan non CS dalam menulis kode.

Subjek pembicaraan tersebut adalah kode yang ada di codebase nya React dengan Preact yang pastinya tanpa bermaksud aneh-aneh, toh hanya obrolan santai, kan?

Yang intinya, yang ingin gue garis-bawahi adalah tentang cara berpikir, namun bukan hanya berdasarkan faktor pengalaman.

Kenapa bisa berbeda?

Atau, apakah perbedaan tersebut sebenarnya tidak ada?

Latar Belakang

Gue pernah membahas tentang ini, tapi disini gue ingin membahas untuk konteks yang berbeda.

Kita tau di Indonesia ada kampus-kampus 'top tier' seperti UI, ITB, UGM, dsb dan juga yang tidak termasuk kampus gue yakni UNIKOM alias Universitas Komunitas Indonesia.

Bercanda, KOM tersebut adalah Komputer.

Coba jujur, kenapa orang memilih kampus ITB daripada UNIKOM? Atau MIT daripada UI?

Gue yakin setiap kampus memiliki kiblat yang sama: Kurikulum. Seperti, entah kamu di ITB; UNIKOM, UNPAS, dsb apakah semester 1-2 kamu mempelajari tentang Algoritma dan Pemrograman serta Strtutur Data?

Apakah buku yang menjadi referensi dari dosen untuk mata kuliah Algoritma dan Pemrograman seperti ini juga kurang lebih?

Sumber

Jika sama, lalu mengapa lulusan (output) dari top tier kampus relatif berbeda dengan yang dari kampus biasa saja?

Apa motivasi orang yang kuliah jauh-jauh ke Harvard sedangkan kita disini memiliki BSI?

Mengapa UI/ITB/dsb menjadi kampus idaman banyak orang dan mengapa UNSERA tidak?

Lalu apa sebenarnya yang menjadi pembeda?

Gue termasuk orang yang yakin kalau nilai tes IQ seseorang tidak menjadi parameter apakah orang tersebut pintar banget, kurang pintar atau pintar aja (damn Outliers book).

Tapi sekali lagi, bukan itu poin inti yang ingin gue bahas.

Melainkan cara berpikir.

Njelimet banget ya gue daritadi?

Lingkungan

Hipotesa pertama gue, faktor lingkungan berpengaruh terhadap bagaimana cara kita berpikir.

Contoh sederhana, di kampung gue (dan mungkin di kebanyakan kampung juga?) seseorang dianggap sukses alias 'menjadi orang' kalau pekerjaan seseorang tersebut adalah ASN kalau gak menjadi pegawai Bank.

Selain pekerjaan, latar belakang pendidikan juga berperan. Orang tua mana yang tidak membanggakan kalau anaknya masuk UI atau ITB atau MIT atau Harvard atau bahkan Surga?

Dan lingkungan tersebut adalah tempat tinggal keluarga gue, sebut saja Pandeglang.

Contoh lain, mengapa para pemrogram yang berkiprah di Silicon Valley untuk wilayah US atau St. Petersburg untuk wilayah Russia dikenal sebagai tempatnya untuk hire 'The top Programmers"?

Apa sebenarnya peran lingkungan dalam membangun cara berpikir seseorang?

Keluarga

Ini hipotesa kedua gue, faktor keluarga juga berpengaruh.

Keluarga-keluarga yang ada di kampung gue relatif berpikiran seperti yang sudah tadi dibahas di bagian Lingkungan. Misal kita berbicara tentang kesuksesan, beberapa ada yang menentukan sukses atau tidaknya seseorang dari faktor harta; ada yang juga tahta (sekalipun tidak berbanding lurus dengan harta) dan tingkat keimanan.

Poinnya, adalah di cara berpikir, yang dalam contoh diatas adalah dalam menilai sebuah kesuksesan.

Mungkin keluarga termasuk dalam lingkungan, tapi keluarga juga berperan dalam menentukan lingkungan kita.

Itulah kenapa gue pisah

Cara Berpikir

Mari kita mulai masuk ke topik pembahasan.

Misal, kamu disuruh untuk membuat program yang menampilkan tulisan "Hello World" ke stdout layar menggunakan bahasa pemrograman Go. Kemungkinan-kemungkinan yang terjadi antara lain, mencari tahu:

  • Bagaimana cara membuat program di Go
  • Bagaimana cara membuat "Hello World" di Go
  • Bagaimana cara menampilkan tulisan di Go

3 kemungkinan diatas terkesan serupa, tapi berbeda.

Yang pertama, diasumsikan belum terlalu familiar dalam membuat program, sudah jelas.

Yang kedua, sudah lumayan familiar, namun tidak terlalu.

Yang ketiga, sudah familiar, namun tidak dengan Go.

Berarti, yang berperan dalam 3 faktor diatas adalah pengetahuan dan pengalaman.

Sekarang kita ke topik lain yang lebih kompleks, bagaimana cara melakukan pencarian pada suatu kalimat? Kemungkinan-kemungkinan yang terjadi antara lain:

  • Bagaimana cara mencari kata di Python?
  • Bagaimana cara melakukan fuzzy search di Python?
  • Contoh pencarian kata di Python
  • Library untuk melakukan pencarian di Python

Sekali lagi, faktor pengetahuan & pengalaman berperan disini.

2 contoh diatas adalah masalah umum, yang sederhananya, sudah ada yang memecahkan masalah tersebut.

Sekarang kita ke yang lebih spesifik dan unik, misal, bagaimana cara mendapatkan pacar yang setia dan perhatian sedangkan saya miskin dan pemalu?

Gimana?

Langkah pertama apa yang harus dipilih?

Langkah apa saja yang harus dilakukan?

Langkah mana yang harus diperjuangkan?

Langkah mana yang harus dipertahankan?

Dan yang paling dasar, bagaimana 4 pertanyaan seputar langkah tersebut bisa terpikirkan?

Sekali lagi, gimana?

Apa itu pikiran?

Sesuatu.

Ya, jika kita disuruh berpikir tentang kipas angin, hal yang ada dipikiran kita adalah sesuatu yang mungkin bermerk miyako, memiliki tombol & baling-baling, dan jika salah satu tombol tersebut ditekan, maka baling-baling tersebut akan berputar.

Berdasarkan pikiran kita tersebut, orang yang belum pernah melihat kipas angin pada umumnya, mungkin yang di pikirkan adalah seperti ini:

Forgive my drawing

Atau ada yang berpikiran kalau kipas angin tersebut adalah seperti ini:

Kipas angin di musola kampung edition

Bagaimana jika kipas angin yang dimaksud adalah seperti ini?

Sumber

Gambaran-gambaran diatas sebenarnya tidak ada yang salah: Sama-sama memiliki baling-baling & tombol, dan sama-sama jika tombol tersebut ditekan, maka baling-baling tersebut akan berputar.

Yang berbeda adalah bagaimana kita menggambarkan apa yang kita pikirkan berdasarkan apa yang kita ketahui.

Berarti, cara kita berpikir juga dipengaruhi oleh pengetahuan yang kita miliki.

Sebenarnya sudah jelas—dan pastinya semua orang sudah tahu—mungkin ada yang tidak sadar saja?

Pikiran, sederhananya adalah kumpulan informasi yang kita miliki. Seperti, kita tau cara menampilkan tulisan ke layar di Python adalah dengan menggunakan print, tapi bagaimana cara melakukannya di Go?

Dan, ya, faktor memilih menggunakan fmt.Println bukan fmt.Printf pun dipengaruhi oleh pengetahuan & pengalaman.

Ada talk menarik dari Henning Beck yakni seorang peneliti otak tentang "What is a Thought? How the Brain Creates New Ideas" yang bisa ditonton disini jika ingin mendapatkan wawasan dari seseorang yang kompeten.

Karena pikiran pada dasarnya adalah sesuatu informasi, kita harus bisa melakukan "sesuatu" terhadap informasi tersebut agar apa yang kita inginkan tercapai.

Bagaimana proses berpikir bekerja?

Kita sudah tahu apa itu kipas angin. Pertanyaannya, bagaimana kipas angin bekerja?

Ada dua perspektif yang bisa diambil: Dari sisi teknis & dari sisi pengguna.

Secara teknis, mungkin, dinamo dalam kipas memutarkan baling-baling yang mana kecepatan perputaran tersebut dipengaruhi oleh energi yang ada yang diatur dapat diatur melalui tombol. Tidak yakin juga apakah cara kerja kipas angin seperti itu, itu berdasarkan imajinasi gue aja.

Dari sisi pengguna, kita hanya tinggal mencolokkan kabel kipas angin ke stop kontak, dilanjutkan dengan menekan tombol sesuai preferensi kita.

Yang menjadi pertanyaan, bagaimana caranya seseorang bisa merancang kipas angin (dari sisi teknis & pengguna) seperti itu?

Terlebih untuk kipas angin pertama yang ada di dunia.

Dan tentu saja faktor pengalaman (terhadap pembuatan kipas angin) disini tidak berperan, bukan?

Mungkin si pembuat terinspirasi dari 'angin'.

Hal pertama yang dia lakukan mungkin bagaimana cara membuat angin?

Lalu, bagaimana cara agar angin tersebut bisa diatur sendiri?

Dan yang terakhir, hal-hal apa saja yang bisa membuat angin dan juga bisa diatur sendiri?

Ini asumsi saja, tapi semoga relevan.

Sekarang mari kita ke yang lebih praktikal, misal, tentang bagaimana cara bisa melakukan banyak pekerjaan dalam satu waktu?

Kita (manusia) bisa melakukan banyak pekerjaan dalam satu waktu, misal, seperti mengirim pesan sambil mendengarkan lagu favorit sekaligus sedang jalan ke salah satu kedai kopi.

Meskipun bisa saja kita berhenti dulu berjalan & mendengarkan lagu melainkan mengirim pesan saja, atau berhenti dulu mengirim pesan & lagu melainkan berjalan saja.

Tujuannya satu: Agar fokus.

Dan yang harus dikorbankan, untuk yang pertama adalah waktu dan untuk yang kedua adalah kenyamanan.

Kembali ke pembahasan, misal, program hanya bisa berjalan untuk satu pekerjaan. Dan bila ada pekerjaan baru, maka harus menunggu pekerjaan yang sedang berjalan selesai untuk menghindari kemungkinan kesalahan terjadi.

Bagaimana bila kita tetap ingin program tersebut bisa berjalan untuk banyak pekerjaan?

Bisa saja, pasti ada yang harus dikorbankan.

Misal, dengan menggunakan model Event Loop. Membuat program tambahan diatas program utama yang berguna untuk mengatur alur & proses pekerjaan yang ada.

Yang dikorbankan adalah adanya program tambahan untuk menjalankan program kita (ukuran) dan mengubah alur program agar bisa melakukan banyak pekerjaan disamping mengurangi kemungkinan terjadinya kesalahan.

Berdasarkan 2 contoh diatas, pikiran bekerja dengan cara mengumpulkan informasi yang ada lalu mengatur bagaimana informasi-informasi tersebut tersusun untuk menghasilkan sesuatu.

Ada talk menarik juga dari Dr. Derek Cabera yang berjudul "How Thinking Works" yang bisa ditonton disini. Tentu saja talk tersebut dapat dipertanggung jawabkan karena berasal dari yang kompeten.

Pola pikir

Kita masuk ke topik inti, tentang pola pikir.

Berpikir adalah proses pengumpulan; pengaturan, dan penyusunan, yang mana berarti pasti memiliki pola termasuk dalam masing-masing proses tersebut.

Kita mungkin sudah familiar dengan hal-hal terkait pola pikir, seperti pola pikirnya orang sukses; orang kaya, orang jenius, termasuk orang sehat (4 sehat 5 sempurna™).

Yang mana selalu mengarah ke suatu yang positif, siapa juga yang ingin mengikuti pola pikirnya orang gagal; orang miskin, orang goblok, ataupun orang sakit?

Untuk mempersingkat, mari kita bahas tweet gue diatas.

Orang yang belajar secara otodidak (termasuk gue), kita belajar apapun yang membuat kita tertarik. Yang secara formal (kocaknya termasuk gue juga) kita belajar hal-hal yang sudah ditentukan sebagai pijakan untuk mempelajari lebih lanjut dari apa yang kita pelajari tersebut.

Yang menjadi pembeda, dalam pendidikan formal, kita harus melewati 'ujian' sebagai penentu apakah yang kita ketahui tersebut sudah berhasil, dengan cara mendapatkan nilai yang menjadi standar.

Dalam otodidak, 'ujian' tersebut adalah jika itu berhasil, maka berhasil.

Yang berarti, sama-sama memiliki satu harapan yang sama: Keluaran/Output yang sukses.

Hanya parameter kesuksesan nya saja yang berbeda.

Yang satu berbentuk nilai.

Yang dua berbentuk hasil.

Tapi perlu diingat, bahwa 'rumus' keluaran adalah:

output = input + process

Hasil akan selalu berbeda, bila input dan process nya berbeda.

Karena process bersifat side-effect, dan tidak bisa membuat function yang pure bila function tersebut memiliki side effect, benar gak sobat functional ku?

Mungkin rahasianya ada di proses, gue yakin.

Gue rasa input nya masih sama-sama aja: Belajar algoritma & pemrograman, belajar struktur data, dsb.

Tapi kalau prosesnya?

Mungkin yang satu dituntut untuk selalu membuat sesuatu yang cenderung fundamental (membuat program pencarian menggunakan binary search) dan mungkin yang satu dituntut untuk selalu membuat sesuatu yang cenderung praktikal (membuat program yang bisa melakukan pencarian menggunakan elastic search).

Mungkin.

Karena aktivitas tersebut terus diulang-ulang, maka jadilah sebuah pola.

Seperti, bila kita terus-terusan makan 4 sehat 5 sempurna, maka kita bisa disebut berpola hidup sehat, bukan?

Berbicara tentang perbedaan yang terjadi di dunia kampus, mungkin kalau di ITB jumlah tugas nya lebih banyak daripada di UNICORN UNIKOM? Atau, mungkin kalau di MIT, beban tugasnya lebih berat daripada di UI?

Mungkin.

Dari awal gue tidak pernah mengkategorikan mana yang lebih baik dan bagus, karena semua yang bisa diukur itu bersifat relatif, benar?

Intinya, mungkin perbedaan yang terjadi antar keduanya adalah di proses.

Tidak banyak juga orang otodidak yang terus mengasah kemampuannya dengan melakukan competitive programming di hackerearth, dan tidak banyak juga yang mengambil langkahnya dengan membuat lebih banyak program.

Menjawab pendapat bokap

Mungkin karena stereotipe kali ya, mengingat di zaman beliau akses informasi tidak semudah seperti sekarang; Kondisi mahasiswa zaman beliau sangat kritis, dan beliau tumbuh di era dan industri yang tidak seperti sekarang.

Zaman dimana gelar benar-benar berperan dalam dunia kerja.

Zaman dimana belum banyaknya sumber belajar alternatif selain dari pendidikan formal.

Zaman dimana belajar = sekolah.

Kalau sekarang?

Tidak sedikit yang berkiprah di dunia kerja (dan memiliki posisi yang oke) meskipun orang tersebut tidak memiliki gelar.

Sumber belajar dimana-mana, bahkan pemerintah sampai membuat program untuk mentenagai (ehm?) masyarakat untuk bisa belajar terus dijalur non-formal.

Di pertengahan 2020, bahkan definisi sekolah adalah Login ke Zoom/WebEx/Meet, bertatap muka depan layar & kamera, menyimak guru menjelaskan pelajaran dan bertanya ketika ada kurang paham, dan tanpa harus pergi ke sebuah tempat bernama sekolah.

Gue tidak menyalahkan apa yang bokap gue yakini benar, dan seperti yang kita tau, kebenaran itu bersifat relatif.

Seperti, setiap pemeluk agama pasti percaya akan apa yang mereka yakini tersebut benar, menurut mereka dan agama yang dianut.

Begitupula dengan pendapat bokap gue, itu benar, pada masa dan kondisi beliau pada saat itu. Mungkin sampai saat ini juga, tapi yang gue yakini, pada saat sekarang, pendapat tersebut sudah kurang relevan.

Membangun pola pikir

Berdasarkan pembahasan panjang lebar kita diatas, faktor yang mempengaruhi dalam pembangunan pola pikir, (menurut gue) antara lain:

  • Pengetahuan
  • Pengalaman
  • Prinsip

Orang berlatar belakang CS dan yang non CS sama-sama setuju kalau untuk membuat fungsi di Go adalah menggunakan kata kunci func.

Dan sama-sama setuju bahwa menggunakan uuid (string) lebih baik daripada menggunakan id (int) berdasarkan pengalaman & kasus mereka.

Dan juga sama-sama setuju bahwa Python lebih cepat dari bahasa yang lain sesuai dengan prinsip akan 'kecepatan' yang mereka yakini.

Berdasarkan 3 faktor tersebut, berarti, untuk bisa membangun pola pikir yang oke, yang harus dilakukan adalah:

  • Terus belajar (pengetahuan)
  • Terus penasaran & mencoba (pengalaman)
  • Jangan kehilangan pedoman (prinsip)

Prinsip menurut Wikipedia adalah suatu pernyataan fundamental atau kebenaran umum maupun individual yang dijadikan oleh seseorang/kelompok sebagai sebuah pedoman untuk berpikir atau bertindak.

Misal perusahaan Mozilla, mereka berprinsip untuk melindungi privasi pengguna di dunia digital. Semua produk yang dibuat oleh Mozilla pasti ramah privasi, meskipun lebih menguntungkan menjual data pribadi pengguna yang dilakukan oleh kompetitor Mozilla untuk produk peramban.

Karena prinsip tersebut, mereka terus belajar & mencoba agar membuat produk mereka yang sudah ada menjadi lebih baik dan lebih aman lagi dalam melindungi privasi pengguna nya dan bila untuk produk baru, mereka seharusnya menggunakan pola pikir berdasarkan prinsip yang mereka miliki.

Ya, prinsip membangun pola pikir.

Dan prinsip berdasarkan dari pengetahuan & pengalaman.

Kesimpulan

Sebagai jawaban penuh dari tweet gue tersebut, mengapa mindset nya bisa berbeda antara yang berlatar belakang CS dengan yang non CS?

Mungkin karena proses tentang bagaimana mereka bisa sampai sana.

Contoh sederhananya, gue asli orang Pandeglang, lalu pindah ke Serang.

Sekarang, gue tinggal di Bandung. Serang menggunakan bahasa Jaseng™ dan Bandung menggunakan bahasa sunda Bandung. Tapi, gue sudah biasa dengan bahasa sunda Pandeglang karena gue pernah tinggal lama disana.

Ketika berbicara dengan orang Bandung menggunakan bahasa Sunda, mungkin terdapat sedikit perbedaan makna (secara literal dan teknis) antara keduanya.

Berbeda dengan orang yang asli Bandung berbicara bahasa sunda Bandung atau orang yang benar-benar belajar bahasa sunda nya Bandung pastinya.

Di Banten, urang itu sudah lumayan halus sedangkan di Bandung terkesan kasar.

Karena dalam bahasa sunda di Bandung, (mungkin) untuk mengucapkan 'saya' kepada orang yang lebih tua, diajarkannya adalah dengan menggunakan kata abdi daripada urang.

Poin nya, ada di proses, bukan?

Menurut gue, orang yang berlatar belakang Non CS (otodidak) cenderung trial & error (and success) sedangkan yang CS trial & success (karena kalau gagal, ya ngulang dong hahaha).

Dan yang CS, cenderung ke arah fundamental sedangkan yang non cenderung ke yang praktikal.

Tidak ada yang salah & yang lebih baik, karena pengalaman adalah guru yang terbaik.

Yang maksudnya, bila ingin mencari yang terbaik, yaa belajar dari pengalaman, bukan antara dari pengajar formal ataupun non-formal.

Penutup

Gue jadi dapat melihat sedikit gap diantara keduanya:

  • Kecondongan antara fundamental & praktikal
  • Penentu validitas "hasil" akan suatu pemahamahan
  • Jenis praktik yang dilakukan secara terus menerus dan berulang

Dan gue rasa, poin-poin diatas tidak bisa dipilih langsung secara bersamaan.

Pasti ada yang harus didahului (ya, that pengorbanan thing).

Sebagai penutup, mengapa gue peduli dengan ini? Harapannya, gue (dan semoga siapapun) bisa mengetahui & merasakan apa yang didapat dari jalur formal meskipun gue otodidak, dan begitupula sebaliknya.

Dan juga, tidak dijadikan sebagai 'pembeda' hanya karena jalur yang ditempuh oleh keduanya berbeda.

Apakah gap ini nyata?

Jangankan tentang ini yang jelas-jelas beda secara latar belakang, masalah sesepele lo pribumi (native) atau bukan (hybrid) aja sampai hari ini masih dipermasalahkan (dan dipandang beda) meskipun lo sama-sama berlatar belakang Warga Negara Indonesia meskipun ada keturunan luar.

Termasuk apakah aplikasi tersebut dibuat menggunakan React Native atau Kotlin, yang padahal sama-sama aplikasi Android dan secara fungsionalitas aplikasi tersebut tidak ada bedanya bila dibandingkan.

Tulisan ini secara pribadi bertujuan untuk bisa mengasah lagi tentang cara gue berpikir. Tentang faktor-faktor yang mempengaruhi cara berpikir, pola-pola nya, yang berperan dalam mepengaruhi, dan kerangka berpikir yang bisa dibuat, dikembangkan dan digunakan.

Mengapa subjeknya pemrogram dan latar belakang CS/Non CS? Karena pekerjaan gue sebagai pemrogram.

Ya gak lucu dong kalau tweet nya Mindset orang Pandeglang dari latar belakang sunda & self-taught sepertinya berbeda \n Pertanyaannya: Mengapa? \n Dan apa gap diantara keduanya?

Emangnya gue dibayar untuk menjadi orang Pandeglang dan mengembangkan bahasa sunda dalam keseharian gue?

Terima kasih telah mampir & membaca.

Selamat menikmati akhir pekan anda!