- MIT araştırması, kod anlamanın dil işlemeye kıyasla karmaşık problem çözmede kullanılan çoklu talep ağına daha fazla dayandığını gösteriyor
- Python ve ScratchJr kodu okuma üzerine yapılan fMRI deneylerinde Broca alanı gibi sol yarımküredeki dil ağı neredeyse hiç tepki vermedi
- Kod okuma, matematik ve mantık görevleriyle aynı ağı kullanıyor; ancak bu ağ içinde etkinleşen alt bölgeler tamamen aynı değil
- ScratchJr sağ çoklu talep ağını biraz daha fazla etkinleştirdi; araştırmacılar bunu uzamsal gezinme görevlerindeki sağ yarımküre eğilimiyle karşılaştırıyor
- Programlamayı yalnızca matematik ya da dilden biri olarak öğretmek yerine, kod öğrenimine uygun kendine özgü öğretim yöntemleri gerekiyor
Kod okumak, dil okumaktan farklı beyin etkinliği gösteriyor
- Programlama öğrenmek, yeni bir dil öğrenme sürecine benzer
- Yeni semboller ve terimler öğrenmek gerekir
- Bilgisayarın yapacağı işleri yönlendirecek şekilde kodu doğru biçimde düzenlemek gerekir
- Diğer programcıların okuyup anlayabileceği kadar açık yazmak gerekir
- Ancak bilgisayar kodu okurken beynin dil işleme bölgeleri etkinleşmedi
- Bunun yerine, ağırlıklı olarak karmaşık bilişsel görevlerde kullanılan çoklu talep ağı (multiple demand network) etkinleşti
- Bu ağ, matematik problemleri ya da bulmaca çözme gibi görevlerde de devreye girer
- Kod okuma, matematik ve mantık problemleriyle de tamamen aynı değildi
- Çoklu talep ağı içinde bile matematik ve mantık görevlerinden farklı bölümlere daha fazla dayanan bir örüntü görüldü
- Anna Ivanova, bilgisayar kodunu anlamanın dil de, matematik ve mantık da değil; daha çok “kendine özgü bir şey” olduğunu düşünüyor
Programlama dile mi daha yakın, matematiğe mi
- Evelina Fedorenko’nun araştırma ekibi, dil ile diğer bilişsel işlevler arasındaki ilişkiyi araştırıyordu
- Temel soru, diğer işlevlerin beynin dil ağına bağlı olup olmadığıydı
- Bu dil ağına Broca alanı ve sol yarımküredeki diğer bölgeler dahildir
- Fedorenko laboratuvarının önceki araştırmaları, müzik ve matematiğin bu dil ağını etkinleştirmediğini göstermişti
- Bilgisayar programlama görece yakın dönemli bir icat olduğundan, insanlarda programlamaya özel doğuştan bir mekanizma olduğunu düşünmek zordu
- Programlama öğrenimine ilişkin görüşler kabaca ikiye ayrılıyordu
- Programlamada iyi olmak için matematikte iyi olmak gerektiği görüşü
- Kodlama ile dil arasındaki benzerlikler nedeniyle dil becerisinin daha ilişkili olabileceği görüşü
fMRI deneyi: Python ve ScratchJr kodu okuma
- Deneyde kullanılan diller, okunabilirliği yüksek programlama dilleri olarak bilinen Python ve ScratchJr idi
- ScratchJr, 5 yaş ve üzeri çocuklar için tasarlanmış görsel bir programlama dilidir
- Katılımcılar, test edildikleri dilde yetkin genç yetişkinlerdi
- Katılımcılar, fonksiyonel manyetik rezonans görüntüleme (fMRI) tarayıcısının içinde kod parçaları gördü
- Görev, ilgili kodun hangi davranışı üreteceğini tahmin etmekti
Sonuç: Dil bölgelerinden çok çoklu talep ağı merkezde
- Beynin dil bölgeleri koda çok az tepki verdi ya da hiç tepki vermedi
- Kod görevleri ağırlıklı olarak çoklu talep ağını etkinleştirdi
- Bu ağın etkinliği frontal ve parietal loblar genelinde dağılır
- Genellikle birden çok bilgiyi aynı anda zihinde tutmayı gerektiren görevlerde devreye girer
- Çeşitli zihinsel görevleri yerine getirme becerisiyle ilişkilidir
- Ivanova, bu ağın bilişsel olarak zorlayıcı ve “üzerinde ciddi düşünmeyi” gerektiren neredeyse her işte rol aldığını söylüyor
- Önceki araştırmalar, matematik ve mantık problemlerinin ağırlıklı olarak sol yarımküredeki çoklu talep bölgelerine dayandığını göstermişti
- Uzamsal gezinme görevlerinin, sol yarımküreden çok sağ yarımküreyi etkinleştirdiği biliniyor
Kod dillerine göre farklar ve uzmanlığın etkisi
- MIT ekibi, Marina Bers ile birlikte kod okumanın çoklu talep ağının hem sol hem de sağ tarafını etkinleştirdiği sonucuna ulaştı
- ScratchJr, solu kıyasla sağı biraz daha fazla etkinleştirdi
- Yalnızca programlamaya ayrılmış bir beyin bölgesi tespit edilmedi
- Ancak çok daha fazla kodlama deneyimi olan kişilerde özelleşmiş beyin etkinliğinin gelişmiş olma olasılığı bulunuyor
- Fedorenko, belirli bir dilde 30 ya da 40 yıl kod yazmış profesyonel programcılarda çoklu talep sisteminin bazı bölümlerinde uzmanlaşma ya da kristalleşme görülebileceğini söylüyor
- Bu çalışmadaki katılımcılar gibi kodlamaya aşina olan ve görevi verimli biçimde yerine getirebilen, ancak deneyimi görece sınırlı kişilerde böyle bir uzmanlaşma görülmedi
Eğitim açısından sonuçlar ve ilgili makale
- Aynı eLife sayısında yayımlanan Johns Hopkins University araştırma ekibinin eşlik eden makalesi de kod problemi çözmenin dil bölgelerini değil, çoklu talep ağını etkinleştirdiğini bildiriyor
- Bu sonuçlar tek başına, kodlamanın matematik temelli bir beceri olarak mı yoksa dil temelli bir beceri olarak mı öğretilmesi gerektiğini belirlemeyi zorlaştırıyor
- Programlama öğrenme sürecinde hem dil sistemi hem de çoklu talep sistemi rol oynayabilir
- Ancak bir kez öğrenildikten sonra programlamanın dil bölgelerine dayanmadığı görüldü
- Ivanova, bilgisayar bilimi eğitimcilerinin kodu en etkili şekilde öğretmek için kendi yaklaşımlarını geliştirmesi gerektiğini düşünüyor
- İlgili makale: Comprehension of computer code relies primarily on domain-general executive brain regions
1 yorum
Hacker News yorumları
Makale bağlantısı eksik gibi görünüyor; muhtemelen https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7738192/pdf/eli... bu
İçerik, programcıların fMRI tarayıcısının içinde kod parçalarına bakıp o kodun ne yapacağını tahmin etmesiyle ilgili; kod yazma becerisi ile başkasının yazdığı kodu anlama becerisi birbirinden farklı yetenekler gibi görünüyor
Yazılanı anlamaktan çok, yazılanın ne anlama geldiğini çıkarımlama işine daha yakın
Bill ve Tom ayakkabı mağazasına gitti; Bill 23,56 dolarlık siyah ayakkabı aldı, Tom ise 40,30 dolarlık kırmızı ayakkabı aldı. Sonra bakkala gittiler; Tom 3,50 dolarlık ekmek ve 5,99 dolarlık süt aldı, Bill de ekmek aldı ama süt almadı.
Bu belirli soruya yanıt veren beyin etkinliği, “Tom ve Bill ne yaptı?” sorusuna yanıt vermekten farklıdır; “ayakkabı mağazasından sonra Bill’in berbere uğradığı kısmı ekle” gibi mevcut hikâyeyi değiştirmek ise dilbilgisini ayrıştırmayı ve tutarlılığı korumayı gerektirir, yani bambaşka bir iştir
büyük resim !== ayrıntılar !== yazma !== mevcut içeriği düzenleme; hem hikâye hem kod için bu dört tür anlamayı eşit biçimde sormadıysa çalışma eksikmiş gibi geliyor
Makale de kod yazmanın kendisiyle değil, yalnızca başkalarının anlayabileceği ölçüde yazma ile bağlantı kuruyor
Programlama dili deneyimi olan birinin gerçekten böyle bir sonuç çıkabileceğini düşünmüş olması daha da şaşırtıcı
Programlama dillerini yüzeysel olarak insan dili gibi göstermeye çalışmak, dil tasarımındaki tipik acemi hatalarından biridir. Perl’in “do what I mean” paradigmasına ve ardından gelen karmaşaya bakmak yeterli
Kritik fark şu: programlama dili iletişimden çok bir şey inşa etmeye daha yakındır. Formüller, algoritmalar, veri yapıları, çeşitli bileşenlerin mimarisi gibi şeyler kurmaya benzer; bu yüzden programlama sırasındaki düşüncenin büyük kısmı dilbilgisel ayrıntılardan çok inşa edilen şeyin örtük özelliklerine takılır
İnsan diliyle de tarifler, hukuk metinleri, matematiksel tanımlar, kutu oyunu kuralları, LLM komutları gibi benzer işler yapılabilir; ama insan dili tamamen farklı amaçlı iletişim biçimleri için de kullanılabilir
Kod okuma ile biçimselleştirilmiş insan dili okumayı ya da biçimselleştirilmiş insan dili ile biçimsel olmayan dil okumanın beyin etkinliğini karşılaştırmak daha ilginç olurdu
Programlama dili öğrenmek başka belirli bir beceriyi öğrenmeye benzer; “programcı beyni”nden çok ilgi duymak yardımcı olur. Buna karşılık insan dili öğrenimi tamamen farklı ve çok daha zordur; çoğu büyük ölçüde yarı bilinçli gerçekleşir, bu yüzden alışılmış anlamda “çalışmanın” getirisi de çok düşüktür
Veri yapılarını zihnimde canlandırma biçimim de bir kitaptaki sahneleri gözümde canlandırmaktan çok farklı değil
Bağlantısı verilen makaleye göre, kod okumak tanıdık olmayan problemler üzerinde dikkatle akıl yürütmeyi sağlayan beyin bölgelerini etkinleştiriyor
Ayrıca bunun 30 yıllık programlama deneyimi olanlara genellenemeyebileceği de öne sürülüyor; akademik çalışmaların sık sık öğrenciler üzerinde yapılmasını anlıyorum. Ama deneklerin, onlarca yıllık doğal dil işleme deneyimiyle karşılaştırılıyor olması başlı başına geçersiz kılmıyor mu?
Kuramsal dilbilim geçmişi olan ve ana dilinden epey farklı birkaç dili üniversite düzeyinde görmüş bir otodidakt programcı olarak, bu sonuç bana şaşırtıcı gelmiyor. Bazı katmanlarda açık benzerlikler var, ama insan dili ile bilgisayar kodu arasındaki benzerlikler sık sık abartılıyor; daha dar biçimde sözdizimine odaklanan ilkel dilbilim anlayışının bir kalıntısı gibi duruyor
Depoda ilk kez görülen kod olsa bile, stil, teamüller ve bunun genel programın içine nasıl oturduğuna dair aşinalık, algılama biçimini büyük ölçüde etkiler gibi geliyor
Programlamaya alışık değilseniz, tanıdık olmayan problem alanlarının devreye girmesi mantıklı. İlginç olan, bunun yalnızca alan yabancı olduğu için mi etkinleştiği, yoksa kod diye bir nesneyle uğraşırken deneyim olsa da hep mi devreye girdiğini araştırmak olurdu
Kod okurken genelde zaten baştan bilinmeyen bir şeyle uğraşırsınız; dolayısıyla hep bir miktar yabancılık olabilir. Tersi de mümkün: kod okuma eyleminin kendisine alışılır ve artık böyle çalışmaz
Adil bir karşılaştırma için deneklerin hem doğal dil işleme hem programlama konusunda deneyimli olması gerekir; ama her iki alana da eşit derecede hâkim insan bulmak zor olduğundan, muhtemelen sonunda “koda yeterince aşina” düzeyinde uzlaşmak gerekir
İnsanların “AI’ya doğal dille söylersin, o da aynen yapar” demesi yüzünden gelecek beni tam da bu nedenle korkutuyor
Her gün 8 saat boyunca normal metin ya da konuşma diliyle sohbet etmek istemem. Fazlasıyla yorucu olurdu. Buna karşılık programlama diliyle 8 saat uğraşmak eğlenceli
Rust’taki
unsafegibi, “burada ne yaptığımı biliyorum, karışma” diyebilmelisiniz. Sonra da AI testlerle ya da başka yollarla insanın yazdığı kısmın doğruluğunu doğrulasınBunu şimdiden bir ölçüde yapıyoruz, ama şu anda AI’nın ürettiği kodu doğrulayan taraf insan; rolleri tersine çevirmek içinse bence daha gidilecek çok yol var
Lex Fridman kısa süre önce dilbilimci Edward Gibson ile röportaj yaptı ve beynin dili işleme biçimi hakkında epey konuştular
Bunların arasında, kod okumanın dilden tamamen farklı beyin bölgelerini ortaya çıkardığına dair bir bölüm de vardı
#426 https://lexfridman.com/podcast/
Bu makalenin yazarı Evelina Fedorenko'nun Edward'ın eşi olduğunu sanıyorum
Bana göre bunlar tamamen farklı beceri kümeleri
Ağırlıklı olarak kod okuduğum bir YouTube kanalı yürütüyorum: https://www.youtube.com/@ants_are_everywhere
Popüler açık kaynak projelerinin kodunu ilk kez görüyormuş gibi okuyup anlamaya çalışıyorum; bu biraz müzikte deşifre çalmaya benziyor
Araştırmacıların dil bölgelerinde koda neredeyse hiç tepki görmemesi ve bunun yerine frontal ve parietal loblara yayılan multiple demand network'ün ağırlıklı olarak etkinleştiğini söylemesi bana mantıklı geliyor. Bu ağ, aynı anda birden çok bilgiyi zihinde tutmayı gerektiren görevlerde devreye girer ve çeşitli zihinsel işleri yapabilme yeteneğiyle ilişkilidir
Elbette işin içinde dil var, ama dil işlemeye başlı başına çok çaba harcanmadığı için bu fMRI sinyalinde görünmüyor olabilir. Ben çoğu zaman kodun ne yaptığını, yazarın ne yapmaya çalıştığını, yazarın arka planını, benzer yazılımların nasıl çalıştığını ve daha birçok şeyi aynı anda akılda tutuyorum
Matematik okudum, ama bu da ne yazı okumaya ne de matematik yapmaya pek benziyor
Bunları zihinde tekrar “yüklemek” biraz zaman alıyor ve her şey dağılmasın diye sürekli dengeyi korumak gereken bir denge kurma işi gibi
Araya girildiğinde dengeyi kaybedip her şey darmadağın olmuş gibi geliyor; sonra hepsini tekrar toplamak zaman ve emek istiyor. Bu üst üste birkaç kez olunca aşırı derecede bunaltıcı oluyor
Paul Graham bunu maker schedule ve manager schedule hakkındaki yazısında ele alıyor: (2009) https://paulgraham.com/makerschedule.html
Hissi birebir aynı ve aynı anda birçok şeyi zihinde tutma örüntüsü de aynı
Modern sinirbilim ve beyin görüntüleme açısından bakarsak, buradan kod okumanın temelde komadayken zolpidem ile bilincini geri kazanmak olduğu sonucu çıkıyor
Çocukken ve ergenliğimde birkaç enstrüman çaldım ama deşifrede iyi değildim. Müzik yeteneği ile programlama yeteneğinin sık sık ilişkili olduğu söylenir ama profesyonel müzisyen olamazdım. Buna karşılık programlamada iyi bir kariyer kurdum
Hiç şaşırtıcı değil. Kod okumak düzyazı okumaktan da, matematik yapmaktan da farklı; daha çok zihinde bir bulmacayı birleştirmek gibi
Kodun ne yaptığını anlamak için fonksiyonları, sembolleri, değişkenleri, ifadeleri, soyutlamaları ve daha nice şeyi gerçek zamanlı olarak bağlamak, eşlemek ve çevirmek gerekiyor. Bu yüzden kod okumak, en baştan kod yazmaktan bile daha karmaşık hale gelebiliyor
Esasen tek ortak noktaları ikisine de “dil” denmesi
Çünkü bilgisayarın ne yapacağını yazan bir makine komutları kümesi ve dil bölgelerinde olduğu gibi başka bir şeyin metaforu olamaz, olmamalıdır da
Benim için kod okumak, bir dişli çarklar grubunun çizimine bakıp “A dişlisi saat yönünün tersine mi dönüyor, saat yönünde mi?” diye sorulmasına benziyor
His olarak dil anlamaktan çok bir mekanizmayı analiz etmek gibi
Kodu okurken kafamda anlatıcı bir ses olmamasından da bunu anlayabiliyorum
Kodu okumaya çalışırken konuşma sesi ya da tanıdık bir dilin melodisi gibi, kelimelerin seçilebildiği arka plan gürültüsü varsa dikkatimi dağıtıyor ve sinir bozuyor. Kod yazarken konuşamam da; konuşursam yazarken hata yapıyorum
Ayrıca Rust gibi simgesi çok olan veya Haskell gibi kısaltma ve operatörü fazla olan dillerdense, Ruby gibi İngilizce cümlelere daha yakın dilleri çok daha fazla seviyorum. Tabii başka geliştiricilerde farklı beyin yolları etkinleşiyor olabilir
Akıcı okunmayan kodu işlemek çoğu zaman zordur; muhtemelen o anlatıcının ritmi bozulduğu ve doğal akış kaybolduğu içindir
Bir işleyiş biçimini açıklarken de genellikle bu anlatıcının ritmini takip ederim; bu da kısa anlatmaya ve bilgiyi hızlı aktarmaya yardımcı olur
Ama roman okurkenki anlatıcı sesiyle kesinlikle aynı değil. Sanırım aradaki fark, duygusal dilin varlığı ya da yokluğundan kaynaklanıyor. Bu, bazı insanların iç monoloğa sahip olması, bazılarının olmaması ya da bir şeyi gerçekten görmeden zihinde canlandırabildikleri ayrıntı düzeyinin farklı olması gibi bir durum olabilir
Buradaki “aynı”, çalışma biçiminin ve “işitilme” şeklinin aynı olduğu anlamına geliyor; elbette dilbilgisi ve kelime dağarcığı kullanılan işaret diline göre değişiyor. Gerçekten de aynı beyin bölgeleri çalışıyor
Bu da anlatıcı sesinin sadece bir “ses yankısı” değil, bizzat anlama sürecinin kendisi olduğunu düşündürüyor. Yazı okurken olduğu gibi
Özellikle döngülerle ilgili yargıya varmak için çoğu zaman kodu geçici olarak değiştirip tekrar tekrar denemek gerekiyor
Genellikle evden çalışıyorum ve kod yazarken çoğu zaman müzik açıyorum
Müziğe eşlik etmeyi sevdiğim için gün boyu masamda oturup şarkı söyleyerek kod yazıyorum
Ama bir şey okurken bunu asla yapamam. Bir metni okurken aynı anda başka bir şarkıyı söylemek imkânsız, ama kod yazarken bu çok kolay