Sind Debugging-Fähigkeiten wichtig, um ein guter Programmierer zu werden?


24

Zusammen mit den anderen Eigenschaften sollte ein Programmierer gute Fähigkeiten zum Debuggen benötigen? Wenn ich einen Bewerber habe, der den Fehler im angegebenen Programm nicht finden konnte, aber alle Rätsel und Programme lösen konnte, sollte ich ihn für den Job in Betracht ziehen?

BEARBEITEN: - Die Rätsel sind wie normale rote, blaue und rot-blaue Kugeln. Die Programme sind wie das Auffinden von fortlaufenden k Nullen in einem Array. Das Debugging-Programm schlägt aufgrund einer Bedingung fehl, die> = sein sollte, aber stattdessen> ist. Alles ist auf Papier.


13
Darf er das Programm ausführen oder musste er den Fehler beim Betrachten des Codes finden?
Michael K

9
Sie können nur so gut programmieren, wie Sie auch debuggen können. Die beiden gehen in meinem Buch Hand in Hand.
Demian Kasier

3
Einige Leute sind besser darin als andere. Es ist oft schwierig, einen Fehler in einem fremden Code zu finden - insbesondere während eines stressigen Interviews.
leed25d

6
@Fanatic: Nur wenn Sie nur mit Ihrem eigenen Code arbeiten. Das meiste Debuggen, das ich bei der Arbeit mache, ist das Ausgraben der Fehler anderer Leute.
Mason Wheeler

3
@Manoj R, sind Sie sicher, dass Sie bei gleichem Zeitaufwand dasselbe Problem finden könnten? Sind Sie sicher, dass die Bewerberin, nur weil sie in 20 Minuten kein Problem auf dem Papier findet, mit Google (Ja, verdammt Google) auf ihrer Seite und ein paar Wochen Übung nicht in der Lage sein würde, es gut zu machen?
Job

Antworten:


37

Ja, es ist sehr wichtig

Über diesen bestimmten Kandidaten ist es möglich, dass er / sie mit Code-Base x nicht vertraut genug war, um es zu debuggen.

Ein guter Problemlöser sollte in der Lage sein, Fehler zu beheben, da normalerweise nur eine sehr logische Methode / Vorgehensweise erforderlich ist.


1
Mehr als jede andere Fähigkeit im Programmieren und Debuggen kommt mit Erfahrung und hat weniger mit Talent zu tun.
Pieter B

24

Wenn Sie nicht debuggen können, sind Sie so gut wie kein Programmierer, geschweige denn ein guter.

Das Debuggen ist eine echte, praktische Anwendung von nicht nur technischen Fähigkeiten, sondern auch Analysefähigkeiten und Denkprozessen. Infolgedessen würde ich es als weitaus nützlicher und relevanter bewerten als Whiteboard- oder Interviewfragen.

Wenn Sie nicht den ganzen Tag mit der Beantwortung theoretischer Fragen zu tun haben, brauchen Sie jemanden, der alle erdenklichen Fähigkeiten anwenden kann.

Was Sie jedoch tun müssen, ist sich zu fragen, ob es ein fairer Test für die Fähigkeit zum Debuggen ist - könnten sie den Code ausführen, Unterbrechungspunkte einfügen und so weiter, wie sie es in der realen Welt tun würden? Was war das für ein Fehler? Wäre es etwas, das der Compiler aufgreifen und markieren würde (in diesem Fall ist es eine ziemlich sinnlose Frage, da sie es niemals erkennen müssten)?

Wenn es nur auf Papier geschrieben wurde, dann ist es im Grunde genommen nur ein detaillierter Lesetest, und das ist eine noch abstraktere Fähigkeit als Ihre durchschnittliche technische Interviewfrage, und ich würde argumentieren, ziemlich wertlos.


