Das Gehirn verarbeitet das Lesen von Computercode anders als das Lesen von Sprache (2020)
(news.mit.edu)- Eine MIT-Studie zeigt, dass das Verstehen von Code stärker auf das Multiple-Demand-Netzwerk angewiesen ist, das für komplexe Problemlösungen genutzt wird, als auf die Sprachverarbeitung
- In fMRI-Experimenten zum Lesen von Python- und ScratchJr-Code reagierte das Sprachnetzwerk der linken Hemisphäre, darunter das Broca-Areal, kaum
- Das Lesen von Code nutzt zwar dasselbe Netzwerk wie Mathematik- und Logikaufgaben, die im Netzwerk aktivierten Teilbereiche sind jedoch nicht vollständig identisch
- ScratchJr aktivierte das rechte Multiple-Demand-Netzwerk etwas stärker; das Forschungsteam verglich dies mit der Rechtshemisphären-Tendenz bei räumlichen Navigationsaufgaben
- Statt Programmieren nur als Mathematik oder nur als Sprache zu unterrichten, braucht es eine eigene Didaktik, die auf das Lernen von Code zugeschnitten ist
Das Lesen von Code zeigt andere Gehirnaktivität als das Lesen von Sprache
- Das Erlernen des Programmierens ähnelt dem Lernen einer neuen Sprache
- Man muss neue Symbole und Begriffe lernen
- Man muss Code korrekt so strukturieren, dass er dem Computer sagt, was er ausführen soll
- Man muss ihn so klar schreiben, dass andere Programmierer ihn lesen und verstehen können
- Dennoch wurden beim Lesen von Computercode die Sprachverarbeitungsbereiche des Gehirns nicht aktiviert
- Stattdessen wurde vor allem das Multiple-Demand-Netzwerk (multiple demand network) aktiviert, das bei komplexen kognitiven Aufgaben eingesetzt wird
- Dieses Netzwerk wird auch bei Aufgaben wie Mathematikproblemen oder Kreuzworträtseln genutzt
- Das Lesen von Code war aber auch nicht vollständig mit Mathematik- oder Logikproblemen identisch
- Selbst innerhalb des Multiple-Demand-Netzwerks zeigte sich eine stärkere Abhängigkeit von anderen Bereichen als bei Mathematik- und Logikaufgaben
- Anna Ivanova sieht das Verständnis von Computercode eher als „etwas Eigenständiges“ an, weder Sprache noch Mathematik oder Logik
Ist Programmieren eher Sprache oder eher Mathematik?
- Das Forschungsteam um Evelina Fedorenko untersucht seit Langem die Beziehung zwischen Sprache und anderen kognitiven Funktionen
- Die zentrale Frage war, ob andere Funktionen auf das Sprachnetzwerk des Gehirns angewiesen sind
- Zu diesem Sprachnetzwerk gehören das Broca-Areal und weitere Bereiche der linken Hemisphäre
- Frühere Arbeiten aus Fedorenkos Labor zeigten, dass Musik und Mathematik dieses Sprachnetzwerk nicht aktivieren
- Da Computerprogrammierung eine relativ junge Erfindung ist, schien es unwahrscheinlich, dass Menschen über einen angeborenen, speziell für Programmierung vorgesehenen Mechanismus verfügen
- Die Sichtweisen auf das Erlernen des Programmierens lassen sich grob in zwei Lager einteilen
- Die eine Position besagt, dass man gut in Mathematik sein müsse, um gut programmieren zu können
- Die andere nimmt an, dass wegen der Ähnlichkeit von Coding und Sprache eher die Sprachfähigkeit relevant sein könnte
fMRI-Experiment: Python- und ScratchJr-Code lesen
- Die im Experiment untersuchten Sprachen waren Python und ScratchJr, die als gut lesbare Programmiersprachen gelten
- ScratchJr ist eine visuelle Programmiersprache, die für Kinder ab 5 Jahren entwickelt wurde
- Die Teilnehmenden waren junge Erwachsene, die die jeweils getestete Sprache gut beherrschten
- Sie betrachteten Codeausschnitte in einem Scanner für funktionelle Magnetresonanztomographie (fMRI)
- Die Aufgabe bestand darin vorherzusagen, welches Verhalten der jeweilige Code erzeugen würde
Ergebnis: Das Multiple-Demand-Netzwerk steht im Zentrum, nicht die Sprachareale
- Die Sprachareale des Gehirns reagierten auf Code kaum oder gar nicht
- Code-Aufgaben aktivierten hauptsächlich das Multiple-Demand-Netzwerk
- Die Aktivität dieses Netzwerks war über Frontal- und Parietallappen verteilt
- Es wird typischerweise bei Aufgaben eingesetzt, bei denen mehrere Informationen gleichzeitig im Kopf gehalten werden müssen
- Es steht mit der Fähigkeit in Zusammenhang, verschiedenste mentale Aufgaben auszuführen
- Ivanova sagt, dieses Netzwerk sei an fast allem beteiligt, was kognitiv anspruchsvoll ist und bei dem man „intensiv nachdenken“ muss
- Frühere Studien zeigten, dass Mathematik- und Logikprobleme vor allem auf Multiple-Demand-Bereiche der linken Hemisphäre angewiesen sind
- Es ist bekannt, dass räumliche Navigationsaufgaben die rechte Hemisphäre stärker aktivieren als die linke
Unterschiede zwischen den Code-Sprachen und der Einfluss von Expertise
- Das MIT-Team kam gemeinsam mit Marina Bers zu dem Ergebnis, dass das Lesen von Code sowohl die linke als auch die rechte Seite des Multiple-Demand-Netzwerks aktiviert
- ScratchJr aktivierte die rechte Seite etwas stärker als die linke
- Ein speziell nur für Programmierung zuständiger Gehirnbereich wurde nicht identifiziert
- Allerdings bleibt die Möglichkeit bestehen, dass sich bei Menschen mit deutlich mehr Programmerfahrung spezialisierte Gehirnaktivität entwickelt
- Fedorenko sagt, dass sich bei professionellen Programmierern, die 30 oder 40 Jahre in einer bestimmten Sprache programmiert haben, eine Spezialisierung oder Verfestigung in Teilen des Multiple-Demand-Systems zeigen könnte
- Bei Personen wie den Teilnehmenden dieser Studie, die zwar mit Coding vertraut waren und die Aufgaben effizient bearbeiten konnten, aber vergleichsweise wenig Erfahrung hatten, zeigte sich eine solche Spezialisierung nicht
Pädagogische Implikationen und verwandte Studie
- Eine Begleitstudie eines Forschungsteams der Johns Hopkins University, die in derselben Ausgabe von eLife erschien, berichtet ebenfalls, dass das Lösen von Code-Problemen nicht die Sprachareale, sondern das Multiple-Demand-Netzwerk aktiviert
- Aus diesen Ergebnissen allein lässt sich schwer ableiten, ob Coding als mathematisch basierte oder sprachbasierte Fähigkeit unterrichtet werden sollte
- Beim Erlernen des Programmierens könnten sowohl das Sprachsystem als auch das Multiple-Demand-System beteiligt sein
- Ist das Programmieren jedoch einmal gelernt, scheint es nicht auf die Sprachareale angewiesen zu sein
- Ivanova ist der Ansicht, dass Informatikdidaktiker eigene Ansätze entwickeln sollten, um Code möglichst effektiv zu vermitteln
- Verwandte Studie: Comprehension of computer code relies primarily on domain-general executive brain regions
1 Kommentare
Hacker-News-Kommentare
Es scheint, als würde der Link zum Paper fehlen; vermutlich ist es https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7738192/pdf/eli...
Darin geht es darum, dass Programmierer im fMRI-Scanner Codefragmente sahen und vorhersagen sollten, welches Verhalten dieser Code erzeugen würde. Die Fähigkeit, Code zu schreiben, und die Fähigkeit, von anderen geschriebenen Code zu verstehen, scheinen unterschiedliche Fertigkeiten zu sein.
Es geht weniger darum, das Geschriebene zu verstehen, sondern eher darum, abzuleiten, was es bedeutet.
Bill und Tom gingen in ein Schuhgeschäft, und Bill kaufte schwarze Schuhe für 23,56 Dollar, Tom rote Schuhe für 40,30 Dollar. Danach gingen sie in ein Lebensmittelgeschäft, wo Tom Brot für 3,50 Dollar und Milch für 5,99 Dollar kaufte; Bill kaufte ebenfalls Brot, aber keine Milch.
Die Hirnaktivität, die nötig ist, um diese konkrete Frage zu beantworten, ist etwas anderes als die, mit der man „Was haben Tom und Bill gemacht?“ beantwortet. Und wenn man die bestehende Geschichte ändern soll, etwa „Füge hinzu, dass Bill nach dem Schuhgeschäft noch zum Friseur ging“, muss man Grammatik parsen und Konsistenz bewahren — das ist wiederum etwas ganz anderes.
Gesamtbild !== Details !== Schreiben !== vorhandenen Inhalt bearbeiten, und wenn die Studie diese vier Arten des Verstehens nicht für Geschichten und Code gleichermaßen abgefragt hat, wirkt sie unvollständig.
Auch der Artikel verknüpft das nur insofern mit dem Schreiben von Code, als dieser für andere verständlich sein muss.
Noch erstaunlicher ist, dass jemand mit Erfahrung in Programmiersprachen wirklich dachte, so ein Ergebnis könnte überraschend sein.
Programmiersprachen nur oberflächlich menschenähnlich aussehen zu lassen, ist einer der klassischen Anfängerfehler im Sprachdesign. Man muss sich nur Perls „do what I mean“-Paradigma und das darauffolgende Chaos ansehen.
Der entscheidende Unterschied ist, dass Programmiersprachen weniger der Kommunikation dienen als vielmehr dem Konstruieren eines Gegenstands. Es geht eher darum, Dinge wie mathematische Ausdrücke, Algorithmen, Datenstrukturen oder die Architektur mehrerer Komponenten zu bauen; deshalb hängt beim Programmieren viel Denken weniger an syntaktischen Details als an den impliziten Eigenschaften dessen, was konstruiert wird.
Mit menschlicher Sprache kann man Ähnliches tun — etwa bei Rezepten, Rechtstexten, mathematischen Definitionen, Brettspielregeln oder LLM-Anweisungen —, aber menschliche Sprache kann ebenso für völlig andere Kommunikationszwecke verwendet werden.
Es wäre interessanter, Hirnaktivität beim Lesen von Code mit der beim Lesen formaliserter menschlicher Sprache zu vergleichen, oder formalisierte menschliche Sprache mit informeller Sprache.
Das Lernen von Programmiersprachen ähnelt dem Erlernen anderer spezieller Fertigkeiten, und eher Interesse als ein spezielles Programmiererhirn hilft dabei. Das Lernen menschlicher Sprachen ist dagegen ganz anders und viel schwieriger; es läuft größtenteils halbbewusst ab, sodass „Lernen“ im üblichen Sinn nur sehr wenig Ertrag bringt.
Die Visualisierung, die ich beim Nachdenken über Datenstrukturen verwende, unterscheidet sich nicht groß von der Visualisierung von Szenen in einem Buch.
Dem verlinkten Artikel zufolge aktiviert das Lesen von Code Hirnregionen, die für sorgfältiges Schlussfolgern über unbekannte Probleme zuständig sind.
Außerdem wird vermutet, dass sich das bei jemandem mit 30 Jahren Programmerfahrung nicht verallgemeinern lässt. Ich verstehe, warum in der Wissenschaft oft mit Studierenden gearbeitet wird. Aber macht das den Vergleich mit natürlicher Sprachverarbeitung, in der die Versuchspersonen jahrzehntelange Erfahrung haben, nicht von vornherein ungültig?
Als autodidaktischer Programmierer mit Hintergrund in theoretischer Linguistik und Hochschulerfahrung mit mehreren Sprachen, die sich deutlich von meiner Muttersprache unterscheiden, überrascht mich das Ergebnis nicht. Auf manchen Ebenen gibt es klar Ähnlichkeiten, aber die Ähnlichkeit zwischen menschlicher Sprache und Computercode wird oft übertrieben und wirkt wie ein Überbleibsel älterer, primitiverer Linguistik, die sich zu eng auf Grammatik konzentrierte.
Selbst wenn darin Code steht, den sie noch nie gesehen haben, dürfte die Vertrautheit mit Stil, Konventionen und damit, wie dieser Code ins Gesamtprogramm passt, großen Einfluss auf die Wahrnehmung haben.
Wenn man mit Programmieren nicht vertraut ist, ergibt es Sinn, dass ein Bereich für unbekannte Probleme aktiv wird. Es wäre interessant zu untersuchen, ob er nur wegen der Unvertrautheit aktiv wird oder ob er beim Umgang mit Code auch bei Erfahrung weiterhin aktiv bleibt.
Beim Lesen von Code hat man es meist ohnehin mit etwas zu tun, das man noch nicht weiß, also könnte es immer ein Stück weit unbekannt sein; andererseits könnte das Lesen von Code selbst so vertraut werden, dass es nicht mehr auf diese Weise funktioniert.
Für einen fairen Vergleich müssten die Versuchspersonen sowohl in natürlicher Sprachverarbeitung als auch im Programmieren Erfahrung haben. Da es aber schwer sein dürfte, Menschen zu finden, die in beiden Bereichen gleich vertraut sind, müsste man sich wahrscheinlich mit „hinreichend vertraut mit Code“ begnügen.
Genau deshalb macht mir die Zukunft Angst, wenn Leute sagen: „Wir sagen der AI einfach in normaler Sprache, was sie tun soll, und sie macht es dann.“
Ich möchte nicht jeden Tag 8 Stunden lang über normalen Text oder Sprache kommunizieren. Das wäre mir zu anstrengend. Dagegen macht es mir Spaß, 8 Stunden mit Programmiersprachen zu arbeiten.
So wie bei Rusts
unsafesollte man sagen können: „Hier weiß ich, was ich tue, also stör mich nicht.“ Danach kann die AI mit Tests oder anderen Methoden die Korrektheit der vom Menschen geschriebenen Teile verifizieren.In gewissem Maß tun wir das bereits, aber im Moment ist es noch der Mensch, der den von der AI erzeugten Code überprüft; bis sich diese Rollen umkehren, ist es wohl noch ein weiter Weg.
Lex Fridman hat kürzlich den Linguisten Edward Gibson interviewt und viel darüber gesprochen, wie das Gehirn Sprache verarbeitet.
Darunter war auch der Punkt, dass das Lesen von Code ganz andere Hirnareale aktiviert als das Lesen von Sprache.
#426 https://lexfridman.com/podcast/
Soweit ich weiß, ist Evelina Fedorenko aus dieser Arbeit Edwards Frau.
Für mich ist das ein völlig anderes Bündel an Fähigkeiten.
Ich betreibe einen YouTube-Kanal, auf dem ich hauptsächlich Code lese: https://www.youtube.com/@ants_are_everywhere
Ich versuche, den Code populärer Open-Source-Projekte zum ersten Mal zu lesen und zu verstehen; das ist ein bisschen wie Prima-vista-Spiel in der Musik.
Die Erklärung, dass die Forschenden in den Spracharealen fast keine Reaktion auf Code gesehen haben und stattdessen vor allem das multiple demand network über Frontal- und Parietallappen aktiv war, erscheint mir plausibel. Dieses Netzwerk wird bei Aufgaben eingesetzt, bei denen man mehrere Informationen gleichzeitig im Kopf behalten muss, und steht mit der Fähigkeit zu verschiedenartigen geistigen Leistungen in Zusammenhang.
Natürlich ist Sprache beteiligt, aber vielleicht steckt in der Sprachverarbeitung selbst nicht so viel Aufwand, dass sie im fMRI-Signal sichtbar würde. Ich halte oft viele Dinge gleichzeitig im Kopf: was der Code tut, was die Autorin oder der Autor erreichen wollte, welchen Hintergrund diese Person hat, wie ähnliche Software funktioniert und so weiter.
Ich habe Mathematik studiert, aber auch das fühlt sich nicht besonders ähnlich an wie Lesen oder Mathematikmachen.
Es dauert eine Weile, bis man all diese Dinge im Kopf wieder „geladen“ hat, und es ist ein bisschen wie Balance halten, damit nicht alles zusammenbricht.
Wenn man mittendrin gestört wird, fühlt es sich an, als verliere man das Gleichgewicht und alles fliege auseinander; danach muss man alles wieder einsammeln, was Zeit und Mühe kostet. Wenn das mehrmals hintereinander passiert, ist das extrem frustrierend.
Paul Graham behandelt das in seinem Essay über maker schedule und manager schedule: (2009) https://paulgraham.com/makerschedule.html
Es fühlt sich genau gleich an, auch dieses Muster, viele Dinge gleichzeitig im Kopf zu behalten.
Nach Maßstäben moderner Neurowissenschaft und Hirnbildgebung folgt daraus also, dass Code lesen im Grunde dasselbe ist wie im Koma durch zolpidem wieder zu Bewusstsein zu kommen.
Ich habe als Kind und Teenager ein paar Instrumente gespielt, war aber im Blattspiel nicht besonders gut. Ich habe oft gehört, dass musikalische und programmiererische Fähigkeiten korrelieren, aber ich wäre wohl nie Berufsmusiker geworden. Stattdessen habe ich mir mit dem Programmieren eine gute Karriere aufgebaut.
Überhaupt nicht überraschend. Code lesen ist weder wie Prosa lesen noch wie Mathematikmachen; es ist eher so, als würde man im Kopf ein Puzzle zusammensetzen.
Um zu verstehen, was Code tut, muss man Funktionen, Symbole, Variablen, Aussagen, Abstraktionen und vieles mehr in Echtzeit miteinander verbinden, zuordnen und übersetzen. Deshalb kann das Lesen von Code von Anfang an komplexer werden als das Schreiben von Code.
Eigentlich ist die einzige Gemeinsamkeit, dass beides „Sprache“ genannt wird.
Er ist eine Menge von Maschinenanweisungen, die festlegt, was ein Computer tun soll, und kann nicht — und sollte nicht — als Metapher für etwas anderes dienen wie in Spracharealen.
Für mich ist Code lesen so, als schaue man auf eine Zeichnung mit ineinandergreifenden Zahnrädern und werde gefragt: „Dreht sich Zahnrad A gegen den Uhrzeigersinn oder im Uhrzeigersinn?“
Es fühlt sich weniger nach Sprachverständnis an als nach Analyse eines Mechanismus.
Dass man beim Lesen von Code keine innere Erzählstimme hat, ist ebenfalls ein Hinweis.
Wenn ich Code lesen will, lenken mich Hintergrundgeräusche ab und machen mich gereizt, wenn sie wie Sprache oder die Melodie einer vertrauten Sprache klingen, in der man einzelne Wörter verstehen kann. Ich kann beim Coden auch nicht sprechen, dann komme ich beim Tippen durcheinander.
Außerdem bevorzuge ich Sprachen, die näher an englischen Sätzen sind, wie Ruby, deutlich gegenüber Sprachen mit vielen Symbolen wie Rust oder vielen Abkürzungen und Operatoren wie Haskell. Natürlich werden bei anderen Entwicklerinnen und Entwicklern andere Nervenbahnen aktiv.
Schwer lesbarer Code ist oft auch schwer zu verarbeiten, vermutlich weil der Rhythmus dieser Erzählstimme gestört ist und dadurch nicht natürlich fließt.
Wenn ich erkläre, wie etwas funktioniert, folge ich meist demselben Rhythmus dieser Erzählstimme; das hilft mir, Dinge knapp zu erklären und Wissen schnell zu vermitteln.
Allerdings ist sie eindeutig anders als die innere Erzählstimme beim Lesen eines Romans. Vermutlich liegt das an der Anwesenheit oder Abwesenheit emotionaler Sprache. Vielleicht ist das ähnlich wie der Umstand, dass manche Menschen einen inneren Monolog haben und andere nicht oder dass sie sich Dinge unterschiedlich detailliert vorstellen können, ohne sie tatsächlich zu sehen.
Mit „dieselbe“ meine ich, dass sie auf dieselbe Weise funktioniert und gleich „klingt“; Grammatik und Wortschatz folgen natürlich der jeweils verwendeten Gebärdensprache. Tatsächlich sind dieselben Hirnareale aktiv.
Das deutet darauf hin, dass die innere Erzählstimme nicht bloß ein „Echo von Klang“ ist, sondern der Verstehensprozess selbst. Genauso wie beim Lesen von Schrift.
Gerade das Beurteilen von Schleifen erfordert oft wiederholtes probeweises Ändern des Codes.
Arbeite hauptsächlich von zu Hause und lasse beim Coden meistens Musik laufen
Ich singe gern zur Musik mit, deshalb sitze ich den ganzen Tag am Schreibtisch und codiere singend
Aber wenn ich etwas lese, geht das absolut nicht. Es ist unmöglich, einen Text zu lesen und gleichzeitig ein anderes Lied zu singen, aber beim Coden ist das sehr einfach