Lesbarkeit wird oft intuitiv synthetisiert. Wenn Sie ein Stück Code sehen, wissen Sie nur, ob es lesbar ist oder nicht. Aber was sind eigentlich psychologische , wissenschaftliche Erklärungen dafür?
Es gibt Lesbarkeitsmetriken für geschriebenen Text, aber gelten sie auch für Quellcode? Zum Beispiel: Ich glaube, dass das Wort Überlegenheitseffekt auf Quellcode anwendbar ist. Welche weiteren Effekte lassen sich beim Programmieren finden, die Code lesbar machen?
Ich suche nicht nach fundierten Meinungen oder Beispielen wie hier oder hier , sondern nach neuronalen Korrelaten oder einer Perspektive aus den Kognitionswissenschaften.
Was macht einen lesbarer als den anderen? Gewöhnlich Prägnanz unter Beibehaltung der Klarheit und Beseitigung von Mehrdeutigkeiten.
Genau die gleichen Dinge machen Code besser lesbar. Entfernen Sie alles, was nichts hinzufügt, aber entfernen Sie keine Dinge, die Informationen hinzufügen. Und vermeiden Sie Zweideutigkeiten.
Im Code haben wir den Vorteil, dass wir ähnliche Textteile wiederverwenden und bestimmte Werte darin ersetzen können. Wenn wir das nur mit Büchern machen könnten, könnten wir einen kleinen Regenwald retten.
Neben der Knappheit setzen wir Satzzeichen und Leerzeichen gut ein. Haben Sie schon einmal versucht, einen Blogbeitrag zu lesen, in dem es überhaupt keine Absätze gibt? So ist es, Code zu lesen, der nicht sauber verteilt ist.
Die Psychologie dahinter ist einfach. Ihr Gehirn erhält alle möglichen Hinweise darauf, was es liest. Versuchen Sie, ein langes Stück Text zu nehmen und ihn (mit einer Serifenschrift) ohne Absätze, dann ohne Punkte und Kommas auszudrucken, oder vielleicht Satzzeichen zu tauschen (? => ., ! => :, etc), dann in einer Sans- Serifenschrift.
Sie werden schnell merken, wie sehr Sie sich beim Lesen auf die Instinkte Ihres Gehirns verlassen. Code ist genau der gleiche. Und hierin liegt ein Problem, denn manche Dinge sind sicherlich subjektiv. Oder besser gesagt, sie sind eine Sache der Gewohnheit.
Wenn Sie daran gewöhnt sind, Unterstriche vor Elementvariablen zu sehen, dann wechseln Sie zu einem Unternehmen, wo dies nicht der Fall ist, Ihr Gehirn wird immer noch dieselben Hinweise erwarten und es wird schwieriger sein, sie zu lesen. Aber es zu ändern, würde alle anderen im Team durcheinanderbringen. Es wäre, als würde man nach Spanien ziehen und ihnen sagen, dass sie das vorangehende umgekehrte Fragezeichen nicht mehr verwenden sollen, weil es Sie aus der Bahn wirft.
Designmuster sind eine ähnliche Sache. Wenn jeder weiß, was ein Builder-Muster tut, dann gibt das Hinzufügen von Builder zu einem Klassennamen jedem viele Informationen. Aber wenn ich mein eigenes Bracksfort-Muster habe, helfen mir diese Informationen nur, zumindest bis andere Leute anfangen, mich zu fragen, oder ich es dokumentiere und die Community dazu bringe, es zu glauben.
$f
versus $first_names
.Dies ist mein aktuelles Forschungsgebiet (ich bin ein Doktorand in Informatik und Kognitionswissenschaft). Wie Sie sagten, gibt es eine große Anzahl von Messwerten zur Lesbarkeit/Komplexität, aber nur sehr wenig Forschung, die versucht zu quantifizieren, was einen Codeabschnitt psychologisch komplex macht. Für weitere Informationen zu qualitativen Studien und Modellen empfehle ich das 2001 erschienene Buch Software Design: Cognitive Aspects .
Ich habe kürzlich einige Experimente mit dem Ziel durchgeführt, ein kognitives Modell zu entwickeln, das Code wie ein Mensch „lesen“ kann. Die Inspiration für mein Modell stammt größtenteils aus einer 1995 erschienenen Arbeit von Simon Cant et. Al. . In dem Papier legen sie eine (unvollständige) Grundlage für ein mathematisches Modell, das kleine Codeblöcke in den Speicher „chunkt“ und zu anderen Teilen des Programms „verfolgt“, um Abhängigkeiten aufzulösen. Ich habe ein Workshop-Papier mit dem Titel „Kognitive Architekturen: ein Weg nach vorne für die Psychologie des Programmierens“, das darauf hindeutet, dass wir möglicherweise in der Lage sein könnten, ein solches Modell auf einer kognitiven Architektur wie ACT-R aufzubauen.
Ich schreibe gerade die Ergebnisse eines meiner Experimente auf. Sobald es fertig ist, werde ich darüber in meinem Blog (synästhem.com) berichten. Kurz gesagt, wir ließen Programmierer aller Erfahrungsstufen die Ausgabe von 10 Python-Programmen vorhersagen (jedes Programm hatte 2 oder 3 Versionen). Einige von ihnen haben das Experiment vor einem Eyetracker durchgeführt, was eines Tages (hoffentlich) bald eine weitere Arbeit sein wird. Der Rest stammte von Mechanical Turk, und wir stellten interessante Geschwindigkeits-/Genauigkeitsunterschiede fest, die nicht immer zu Gunsten der erfahreneren Programmierer ausfielen.
Was bedeutet „Lesbarkeit“ im Kontext der Kognitionswissenschaften? Messbare Effekte der "Lesbarkeit" wären:
Es wäre einfach, verschiedene "lesbare" Varianten desselben Codes zu testen. Beispielrecherchen können über eine Google Scholar-Abfrage gefunden werden . Ich bin zu faul, diese Papiere für Sie zu lesen und zusammenzufassen ;-)
$f
vs. $first_name
) mit dem Wortüberlegenheitseffekt erklärt. Ich suche solche Konstrukte!
Joachim Sauer
MadKeithV
StuperUser
34.3 Write Programs for People First, Computers Second
. Haben Sie die umfangreiche Bibliographie dieses Buches nach relevanten Quellen durchgesehen?Thomas Owens
Piotr Migdal
Benutzer1196