1 poin oleh GN⁺ 2024-05-27 | 1 komentar | Bagikan ke WhatsApp
  • Riset MIT menunjukkan bahwa pemahaman kode lebih bergantung pada multiple demand network yang digunakan untuk pemecahan masalah kompleks daripada pada pemrosesan bahasa
  • Dalam eksperimen fMRI yang melibatkan pembacaan kode Python dan ScratchJr, jaringan bahasa hemisfer kiri termasuk area Broca hampir tidak menunjukkan respons
  • Membaca kode menggunakan jaringan yang sama dengan tugas matematika dan logika, tetapi area spesifik yang aktif di dalamnya tidak sepenuhnya sama
  • ScratchJr sedikit lebih mengaktifkan multiple demand network kanan, dan tim peneliti membandingkannya dengan bias hemisfer kanan pada tugas navigasi spasial
  • Alih-alih mengajarkan pemrograman hanya sebagai matematika atau bahasa, diperlukan metode pengajaran yang khas untuk pembelajaran kode

Membaca kode menunjukkan aktivitas otak yang berbeda dari membaca bahasa

  • Belajar pemrograman mirip dengan proses mempelajari bahasa baru
    • Harus mempelajari simbol dan istilah baru
    • Harus menyusun kode dengan benar agar dapat menginstruksikan pekerjaan yang akan dijalankan komputer
    • Harus menulisnya dengan cukup jelas agar dapat dibaca dan dipahami oleh programmer lain
  • Namun, saat membaca kode komputer, area pemrosesan bahasa di otak tidak teraktivasi
  • Sebaliknya, yang terutama aktif adalah multiple demand network yang digunakan untuk tugas kognitif kompleks
    • Jaringan ini juga digunakan untuk tugas seperti soal matematika atau teka-teki silang
  • Membaca kode juga tidak sepenuhnya sama dengan soal matematika dan logika
    • Bahkan di dalam multiple demand network, terlihat pola yang lebih bergantung pada bagian yang berbeda dari yang digunakan dalam tugas matematika dan logika
  • Anna Ivanova menilai bahwa memahami kode komputer lebih dekat pada sesuatu yang “punya sifatnya sendiri”, bukan bahasa maupun matematika/logika

Pemrograman lebih dekat ke bahasa atau ke matematika?

  • Tim peneliti Evelina Fedorenko telah meneliti hubungan antara bahasa dan fungsi kognitif lain
  • Pertanyaan utamanya adalah apakah fungsi-fungsi lain bergantung pada jaringan bahasa di otak
    • Jaringan bahasa ini mencakup area Broca dan area lain di hemisfer kiri
  • Dalam riset sebelumnya dari laboratorium Fedorenko, musik dan matematika ditemukan tidak mengaktifkan jaringan bahasa ini
  • Karena pemrograman merupakan penemuan yang relatif baru, sulit menganggap manusia memiliki mekanisme bawaan yang khusus untuk pemrograman
  • Pandangan tentang pembelajaran pemrograman secara umum terbagi dua
    • Pandangan bahwa untuk mahir dalam pemrograman harus kuat dalam matematika
    • Pandangan bahwa karena kemiripan antara coding dan bahasa, kemampuan bahasa mungkin lebih relevan

Eksperimen fMRI: membaca kode Python dan ScratchJr

  • Bahasa yang diuji dalam eksperimen adalah Python dan ScratchJr, yang dikenal sebagai bahasa pemrograman dengan keterbacaan tinggi
  • ScratchJr adalah bahasa pemrograman visual yang dirancang untuk anak usia 5 tahun ke atas
  • Pesertanya adalah orang dewasa muda yang mahir dalam bahasa yang mereka uji
  • Para peserta melihat potongan kode di dalam pemindai functional magnetic resonance imaging (fMRI)
  • Tugasnya adalah memprediksi tindakan apa yang akan dihasilkan oleh kode tersebut

