Ich liebe es, Programmierer zu sein. Da habe ich es gesagt. Allerdings habe ich in letzter Zeit gemerkt, dass ich es nicht ertragen kann, Fehler zu beheben. Überhaupt.
Während ich etwas entwickle, ist meine Produktivität extrem hoch. Selbst wenn ich Unit-Tests schreibe und meine Entwicklung selbst teste, bin ich im Allgemeinen sehr produktiv. Ich kann mich gut konzentrieren und Aufgaben erledigen.
Wenn sich jedoch die Zeit für die Qualitätssicherung abzeichnet und ich an der Behebung von Fehlern arbeite, wird meine Inspiration massiv beschleunigt. Ich muss mich mit ziemlich extremen Maßnahmen (Sie wissen, hohe BPM-Musik, übermäßige Mengen an Koffein usw.) dazu zwingen, etwas zu tun. Meine Aufgabe besteht normalerweise darin, in ein bestehendes umfangreiches Projekt einzusteigen und neue Funktionen hinzuzufügen oder Fehler zu beheben. Daher kann ich meinem Arbeitgeber nicht genau sagen, dass ich ein paar Wochen benötige, um Komponententests für den gesamten Code zu schreiben Die von uns häufig verwendete Servertechnologie ist sowohl für Unit- als auch für Integrationstests sehr unerschwinglich, da sie einige Java-Classloader-Probleme aufweist. Ich bin nicht ganz gegen Fehlerbehebung, manchmal kann es Spaß machen, aber es macht überhaupt keinen Spaß wenn Sie kleinere Änderungen vornehmen müssen und 30 Sekunden bis 3 Minuten warten müssen, um zu sehen, ob sie funktioniert haben oder nicht (aufgrund der Funktionsweise des Systems).
Wie kann ich meine Produktivität und Motivation beim Beheben von Fehlern verbessern? Beschäftigen sich die meisten Programmierer damit?
quelle
Antworten:
Das ist das eigentliche Problem hier. Sie fühlen sich unproduktiv, wenn Sie so lange auf Rückmeldungen warten müssen, ich kenne das Gefühl. Vielleicht ist es möglich, mehr Dienste herauszufiltern und bessere Testwerkzeuge zu erstellen, damit Sie sofort ein Feedback erhalten.
Das Testen von Legacy-Codes in Einheiten ist teuer oder kann gefährliche Nachbesserungen nach sich ziehen. Wenn Sie jedoch bessere Testvorrichtungen erstellen, können Sie den Test in Sekunden statt in Minuten durchführen und erzielen fast die gleiche Produktivität wie bei der Arbeit mit neuem Code, der auf Einheiten getestet werden kann.
Das Warten auf Feedback ist langweilig und demotivierend, nicht das Beheben von Fehlern.
quelle
Fehlerbehebung ist eine äußerst wichtige Fähigkeit, die Sie lernen sollten. Ich habe irgendwo gelesen, dass man normalerweise 80% der Zeit damit verbringt, die 20% der Probleme in einer Anwendung zu beheben.
Ich glaube daran, aus Fehlern zu lernen , und die Fehlerbehebung ist eine Gelegenheit, aus anderen Fehlern zu lernen . Sie können es lernen und helfen, in Zukunft ein besserer Programmierer zu sein. Dies ist die Motivation, die ich hatte, als ich anfing, viele Fehler zu beheben und den Code neu zu faktorisieren .
quelle
Ich persönlich fand es hilfreich, Fehler nicht mehr als 'kleine Dinge', sondern als große Showstopper zu betrachten, die genauso wichtig sind wie große Features, obwohl sie nach stundenlangem Debuggen nur ein paar Codezeilen ändern müssen. Auf diese Weise ist es weniger bedrückend, einen ganzen Tag damit zu verbringen, 3 Bug-Tracker-Einträge zu töten (der Ansatz hängt ein wenig von Ihrer persönlichen Fähigkeit ab, sich dazu zu überreden, es zu glauben :-).
Vielleicht hilft es, ein Spiel daraus zu machen, zum Beispiel zusammen mit Ihren Mitarbeitern ( wer behebt die meisten Fehler pro Tag? Oder, noch schlimmer, wer hat die geringste Anzahl von Neuerungen pro Tag durchgeführt? )
quelle
Ich war in deinen Schuhen. Erstellen Sie automatisierte Tests, wann und wo Sie können. Es muss nicht alles auf einmal sein. Nehmen Sie sich eine Minute Zeit, um einen Testfall zu programmieren, wenn Sie einen Fehler finden. Wenn Sie einen Testfall nicht programmieren können, schreiben Sie irgendwo eine kurze Beschreibung, wie Sie ihn manuell testen können, z. B. hier klicken, dies eingeben usw., und stellen Sie ihn in eine Art Wissensdatenbank.
Das Debuggen kann sehr mühsam sein, insbesondere bei kompliziertem Code, den Sie nicht geschrieben haben. Überlegen Sie sich ein Ziel: "Fix Bug 13533 by Friday". Richten Sie dann eine Belohnung ein, wenn Sie das Ziel "Schnappen Sie sich am Freitagabend ein Pint mit meinen Freunden" erreichen. Dies wird dazu beitragen, dass es ein bisschen lohnender wird.
Abgesehen davon ist Arbeit manchmal genau das ... Arbeit.
quelle
In einer solchen Situation brauchen Sie eine kreative Herausforderung. Normalerweise schreibt es Code, aber hier ist es nicht.
Aber es ist nicht alles verloren. Arbeiten Sie an der Lösung Ihrer Metaprobleme und stecken Sie Ihre Energie in diese. Warum dauert es 30 Sekunden bis 3 Minuten, um Feedback zu erhalten? Wie können Sie diese Zeit verkürzen? (Vielleicht können Sie ein Skript oder eine Utility-App schreiben, die Sie nicht einchecken. Dies hilft Ihnen dabei.) Das ist Ihre neue Problemdomäne - Ihre neue kreative Herausforderung.
Persönlich stelle ich jedes Mal, wenn ich mich in einer Phase der Fehlerbehebung befinde, meine größten Hindernisse für eine schnelle und schmerzlose Ausführung fest und automatisiere das, was ich automatisieren muss, um diese Hindernisse zu beseitigen. Dies führt häufig zu Produktivitätssteigerungen und Ergänzungen meines persönlichen Portfolios.
Kurz gesagt würde ich sagen, dass wir uns immer weiterentwickeln. :)
quelle
Ist Ihr Problem beim Debuggen oder bei der Fehlerbehebung? Wenn Sie genug debuggen können, um die Komponente zu isolieren, die das Problem verursacht, betrachten Sie es als eine neue Entwicklungsaufgabe.
quelle
Vielleicht sollten Sie sich Brian Hayes ' Debugging Myself ansehen , einen Artikel, der 1995 in American Scientist erschien. Sie könnten Schritte unternehmen (wie die gewohnte Verwendung von Yoda-Bedingungen ), um die am meisten gehassten Arten von Fehlern, die Sie produzieren, zu reduzieren oder zu beseitigen.
Ich bin der Meinung, dass das Debuggen eine andere Fähigkeit als das Programmieren ist, obwohl es verwandt ist. Insbesondere das Debuggen von Multithread-Programmen unterscheidet sich fast vollständig vom Schreiben.
quelle
Wenn die Softwareentwicklung langweilig ist, machen Sie es falsch. Mit anderen Worten, es ist kein Problem mit Ihnen, sondern ein Problem mit Ihrer Plattform und Ihrem Prozess. Haben Sie darüber nachgedacht, eine Position mit einer dynamischen Sprache (z. B. Python, Ruby, JavaScript) zu suchen, bei der Sie nicht auf einen Neustart des Servers warten müssen?
quelle
Das gehört leider zum Job. Sie werden beschissene Projekte und beschissene Arbeitgeber haben (ich sage hier auch nicht, nur verallgemeinernd).
Sie können Komponententests anhand ihres Codes schreiben. Schleichen Sie es ein, wie Sie können. Sobald Sie etwas haben, das Sie den Chefs zeigen können, können Sie möglicherweise das Blatt wenden.
Verwenden Sie Debugging-Tools, um die Langsamkeit zu beheben, verwenden Sie Komponententests, um neuen Code zu testen, und verwenden Sie sie, um Probleme mit vorhandenem Code zu beheben sowie den vorhandenen Code in kleinere Teile aufzuteilen.
Sie können es zu einer Herausforderung machen und ein Held der Prozessverbesserung werden. Und wenn es nicht funktioniert, haben Sie gute Erfahrungen, die Sie zum nächsten Arbeitgeber mitnehmen können.
quelle
Die meisten Programmierer müssen sich irgendwann in ihrer Karriere mit der Behebung persönlicher Probleme befassen.
Der richtige Abstand zwischen Mensch und Arbeit ist für Ihre Motivation von entscheidender Bedeutung. Identifizieren Sie sich bei Ihrer Arbeit nicht zu stark oder zu wenig. Wenn Sie sich zu sehr mit Ihrer Arbeit identifizieren, können Probleme wie die von Ihnen beschriebenen auftauchen: Sie können die Fehler nur sehr ungern beheben, da Sie die Hälfte der Zeit für sich selbst verantwortlich machen. Holen Sie sich innere Distanz und finden Sie heraus, wie Sie Ihr Problem rational lösen können.
In Bezug auf die speziellen Probleme auf Ihrer Plattform gibt es einige Möglichkeiten, um lange Bereitstellungs- und Testzeiten zu verkürzen (und nebenbei bemerkt, Ihre sind nicht besonders lang).
Erstens, je länger Ihre Testzeit ist, desto eher sollten Sie dem Frachtkult abgeneigt sein. Wenn Sie eine Änderung vornehmen, denken Sie darüber nach, bis Sie sicher sind, dass der Fehler behoben wird . Wie sicher Sie sind, hängt natürlich von der Länge Ihres Testzyklus ab. Wenn Ihre Testzyklen jedoch länger werden und lange Tests nicht vermieden werden können, denken Sie länger nach, und Sie werden beim Debuggen belohnt und zufriedener, weil es schneller ist und die lohnende Wirkung eines guten Augenblicks von "fiat lux" hat ".
Zweitens, neigen Sie mehr zu Unit-Tests und weniger zu Integrationstests. Entfernen Sie alle Fehlerquellen von der schwer zu debuggenden Plattform, die Sie verwenden können.
quelle
Fehlerbehebung kann "großartig" oder "langweilig" sein. Ich habe einige Spielguthaben, die ausschließlich auf die Behebung eines einzelnen Fehlers zurückzuführen sind - des Absturzfehlers, den sonst niemand beheben konnte. Aber die tägliche Pflege von Bugzilla ist betäubend. Kleinere Fehler sind langweilig. Große Bugs sind es wert.
Hier ist die Erkenntnis: Die Tatsache, dass Sie eine riesige Liste kleinerer Fehler haben, ist selbst ein großer Fehler. Es ist einfach kein Codefehler. Es ist ein Prozess- oder Verwaltungsfehler.
Finden Sie diesen Fehler und beheben Sie ihn.
quelle
Eine Sache, die ich unter Kollegen und Bekannten gefunden habe, die gute "Debugger / Bugfixer / Problemlöser" sind, ist, dass sie im Allgemeinen gerne Rätsel lösen. Das kann Kreuzworträtsel, Zahlenspiele (wie Sudoku) und Logikrätsel usw. bedeuten.
Ein Weg, wie Sie ein besserer Bugfixer werden können, besteht darin, einige Zeit an Ihren Fähigkeiten zur Problemlösung oder zum Lösen von Rätseln zu arbeiten.
Hier ist ein Wikipedia-Link , der möglicherweise ein guter Ausgangspunkt für Dinge ist, die Ihnen helfen, ein besserer Problemlöser zu sein.
Wohlgemerkt, manche Leute sind einfach besser darin, Probleme zu lösen, oder sie genießen es einfach mehr. Einige Leute mögen es überhaupt nicht, was es schwierig macht, sich selbst dazu zu zwingen - aber machen Sie keinen Fehler - wenn Sie sich zwingen, zu lernen, ein Rätsellöser zu sein, wird es Ihnen in Zukunft leichter fallen, ein guter Bugfixer zu sein .
quelle
Das Beheben von Fehlern fühlt sich normalerweise wie eine lästige Pflicht an, da Sie das Gefühl haben, dass Fehler Ihre ganze Zeit in Anspruch nehmen und Sie von den lustigen neuen Dingen fernhalten. Die Realität ist jedoch, dass die Fehlerbehebung einen großen Teil unserer Arbeit ausmacht. Sie beginnt bereits mit dem Schreiben der ersten Codezeile und dem Ausführen des Compilers. Wenn Sie Code zum ersten Mal veröffentlichen, haben Sie wahrscheinlich bereits Stunden damit verbracht, Fehler zu beheben. Dies scheint jedoch nicht der Fall zu sein, da Sie sie im Rahmen der Implementierung von Features behoben haben. Egal, wie gut Sie als Programmierer sind, in Ihrem System werden sich realistisch gesehen Fehler einschleichen.
Also, wie machst du es Spaß? Nun, das kann ich Ihnen nicht wirklich beantworten, da ich mir wirklich nicht vorstellen kann, was Ihr individuelles Boot treibt. Für mich bin ich ein kleiner Tool-Junkie. Die Antwort bestand darin, eine sehr zuverlässige Toolkette und einen flexiblen Entwicklungsprozess zu haben, die alle dazu beitragen, dass die Fehlerbehebung weniger lästig und das Problem einfacher zu lösen ist schnell. Ich entwickle derzeit hauptsächlich in C # und bin immer auf der Suche nach Tools, mit denen die mühsame Zeit, die beim Schreiben von Software anfällt, entfällt. Ich verwende einen Test-First-Development-Ansatz, der mit einer sehr guten BDD-API namens StoryQ unterstützt wird . Ich benutze Resharper , um einen Großteil meines Refactorings zu automatisieren, und StyleCop, um Dinge wie den Codierungsstil im Auge zu behalten. Meine letzte Erweiterung der Toolkette war die AufnahmeNCrunch , der meine Tests kontinuierlich und gleichzeitig im Hintergrund ausführt, während ich programmiere , und es ist wirklich NCrunch, der sich als der Game Changer erwiesen hat.
Die Kombination all dieser Tools hat meine Produktivität in letzter Zeit erheblich gesteigert, da ich nur sehr wenig Zeit darauf warte, dass Dinge kompiliert oder ausgeführt werden. Ich erhalte visuell ein sofortiges Feedback in meiner IDE, um mich darauf hinzuweisen, dass Probleme zu beheben sind, und ich lege meinen Testcode so aus, dass ich innerhalb weniger Codezeilen genau feststellen kann, wo sich nicht nur das befindet Es tritt ein Fehler auf, aber der Grund für den Fehler liegt in der ausführlichen Berichterstattung, die ich von StoryQ erhalteDas sagt mir genau, welche Teile meines Tests bestanden wurden, welche nicht bestanden wurden und wo im Code die Fehler liegen. Da all die Zeitverschwender meiner Entwicklungszeit entfallen, verbringe ich nur sehr wenig Zeit mit dem aktiven Debuggen und dem Lösen von Problemen sowie dem Schreiben von Tests und Code. Die hohe Fluktuation hält mich auf Trab und bringt eine Menge Abwechslung in meine Aufgaben. Es hat mir auch viel Zeit gegeben, mich während meines Arbeitstages mit anderen Interessengebieten zu befassen, damit ich neue und innovative Ideen in unsere Produktlinie und unsere Prozesse einbringen kann.
quelle