2
+1 für "Stellen Sie sich die Frage, ob es ein fairer Test für die Fähigkeit zum Debuggen ist". Ein fairer Test hätte ausführbaren Code mit einem Debugger eingeschlossen, dh sie würden in eine natürliche, normale Arbeitsumgebung gebracht (wenn man bedenkt, dass sie selten ohne Debugger arbeiten).
Doppelgreener

11

Hauptregel für die Einstellung - im Zweifelsfall nein sagen.

Wenn Sie eine Menge neuen Code für billige implementieren müssen - Sie können diesen Kerl bekommen, aber persönlich würde ich weiter suchen.


7
Ich habe in meinen Jahren viele Leute eingestellt und fast jeden "Vielleicht" -Kandidaten bereut, den ich eingestellt habe.
JohnFx

10

Wenn der Entwickler nicht die ganze Zeit sauberen Code schreiben kann (absolut unmöglich) und nur an Projekten auf der grünen Wiese arbeitet (was niemals der Fall sein wird), sind die Fähigkeiten zum Debuggen von entscheidender Bedeutung. Absolut. Ich habe Erfahrung mit Entwicklern, die einfach nicht gerne debuggen, also wurden sie faul und warfen Code über die Mauer, damit sie ihn testen konnten. Aber diese Entwickler halten überhaupt nicht lange.

Softwareentwicklung ist ein Handwerk und eine Fähigkeit zur Problemlösung. Zu diesen Problemen gehören sowohl die geschäftlichen Probleme als auch Probleme mit dem Code des Benutzers (und anderer Benutzer). Übrigens geht es in vielen Wartungsprojekten speziell um das Beheben von Fehlern, daher ist das Debuggen eine unabdingbare Fähigkeit.


Eine andere Sache, die ich hinzufügen möchte ... Ein Teil unseres Interviewprozesses hier ist, dass wir dem Kandidaten eine Übung zum Debuggen einer Anwendung und zum Hinzufügen einiger kleiner Funktionen geben. Jeder Teil dieses Prozesses wird als gleich wichtig behandelt.
Mark Freedman

7

Ich würde bedenken, dass es viele Websites vom Typ "Interviewfrage" gibt und es durchaus möglich ist, für eine Vielzahl von Fragen und Rätseln zu lernen. Eine Sache, für die Sie nicht lernen können, ist das Debuggen von Code, den Sie noch nie gesehen haben. Entweder haben Sie genug Code geschrieben, den Sie debuggen können, oder Sie haben nicht. Wenn es sich um eine Einstiegsposition handelt, würde ich den Kandidaten nicht ausschließen, aber wenn sie behaupten, Erfahrung mit der Sprache zu haben und keinen Code darin debuggen zu können, wird dies mit Sicherheit als rote Fahne gewertet.


5

Der Hauptunterschied, den ich zwischen Junior-Programmierern und Senior-Programmierern gesehen habe, ist ihre Fähigkeit zum Debuggen. Die Fähigkeit zum Debuggen ist etwas, das nur mit Übung und Erfahrung verbunden ist.

Stellen Sie sich zum Beispiel einen seltsamen Fehler vor, bei dem ein Java-Programm auf der Konsole im interaktiven Modus einwandfrei funktioniert, aber fehlschlägt, wenn Sie versuchen, eine Unix-Pipe für dieselbe Eingabe zu verwenden. Wenn Sie dieses Problem bereits kennen, können Sie überprüfen, ob new Scanner(System.in)es nur einmal aufgerufen wird. Der Fehler ist, dass es den Puffer verbraucht, wenn es weitergeleitet wird, aber offensichtlich nicht, wenn es sich im interaktiven Modus befindet. Ich würde erwarten, dass ein erfahrener Programmierer diesen Fehler schneller erkennt. Vielleicht, weil sie es schon einmal erlebt haben oder weil sie in der Vergangenheit andere Probleme mit dem Puffern hatten.