Hasil: multiple demand network lebih sentral daripada area bahasa

  • Area bahasa di otak hampir tidak atau sama sekali tidak merespons kode
  • Tugas kode terutama mengaktifkan multiple demand network
    • Aktivitas jaringan ini tersebar di seluruh lobus frontal dan parietal
    • Biasanya digunakan dalam tugas yang menuntut seseorang mempertahankan banyak informasi sekaligus di dalam pikiran
    • Terkait dengan kemampuan menjalankan berbagai tugas mental
  • Ivanova mengatakan bahwa jaringan ini terlibat dalam hampir semua hal yang menantang secara kognitif dan membuat kita “benar-benar harus berpikir keras”
  • Penelitian sebelumnya menunjukkan bahwa soal matematika dan logika terutama bergantung pada area multiple demand di hemisfer kiri
  • Tugas navigasi spasial diketahui lebih banyak mengaktifkan hemisfer kanan daripada kiri

Perbedaan menurut bahasa kode dan pengaruh keahlian

  • Tim MIT, bersama Marina Bers, mendapatkan hasil bahwa membaca kode mengaktifkan sisi kiri dan kanan dari multiple demand network
  • ScratchJr sedikit lebih mengaktifkan sisi kanan daripada kiri
  • Tidak ditemukan area otak yang khusus didedikasikan hanya untuk pemrograman
  • Namun, masih ada kemungkinan bahwa aktivitas otak yang lebih terspesialisasi berkembang pada orang dengan pengalaman coding yang jauh lebih banyak
    • Fedorenko mengatakan bahwa pada programmer profesional yang telah coding selama 30 atau 40 tahun dalam bahasa tertentu, mungkin akan terlihat spesialisasi atau kristalisasi pada sebagian sistem multiple demand
    • Pada peserta dalam studi ini, yang sudah terbiasa coding dan mampu menyelesaikan tugas dengan efisien tetapi pengalamannya relatif terbatas, spesialisasi seperti itu tidak terlihat

Implikasi pendidikan dan makalah terkait

  • Makalah pendamping dari tim Johns Hopkins University yang terbit di edisi eLife yang sama juga melaporkan bahwa pemecahan masalah kode mengaktifkan multiple demand network, bukan area bahasa
  • Hasil kali ini saja belum cukup untuk menentukan apakah coding harus diajarkan sebagai keterampilan berbasis matematika atau berbasis bahasa
  • Dalam proses belajar pemrograman, sistem bahasa dan sistem multiple demand bisa saja sama-sama terlibat
  • Namun setelah dipelajari, pemrograman tampaknya tidak bergantung pada area bahasa
  • Ivanova menilai bahwa para pendidik ilmu komputer perlu mengembangkan pendekatan mereka sendiri untuk mengajarkan kode dengan paling efektif
  • Makalah terkait: Comprehension of computer code relies primarily on domain-general executive brain regions

