Warum scheinen neue Programmierer Compilerfehlermeldungen / Laufzeitausnahmemeldungen zu ignorieren? [geschlossen]


27

Ich denke, wir haben das alle gesehen. Anfänger stellen Fragen zu Stack Overflow, die sich an den Grundzügen orientieren ...

Ich versuche es zu tun (sehr vage Beschreibung des Ziels), aber es funktioniert nicht / ich erhalte einen Fehler / eine Ausnahme. Bitte helfen Sie!

Ist es nicht seltsam, dass so viele von ihnen es für unnötig halten, die Fehlermeldung einzufügen?

Ich frage mich, was die Psychologie davon ist. Was ist mit Fehlermeldungen, das die Leute anfänglich davon ausgehen lässt, dass sie nutzlos sind und es nicht wert, darauf zu achten?

Die Antwort, die ich suche, ist nicht "sie verstehen die Fehlermeldung nicht". Das erklärt nicht, warum sie es nicht erwägen würden, es anderen zu erzählen, die es vielleicht verstehen.

Antworten:


21

Ich denke, der wahre Grund dafür ist, dass normale Computerbenutzer, auch wenn sie später Programmierer werden sollten, davon abhängig sind, dass sie nichts gegen Fehler unternehmen können. Denk darüber nach. Was tun Nicht-Programmierer-Typen, wenn sie auf eine kryptische Fehlermeldung * stoßen? Sie mögen es lesen, aber neun von zehn werden sie es einfach ablehnen und es erneut versuchen. Nur wenn es dauerhaft fehlschlägt, wird es nachgeschlagen.

Wenn die Leute anfangen zu lernen, wie man programmiert, merken sie nicht sofort, dass der Fehler, den sie bekommen, nützliche Informationen darüber enthält, wie man ihn behebt. und ja, obwohl Compiler-Fehler selbst für geschulte Fachleute (ich sehe Sie, Metaprogrammierung von C ++ - Vorlagen) so gut wie unleserlich sein können, bieten sie zumindest einen allgemeinen Ausgangspunkt, und wenn Sie denselben Fehler ein paarmal gesehen haben Sie werden immer wissen, was Sie getan haben, um es zu verursachen.

* Ehrlich gesagt, sehen die meisten Fehlermeldungen für Joe Average so aus wie "Fehler X2412: Fehlerhafter Dongledash für die Interplattform kann nicht hergestellt werden: Überprüfen Sie die Bandersnatch-Einstellungen, oder wenden Sie sich an Ihren Systemadministrator."


6
Stört es Sie, wenn ich diese Fehlermeldung in meiner Software verwende?
I.devries

12

Ich denke, wenn es ein echter Anfänger ist, gibt es eine gute Chance, dass sie nicht wissen, dass es überhaupt eine Fehlermeldung gibt. Sie wissen nur, dass es nicht läuft und dass ein Fehler vorliegt. In Visual Studio wird dieser Teil des Bildschirms möglicherweise nicht angezeigt.

Grundsätzlich wissen sie nicht, welcher Teil der verfügbaren Informationen hilfreich ist, um herauszufinden, wo das Problem liegt. Wenn sie das taten, gäbe es eine bessere Chance, dass sie es selbst reparieren und nicht erst danach fragen könnten.


Das ist eine faire Idee, aber erklärt das wirklich das hohe Volumen solcher Fragen?
Timwi

@ Timwi: Vielleicht erklärt es das relativ etwas geringere Volumen an Fragen mit den richtigen Fehlerinformationen. Das absolute Volumen an schlechten Fragen ist relativ zur Community-Größe.
Brian R. Bondy

6

Ich denke, Fragen zu stellen und Fehler zu beheben ist eine Fähigkeit, die gelernt werden muss, und für professionelle Entwickler ist es eine wichtige Fähigkeit, die einfach nicht oft genug vermittelt wird.

So wie der Code, den Sie zu Beginn Ihres Berufs schreiben, im Vergleich zu dem Code, den Sie heute schreiben, schrecklich sein wird, werden die Fragen, die Sie stellen, im Vergleich zu der Art und Weise, wie Sie sie heute stellen, schrecklich sein.

Wenn Sie anfangen, ist es einfach, von all den Informationen, die Sie lernen, überwältigt zu werden, und wenn die Dinge nicht nach Plan verlaufen, ist es schwierig zu wissen, welche Informationen relevant sind und welche nicht. Dies ist ein großer Teil des Grundes, warum Anfänger das Problem überhaupt nicht selbst lösen können!


5

Dies gilt mehr für IRC als für Online-Websites wie Stack Overflow, was sehr viel seltener vorkommt.

