Hirnforschung: MRT schaut Programmierern beim Coden zu
Der Informatik-Professor Sven Apel von der Universität des Saarlandes in Saarbrücken hat mit seinem interdisziplinären Team aus Neurobiologen und Informatikern eine Studie zur Hirnaktivität Programmierender vorgelegt. Die Forscher interessierte buchstäblich, was im Kopf eines Softwareentwicklers beim Coden vor sich geht.
fMRT macht aktivierte Hirnareale beim Coden sichtbar
Um diesen Einblick zu gewinnen, setzten die Forscher die funktionelle Magnetresonanztomografie (fMRT) ein. Die MRT ist ein bildgebendes Verfahren, das in der medizinischen Diagnostik eingesetzt wird, um Struktur und Funktion der Gewebe und Organe im Körper darzustellen. Es beruht auf der Anwendung eines starken Magnetfeldes.
Die fMRT ist eine Sonderform des Verfahrens, bei der sich die Stoffwechselaktivität im Gehirn sichtbar machen lässt. Dabei wird der Anstieg des Sauerstoffgehalts im Blut, der bei der Aktivierung von Gehirnarealen stattfindet, gemessen. So können diese aktivierten Areale bildlich dargestellt werden. Die fMRT wird diagnostisch kaum eingesetzt, hat aber große Bedeutung in der wissenschaftlichen Forschung.
Für die Studie der Universität des Saarlandes mussten Probanden unter dem fMRT verschiedene Aufgaben in der Beschäftigung mit Programmcode bewältigen. Ein Teil der Aufgaben befasste sich mit dem Verstehen eines Code-Ausschnitts, ein anderer damit, etwaige Syntaxfehler ausfindig zu machen.
Ergebnis: Coden aktiviert linke Hirnhälfte
Im bildgebenden Verfahren zeigte sich offenbar, dass die Analyse von Quelltexten vor allem die linke Hirnhälfte der Probanden aktiviert. Die wird gemeinhin mit dem Sprachverständnis assoziiert. Dagegen konnte das Forscherteam keine gesteigerte Aktivität in mit dem mathematisch-logischen Denken assoziierten Hirnarealen finden. Diese Vermutung hatte der niederländische Informatiker Edsger W. Dijkstra bereits in den 1980er Jahren geäußert.
Tiefergehend erforscht werden soll nun noch, ob es Unterschiede zwischen Programmier-Anfängern und Proficodern gibt. Sollte sich nachhaltig zeigen, dass Programmieren vornehmlich von einem ausgeprägten Sprachverständnis und weniger von einer mathematisch-logischen Denkfähigkeit abhängt, könnte diese Erkenntnis nach Ansicht des Forscherteams Einfluss auf die Gestaltung künftiger Programmiersprachen und sogar die Ausbildung von Entwicklern im Allgemeinen haben.
Passend dazu: Hirnforscher rekonstruieren Sprache aus Hirnströmen mithilfe von KI
Hmm.. waer haette gedacht, dass es beim erlernen von diversen Programmier_sprachen_ auf das Sprachverstaendnis ankommt. Das sind wirklich phaenomenale Ergebnisse, meine Damen und Herren!
„Ein Teil der Aufgaben befasste sich mit dem Verstehen eines Code-Ausschnitts, ein anderer damit, etwaige Syntaxfehler ausfindig zu machen.“
Und was hat das nun bitte mit Programmieren zu tun? Klar, im Endeffekt muss man als Programmierer den Code verstehen können – Syntax Fehler beschränken sich aber nur auf die jeweilige Sprache! Natürlich wird somit das Sprachverständnis gefordert. Da jede Programmiersprache eine eigene Syntax geht.
Das Verstehen des Codes hat natürlich auch nur mit dem „Übersetzen“ der jeweiligen Programmiersprache in die übergeordnete Logik des Geschäftsprozesses, welcher abgebildet wurde, zu tun.
Warum wurden keine kleinere Programmieraufgaben gestellt, die sich tatsächlich mit Logikverständnis und mit Mathematik zu tun haben (ala „Erstellen Sie ein Programm, welches die Benutzereingaben nach Fibonacci Zahlen filtert“).
Wundernswert ist das Ergebnis nicht! Und aussagekräftig erst recht nicht.
Danke, danke, danke für diese Studien, denn es ist eben für die allermeisten Leute klar gewesen, dass es auf Sprachverständnis ankommt, das zieht sich sogar durch unser Bildungssystem! Welche fachlichen Ausbildungsanteile finden sich denn in der Informatik? Mathematik, Mathematik… davon schon mal sehr viel. Auch so Geschichten wie Datenstrukturen usw. Klar, dann auch immerhin die praktischen Programmierkurse natürlich, was ja essentiell ist! Und dann? Genau: Wählen wir sogar noch Mathematikbeispiele innerhalb der Programmierübungen (x-fach gesehen und erlebt!), sowas wie Fibonacci-Zahlen etc., statt den Leuten mehr Bezug zu Realbeispielen zu vermitteln. …ich frage mich wo die Fachanteile zum Fördern des Sprachverständnis stecken…? Absurderweise sehe ich die v. a. in anderen Studiengängen, wo man sich eben mehr intensiv mit Textanalyse und der damit verbundenen Modellierung und Interpretation von Realweltszenarien auseinandersetzt. Wer in der Praxis unterwegs ist, kennt doch gut genug die sog. „Wording“-Probleme vieler typischer Programmierer, die noch nicht so viele Jahre Berufserfahrung haben und IMHO oft viel zu stark nur auf Formeldenken gepolt sind. ich denke das sollte sich wirklich mehr ändern, für den Ausbildungszweig, der Programmierung als Fertigkeit fördern möchte. Also: Danke! Diese Information ist sehr nötig für Ausbildungsreformen!
Ja! Richtig Herr Ben Trenkler – Phänomenal ist allerdings die Tatsache, dass Informatiker, wie auch Schüler und Umschüler keine Beziehung zur Mathematik haben. Sie wollen zwar große Informatiker werden, aber sie wollen nichts mit Mathematik zu tun haben. Diese Erfahrung habe ich bereit bei meiner Umschulung zur Fachinformatiker Anwendungsentwicklung gemacht. Die Meisten wussten nicht, was eine Fakultät (n!) ist und wie man damit umgeht, da musste ich mich auf den Moderatorensstuhl hinsetzen und den Leuten die Fakultät anhand Lord Naper-Algorithmus unterrichten. Bei SQL und MySQL (Relationale Datenbanken) haben mich schon die sog. MöchteGerneInformatiker auf die Palme gebracht. Da musste ich schon im VIONA schreien „hier kann man hören, wie die Steine atmen“. Der Tutor (Dozent) stellte konkrete Fragen bzgl. Mengenrelationen, da gab nur tote Stile und keine Antworten. Die Tatsache ist, dass viele, vor allem junge Menschen möchten gerne was werden, aber keiner von denen ist bereit in diese Materie etwas zu Investieren, vor allem, wenn es gerade um Mathematik geht. Aber nichts zu trotz! – Warnung für alle Informatiker. Informatik ist eine Erweiterung der mathematischen Tätigkeiten. die o.g. Formel nach Lord Naper reicht nicht aus, um sie anwenden zu können Lim e = 1+(1/n!) z.B. für die ersten zehn Zahlen. Die Formel muss noch zwei mal transformiert werden und zwar von der Schulmathematik in die höhere Mathematik und von der höheren in die Algebra-Sprache. Und da kommt auch noch auf eine Menge und zwar „die Indexmenge“, falls die MöchteGerneInformatiker“ die Indexmenge auch beherrscht, was ich persönlich daran zweifle. Eins möchte ich noch zum Schluss sagen – „Ohne Mathematik keine Informatik!“. Danke für Eure Aufmerksamkeit
Dass Textverstehen und Syntax-Fehler suchen bei Programmiersprachen ähnliche Areale aktiviert, wie bei Lesen (und Grammatik überprüfen?) anderen „Sprachen“ überrascht mich wenig – vielleicht wollte das Forscherteams diese grundlegende Annahme erst überprüfen, bevor sie sich komplexeren Aufgaben widmet. Ich hoffe in jedem Fall sehr, dass es spannede(re) Anschlussstudien dazu gibt, was denn beim Programmieren selbst (z.B. als Reaktion zu einer gestellten Aufgabe) aktiv ist. Und das ist, was einen guten Informatiker ausmacht oder nicht? Syntaxfehler suchen kann ich auch – gut Programmieren noch nicht so sehr. Aber an den Qualitäten, die einen guten Informatiker ausmachen, ist man in dem Rahmen doch vor allem interessiert, oder? Weiß jemand vielleicht schon von Studien, die das bereits tiefergehend untersucht haben?
Dass das Verstehen eines Code-Ausschnitts und die Suche nach Syntaxfehlern eher sprachliche Fähigkeiten herausfordert, finde ich ohne weitere Erläuterung nicht überraschend. Das Codieren im engeren Sinne erscheint mir eher eine Umsetzung, also eine Transformation von Regeln oder Algorithmen in einen spezifischen Code, wenn man will, eine Art Übersetzung. Mathematische Fähigkeiten dürften eher in der Konzeption von Algorithmen, unabhängig von bestimmten Programmiersprachen, sowie im allgemeinen Verständnis des Verhaltens und der Funktionalität grundlegender Algorithmen und Operationen eine Rolle spielen, z.B. im Bereich der Verschlüsselung.
„Im bildgebenden Verfahren zeigte sich offenbar, dass die Analyse von Quelltexten vor allem die linke Hirnhälfte der Probanden aktiviert. Die wird gemeinhin mit dem Sprachverständnis assoziiert.“
Ist das eine neue Erkenntnis? Ich hatte in der Schule noch gelernt, dass die linke Gehirnhälfte für logisches Denken zuständig ist. Im Übrigen würde ich den Gegenversuch unternehmen, dem Lösen von mathematischen Gleichungen, die Meisten versuchen das nämlich über intuitives sprachliches Verständnis zu lösen. Mich würde überhaupt nicht wundern, wenn eine Mehrheit das falsche Gehirnareal aktiviert.
Hoffentlich haben Sie sich im Anschluss an Ihren Kommentar besser gefühlt. Und welche wissenschaftlichen Erkenntnisse haben Sie in Ihrem Leben so produziert, Herr Trenkler?
Nun, das haben Sie bisher vermutet. Konnten Sie das auch beweisen?
Was eine oberflächliche Studie oder Artikel. Quelltexte LESEN erfordert natürlich andere Hirnareale als sie zu schreiben und zusätzlich kommt es auch auf die Aufgabe des Quelltextes an. Eine Benutzeroberfläche erfordert auch andere Hirnfunktionen als eine tatsächliche mathematisch / logische Aufgabe wie Arbeiten mit Mehrdimensionalen Arrays oder tatsächliche Berechnungen.
„Ein Teil der Aufgaben befasste sich mit dem Verstehen eines Code-Ausschnitts, ein anderer damit, etwaige Syntaxfehler ausfindig zu machen.“
Ja nun – beide Aufgaben enthalten sehr viel Sprachanalyse, die zweite ist gar rein sprachsyntaktisch entscheidbar – und da wundert man sich, das hauptsächlich Kortexareale für Sprache aktiv werden? Wo ist da die „problem solving“ Ebene geblieben im Setup?
Mal so als kleinen Tipp – für gestandene Programierer ist das eigentliche „Coden“ nix weiter als Runterspulen von „C++-Gedichten“ – ergo gehen Gedächtnis-, Sprach- und Motorkortex an. Anfänger haben es etwas schwieriger und können nicht auf so viele gelernte Muster zurückgreifen – ergo weniger Gedächtnis- und noch mehr Sprachaktivität, vermutlich mit mehr sprachassoziiertem problem solving (hochparietal und temporal, wenig frontal). Immernoch nix mit rechtsseitig. Gebt den Leuten echte algorithmische Nüsse – die rechte Seite wird aktiv, da Abspulen/Ausprobieren bekannter (Sprach-) Muster nicht mehr funktioniert.
Meine Behauptung – Programmieren ist für Profis zu 90% wie Schreiben eines Briefes in der Muttersprache. Die verbleibenden 10% algorithmischer Probleme hat die Studie mit ihrem Setting nicht erfasst. Interne Validität?
Die Studie kann ich leider nicht ernst nehmen.
Ein Programmierer erzeugt Code, er liest es nicht nur und versucht Syntaxfehler zu finden.
Syntaxfehler findet auch der Compiler und der hat ja nun mal keinen Gehirn. Sondern checkt nur nach Regeln die die Programmiersprache definieren ob alles korrekt aufgeschrieben ist, nicht ob es Sinn macht (ob die Logik korrekt ist).
Logik würde ein Coder nur benutzen wenn sie/er kreativ neuen Code schreibt der ein bestimmtes Problem löst. Hier ist definitiv Logik gefragt.
Der Coder benutzt auch Logik wenn sie/er nicht die Syntax aber die Semantik eines Programms untersucht.
Noch mal Syntaxfehler zu finden heisst es fehlende Semikolons, nicht geschlossese Klammer, falsch Geschriebene Befehle zu finden. Es ist als würde man Rechtschreibung und Grammatik eines Textes überprüfen. Natürlich ist da keine Logik gefragt.
Eine vernünftige Studie würde den Programmierer ein Problem lösen lassen. Dann kann man ja sehen ob ohne Logik das Problem gelöst werden kann.
Die Studie zeigt wie das Gehirn arbeitet wenn es Fehler in einem Code sucht bzw. versucht diesen zu verstehen. Da überrascht es mich weniger, dass das Sprachareal anspringt. Viel interessanter wäre es doch zu sehen, wenn man einen Code schreiben muss. Was passiert wenn man bspw. eine mathematische Aufgabe mithilfe eines Programms lösen soll? Springt dann immernoch nur die Sprache an oder mischt sich das Ganze? Wie ist der Unterschied bei verschiedenen Programmiersprachen? Fordert eine von der Syntax komplexere Sprache mehr das Sprachareal als eine vergleichsweise einfache wie Python?
Es ist ein erster Schritt in ein interessantes Themengebiet, aber viel zu spezialisiert um eine generalisierte Aussage treffen zu können.
„Wie ist der Unterschied bei verschiedenen Programmiersprachen?“
In der Tat eine spannende Frage. Könnte mir zB. vorstellen, dass funktionale Sprachen eher logische Areale ansprechen.
„Fordert eine von der Syntax komplexere Sprache mehr das Sprachareal als eine vergleichsweise einfache wie Python?“
Von natürlichen Sprachen her weiss man, dass diese durchaus unterschiedliche Aktivitäten erzeugen. Chinesisch ist hier ein Extrembeispiel – während beim Lesen westlichen Sprachen kaum Aktivität im visuellen Kortex anspringt, zeigt chinesisch eine hohe Aktivität in höheren Arealen zur Mustererkennung (V3+). Auch nicht wirklich verwunderlich, wenn man sich die Schriftsysteme vor Augen hält. Chinesisch scheint tatsächlich mit „höherem Aufwand“ verbunden zu sein. Ob die Unterschiede in Syntax und Redundanz in Programmiersprachen reichen, um ähnliches zu zeigen, bezweifel ich. Könnte mir aber vorstellen, das streng funktionale ein auffällig anderes Aktivitätsmuster provozieren. Vllt. kommt man so auch dem Grund auf die Schliche, warum imperative Sprachen vielen Leuten „einfacher von der Hand gehen“.
Hallo Herr/Frau S.,
auch ich war im Laufe meines Informatik Studiums immer wieder auf der Suche nach praktischen Beispielen. Ich war an einer FH statt an einer Uni und habe dort schon verhältnismäßig viel Praxis Erfahrung gesammelt. Diese Studie ist jedoch vollkommen ungeeignet um ihre These zu stützen, da sie lediglich untersucht welches Hirnareal beim lesen von Code anspringt. Viele hier (ich inklusive) haben dies bereits bemängelt und interessieren uns daher für eine Analyse beim Schreiben von Code.
Die Praxis nach dem Studium hat mir gezeigt warum gelehrt wird wie man lehrt (zumindest im Studium): Die Möglichkeiten als Informatiker sind gigantisch. Ein Bachelor „qualifiziert“ für so unglaublich viele verschiedene Berufe, dass es einfach nicht möglich ist für jeden praktische Beispiele zu bringen. Viel mehr wird stattdessen das „Lernen“ gelehrt um sich schneller in neue Bereiche einarbeiten zu können. So werden beispielsweise 2-3 Programmiersprachen gelehrt und man versteht das Prinzip danach besser und eine 4te, 5te oder 6te Sprache hat sich viel schneller gelernt als die ersten 3. Analog finden sich Beispiele für alle mir bekannten Bereiche der IT.
Ich kann ihre Referenz an „Wording“ Probleme bei Programmierlehrern auch nicht nachvollziehen. Ich habe selten Lehrer getroffen die sich unklar ausgedrückt haben, eben weil die Programmiersprachen von Grund auf mathematisch und logisch aufgezogen sind und es in der Mathematik für Alles präzise Formulierungen gibt die man nutzen kann um sich exakt auszudrücken. Mit Sicherheit gibt es „schwarze Schafe“ die sich unklar ausdrücken und bei denen man sich fragt, wie diese den Job erhalten haben, aber in welchem Bereich gibt es solche Leute denn nicht?