1 komentar

 
GN⁺ 2024-05-27
Komentar Hacker News
  • Sepertinya tautan ke makalahnya hilang, kemungkinan besar https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7738192/pdf/eli...
    Isinya tentang programmer yang melihat potongan kode di dalam pemindai fMRI lalu memprediksi perilaku apa yang akan dihasilkan kode itu, dan rasanya kemampuan menulis kode serta kemampuan memahami kode yang ditulis orang lain adalah keterampilan yang berbeda

    • Ini terasa mirip dengan membaca dongeng lalu ditanya “berapa kali menyeberangi jembatan”, “apa yang dipegang di tangan pada akhir cerita”, atau “di mana apel itu berada saat cerita berakhir”
      Ini lebih dekat ke pekerjaan menyimpulkan apa arti sesuatu yang ditulis, daripada memahami apa yang ditulis itu sendiri
    • Membaca kode mungkin mengaktifkan area yang sama seperti saat membaca prosa berbahasa Inggris, tetapi menjalankan kode di dalam kepala bisa jadi mengaktifkan area otak yang berbeda
    • Banyak orang meragukan hasil ini sambil berkata “eksekusi === pemahaman”, tetapi coba pikirkan soal berikut: berapa banyak uang yang Bill habiskan di toko bahan makanan?
      Bill dan Tom pergi ke toko sepatu, Bill membeli sepatu hitam seharga 23,56 dolar, dan Tom membeli sepatu merah seharga 40,30 dolar. Setelah itu mereka pergi ke toko bahan makanan, Tom membeli roti seharga 3,50 dolar dan susu seharga 5,99 dolar, sementara Bill juga membeli roti tetapi tidak membeli susu.
      Aktivitas otak untuk menjawab pertanyaan spesifik ini berbeda dari menjawab “apa yang dilakukan Tom dan Bill?”, dan jika harus mengubah cerita yang sudah ada seperti “tambahkan bagian bahwa Bill mampir ke tukang cukur setelah toko sepatu”, kita harus mengurai tata bahasa dan menjaga konsistensi, jadi itu pun sepenuhnya berbeda
      gambaran besar !== detail !== penulisan !== penyuntingan isi yang sudah ada, dan jika penelitian ini tidak menanyakan keempat jenis pemahaman itu secara setara untuk cerita maupun kode, rasanya studinya belum lengkap
    • Memang berbeda, tetapi tidak sepenuhnya berbeda, karena keduanya memakai jenis penalaran yang sama tentang perilaku program
      Artikelnya juga menghubungkan ini dengan penulisan hanya dalam batas bahwa kode harus bisa dipahami orang lain, bukan dengan aktivitas menulis kode itu sendiri
    • Kalau begitu justru mendukung argumennya. Karena menyusun bahasa alami dan memahaminya juga tumpang tindih cukup banyak
  • Yang lebih mengejutkan adalah ada orang yang punya pengalaman dengan bahasa pemrograman dan benar-benar mengira hasil seperti ini tidak mungkin muncul
    Membuat bahasa pemrograman tampak seperti bahasa manusia hanya di permukaan adalah salah satu kesalahan pemula paling khas dalam desain bahasa. Lihat saja paradigma Perl “do what I mean” dan kekacauan setelahnya
    Perbedaan pentingnya adalah bahwa bahasa pemrograman lebih dekat ke membangun suatu objek daripada berkomunikasi. Ini lebih mirip menyusun rumus, algoritme, struktur data, atau arsitektur dari berbagai komponen, sehingga banyak pemikiran saat memrogram lebih terkait dengan sifat implisit dari apa yang sedang dibangun daripada detail tata bahasa
    Dalam bahasa manusia pun hal serupa bisa dilakukan lewat resep, dokumen hukum, definisi matematis, aturan board game, atau instruksi LLM, tetapi bahasa manusia juga bisa dipakai untuk bentuk komunikasi dengan tujuan yang sama sekali berbeda
    Akan lebih menarik membandingkan aktivitas otak saat membaca kode dengan membaca bahasa manusia yang diformalkan, atau membandingkan bahasa manusia yang diformalkan dengan bahasa nonformal

    • Dari sudut pandang orang yang mengenal dan menggunakan beberapa bahasa pemrograman, dan juga mengenal serta menggunakan beberapa bahasa manusia pada tingkat yang berbeda-beda, saya cenderung melihat keduanya sebagai hal yang sepenuhnya berbeda
      Mempelajari bahasa pemrograman mirip dengan mempelajari keterampilan spesifik lain, dan bukan soal otak programmer melainkan lebih mudah jika memang tertarik. Sebaliknya, mempelajari bahasa manusia sama sekali berbeda dan jauh lebih sulit, sebagian besar terjadi secara setengah sadar, sehingga hasil dari “belajar” dalam pengertian umum juga sangat rendah
    • Salah satu programmer dengan produktivitas terendah yang pernah bekerja dengan saya sangat terobsesi dengan Groovy
    • Pengalaman saya sudah hampir 30 tahun, dan saya membaca kode seperti membaca bahasa manusia
      Visualisasi yang saya gunakan saat membayangkan struktur data juga tidak jauh berbeda dari memvisualisasikan adegan dalam buku
  • Menurut artikel yang ditautkan, membaca kode mengaktifkan area otak yang dipakai untuk menalar dengan hati-hati tentang masalah yang tidak familier
    Artikel itu juga menduga hasilnya mungkin tidak dapat digeneralisasi ke orang dengan pengalaman pemrograman 30 tahun. Saya paham banyak riset akademis dilakukan pada mahasiswa, tetapi bukankah itu sendiri membuat perbandingan dengan pemrosesan bahasa alami yang telah mereka alami selama puluhan tahun menjadi tidak valid?

    • Mungkin bisa dibandingkan dengan mahasiswa tahun kedua yang sedang belajar bahasa asing yang sangat tidak familier
      Sebagai programmer otodidak dengan latar belakang linguistik teoretis dan paparan tingkat universitas pada beberapa bahasa yang cukup berbeda dari bahasa ibu saya, hasil ini tidak mengejutkan. Pada beberapa lapisan memang ada kemiripan yang jelas, tetapi kemiripan antara bahasa manusia dan kode komputer sering dilebih-lebihkan, dan tampak seperti sisa dari linguistik yang lebih primitif yang terlalu sempit berfokus pada tata bahasa
    • Saya sangat penasaran apa yang terjadi ketika subjek melihat codebase yang familier
      Bahkan jika ada kode di dalam repositori yang belum pernah dilihat sebelumnya, rasa akrab terhadap gaya, konvensi, dan bagaimana kode itu menyatu dalam keseluruhan program tampaknya akan sangat memengaruhi cara ia dipersepsikan
    • Saya bisa memahami bahwa dengan pengalaman pemrograman 30 tahun, area otak untuk menalar hati-hati tentang masalah yang tidak familier mungkin jadi kurang aktif
      Jika seseorang belum terbiasa dengan pemrograman, masuk akal bila area untuk masalah yang tidak familier itu aktif. Akan menarik diteliti apakah area itu aktif karena memang tidak familier, atau apakah area tersebut tetap aktif saat berurusan dengan kode meskipun sudah berpengalaman
      Saat membaca kode, biasanya kita memang sedang berhadapan dengan hal yang belum kita ketahui, jadi mungkin selalu ada unsur ketidakfamilieran. Sebaliknya, bisa juga membaca kode itu sendiri menjadi begitu familier sehingga tidak lagi bekerja seperti itu
      Untuk perbandingan yang adil, subjek harus berpengalaman baik dalam pemrosesan bahasa alami maupun pemrograman, tetapi sulit menemukan orang yang sama familiernya di kedua bidang, jadi kemungkinan akhirnya harus berkompromi pada tingkat “cukup familier dengan kode”
  • Inilah alasan saya takut pada masa depan ketika orang berkata “suruh saja AI dengan bahasa biasa, nanti dia akan melakukannya”
    Saya tidak ingin menghabiskan 8 jam setiap hari berinteraksi dengan teks biasa atau percakapan lisan. Rasanya akan sangat melelahkan. Sebaliknya, berurusan dengan bahasa pemrograman selama 8 jam itu menyenangkan

    • Jika masa depan seperti itu datang, mestinya bentuknya lebih mirip pair programming dengan AI, dan kita harus bisa mencampur kode yang dihasilkan AI dengan kode yang ditulis manusia
      Harus ada cara seperti unsafe di Rust untuk mengatakan “di sini saya tahu apa yang saya lakukan, jadi jangan ganggu”. Setelah itu AI bisa memverifikasi ketepatan bagian yang ditulis manusia lewat pengujian atau metode lain
      Sampai tingkat tertentu ini sudah dilakukan, tetapi saat ini manusialah yang memverifikasi kode buatan AI, dan menurut saya masih panjang jalan yang harus ditempuh untuk membalik peran itu
  • Lex Fridman baru-baru ini mewawancarai ahli linguistik Edward Gibson, dan mereka banyak membahas cara otak memproses bahasa.
    Di antaranya juga ada pembahasan bahwa membaca kode melibatkan area otak yang sama sekali berbeda dari bahasa.
    #426 https://lexfridman.com/podcast/
    Setahu saya, Evelina Fedorenko dari makalah ini adalah istri Edward.

    • Terdengar masuk akal. Nilai terburuk saya waktu SD adalah bahasa Prancis, dan bahkan sekarang belajar bahasa Mandarin lewat kelas online malam di community college terasa jauh lebih sulit bagi saya dibandingkan teman sebaya, tetapi pemrograman selalu terasa alami.
      Bagi saya, ini benar-benar kumpulan keterampilan yang berbeda.
    • Bagian terkait [link]https://youtu.be/F3Jd9GI6XqE?t=4847
  • Saya menjalankan kanal YouTube yang kebanyakan berisi membaca kode: https://www.youtube.com/@ants_are_everywhere
    Saya mencoba membaca dan memahami kode dari proyek open source populer dalam keadaan benar-benar pertama kali melihatnya, dan ini agak mirip dengan membaca notasi langsung dalam musik.
    Penjelasan bahwa para peneliti hampir tidak melihat respons terhadap kode di area bahasa, dan bahwa yang terutama aktif justru multiple demand network yang membentang di lobus frontal dan parietal, terdengar masuk akal bagi saya. Jaringan ini dipakai untuk tugas-tugas yang mengharuskan kita menahan banyak informasi di kepala secara bersamaan dan berkaitan dengan kemampuan melakukan berbagai pekerjaan mental.
    Tentu ada unsur bahasa, tetapi upaya yang dipakai untuk pemrosesan bahasa itu sendiri mungkin tidak cukup besar untuk tampak pada sinyal fMRI. Saya sering menahan banyak hal sekaligus: apa yang dilakukan kode itu, apa yang ingin dilakukan penulisnya, latar belakang penulisnya, bagaimana perangkat lunak serupa bekerja, dan sebagainya.
    Saya belajar matematika, tetapi ini juga terasa tidak terlalu mirip dengan membaca tulisan atau mengerjakan matematika.

    • Itu sebabnya gangguan terasa sangat menyebalkan.
      Butuh waktu untuk “memanggil kembali” hal-hal itu ke dalam kepala, dan rasanya seperti menjaga keseimbangan agar semuanya tidak runtuh.
      Jika terganggu di tengah jalan, rasanya seperti kehilangan keseimbangan dan semuanya berantakan, lalu setelahnya harus dikumpulkan lagi, yang memakan waktu dan tenaga. Kalau ini terjadi beberapa kali berturut-turut, rasanya sangat membuat frustrasi.
      Paul Graham membahas ini dalam tulisannya tentang maker schedule dan manager schedule: (2009) https://paulgraham.com/makerschedule.html
    • Bagi saya, membaca kode adalah membaca matematika.
      Rasanya persis sama, dan polanya juga sama dalam hal menahan banyak hal sekaligus di kepala.
    • Pasien langka dengan koma kronis kadang bisa sadar kembali selama beberapa jam dengan obat penenang tidur zolpidem, dan saat itu mereka juga bisa menunjukkan aktivasi parietal dan sedikit aktivasi frontal dorsal.
      Menurut standar neurosains dan pencitraan otak modern, kesimpulannya adalah bahwa membaca kode pada dasarnya sama dengan sadar kembali dari koma dengan zolpidem.
    • Saya penasaran apakah ada korelasi antara kemampuan membaca notasi musik langsung dan kemampuan memahami kode dengan cepat.
      Saya memainkan beberapa alat musik saat kecil dan remaja, tetapi saya tidak mahir membaca langsung. Saya sering mendengar kemampuan musik dan kemampuan pemrograman berkorelasi, tetapi saya tidak akan berhasil menjadi musisi profesional. Sebaliknya, saya berhasil membangun karier yang baik di pemrograman.
  • Ini sama sekali tidak mengejutkan. Membaca kode berbeda dari membaca prosa, juga berbeda dari mengerjakan matematika, dan lebih dekat ke merakit puzzle di dalam kepala.
    Untuk memahami apa yang dilakukan kode, Anda harus menghubungkan, mencocokkan, dan menerjemahkan sangat banyak hal seperti fungsi, simbol, variabel, pernyataan, abstraksi, dan lain-lain secara real time. Karena itu, membaca kode kadang sejak awal bisa lebih rumit daripada menulis kode.

    • Tampilannya juga berbeda, dan tata bahasa serta maknanya pun sangat berbeda.
      Praktis satu-satunya kesamaan adalah bahwa keduanya sama-sama disebut “bahasa”.
    • Kode juga bisa dilihat sebagai kebalikan dari bahasa.
      Itu adalah sekumpulan instruksi mesin tentang apa yang harus dilakukan komputer, dan tidak bisa, juga tidak seharusnya, menjadi metafora bagi sesuatu yang lain seperti di area bahasa.
  • Bagi saya, membaca kode mirip seperti melihat gambar sekumpulan roda gigi lalu ditanya, “Roda gigi A berputar berlawanan arah jarum jam atau searah jarum jam?”
    Rasanya lebih dekat ke menganalisis mekanisme daripada memahami bahasa.

  • Ini juga terlihat dari fakta bahwa saat membaca kode tidak ada suara narasi di kepala saya.

    • Tergantung orangnya. Saya merasa ada suara narasi juga untuk kode, dan meskipun tidak persis sama seperti saat membaca buku, ada sesuatu yang mirip.
      Saat saya mencoba membaca kode, suara bicara atau kebisingan latar tempat saya bisa mengenali kata-kata, seperti musik dari bahasa yang familier, terasa mengganggu dan menjengkelkan. Saya juga tidak bisa berbicara sambil coding, karena kalau begitu ketikan saya jadi kacau.
      Saya juga jauh lebih menyukai bahasa seperti Ruby yang lebih mirip kalimat bahasa Inggris daripada bahasa seperti Rust yang punya banyak simbol atau Haskell yang penuh singkatan dan operator. Tentu saja, pada pengembang lain jalur otak yang aktif mungkin berbeda.
    • Saya punya suara narasi saat membaca kode. Suaranya sama seperti saat membaca laporan teknis atau whitepaper.
      Kode yang sulit dibaca sering kali juga sulit diproses, mungkin karena ritme narasi itu rusak sehingga tidak mengalir secara alami.
      Ketika saya menjelaskan cara kerja sesuatu pun, biasanya saya mengikuti ritme yang sama dengan narasi ini, dan itu membantu saya menjelaskan dengan ringkas serta menyampaikan pengetahuan dengan cepat.
      Namun, ini jelas berbeda dari suara narasi saat membaca novel. Mungkin karena ada atau tidak adanya bahasa emosional di antara keduanya. Mungkin mirip dengan fenomena bahwa sebagian orang punya monolog batin dan sebagian lain tidak, atau berbeda dalam tingkat detail saat membayangkan sesuatu tanpa benar-benar melihatnya.
    • Fakta menariknya, saat memahami bahasa isyarat, suara narasinya sama seperti saat memahami bahasa lisan.
      Maksud “sama” di sini adalah cara kerjanya dan cara “terdengarnya” sama, sementara tata bahasa dan kosakata tentu mengikuti bahasa isyarat yang digunakan. Bahkan area otak yang sama juga aktif.
      Ini tampaknya berarti bahwa suara narasi bukan sekadar “gema suara”, melainkan proses pemahaman itu sendiri. Sama seperti saat membaca tulisan.
    • Dialog batin saya tidak pernah benar-benar diam.
    • Narator di kepala saya memberi tahu hal-hal seperti ini: apakah nilai kembalinya sama untuk argumen yang sama, apakah ada efek samping, apa efek sampingnya, apakah kisah ini bisa diceritakan secara mandiri, apakah variabel dipakai dekat dengan tempat deklarasinya, apakah loop-loop ini melakukan hal yang saya kira, apakah kisah ini disampaikan secara efisien, apakah beberapa efek samping bisa dicegah.
      Khususnya untuk menilai loop, saya perlu mengulang dengan memodifikasi kode sementara waktu.
  • Saya kebanyakan bekerja dari rumah, dan biasanya memutar musik saat ngoding
    Saya suka ikut bernyanyi, jadi saya ngoding sambil bernyanyi seharian di meja kerja
    Tapi saat membaca sesuatu, saya sama sekali tidak bisa seperti ini. Mustahil membaca suatu tulisan sambil menyanyikan lagu lain pada saat yang sama, tetapi saat ngoding ini sangat mudah