Ich denke, die Argumentation dahinter ist, dass die Menschen sich besser fühlen, wenn sie wissen, dass eine Person an ihrem Problem interessiert ist und bereit ist, ihnen zu helfen. Sie sagen zunächst, dass sie ein Problem haben, gehen aber nicht auf Details ein, bis sie jemand fragt, weil sie befürchten, dass sie sonst sowieso keine Antwort bekommen.

Manchmal (nicht bei Compilerfehlern) ist dieses Verhalten tatsächlich sinnvoll. Wenn ich ein großes kompliziertes Problem habe, stelle ich sicher, dass zuerst jemand zuhört, bevor ich eine lange Erklärung schreibe, die niemand lesen wird.


Götter, ich wünschte, es galt immer noch mehr für IRC als für SO ...
Félix Gagnon-Grenier

3

Da Compilerfehler / Ausnahmen erfordern, dass Sie wissen, was Sie falsch machen, um das Problem zu beheben. Sie sind für Programmierer, die Dinge übersehen, nicht für Leute, die sie nicht verstehen.

Sie sind auch nicht immer die offensichtlichsten. Ein Fehler wie "Unerwartet wenn" ist nicht so intuitiv. "Aber das wenn da sein sollte" lautet die Antwort eines Neulings. Ein erfahrener Programmierer weiß, dass er das Semikolon in der vorhergehenden Zeile vergessen hat .


Sicher - aber es gibt einen Unterschied zwischen dem Denken, dass etwas kryptisch ist und dem Denken, dass es nutzlos ist.
David Thornley

1
@ David: Was nützt eine kryptische Fehlermeldung? ... nicht viel.
Morgan Herlocker

1
@Irontool: Zitiere es, wenn du nach SO fragst. Schneiden Sie es aus und fügen Sie es in eine Websuche ein. Auch wenn Sie es nicht verstehen, kann es wie ein magischer Keks wirken.
David Thornley

2

