Warum hilft es Ihnen manchmal, nicht an einen Fehler zu denken, um ihn zu beheben? [geschlossen]

12

Gestern habe ich einen guten Teil des Nachmittags damit verbracht, einen Fehler zu beheben, den ich für trivial hielt. Ich drehte mich im Kreis und hatte keine Ahnung, was los war. Umschreiben großer Teile des Codes. Überprüfung auf SO. Immer noch keine Freude.

Also ging ich nach Hause, ging mit dem Hund spazieren, schaute ein wenig fern und kurz bevor ich einschlief, erkannte ich den offensichtlichen Fehler, den ich machte. An diesem Morgen dauerte die Reparatur ungefähr 10 Minuten.

Während ich zu Hause war, habe ich nicht aktiv über das Problem nachgedacht. Indem ich mich aus der Situation befreite, konnte ich sie lösen.

Es ist nicht das erste Mal, dass es passiert ist, und ich weiß, dass es ein ziemlich häufiger Weg ist, ein Programmierproblem zu lösen. Ich habe sogar von Leuten gehört, die die Antworten träumen.

Warum funktioniert das?

Was vielleicht noch wichtiger ist, gibt es eine gute Anleitung, wann Sie eine Pause von einem Problem einlegen sollten, wie lange die Pause dauern sollte und nach wie langer Zeit ein Problem nicht mehr wirksam ist?

Ich denke, ich versuche herauszufinden, wie ich diese unbewusste Verarbeitung optimieren kann (oder was auch immer vor sich geht).

Jeremy French
quelle
3
Ich bin mir nicht sicher, ob dies nur mit Programmierung zu tun hat. Diese Frage könnte man in vielen Bereichen auch stellen.
ozz
1
Wenn nur der kognitive Stapelaustausch in der Beta wäre!
Matt Ellen
1
Weil das Denken ein mysteriöser Prozess ist.
Davidk01
4
Diese Frage scheint nicht zum Thema zu gehören, da es sich um den Denkprozess der allgemeinen Problemlösung handelt und nicht nur auf Programmier- oder Technologiebereiche zutrifft.

Antworten:

22

Wenn Sie sich zu sehr auf ein Problem konzentrieren, können Sie keinen Schritt zurück machen. Wenn Sie Ihren Code debuggen, neigen Sie dazu, dieselben Tests unnötig zu wiederholen.

Je mehr Sie versuchen, desto mehr scheitern Sie und Sie werden sehr frustriert. Erhöhter Stress und Frustration verschlimmern die Situation.

Aus diesem Grund kann ein Kollege sehr oft zufällig in wenigen Sekunden über die Schulter schauen und auf das Problem (und die Lösung) hinweisen.

Sie sind nicht in der gleichen geistigen Verfassung wie Sie.

Ich versuche oft, nach einer gewissen Zeit aufzuhören und ein paar Stunden später ruhiger zu werden.

Aber die mächtigste Technik ist nur ... um Hilfe zu bitten .

Walter
quelle
9
+1 Wenn Sie um Hilfe bitten, neigen Sie dazu, das Problem in Begriffen zu definieren, die andere verstehen können, sodass Sie in diesem Prozess mehr Verständnis erlangen. Wenn Sie ein Thema auf einer Q & A-Site oder in einem Forum veröffentlichen, erhalten Sie sofort eine Vorstellung davon, wie Sie als nächstes vorgehen sollen.
Aditya P
1
+1 und +1 auch für @AdityaGameProgrammer: Die Beschreibung des Problems ist so hilfreich, dass selbst die Beschreibung für eine imaginäre Person - oder eine Actionfigur oder eine Pflanze oder was auch immer - oft dasselbe neue Denken auslöst (wie von vielen beschrieben). .
Matthew Frederick
6

Wenn Sie einige Zeit an einem Problem gearbeitet haben, folgt Ihr Verstand den Mustern, die Sie während der Entwicklung festgelegt haben. Mit anderen Worten, Sie entwickeln temporäre "schwarze Flecken" für Dinge außerhalb des von Ihnen festgelegten mentalen Rahmens.

Wenn Sie sich für eine Weile von dem Problem abwenden, können Sie diesen Filter entfernen und Dinge überdenken, ohne dass der Filter eingesetzt ist.

Was mir in solchen Fällen oft geholfen hat, ist jemand anderem zu erklären, warum es funktionieren sollte (wenn es nicht funktioniert). Normalerweise werden Sie nach der Hälfte Ihrer Erklärungen feststellen, wo Sie in Ihrer Argumentation einen Fehler gemacht haben oder welchen Schritt Sie verpasst haben.

