Wenn ich ein Problem habe:
Welche Suchtechniken verwenden Sie, um die Lösung für Ihr Problem zu finden?
Ich habe begonnen, Fragen in Stack Overflow zu stellen.
Welche anderen Techniken oder Methoden folgen Sie, um das Problem schneller zu beheben?
Geh und tu etwas anderes. Nicht wirklich. Ich habe festgestellt, dass es hilfreich ist, das Problem in den Hintergrund zu rücken. Ich kann nicht zählen, wie oft ich über eine großartige Lösung für etwas nachgedacht habe, an dem ich gearbeitet habe, als ich an etwas anderem arbeitete oder fernsah oder aß. Es scheint, dass dein Gehirn immer noch an dem Problem im Hintergrund arbeitet.
Wenn das Ihr Problem nicht löst, sprechen Sie mit jemandem. Sie würden überrascht sein, wie oft andere Ihrem Problem Lösungen geben können, die so einfach zu handhaben sind.
Nun, da ist:
Im Ernst, ich habe in den Achtzigern mit der (Hobby-) Programmierung begonnen, und selbst bis in die Mitte der neunziger Jahre musste man etwas wissen und eine technische Bibliothek haben. Dann kam Google und es ist einfacher, etwas zu googeln als es zu suchen (mit Lesezeichen versehen!) API-Dokumentation (Google "Java Stringbuilder" wird mich schneller dorthin bringen als das Navigieren), geschweige denn ein echtes Buch (elektronisch oder Papier).
Die meisten Probleme, die Sie lösen möchten, wurden zuvor gelöst. Viele Male.
Der Rest des Debuggens läuft auf Zerlegung, möglicherweise Unit-Testing (was mit der Zerlegung zusammenhängt) und die Überprüfung Ihrer Annahmen ab.
Mit "Zersetzung" meine ich, dass Ihre Lösung so strukturiert ist, dass kleine Stücke individuell getestet und leicht verstanden werden können. Wenn Sie eine 7000 Zeilen Methode haben, tun Sie (wahrscheinlich) etwas falsch.
Zu verstehen, welche Annahmen Sie getroffen haben, ist auch der Schlüssel, damit Sie sie verifizieren können. Zum Beispiel, als ich mit PHP anfing, schrieb ich einen Code wie diesen:
%Vor%und ich kratzte mich am Kopf und versuchte herauszufinden, warum es nicht funktionierte (das Array wurde beim nächsten Mal nicht aktualisiert, als ich $ _SESSION anfragte). Ich kam von einem Java-Hintergrund, wo Sie dies tun könnten:
%Vor%und das würde auf jeden Fall funktionieren. PHP jedoch kopiert das Array. Eine funktionierende Lösung ist die Verwendung von Referenzen:
%Vor%oder einfach:
%Vor%Das letzte, was ich zum Debuggen und Schreiben von robustem Code im Allgemeinen sagen werde, ist, die Grenzen Ihrer Lösung zu verstehen. Damit meine ich, wenn Sie eine verkettete Liste implementieren, dann werden sich die Randbedingungen drehen, wenn die Liste leer ist.
Erkläre das Problem einem Kollegen oder schreibe es auf, um es zu beschreiben. Das wird dich aus einer anderen Perspektive anders denken lassen. Um genauer zu sein und den Kontext des Problems zu beschreiben, werden Sie einen Schritt zurückgehen, um eine bessere Sicht auf das Problem zu bekommen. Sie könnten herausfinden, dass Sie etwas übersehen haben, was wirklich wichtig ist.
Manchmal finden Sie sogar die Erklärung bevor Ihre Beschreibung beendet.
Mein bester Freund seit vielen Jahren war es, auf mein Fahrrad zu springen und nach Hause zu gehen. Gerade von der Tastatur wegzukommen hat viele Probleme über die Jahre für mich gelöst.
Wenn das Problem bis zum Ende des Tages andauert, versuche ich, das Problem bewusst zu lösen, bevor ich schlafen gehe.
Mir ist klar, dass das ein bisschen nach draußen klingt, aber es ist in meiner Erfahrung sehr üblich, dass ich mit mindestens einer alternativen Herangehensweise an das Problem aufwache, wenn nicht die vollständige Lösung. Die Idee ist nicht, darüber zu betonen - sondern aktiv zu entscheiden, es über Nacht zu lösen. Auf diese Weise können Sie ohne Sorgen schlafen gehen.
Ich denke, dass gutes Essen, regelmäßige Bewegung und guter Schlaf einen großen Beitrag zum Problemlösungsprozess leisten.
Normalerweise werde ich versuchen, das Problem für ein paar Stunden zu lösen, verschiedene Dinge auszuprobieren, sie auf Papier zu schreiben, Diagramme zu erstellen. Wenn nichts davon funktioniert, arbeite ich normalerweise die folgenden Optionen durch.
Es ist oft am besten, den Kopf freizumachen, indem Sie etwas anderes als etwas programmieren. Siehe diese Antwort für ein Beispiel - ich habe es gemacht, während ich mit einem besonders dornigen Käfer gekämpft habe und wann Ich kam auf das Problem zurück, das ich in etwa einer Minute gelöst habe.
Fragen Sie sich selbst: Lösen Sie dieses besonders knifflige Problem wirklich wichtig für das, was Sie tun?
Für die Zwecke Ihrer Anwendung (oder was auch immer das große Bild ist) gibt es ein ähnliches, aber einfacheres Problem, das Sie angehen könnten, um im Großen und Ganzen dasselbe zu erreichen.
Mein bester Freund seit vielen Jahren war es, auf mein Fahrrad zu springen und nach Hause zu gehen. Gerade von der Tastatur wegzukommen hat viele Probleme über die Jahre für mich gelöst.
Wenn ich ein Problem habe:
Welche Suchtechniken verwenden Sie, um die Lösung für Ihr Problem zu finden?
Ich habe begonnen, Fragen in Stack Overflow zu stellen.
Welche anderen Techniken oder Methoden folgen Sie, um das Problem schneller zu beheben?
Wenn das Problem bis zum Ende des Tages andauert, versuche ich, das Problem bewusst zu lösen, bevor ich schlafen gehe.
Mir ist klar, dass das ein bisschen nach draußen klingt, aber es ist in meiner Erfahrung sehr üblich, dass ich mit mindestens einer alternativen Herangehensweise an das Problem aufwache, wenn nicht die vollständige Lösung. Die Idee ist nicht, darüber zu betonen - sondern aktiv zu entscheiden, es über Nacht zu lösen. Auf diese Weise können Sie ohne Sorgen schlafen gehen.
Ich denke, dass gutes Essen, regelmäßige Bewegung und guter Schlaf einen großen Beitrag zum Problemlösungsprozess leisten.
Normalerweise werde ich versuchen, das Problem für ein paar Stunden zu lösen, verschiedene Dinge auszuprobieren, sie auf Papier zu schreiben, Diagramme zu erstellen. Wenn nichts davon funktioniert, arbeite ich normalerweise die folgenden Optionen durch.
Erkläre das Problem einem Kollegen oder schreibe es auf, um es zu beschreiben. Das wird dich aus einer anderen Perspektive anders denken lassen. Um genauer zu sein und den Kontext des Problems zu beschreiben, werden Sie einen Schritt zurückgehen, um eine bessere Sicht auf das Problem zu bekommen. Sie könnten herausfinden, dass Sie etwas übersehen haben, was wirklich wichtig ist.
Manchmal finden Sie sogar die Erklärung bevor Ihre Beschreibung beendet.
Geh und tu etwas anderes. Nicht wirklich. Ich habe festgestellt, dass es hilfreich ist, das Problem in den Hintergrund zu rücken. Ich kann nicht zählen, wie oft ich über eine großartige Lösung für etwas nachgedacht habe, an dem ich gearbeitet habe, als ich an etwas anderem arbeitete oder fernsah oder aß. Es scheint, dass dein Gehirn immer noch an dem Problem im Hintergrund arbeitet.
Wenn das Ihr Problem nicht löst, sprechen Sie mit jemandem. Sie würden überrascht sein, wie oft andere Ihrem Problem Lösungen geben können, die so einfach zu handhaben sind.
Vergessen Sie nicht die Google-Codesuche
Nun, da ist:
Im Ernst, ich habe in den Achtzigern mit der (Hobby-) Programmierung begonnen, und selbst bis in die Mitte der neunziger Jahre musste man etwas wissen und eine technische Bibliothek haben. Dann kam Google und es ist einfacher, etwas zu googeln als es zu suchen (mit Lesezeichen versehen!) API-Dokumentation (Google "Java Stringbuilder" wird mich schneller dorthin bringen als das Navigieren), geschweige denn ein echtes Buch (elektronisch oder Papier).
Die meisten Probleme, die Sie lösen möchten, wurden zuvor gelöst. Viele Male.
Der Rest des Debuggens läuft auf Zerlegung, möglicherweise Unit-Testing (was mit der Zerlegung zusammenhängt) und die Überprüfung Ihrer Annahmen ab.
Mit "Zersetzung" meine ich, dass Ihre Lösung so strukturiert ist, dass kleine Stücke individuell getestet und leicht verstanden werden können. Wenn Sie eine 7000 Zeilen Methode haben, tun Sie (wahrscheinlich) etwas falsch.
Zu verstehen, welche Annahmen Sie getroffen haben, ist auch der Schlüssel, damit Sie sie verifizieren können. Zum Beispiel, als ich mit PHP anfing, schrieb ich einen Code wie diesen:
%Vor%und ich kratzte mich am Kopf und versuchte herauszufinden, warum es nicht funktionierte (das Array wurde beim nächsten Mal nicht aktualisiert, als ich $ _SESSION anfragte). Ich kam von einem Java-Hintergrund, wo Sie dies tun könnten:
%Vor%und das würde auf jeden Fall funktionieren. PHP jedoch kopiert das Array. Eine funktionierende Lösung ist die Verwendung von Referenzen:
%Vor%oder einfach:
%Vor%Das letzte, was ich zum Debuggen und Schreiben von robustem Code im Allgemeinen sagen werde, ist, die Grenzen Ihrer Lösung zu verstehen. Damit meine ich, wenn Sie eine verkettete Liste implementieren, dann werden sich die Randbedingungen drehen, wenn die Liste leer ist.
Fragen Sie sich selbst: Lösen Sie dieses besonders knifflige Problem wirklich wichtig für das, was Sie tun?
Für die Zwecke Ihrer Anwendung (oder was auch immer das große Bild ist) gibt es ein ähnliches, aber einfacheres Problem, das Sie angehen könnten, um im Großen und Ganzen dasselbe zu erreichen.
Es ist oft am besten, den Kopf freizumachen, indem Sie etwas anderes als etwas programmieren. Siehe diese Antwort für ein Beispiel - ich habe es gemacht, während ich mit einem besonders dornigen Käfer gekämpft habe und wann Ich kam auf das Problem zurück, das ich in etwa einer Minute gelöst habe.
Die Tatsache, dass du feststeckst, könnte ein "Code-Geruch" sein. Vorschlagen, dass etwas mit dem Design nicht in Ordnung ist oder woanders hin geht. Versuchen Sie, den Grund dafür anzugeben und beheben Sie dies stattdessen.
Wenn Sie auf Ihr Problem zurückkommen, existiert es möglicherweise nicht mehr.
Normalerweise versuche ich es zu lösen, bis ich schlafen gehe. Manchmal schreibe ich auf Papier was der Code macht und dann teile ich es in Stücke; Ich versuche zu wissen, wie sich die Variablen des Programms ändern, wenn es läuft.
Versuchen Sie zuerst, eine viel kleinere Version des Problems zu lösen und sehen Sie, wie Sie damit zurechtkommen. Sobald du das gemacht hast, wird das größere Problem nicht so gruselig aussehen.
Noch einmal, stöbern Sie durch, was ich für relevant halte, und machen Sie ein Nickerchen. Es gibt zwei andere Antworten, die Schlaf oder Nickerchen erwähnen, aber das verdient mehr Nachdruck. Es ist jetzt bekannt, dass es ernste Maschinerie gibt, die zur Arbeit geht, wenn Sie schlafen. Google ((CBS SCIENCE SLEEP)) bringt Sie zu einem tollen kostenlosen Video.
Wenn ich nicht herausfinden kann, wie ich das eigentliche Problem lösen soll, versuche ich eine vereinfachte Version des Problems zu betrachten. Um ein einfaches Beispiel zu nehmen: Ich hatte kürzlich das Problem, eine Reihe von Versandrouten zu finden, um einen Artikel von Punkt A nach Punkt B zu bekommen, wenn es nicht unbedingt eine direkte Route von A nach B gibt, aber es könnte A bis C geben und dann C nach B, oder A nach C, C nach D und dann D nach B. (Ich bin mir sicher, dass die Fluggesellschaften und Eisenbahnen dies die ganze Zeit tun.) Das war ziemlich komplex, also versuchte ich zuerst das Einfache zu betrachten Fall: eine direkte A nach B. Das war einfach. Dann überlege dir, wie ich es mit einer Station auf dem Weg handhaben würde. Dann überlegen Sie zwei Stopps. An diesem Punkt konnte ich das Muster zu einer Lösung sehen.
Lösungen für eine vereinfachte Version des Problems können zu einem Teil der größeren Lösung werden, die mit zusätzlicher Komplexität verbunden ist. Aber selbst wenn nicht, gibt Ihnen die Übung, das einfachere Problem zu lösen, oft Ideen, wie Sie das eigentliche Problem lösen können.
Normalerweise würde ich Stift und Papier bekommen und versuchen, die Details des Problems dort auszuarbeiten. Wenn das nicht hilft, Google. Wenn das nicht klappt, würde ich für eine Weile etwas anderes machen oder online fragen. Arbeitete für mich bisher.
Geh auf die Toilette. Du bewegst dich, damit dein Gehirn Sauerstoff bekommt. Du entspannst dich, also konzentrierst du dich auf andere Dinge.
Ping für Innovation! :)
Die wichtigsten Techniken, die ich benutze (sollten in der Reihenfolge befolgt werden, damit Sie das, was Sie in vorherigen Schritten getan haben, wiederverwenden können, um effizienter zu sein):
Definieren Sie Ihr Problem : Versuchen Sie klar zu definieren, was das Problem ist und was erwartet wird. Siehe 2, um Ihnen zu helfen.
Sammeln Sie Daten über den Fehler : Log alles: Ihre Versuche, das erwartete Ergebnis, das beobachtete Ergebnis. Dies wird die Notwendigkeit vermeiden, mehrmals die gleichen Tests zu wiederholen (weil Ihr Verstand sich das alles nicht merken kann), und wahrscheinlich helfen Sie, das größere Bild zu sehen.
Reduzieren Sie Ihr Problem . Dies gilt im Allgemeinen für jede abstrakte Modellierung von Naturphänomenen, aber es gilt umso mehr für die Programmierung, weil Programme sehr komplexe Entitäten sind. Sie sollten versuchen, Ihren Code auf ein minimales Programm zu reduzieren, das Ihr Problem reproduziert. Automatisierte Tools < a href="https://www.st.cs.uni-saarland.de/dd/DD.py"> existiert .
Sprich mit jemandem : Mehrere Anekdoten bestätigen, dass ungefähr 2/3 der Fehler behoben sind, wenn man nur darüber spricht. Siehe die Hilfreiche Teddybär-Anekdote . Wenn Sie Ihr Programm zuvor auf ein minimales Programm reduziert haben und eine klare Definition Ihres Problems haben, sind beide für Ihre Erklärung nützlich.
Erreichen Sie die kollaborative Hilfe : Suchen Sie bei Google und bei StackOverflow und posten Sie, wenn Sie nichts finden, was Ihr Problem löst (aber zuerst siehe 1, müssen Sie eine klare Definition haben) deines Problems).
Wie Sie sehen, habe ich die kollaborative Hilfe als letzten Schritt eingesetzt, da Sie nur dann um Hilfe bitten sollten, nachdem Sie Ihr Problem klar definiert und versucht haben, das Problem zu reduzieren und es selbst zu beheben. Wenn Sie vor der Durchführung der vorherigen Schritte zur kollaborativen Hilfe greifen, erhalten Sie entweder eine schlechte Hilfe oder Sie finden es selbst heraus, sobald Sie etwas gepostet haben.
Sie können sich auch für den Kurs Coursera Software Debugging interessieren, in dem auch verschiedene automatisierte Debugging-Funktionen beschrieben werden Methoden.
Noch einmal, stöbern Sie durch, was ich für relevant halte, und machen Sie ein Nickerchen. Es gibt zwei andere Antworten, die Schlaf oder Nickerchen erwähnen, aber das verdient mehr Nachdruck. Es ist jetzt bekannt, dass es ernste Maschinerie gibt, die zur Arbeit geht, wenn Sie schlafen. Google ((CBS SCIENCE SLEEP)) bringt Sie zu einem tollen kostenlosen Video.
Wenn ich nicht herausfinden kann, wie ich das eigentliche Problem lösen soll, versuche ich eine vereinfachte Version des Problems zu betrachten. Um ein einfaches Beispiel zu nehmen: Ich hatte kürzlich das Problem, eine Reihe von Versandrouten zu finden, um einen Artikel von Punkt A nach Punkt B zu bekommen, wenn es nicht unbedingt eine direkte Route von A nach B gibt, aber es könnte A bis C geben und dann C nach B, oder A nach C, C nach D und dann D nach B. (Ich bin mir sicher, dass die Fluggesellschaften und Eisenbahnen dies die ganze Zeit tun.) Das war ziemlich komplex, also versuchte ich zuerst das Einfache zu betrachten Fall: eine direkte A nach B. Das war einfach. Dann überlege dir, wie ich es mit einer Station auf dem Weg handhaben würde. Dann überlegen Sie zwei Stopps. An diesem Punkt konnte ich das Muster zu einer Lösung sehen.
Lösungen für eine vereinfachte Version des Problems können zu einem Teil der größeren Lösung werden, die mit zusätzlicher Komplexität verbunden ist. Aber selbst wenn nicht, gibt Ihnen die Übung, das einfachere Problem zu lösen, oft Ideen, wie Sie das eigentliche Problem lösen können.
Die wichtigsten Techniken, die ich benutze (sollten in der Reihenfolge befolgt werden, damit Sie das, was Sie in vorherigen Schritten getan haben, wiederverwenden können, um effizienter zu sein):
Definieren Sie Ihr Problem : Versuchen Sie klar zu definieren, was das Problem ist und was erwartet wird. Siehe 2, um Ihnen zu helfen.
Sammeln Sie Daten über den Fehler : Log alles: Ihre Versuche, das erwartete Ergebnis, das beobachtete Ergebnis. Dies wird die Notwendigkeit vermeiden, mehrmals die gleichen Tests zu wiederholen (weil Ihr Verstand sich das alles nicht merken kann), und wahrscheinlich helfen Sie, das größere Bild zu sehen.
Reduzieren Sie Ihr Problem . Dies gilt im Allgemeinen für jede abstrakte Modellierung von Naturphänomenen, aber es gilt umso mehr für die Programmierung, weil Programme sehr komplexe Entitäten sind. Sie sollten versuchen, Ihren Code auf ein minimales Programm zu reduzieren, das Ihr Problem reproduziert. Automatisierte Tools < a href="https://www.st.cs.uni-saarland.de/dd/DD.py"> existiert .
Sprich mit jemandem : Mehrere Anekdoten bestätigen, dass ungefähr 2/3 der Fehler behoben sind, wenn man nur darüber spricht. Siehe die Hilfreiche Teddybär-Anekdote . Wenn Sie Ihr Programm zuvor auf ein minimales Programm reduziert haben und eine klare Definition Ihres Problems haben, sind beide für Ihre Erklärung nützlich.
Erreichen Sie die kollaborative Hilfe : Suchen Sie bei Google und bei StackOverflow und posten Sie, wenn Sie nichts finden, was Ihr Problem löst (aber zuerst siehe 1, müssen Sie eine klare Definition haben) deines Problems).
Wie Sie sehen, habe ich die kollaborative Hilfe als letzten Schritt eingesetzt, da Sie nur dann um Hilfe bitten sollten, nachdem Sie Ihr Problem klar definiert und versucht haben, das Problem zu reduzieren und es selbst zu beheben. Wenn Sie vor der Durchführung der vorherigen Schritte zur kollaborativen Hilfe greifen, erhalten Sie entweder eine schlechte Hilfe oder Sie finden es selbst heraus, sobald Sie etwas gepostet haben.
Sie können sich auch für den Kurs Coursera Software Debugging interessieren, in dem auch verschiedene automatisierte Debugging-Funktionen beschrieben werden Methoden.
Mein bester Freund seit vielen Jahren war es, auf mein Fahrrad zu springen und nach Hause zu gehen. Gerade von der Tastatur wegzukommen hat viele Probleme über die Jahre für mich gelöst.
Wenn ich ein Problem habe:
Welche Suchtechniken verwenden Sie, um die Lösung für Ihr Problem zu finden?
Ich habe begonnen, Fragen in Stack Overflow zu stellen.
Welche anderen Techniken oder Methoden folgen Sie, um das Problem schneller zu beheben?
Wenn das Problem bis zum Ende des Tages andauert, versuche ich, das Problem bewusst zu lösen, bevor ich schlafen gehe.
Mir ist klar, dass das ein bisschen nach draußen klingt, aber es ist in meiner Erfahrung sehr üblich, dass ich mit mindestens einer alternativen Herangehensweise an das Problem aufwache, wenn nicht die vollständige Lösung. Die Idee ist nicht, darüber zu betonen - sondern aktiv zu entscheiden, es über Nacht zu lösen. Auf diese Weise können Sie ohne Sorgen schlafen gehen.
Ich denke, dass gutes Essen, regelmäßige Bewegung und guter Schlaf einen großen Beitrag zum Problemlösungsprozess leisten.
Normalerweise werde ich versuchen, das Problem für ein paar Stunden zu lösen, verschiedene Dinge auszuprobieren, sie auf Papier zu schreiben, Diagramme zu erstellen. Wenn nichts davon funktioniert, arbeite ich normalerweise die folgenden Optionen durch.
Erkläre das Problem einem Kollegen oder schreibe es auf, um es zu beschreiben. Das wird dich aus einer anderen Perspektive anders denken lassen. Um genauer zu sein und den Kontext des Problems zu beschreiben, werden Sie einen Schritt zurückgehen, um eine bessere Sicht auf das Problem zu bekommen. Sie könnten herausfinden, dass Sie etwas übersehen haben, was wirklich wichtig ist.
Manchmal finden Sie sogar die Erklärung bevor Ihre Beschreibung beendet.
Geh und tu etwas anderes. Nicht wirklich. Ich habe festgestellt, dass es hilfreich ist, das Problem in den Hintergrund zu rücken. Ich kann nicht zählen, wie oft ich über eine großartige Lösung für etwas nachgedacht habe, an dem ich gearbeitet habe, als ich an etwas anderem arbeitete oder fernsah oder aß. Es scheint, dass dein Gehirn immer noch an dem Problem im Hintergrund arbeitet.
Wenn das Ihr Problem nicht löst, sprechen Sie mit jemandem. Sie würden überrascht sein, wie oft andere Ihrem Problem Lösungen geben können, die so einfach zu handhaben sind.
Vergessen Sie nicht die Google-Codesuche
Nun, da ist:
Im Ernst, ich habe in den Achtzigern mit der (Hobby-) Programmierung begonnen, und selbst bis in die Mitte der neunziger Jahre musste man etwas wissen und eine technische Bibliothek haben. Dann kam Google und es ist einfacher, etwas zu googeln als es zu suchen (mit Lesezeichen versehen!) API-Dokumentation (Google "Java Stringbuilder" wird mich schneller dorthin bringen als das Navigieren), geschweige denn ein echtes Buch (elektronisch oder Papier).
Die meisten Probleme, die Sie lösen möchten, wurden zuvor gelöst. Viele Male.
Der Rest des Debuggens läuft auf Zerlegung, möglicherweise Unit-Testing (was mit der Zerlegung zusammenhängt) und die Überprüfung Ihrer Annahmen ab.
Mit "Zersetzung" meine ich, dass Ihre Lösung so strukturiert ist, dass kleine Stücke individuell getestet und leicht verstanden werden können. Wenn Sie eine 7000 Zeilen Methode haben, tun Sie (wahrscheinlich) etwas falsch.
Zu verstehen, welche Annahmen Sie getroffen haben, ist auch der Schlüssel, damit Sie sie verifizieren können. Zum Beispiel, als ich mit PHP anfing, schrieb ich einen Code wie diesen:
%Vor%und ich kratzte mich am Kopf und versuchte herauszufinden, warum es nicht funktionierte (das Array wurde beim nächsten Mal nicht aktualisiert, als ich $ _SESSION anfragte). Ich kam von einem Java-Hintergrund, wo Sie dies tun könnten:
%Vor%und das würde auf jeden Fall funktionieren. PHP jedoch kopiert das Array. Eine funktionierende Lösung ist die Verwendung von Referenzen:
%Vor%oder einfach:
%Vor%Das letzte, was ich zum Debuggen und Schreiben von robustem Code im Allgemeinen sagen werde, ist, die Grenzen Ihrer Lösung zu verstehen. Damit meine ich, wenn Sie eine verkettete Liste implementieren, dann werden sich die Randbedingungen drehen, wenn die Liste leer ist.
Fragen Sie sich selbst: Lösen Sie dieses besonders knifflige Problem wirklich wichtig für das, was Sie tun?
Für die Zwecke Ihrer Anwendung (oder was auch immer das große Bild ist) gibt es ein ähnliches, aber einfacheres Problem, das Sie angehen könnten, um im Großen und Ganzen dasselbe zu erreichen.
Es ist oft am besten, den Kopf freizumachen, indem Sie etwas anderes als etwas programmieren. Siehe diese Antwort für ein Beispiel - ich habe es gemacht, während ich mit einem besonders dornigen Käfer gekämpft habe und wann Ich kam auf das Problem zurück, das ich in etwa einer Minute gelöst habe.
Die Tatsache, dass du feststeckst, könnte ein "Code-Geruch" sein. Vorschlagen, dass etwas mit dem Design nicht in Ordnung ist oder woanders hin geht. Versuchen Sie, den Grund dafür anzugeben und beheben Sie dies stattdessen.
Wenn Sie auf Ihr Problem zurückkommen, existiert es möglicherweise nicht mehr.
Normalerweise versuche ich es zu lösen, bis ich schlafen gehe. Manchmal schreibe ich auf Papier was der Code macht und dann teile ich es in Stücke; Ich versuche zu wissen, wie sich die Variablen des Programms ändern, wenn es läuft.
Versuchen Sie zuerst, eine viel kleinere Version des Problems zu lösen und sehen Sie, wie Sie damit zurechtkommen. Sobald du das gemacht hast, wird das größere Problem nicht so gruselig aussehen.
Noch einmal, stöbern Sie durch, was ich für relevant halte, und machen Sie ein Nickerchen. Es gibt zwei andere Antworten, die Schlaf oder Nickerchen erwähnen, aber das verdient mehr Nachdruck. Es ist jetzt bekannt, dass es ernste Maschinerie gibt, die zur Arbeit geht, wenn Sie schlafen. Google ((CBS SCIENCE SLEEP)) bringt Sie zu einem tollen kostenlosen Video.
Wenn ich nicht herausfinden kann, wie ich das eigentliche Problem lösen soll, versuche ich eine vereinfachte Version des Problems zu betrachten. Um ein einfaches Beispiel zu nehmen: Ich hatte kürzlich das Problem, eine Reihe von Versandrouten zu finden, um einen Artikel von Punkt A nach Punkt B zu bekommen, wenn es nicht unbedingt eine direkte Route von A nach B gibt, aber es könnte A bis C geben und dann C nach B, oder A nach C, C nach D und dann D nach B. (Ich bin mir sicher, dass die Fluggesellschaften und Eisenbahnen dies die ganze Zeit tun.) Das war ziemlich komplex, also versuchte ich zuerst das Einfache zu betrachten Fall: eine direkte A nach B. Das war einfach. Dann überlege dir, wie ich es mit einer Station auf dem Weg handhaben würde. Dann überlegen Sie zwei Stopps. An diesem Punkt konnte ich das Muster zu einer Lösung sehen.
Lösungen für eine vereinfachte Version des Problems können zu einem Teil der größeren Lösung werden, die mit zusätzlicher Komplexität verbunden ist. Aber selbst wenn nicht, gibt Ihnen die Übung, das einfachere Problem zu lösen, oft Ideen, wie Sie das eigentliche Problem lösen können.
Normalerweise würde ich Stift und Papier bekommen und versuchen, die Details des Problems dort auszuarbeiten. Wenn das nicht hilft, Google. Wenn das nicht klappt, würde ich für eine Weile etwas anderes machen oder online fragen. Arbeitete für mich bisher.
Geh auf die Toilette. Du bewegst dich, damit dein Gehirn Sauerstoff bekommt. Du entspannst dich, also konzentrierst du dich auf andere Dinge.
Ping für Innovation! :)
Die wichtigsten Techniken, die ich benutze (sollten in der Reihenfolge befolgt werden, damit Sie das, was Sie in vorherigen Schritten getan haben, wiederverwenden können, um effizienter zu sein):
Definieren Sie Ihr Problem : Versuchen Sie klar zu definieren, was das Problem ist und was erwartet wird. Siehe 2, um Ihnen zu helfen.
Sammeln Sie Daten über den Fehler : Log alles: Ihre Versuche, das erwartete Ergebnis, das beobachtete Ergebnis. Dies wird die Notwendigkeit vermeiden, mehrmals die gleichen Tests zu wiederholen (weil Ihr Verstand sich das alles nicht merken kann), und wahrscheinlich helfen Sie, das größere Bild zu sehen.
Reduzieren Sie Ihr Problem . Dies gilt im Allgemeinen für jede abstrakte Modellierung von Naturphänomenen, aber es gilt umso mehr für die Programmierung, weil Programme sehr komplexe Entitäten sind. Sie sollten versuchen, Ihren Code auf ein minimales Programm zu reduzieren, das Ihr Problem reproduziert. Automatisierte Tools < a href="https://www.st.cs.uni-saarland.de/dd/DD.py"> existiert .
Sprich mit jemandem : Mehrere Anekdoten bestätigen, dass ungefähr 2/3 der Fehler behoben sind, wenn man nur darüber spricht. Siehe die Hilfreiche Teddybär-Anekdote . Wenn Sie Ihr Programm zuvor auf ein minimales Programm reduziert haben und eine klare Definition Ihres Problems haben, sind beide für Ihre Erklärung nützlich.
Erreichen Sie die kollaborative Hilfe : Suchen Sie bei Google und bei StackOverflow und posten Sie, wenn Sie nichts finden, was Ihr Problem löst (aber zuerst siehe 1, müssen Sie eine klare Definition haben) deines Problems).
Wie Sie sehen, habe ich die kollaborative Hilfe als letzten Schritt eingesetzt, da Sie nur dann um Hilfe bitten sollten, nachdem Sie Ihr Problem klar definiert und versucht haben, das Problem zu reduzieren und es selbst zu beheben. Wenn Sie vor der Durchführung der vorherigen Schritte zur kollaborativen Hilfe greifen, erhalten Sie entweder eine schlechte Hilfe oder Sie finden es selbst heraus, sobald Sie etwas gepostet haben.
Sie können sich auch für den Kurs Coursera Software Debugging interessieren, in dem auch verschiedene automatisierte Debugging-Funktionen beschrieben werden Methoden.
Tags und Links debugging