Was das Lösen von Puzzles und das Schreiben von neuem Code angeht, so kann ein Programmierer auf Junior-Ebene vielleicht genauso gut oder sogar besser als ein älterer Programmierer sein, obwohl Erfahrung wichtig ist. Das heißt, Intelligenz und Geschick können einen größeren Effekt haben, der unabhängig von der Erfahrung ist.

Wenn Sie in der Lage sind, in einen Junior-Programmierer zu investieren, der möglicherweise neue Ideen hat und dem Team beim "Gelieren" helfen kann. Wenn Sie einen erfahrenen Programmierer suchen, kann dieser Mangel an Debugging-Fähigkeiten ein wichtiges Warnsignal sein: Sie verfügen möglicherweise über zehn Jahre Erfahrung, die nur zehnmal dem ersten Jahr entspricht.

Nebenbei bemerkt, es gibt Möglichkeiten, das Debuggen zu verbessern, ohne vorher 10 Jahre Erfahrung zu haben. Ich empfehle Andres Zellers Buch Why Programs Fail: Eine Anleitung zum systematischen Debuggen , um wissenschaftliche Prinzipien zu erlernen und besser zu verstehen, wie man Fehler reproduziert, findet und behebt.


Das Debuggen ist also etwas, das aus der Praxis kommt und gelernt werden kann und dem bei der Auswahl der Kandidaten nicht viel Gewicht beigemessen werden sollte.
Manoj R

1
Um es klar auszudrücken: Sie sollten es für Senior-Entwickler schwer wiegen, aber weniger für Junior-Entwickler. Jemand, der gerade sein College beendet hat und mit dem Programmieren seines ersten Studienjahres begonnen hat, braucht möglicherweise zehnmal länger, um etwas zu debuggen. Es gibt aber gute Gründe, in Nachwuchsentwickler zu investieren.
Macneil

5

Das hängt von Ihrer Umgebung ab. Wenn Sie den ganzen Tag Sodoku und andere Rätsel spielen, ist dies vielleicht ein guter Kandidat.

Wenn Sie jedoch manchmal Fehler in Ihrem Code haben oder dieser nicht immer genau wie erwartet funktioniert, empfehle ich Ihnen, jemanden zu finden, der sich gut mit der Fehlerbehebung auskennt.

Mieten Sie für das, was Sie brauchen, und nicht für das, was ein Programmierer sein sollte.


3

Zusammen mit den anderen Eigenschaften sollte ein Programmierer gute Fähigkeiten zum Debuggen benötigen?

Ja.

Das Debuggen von Code ist Teil der Problemlösung. Ich habe noch nie einen Entwickler getroffen, der perfekten Code und null Fehler geschrieben hat. Ein Entwickler debuggt entweder seinen / ihren Code oder den eines anderen. Es ist eine Notwendigkeit.

Soll ich ihn für den Job in Betracht ziehen?

Vielleicht kommt es darauf an.

Wenn der Bewerber nicht in der Lage ist, ein Programm in einem Interview zu debuggen, sollte dies wahrscheinlich kein Dealbreaker sein, wenn er alle anderen Rätsel und Programme im Interview lösen konnte. Es kommt wirklich auf die Tiefe und den Atem des Interviews an.

Wie viel Debugging beinhaltet die Position? Wenn viel, dann sollte vielleicht mehr Gewicht darauf gelegt werden, wie gut ein Bewerber die Debugging-Frage beantworten kann. Da Sie jedoch nur erwähnt haben, dass eine Debug-Frage gestellt wurde, scheint dies nicht der Fall zu sein.


2
+1 Um das Debuggen zu wiederholen, ist es notwendig, aber kein Deal-Breaker während des Interviews zu sein.
Gaurav

3

Sollte ein Programmierer gute Debugging-Fähigkeiten benötigen?

Ja. Trotzdem möchte ich Sie bitten, die Methodik im Interview (dh Quiz / Test-Stil) als weniger perfekt (okay, fehlerhaft) zu betrachten, da viele Leute Code auf Papier als seltsame, ungewohnte Erfahrung empfinden.