Abgesehen von der Entwicklung eines mentalen Filters während der Entwicklungsarbeit ist Ihr Gehirn äußerst vielschichtig und beschäftigt sich häufig mit einem Problem als Teil unbewusster Prozesse. Manchmal lerne ich an einem Nachmittag alles, was ich kann, über ein Problem und lasse das Problem dann einen oder zwei Tage lang liegen, bevor ich an einer Lösung arbeite.

rsp
quelle
1
Ich las über einen bestimmten Professor, der vor seinem Büro einen Teddybär auf dem Schreibtisch liegen ließ. Bevor die Schüler ihn um Hilfe baten, sollten sie dem Bären zuerst ihr Problem erklären.
Michael K
Sehen Sie ziemlich ähnlich aus wie Jeff Atwood in seinem Blog blog.codinghorror.com/rubber-duck-problem-solving . Ich denke tatsächlich, dass dies sehr hilfreich sein kann. Wie oft hatten Sie eine halbe schriftliche Frage für SO und haben dann die Antwort realisiert? Ich hatte dies einige Male :)
Rémi
5

Ich bin kein Psychologe, aber wenn Sie sich zu sehr auf ein einzelnes Problem konzentrieren (den Fehler finden), verlieren Sie in der Regel den Überblick über das größere System. Aber oft lautet die Antwort nicht "dort unten", wo Sie gerade suchen, sondern an einem anderen Ort - den Sie an diesem Punkt nicht sehen können.

Sie müssen also wirklich aus den Gräben herauskommen und das gesamte System von einem allgemeineren Standpunkt aus betrachten - wieder. Man ignoriert diese Tatsache, wenn man denkt "Ich weiß wirklich, dass es genau hier ist, ich habe es einfach noch nicht gefunden". Es passiert uns allen die ganze Zeit. Ich bekomme sogar bis zu dem Punkt , wo ich weiß , „Ich kann nicht den Fehler mit einer guten Debug - Technik , so kann Sie hat irgendwo anders sein“ und immer noch nicht nehmen , das Richtige und machen Sie eine Pause - das menschliche Gehirn ist ein solches lustige Sache.

Es spielt jedoch keine Rolle, was Sie tun - ob Sie auf die Toilette gehen, mit einem Kollegen sprechen oder mit dem Hund spazieren gehen. Früher ging ich in ein Geschäft in der Nähe, um Süßigkeiten zu kaufen, als ich feststeckte, und sobald ich meine Jacke über die Lösung zog, ging mir fast jedes Mal etwas in den Kopf. Es kann auch sinnvoll sein, während des Programmierens viel Wasser zu trinken. Es zwingt dich, ab und zu eine Pause einzulegen, um das Badezimmer zu besuchen und zu zappen. Es gibt den Grund, der dich zwingt, aus den Gräben auszubrechen.

perdian
quelle
4

Aus meiner persönlichen Erfahrung und dem, was ich in meinen Nachwuchsentwicklern miterlebt habe, nähern wir uns alle einem Problem mit Annahmen und Erwartungen. Wir nehmen an, dass die Funktion x die Aufgabe y ausführt, um das Ergebnis z zu erzeugen. Warum sollte sich das ändern? Da wir uns immer mehr auf ein Problem konzentrieren, gehen wir davon aus, dass wir die Grundlagen behandelt haben und das Problem in der Tat viel komplizierter sein muss als bei der ursprünglichen Lösung. Schließen Sie Erschöpfung an eine wachsende Liste von Dingen an, von denen wir annehmen, dass sie wahr sind, die wir jedoch noch nicht überprüft haben, und bereiten Sie sich später auf einen vollständigen "WTF" -Erfolg vor.

Erst später, wenn Sie sich vom Problem gelöst haben, können die Annahmen verworfen und zurückverfolgt werden. Außerdem lösen wir normalerweise ein Problem auf der Rückseite eines anderen Problems, das wir gerade gelöst haben. Ich habe A repariert, aber es hat B kaputt gemacht, jetzt muss ich B reparieren. Wir haben also bereits einen Schwung und eine Richtung, in die wir reisen (was es noch schwieriger macht, unsere Annahmen voneinander zu trennen). Wenn Sie zur Lösung von Problem B zurückkehren, ist Problem A für Sie nicht mehr aktuell und blockiert potenzielle Möglichkeiten. Sie können das Problem ohne Vorurteile angehen, und dies eröffnet neue Denkwege und neue Blickwinkel auf das Problem.