Ich denke nicht, dass es nur Neulinge sind. Ich habe Mitarbeiter mit jahrelanger Erfahrung, die sich die Zeilennummer nur anzusehen scheinen, wenn sie einen Compilerfehler erhalten, und dann versuchen, den Rest selbst herauszufinden (oft durch das Ausprobieren von Voodoo wie "Lass uns Klammern hinzufügen" oder "Lass uns das auflösen" in zwei Aussagen ").

Mein Verdacht ist, dass dies darauf zurückzuführen ist, dass ich die Regeln der Sprache nicht wirklich gut verstehe, so dass die allgemein dichte Beschreibung des Fehlers wenig aussagekräftig ist. Scheintexpression must be a modifiable lvalue ziemlich nutzlose Informationen zu sein, wenn Sie wirklich nicht wissen, was ein Wert ist.


Nach meiner Erfahrung funktioniert es gut, den Code nur auf Syntaxfehler zu untersuchen, da es sich bei der Compilermeldung häufig um einen Fehler handelt, der indirekt durch den ursprünglichen Fehler verursacht wird. Für semantische Fehler wie in Ihrem Beispiel ist die Fehlermeldung normalerweise unerlässlich.
CodesInChaos

1

Was ist mit Fehlermeldungen, das die Leute anfänglich davon ausgehen lässt, dass sie nutzlos sind und es nicht wert, darauf zu achten?

Nun, für mich war es eine Jugend voller abstürzender Windows 95-Software mit völlig undurchdringlichen Fehlermeldungen, die normalerweise mit etwa 150 hexadezimalen Zeilen endeten.

Ich erlebe jedes Mal die gleiche Erfahrung, wenn ich einen netten, kryptischen Java-Stack-Trace erhalte, der 40 Zeilen Compiler-Mist und Hibernate-Fehler enthält. Darunter verbirgt sich sehr gut der tatsächliche Verweis darauf, wo in meiner App der Fehler liegt.

Der Grund, warum die Leute Fehlermeldungen und Stack-Traces ignorieren, sind häufig die Fehlermeldungen und Stack-Traces, die im Vergleich zur Komplexität des Problems unverhältnismäßig kompliziert sind. Es gibt keinen Grund, 150 Zeilen Mist durch meinen Bildschirm zu spülen, wenn ich ein Semikolon verpasse.


2
Sehr gut versteckt? Scannen Sie einfach nach Ihrem Paketnamen.
Bart van Heukelom

1

Ich unterrichte einige Kurse über Linux für Junior Sysadmins und Programmieren mit PHP und MySQL. Die Mehrheit der PHP-Studenten weiß, dass ein Fehler vorliegt, da sie die hässliche Meldung auf dem Bildschirm sehen. Aber sie scheinen es nicht lesen zu können. Normalerweise gehe ich zu ihrem Bildschirm, wenn sie mir mitteilen, dass etwas nicht funktioniert. Ich lese den Fehler auf dem Bildschirm, sage ihnen, dass sie ihn lesen sollen, betone die Datei und die Zeile, die auf dem Fehler vermerkt sind, und fordere sie auf, dort zu suchen. Sie korrigieren den Fehler, aber wenn ein anderer Fehler auftritt, gilt das gleiche Verfahren ... seufz ...

Für den Linux-Kurs bemerken sie manchmal nicht einmal den Fehler. Sie geben einen Befehl ein, einige Zeilen erscheinen auf dem Bildschirm und fahren mit dem nächsten Befehl fort. Wenn einige Befehle später bemerken, dass etwas nicht funktioniert, und sie die Hände heben, gehe ich auf die Konsole und zeige auf einen Befehl, der aufgrund von schlechten Parametern oder was auch immer mit einem Fehler beendet wurde. Ihr Gesicht: Überraschung. Für meine Linux-Studenten war es daher ein Leichtes, sie auf einen Fehler aufmerksam zu machen, indem sie die Bash-Eingabeaufforderung modifizierten, um sie zu ändern, wenn ein Fehler wie dieser auftritt . Lassen Sie sie nun die Fehlermeldung lesen, sobald sie sie sehen. Das ist ein anderer Kampf (der gleiche wie bei den PHP-Schülern) ...


0

Ich glaube, dass sie es einfach nicht gewohnt sind, über Fehlercodes nachzudenken, und wenn sie den Ort erreichen, an dem sie sie abgeben sollen, haben sie bereits das Gefühl, das Problem vollständig erklärt zu haben, und sind daher noch weniger geneigt, anzuhalten und darüber nachzudenken, ob Sie sollten zusätzliche Informationen geben.

Das Stellen einer Frage umfasst einige Phasen, die am logischsten in dieser Reihenfolge angeordnet sind:

  1. Sie müssen beschreiben, was Sie getan haben
  2. Sie müssen beschreiben, wie Sie das gemacht haben
  3. Sie müssen beschreiben, was passiert ist, als es fehlgeschlagen ist (oder wie es fehlgeschlagen ist)
  4. Sie müssen den Obduktionsbericht vorlegen

Im Post-Mortem-Bericht wird die Fehlermeldung angezeigt und befindet sich ganz am Ende. Wenn Neulinge diesen Punkt erreichen, sind sie am Ende der mentalen Herausforderung, ihr Problem zu erklären, und es ist wahrscheinlicher, dass sie etwas verpassen (für Neulinge gibt es ein Problem mit der Informationsüberflutung). Außerdem haben sie zu diesem Zeitpunkt bereits das Gefühl, alle Aspekte des Problems beschrieben zu haben, und sie haben frühere Gewohnheiten, die sie daran hindern, sich an die Fehlercodes zu erinnern. Schließlich haben andere Lebensbereiche keine Fehlercodes und sind es daher nicht gewohnt Denken Sie an sie.

Es kann auch sein, dass sie, selbst wenn sie sich an die Fehlercodes erinnern, zu kryptisch erscheinen, um tatsächlich von Nutzen zu sein. Nur was ist Fehler 034982? Bedeutet das wirklich irgendjemandem etwas? Und fügt es wirklich etwas zu dieser detaillierten Beschreibung dessen hinzu, was ich getan habe, wie ich es getan habe und wie es fehlgeschlagen ist? Sicher steht diese Information für sich.


Welche Umgebung / Compiler / Framework verwenden Sie mit rein numerischen Fehlercodes? oO
Timwi

Ich benutze keine solche IDE. Die Fehlermeldung selbst wird möglicherweise nur als kryptisch eingestuft (nicht hilfreich) oder klingt wie eine Neuformulierung der obigen Beschreibung (fügt keine Informationen hinzu).
EpsilonVector

0

Da für die meisten Sprachen die meisten Compiler- / Laufzeitmeldungen keinen Sinn ergeben. (Ich sehe Sie besonders in C ++ und Java an!) Die richtigen Fehler zu finden, ist in der Regel recht wenig wichtig für einen Sprachdesigner. Dinge, die richtig funktionieren, in Ordnung zu bringen, hat in der Regel eine größere Priorität, und viel Zeit kostet es sie nicht, die kleinen Details zu polieren.

Das ist einer der Gründe, warum ich gerne in Delphi arbeite. Die gesamte Sprache ist voller Aufmerksamkeit auf die kleinen Details, einschließlich der Fehler. Compilermeldungen sind sinnvoll. Laufzeitfehlermeldungen sind sinnvoll. Stapelspuren sind sinnvoll. Es ist eines der Dinge, die es bei weitem zu der am einfachsten zu debuggenden Sprache machen, mit der ich jemals gearbeitet habe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.