1 puan yazan GN⁺ 2024-05-27 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2024-05-27
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

    • Bu, bir masal okuyup “kaç kez köprüden geçildiğini”, “sonunda elinde ne olduğunu”, “bittiğinde elmanın nerede olduğunu” sormaya benziyor
      Yazılanı anlamaktan çok, yazılanın ne anlama geldiğini çıkarımlama işine daha yakın
    • Kod okumak, İngilizce düzyazı okurken etkinleşen alanlarla aynı bölgeleri harekete geçirebilir; ama kodu zihinde çalıştırmak farklı beyin bölgelerini etkinleştirebilir
    • Birçok kişi bu sonuca şüpheyle yaklaşıp “çalıştırma === anlama” diyor, ama şu soruyu düşününce farklı oldukları görülüyor: Bill bakkalda ne kadar harcadı?
      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
    • Farklılar, ama tamamen farklı değiller; ikisi de program davranışı hakkında aynı türden çıkarım kullanıyor
      Makale de kod yazmanın kendisiyle değil, yalnızca başkalarının anlayabileceği ölçüde yazma ile bağlantı kuruyor
    • O hâlde bu aslında savı destekliyor. Çünkü doğal dili kurmak ile onu anlamak da büyük ölçüde örtüşüyor
  • 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

    • Birden fazla programlama dilini bilen ve kullanan, ayrıca birkaç insan dilini de farklı düzeylerde bilen ve kullanan biri olarak, ikisinin tamamen farklı şeyler olduğu görüşündeyim
      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
    • Birlikte çalıştığım en düşük verimli programcılardan biri Groovy takıntılıydı
    • Neredeyse 30 yıllık deneyimim var ve ben kodu insan dili gibi okuyorum
      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?

    • Belki çok yabancı bir dili öğrenen ikinci sınıf öğrencileriyle karşılaştırmak gerekir
      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
    • Denek aşina olduğu bir kod tabanına baktığında ne olduğunu gerçekten merak ediyorum
      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
    • 30 yıllık programlama deneyimi varsa, tanıdık olmayan problemler üzerinde dikkatle akıl yürütmeyi sağlayan beyin bölgeleri daha az etkinleşebilir diye anlıyorum
      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

    • Eğer böyle bir gelecek gelecekse, AI ile eşli programlamaya daha yakın olmalı ve AI’nın ürettiği kodla insanın yazdığı kod karıştırılabilmeli
      Rust’taki unsafe gibi, “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ın
      Bunu ş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

    • İkna edici. İlkokulda en düşük notum Fransızcaydı ve şimdi bile community college'ın akşam çevrimiçi derslerinde Çince öğrenmek yaşıtlarıma göre benim için çok daha zor, ama programlama bana hep doğal geldi
      Bana göre bunlar tamamen farklı beceri kümeleri
    • İlgili bölüm [link]https://youtu.be/F3Jd9GI6XqE?t=4847
  • 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

    • Bu yüzden bölünmek bu kadar sinir bozucu
      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
    • Benim için kod okumak matematik okumak gibi
      Hissi birebir aynı ve aynı anda birçok şeyi zihinde tutma örüntüsü de aynı
    • Nadir görülen bazı kronik koma hastaları yatıştırıcı-uyku ilacı zolpidem ile birkaç saatliğine bilincini geri kazandığında da parietal loblarda ve bir miktar dorsal frontal aktivasyonda artış görülebiliyor
      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
    • Müzikte deşifre çalma yeteneği ile kodu hızlı anlama yeteneği arasında bir korelasyon olup olmadığını merak etmiştim
      Ç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

    • Dış görünüşü de farklı, sözdizimi ve anlamı da çok farklı
      Esasen tek ortak noktaları ikisine de “dil” denmesi
    • Hatta kodun dilin tam tersi olduğu da söylenebilir
      Çü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

    • Bu kişiden kişiye değişir. Ben kodda da anlatıcı bir ses varmış gibi hissediyorum; kitapla tamamen aynı değil ama benzer bir şey
      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
    • Kod okurken anlatıcı bir sesim var. Teknik rapor ya da whitepaper okurkenki sesle aynı
      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
    • İlginç bir bilgi olarak, işaret dilini anladığımda duyduğum anlatıcı sesi, konuşma dilini anladığımdakiyle aynı
      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
    • İçimdeki konuşma hiç susmuyor
    • İçimdeki anlatıcı bana şunları söylüyor: aynı girdiler için dönüş değeri aynı mı, yan etki var mı, varsa o yan etkiler neler, bu hikâye bağımsız olarak anlatılabilir mi, değişkenler tanımlandıkları yere yakın mı kullanılıyor, döngüler benim düşündüğüm işi yapıyor mu, bu hikâye verimli biçimde aktarılıyor mu, bazı yan etkiler önlenebilir mi
      Ö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