Wenn ein Junior mich um Hilfe bittet, weiß er, dass die erste Frage, die er beantworten muss, "Was sind Ihre Annahmen?" Ist. Selbst der Versuch, dieses Problem zu lösen, kann Ihnen helfen, Ihre mentalen Blockaden zu überwinden.

Joel Etherton
quelle
3

Ich denke, dein Gehirn wird wie die Muskeln müde. Durch eine Pause kann es sich ausruhen, Sauerstoff / Kraftstoff usw. nachfüllen und wieder arbeiten.

Spazierengehen oder Sport treiben ist oft ein guter Ansatz, wenn man wirklich an etwas festhält. Selbst wenn Sie keinen "Eureka" -Moment haben, können Sie oft zurückkehren und einen neuen Ansatz wählen, um das Problem zu lösen.

Steve
quelle
3

Ich nenne es gerne die Inkubationszeit für Ideen und Probleme.

Ihr Unterbewusstsein bearbeitet das Problem weiterhin nicht linear aus Ihrem Bewusstsein heraus. Dies ist sehr ähnlich zu dem, was passiert, wenn Sie etwas Neues lernen, bevor Sie ein Nickerchen machen. Ihr Verstand hat Zeit, die Informationen zu „defragmentieren“, sodass Sie flexibler vorgehen können.

Ein weiterer hilfreicher Tipp zur Überwindung eines Fehlers ist das konfessionelle De-Bugging . Hier wenden Sie sich an eine andere Person, die das Problem nicht kennt, und beginnen, das Problem zu erklären. Ich stelle oft fest, dass mir die Lösung einfällt, wenn ich das Problem nur laut sage.

Schauen Sie sich diese psychischen Links an: Kreativitäts-Tipps und Problem-Napping

Adamizer
quelle
2

„Wir sind alle durch eine gestochen bekommen stieg manchmal. Leider , wenn wir konzentrieren so viel auf dem Schmerz vergessen wir die Schönheit der Rose, ."

Dunkle Nacht
quelle
2

Ich habe einige kritische Fehler in meiner Karriere während der Duschzeit behoben.

Ich bin kein Psychologe, aber ich denke der Unterschied ist:

  • Ich sitze vor dem Computer und sehe Quellcodes, Haltepunkte, printf Ausgaben ...

  • Im Badezimmer laufen mir Codes durch den Kopf.

Oh ho
quelle
1

Ich habe dasselbe Phänomen erlebt und es darauf zurückgeführt, dass ich das Problem aus einer anderen Perspektive betrachte, während ich mich davon entferne (mehr Zeit bedeutet ungefähr eine weiter entfernte Perspektive).

Aber es gibt noch einen anderen Trick, mit dem ich die meiste Zeit das Gleiche mache: Erklären Sie den Code einem Kollegen. Es ist nicht an ihnen , deinen Käfer zu fangen, obwohl sie es können; Es soll Sie zwingen , einen Schritt zurückzutreten und die Logik des Codes auf allen relevanten Ebenen zu erklären. Ich war noch nie in der Lage, (obwohl eine faire Warnung vorliegt - die Stichprobengröße ist begrenzt) einen Fehler unbewusst zu beheben, der dieser Behandlung für Mitarbeiter entgangen ist.

Rex Kerr
quelle
1

Ich habe kürzlich die Pomodoro-Technik angewendet, dank eines Vorschlags von jemandem auf dieser Website, und denke, sie bietet eine gute Antwort auf Ihre Frage zu Zeitpunkt und Länge der Pausen. Grundsätzlich haben Sie sich 25 Minuten lang auf ein Problem konzentriert, gefolgt von einer kurzen Pause von 3-5 Minuten und einer längeren Pause nach jeweils 4 Zyklen. Sie zitieren einige Studien, um dies zu belegen, aber anekdotisch fand ich diese Intervalle sehr effektiv.

Ich hatte gedacht, die 25-minütigen Intervalle würden mich davon abhalten, "in die Zone" zu gelangen, was laut Angaben der Leute ungefähr 15 Minuten dauert. Im Gegenteil, mit diesem Timing komme ich fast sofort in die Zone. Ich denke, das liegt daran, dass es viel einfacher ist, mich nicht abzulenken, wenn ich weiß, dass ich es nur 25 Minuten durchhalten muss. Es ist auch einfacher, externe Unterbrechungen nur um 25 Minuten zu verschieben. Es war vorher sehr schwierig, als ich versuchte, mich vor dem Mittagessen für 4 Stunden an die Arbeit zu machen.

Karl Bielefeldt
quelle