Techniken, denen man folgen sollte, wenn man nicht weiter programmieren kann [geschlossen]

8

Wenn ich ein Problem habe:

  • Ich suche Google nach Code-Snippets.
  • Ich versuche, das Problem zu isolieren, damit ich es anderen besser erklären kann, um Antworten zu bekommen.

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?

    
sundar venugopal 18.11.2011, 17:48
quelle

17 Antworten

23

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.

    
Maxam 30.11.2008 11:16
quelle
9

Nun, da ist:

  • Google
  • Google
  • Google
  • Stapelüberlauf
  • Google
  • Google
  • Vielleicht ein Buch, wenn ich eins habe.

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.

    
cletus 18.11.2011 17:43
quelle
4

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.

    
philant 30.11.2008 19:50
quelle
3

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.

    
krosenvold 30.11.2008 11:12
quelle
2

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.

    
Galwegian 30.11.2008 12:00
quelle
1

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.

  1. Legen Sie eine Notiz auf meinen Monitor und fahren Sie mit etwas anderem fort
  2. Blick auf die Notiz in den nächsten Stunden, um das Problem im Hinterkopf zu behalten
  3. Google für ähnliche Probleme und die verwendeten Methoden
  4. Konsultieren Sie einen Mitarbeiter oder einen Freund
  5. Fragen Sie in einem Forum wie stackoverflow
  6. Geben Sie das Problem auf und konstruieren Sie es, oder gestalten Sie das Problem so, dass es zu einem anderen Zeitpunkt behandelt werden kann, und kleben Sie eine TODO-Notiz an die Stelle der besagten Problemumgehung.
smarthall 30.11.2008 12:32
quelle
0

Vergessen Sie nicht die Google-Codesuche

    
orip 30.11.2008 12:21
quelle
0

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.

    
MusiGenesis 23.05.2017 11:51
quelle
0

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.

    
gc5 30.11.2008 20:07
quelle
0

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.

    
AndyM 03.12.2008 09:21
quelle
0

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.

    
AndyM 03.12.2008 09:25
quelle
0

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.

    
Dan 03.12.2008 09:28
quelle
0
___ qstnhdr ___ Techniken, denen man folgen sollte, wenn man nicht weiter programmieren kann [geschlossen] ___ answer328746 ___

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.

    
___ qstntxt ___

Wenn ich ein Problem habe:

  • Ich suche Google nach Code-Snippets.
  • Ich versuche, das Problem zu isolieren, damit ich es anderen besser erklären kann, um Antworten zu bekommen.

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?

    
___ answer328783 ___

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.

    
___ answer328809 ___

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.

  1. Legen Sie eine Notiz auf meinen Monitor und fahren Sie mit etwas anderem fort
  2. Blick auf die Notiz in den nächsten Stunden, um das Problem im Hinterkopf zu behalten
  3. Google für ähnliche Probleme und die verwendeten Methoden
  4. Konsultieren Sie einen Mitarbeiter oder einen Freund
  5. Fragen Sie in einem Forum wie stackoverflow
  6. Geben Sie das Problem auf und konstruieren Sie es, oder gestalten Sie das Problem so, dass es zu einem anderen Zeitpunkt behandelt werden kann, und kleben Sie eine TODO-Notiz an die Stelle der besagten Problemumgehung.
___ answer329238 ___

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.

    
___ answer328751 ___

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.

    
___ answer328798 ___

Vergessen Sie nicht die Google-Codesuche

    
___ answer328733 ___