Da das Debuggen ein Prozess ist , nicht die Antwort oder das Ergebnis (z. B. der Fehler ), würde ich die Verwendung eines interaktiven Dialogs oder einer interaktiven Diskussion als besseres Mittel zur Bewertung der Debugging-Fähigkeiten eines Kandidaten vorschlagen. Während die meisten Leute ein informelles Ad-hoc-Debugging-System verwenden, haben gute Kandidaten im Allgemeinen ein ähnliches Muster: Sie stellen Fragen, um das System oder die Annahmen und Anforderungen zu verstehen, dann das Problem zu isolieren (häufig zu teilen und zu erobern) und methodisch zu vergleichen den Code an die Anforderungen anpassen und die erwartete Eingabe / Ausgabe auswerten, anstatt eine Reihe von Dingen willkürlich auf einmal zu ändern, bis sie funktioniert.

Ich drücke auch Vorbehalte gegen Rätselprobleme während der Interviews aus, insbesondere in schriftlicher Form, als ob der Kandidat nicht die richtigen Annahmen über den Bezugsrahmen hat (der Trick)) ist das Rätsel für sie möglicherweise nicht lösbar. Viele Interview-Rätsel leiden unter einem einzigen richtigen Weg, während das Leben kompliziert ist und die kreativsten Ideen diejenigen sind, die überraschend neue Ansätze verfolgen, um ein Problem zu lösen, das mit einem bestimmten vorgekochten Rätsel möglicherweise nicht funktioniert, mit einer erwarteten Lösung . Es ist, als würden alle Trompeter Jazz spielen. Dies kann erreicht werden, indem die Frage als nicht-konfrontative (Druck kann Kreativität stören) interaktive Diskussion gestellt wird. Auch hier ist die Antwort für mich zweitrangig, um einen guten Gedankenprozess zum Ausdruck zu bringen. Sie müssen sie wahrscheinlich bitten, laut zu denken, aber dies ist meiner Erfahrung nach produktiver.

Ich habe Zellers Why Programs Fail nicht gelesen oder bewertet , kann aber empfehlen, das Debugging von Agans als kurze, schnelle Lektüre zu verwenden, um den Ad-hoc-Debugging-Prozess zu einem strukturierten, konkreten und organisierten Prozess zu machen, der Abhilfe schaffen kann effizienter beim Debuggen sein. Drucken Sie auch eine Kopie aus und hängen Sie sie an Ihre Kabine oder Problemumgehung, das Debugging Rules-Poster . Es ist eine perfekte Erinnerung an die schlechten Tage, an denen nichts richtig zu laufen scheint. Ich habe ein paar schlechte Tage und verbringe weniger Zeit mit dem aktiven Debuggen (Lesen: verwirrt meinen Kopf kratzen ), indem ich versuche, ihnen im Geiste zu folgen, wenn nicht im Brief.


Gute Antwort. Ich habe buchstäblich Tage damit verbracht, nach der einfachsten Fehlerbehebung zu suchen, und bin buchstäblich darauf gestoßen, einen kniffligen Fehler in Minuten zu beheben. Ein guter Entwickler sollte eine vernünftige Strategie haben. Und es kommt sehr auf die App an. Angenommen, Ihre App weist kein Problem auf, wenn Sie eine Reihe von Druck- / Protokollanweisungen eingeben oder die Version mit Symbolen ausführen. Was dann? Der Antragsteller sollte zumindest in der Lage sein, eine kohärente Strategie zu formulieren.
SnoopDougieDoug

2

Ich würde sagen, das Debuggen ist unerlässlich, es sei denn, der Programmierer ist so gut, dass er niemals Fehler macht. Ich bin nicht davon überzeugt, dass das unmöglich ist, aber ich kann es mir mit den gängigen Sprachen und Tools nicht vorstellen.

Ich mag das Konzept nicht, in einem Interview so auf den Punkt gebracht zu werden. Wenn der Kandidat nervös ist (und wer nicht), könnte er / sie eine Lücke ziehen, während er / sie als Programmierer in der Lage ist, routinemäßig mit solchen Problemen umzugehen. Wenn es sich dann um ein bekanntes Interview- oder Comp-Sci-Testproblem handelte, könnte der Kandidat das Ergebnis auswendig kennen, aber nicht in der Lage sein, sich durch ein neuartiges Problem zu denken. Auch wenn der Kandidat mit der Sprache nicht vertraut ist, muss er sich abmühen. Viele Fehler sind schwierig, weil ein guter Programmierer weiß, was er schreiben soll, und sein Gehirn beim Lesen von Code Verknüpfungen vornimmt. Ich kann die Verwendung von = where == im C-Stil nicht finden, da ich weiß, was die Absicht war, und mein Gehirn wird eine Analyseverknüpfung verwenden, um sie zu lesen.


1

Ein guter Teil der Programmierung zur Problemlösung, und um ein Problem zu lösen, muss man das Kernproblem kennen, nicht nur Symptome oder Inkonsistenzen. Debugging ist die Kunst, das Kernproblem zu identifizieren.

  • Identifizieren Sie das Kernproblem
  • besser in der Lage, den Fluss zu visualisieren

und viele mehr.


1

Ich würde ein wenig mehr zur Situation beitragen, indem ich auf den Fehler hinweise und sehe, welche Reaktion die Person hat. Sind sie übermäßig dramatisch in Bezug auf den Typ "D'oh! Ich bin ein Idiot, das war so dumm ...", übermäßig apathisch im Lager "Ja, welcher Typ auch immer" oder hörten sie aktiv zu, was war Falsch mit irgendeiner Entschuldigung oder Bemerkung, die besagt, dass sie etwas durcheinander gebracht haben, was sie hätten lösen sollen? Nur etwas zum Nachdenken in zukünftigen Situationen.

Zum Debuggen in einer fristgerechten Art und Weise ist eine große Geschicklichkeit. Dies ist ein bisschen anders als jemandem ein Problem zu geben, bei dem es behoben wird, wenn es behoben wird. Manchmal müssen aggressive Maßnahmen ergriffen werden, um das System zu retten. Dies sollte anerkannt werden, da die meisten Unternehmen wahrscheinlich nicht möchten, dass der Verkauf wochenlang gestoppt wird, während jemand einen Fehler in der von dem Unternehmen verwendeten Buchhaltungssoftware behebt.


1

Das Debuggen ist eine wichtige Fähigkeit. Eigentlich würde ich mehr sagen, dass die Fehlersuche die entscheidende Fähigkeit ist. Jemand sollte wissen, wie er das Problem definiert (einschließlich der Benutzerinformationen, nach denen er fragen muss und welche Protokolle er einsehen muss), wie er es reproduzieren kann, welche Datenquellen er zur Verfügung hat, um das Problem zu diagnostizieren und wie er Fehler behebt und dann eine Sache behebt ohne etwas anderes zu brechen. Es ist jedoch schwierig, dies während eines Interviews festzustellen.

Ich würde ihm ein echtes Problem beim Auffinden und die Möglichkeit geben, die verfügbaren Tools zu verwenden, und dann fragen, welche Schritte er unternommen hat, um das Problem zu finden, oder was er sonst tun könnte, wenn er das Problem in der vorgegebenen Zeit nicht finden könnte. Sie suchen wirklich jemanden, der das Problem etwas systematisch angreift und der mehr Tools in seinem Toolkit hat als nur den Debugger und Google (außer auf der Junior-Ebene, wenn er zumindest beide ausprobieren sollte (jemanden, der nicht darüber nachdenken kann) versuchen Sie diese beiden Dinge ist wahrscheinlich nicht kompetent oder zumindest würde ich die Chance auf ihn nicht nutzen), aber wahrscheinlich haben noch nicht viele erweiterte Tools zur Fehlerbehebung).