Nun, da ist:

  • Google
  • Google
  • Google
  • Stapelüberlauf
  • Google
  • Google
  • Vielleicht ein Buch, wenn ich eins habe.

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.

    
___ answer336604 ___

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.

    
___ answer328875 ___

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.

    
___ answer33631 ___

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.

    
___ answer329270 ___

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.

    
___ answer336591 ___

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.

    
___ answer384259 ___

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.

    
___ answer2511056 ___

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.

    
___ tag123debugging ___ Debugging ist ein methodischer Prozess zum Suchen und Beheben von Fehlern in einem Computerprogramm. ** WICHTIGER HINWEIS: ** Dieses Tag ist NUR für Fragen über Debugging-Techniken oder den Debugging-Prozess gedacht, NICHT um Hilfe beim Debuggen Ihres Codes anzufordern. ___ answer336616 ___

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.

    
___ answer33600 ___

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! :)

    
___ answer31640644 ___

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):

  1. Definieren Sie Ihr Problem : Versuchen Sie klar zu definieren, was das Problem ist und was erwartet wird. Siehe 2, um Ihnen zu helfen.

  2. 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.

  3. 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 .

  4. 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.

  5. 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.

    
___
AndyM 03.12.2008 09:32
quelle
0

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.

    
pngaz 21.12.2008 08:37
quelle
0

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.

    
Jay 24.03.2010 20:14
quelle
0

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):

  1. Definieren Sie Ihr Problem : Versuchen Sie klar zu definieren, was das Problem ist und was erwartet wird. Siehe 2, um Ihnen zu helfen.

  2. 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.

  3. 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 .

  4. 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.

  5. 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.

    
gaborous 26.07.2015 19:22
quelle
-1
___ qstnhdr ___ Techniken, denen man folgen sollte, wenn man nicht weiter programmieren kann [geschlossen] ___ answer328746 ___

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.

    
___ qstntxt ___

Wenn ich ein Problem habe:

  • Ich suche Google nach Code-Snippets.
  • Ich versuche, das Problem zu isolieren, damit ich es anderen besser erklären kann, um Antworten zu bekommen.

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?

    
___ answer328783 ___

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.

    
___ answer328809 ___

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.

  1. Legen Sie eine Notiz auf meinen Monitor und fahren Sie mit etwas anderem fort
  2. Blick auf die Notiz in den nächsten Stunden, um das Problem im Hinterkopf zu behalten
  3. Google für ähnliche Probleme und die verwendeten Methoden
  4. Konsultieren Sie einen Mitarbeiter oder einen Freund
  5. Fragen Sie in einem Forum wie stackoverflow
  6. Geben Sie das Problem auf und konstruieren Sie es, oder gestalten Sie das Problem so, dass es zu einem anderen Zeitpunkt behandelt werden kann, und kleben Sie eine TODO-Notiz an die Stelle der besagten Problemumgehung.
___ answer329238 ___

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.

    
___ answer328751 ___

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.

    
___ answer328798 ___

Vergessen Sie nicht die Google-Codesuche

    
___ answer328733 ___

Nun, da ist:

  • Google
  • Google
  • Google
  • Stapelüberlauf
  • Google
  • Google
  • Vielleicht ein Buch, wenn ich eins habe.

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.

    
___ answer336604 ___

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.

    
___ answer328875 ___

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.

    
___ answer33631 ___

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.

    
___ answer329270 ___

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.

    
___ answer336591 ___

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.

    
___ answer384259 ___

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.

    
___ answer2511056 ___

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.

    
___ tag123debugging ___ Debugging ist ein methodischer Prozess zum Suchen und Beheben von Fehlern in einem Computerprogramm. ** WICHTIGER HINWEIS: ** Dieses Tag ist NUR für Fragen über Debugging-Techniken oder den Debugging-Prozess gedacht, NICHT um Hilfe beim Debuggen Ihres Codes anzufordern. ___ answer336616 ___

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.

    
___ answer33600 ___

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! :)

    
___ answer31640644 ___

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):

  1. Definieren Sie Ihr Problem : Versuchen Sie klar zu definieren, was das Problem ist und was erwartet wird. Siehe 2, um Ihnen zu helfen.

  2. 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.

  3. 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 .

  4. 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.

  5. 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.

    
___
guerda 03.12.2008 09:23
quelle

Tags und Links