Ich würde mehr Gewicht auf Troubleshooting-Fähigkeiten legen als auf die Antworten auf Rätsel (nun, ich würde diese überhaupt nicht fragen) oder auf demonstrierte Programmierfähigkeiten. Ich habe selten einen Entwickler gesehen, der Fehler gut beheben kann und der auch keinen guten Code schreiben oder die erforderlichen Korrekturen vornehmen kann. Ich habe viele Leute gesehen, die Code zusammenbauen können, um ein "funktionierendes" Produkt zu erhalten, aber kein Problem lösen können, wenn ihr Leben davon abhängt. Meistens, weil sie nicht wirklich verstehen, was sie tun oder das Problem verstehen, das sie zu lösen versuchen. Gute Troubleshooter können das eigentliche Problem identifizieren, nicht nur das Symptom. Sie wissen, welche Fragen sie stellen müssen, um das Problem auch für die Neuentwicklung zu definieren.


1

Es gibt 4 bis 5 Schlüsselkompetenzen in jedem Job und die Programmierung ist nicht anders. Auf professioneller Ebene muss man in allen wichtigen Grundfertigkeiten gut sein. Wenn Sie 4 von 5 haben, werden Sie trotzdem zurückgehalten.

Können Sie sich einen Verkäufer vorstellen, der Kunden präsentieren, überzeugen, artikulieren und qualifizieren kann, aber das Geschäft nicht abschließen kann? Sie sind da draußen und Sie wollen sie nicht in Ihrem Verkaufsteam haben.

Das Debuggen ist definitiv eine Kernkompetenz, auf die ein Programmierer nicht verzichten kann.


0

Ich habe einen solchen Codierungsstil, der kriminelles Debuggen erfordert. Wenn ich mit 3 Codezeilen fertig bin, führe ich sie aus und teste sie, wobei ich oft ein paar Variablen drucke. In den Fällen, in denen ich unerwünschte Ergebnisse oder unerwünschtes Verhalten erhalte, füge ich viele Speicherauszüge in meinen Code ein - anstatt zu debuggen. Ich benutze echte Debugger sehr selten. Komisch aber wahr.


0

Das Debuggen ist die Phase in der Softwareentwicklung, in der ein bestimmter Test für Ihre Software durchgeführt und ein Fehler entdeckt wurde. Es ist der Vorgang des Suchens und Behebens des Fehlers in Ihrer Software. In vielen Fällen erfordert das Auffinden des Fehlers mehr Zeit als das Beheben.

Es ist der Prozess des Entfernens der Fehler (der Schwachstellen), die der Computeranwendung / dem Computer-System inhärent sind. Wenn dies nicht getan wird, können Hacker die Fehler ausnutzen und verschiedene böswillige Aktivitäten ausführen:

1) Sie können die Sicherheitslücke für die Öffentlichkeit offen legen, was zu einem Verlust von Einnahmen, Geschäft und Ansehen für die Entwickler und Anbieter führt.

2) Würmer suchen nach anfälligen Systemen, die sie ausnutzen können, und kopieren sich auf diese Server. z.B. Im Januar 2003 nutzte der Slammer-Wurm die Sicherheitslücke im MS SQL Server.

3) Wo Würmer erwähnt wurden, wie können wir die Viren vergessen. Viren werden auch von ihren Entwicklern abhanden gebracht, die die im Programm vorhandenen Fehler für den primären Zweck der unanständigen Verbreitung ausnutzen ...

4) Und wenn Programme nicht richtig debuggt werden, werden die Konsumenten sich nie ganz daran halten, wenn sie nicht auf ihre Kosten kommen. In diesem Fall brauchen Sie nicht einmal einen Hacker, um die Drecksarbeit zu erledigen - Sie können auch der guten alten Öffentlichkeit vertrauen.

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.