Als einziger Entwickler arbeiten: Code überblicken lassen

39

Ich habe keine andere Wahl , als alleine zu arbeiten, und kann keine adäquate Lösung finden, um meine Arbeit zu überprüfen, die Gesundheit zu überprüfen, jemanden zu finden, mit dem ich Ideen sammeln kann, über die besten Praktiken zu diskutieren und so weiter.

Ich dachte, ich würde eine Antwort über Jeff Atwoods Artikel bekommen: In der Programmierung ist One Is The Loneliest Number das Beste, was ich zu diesem Thema finden konnte, aber es stellte sich heraus, dass meine Frage nur wiederholt wurde.

Ich weiß, dass Stack Exchange-Sites wie diese und Code Review eine offensichtliche mögliche Antwort sind, aber wie viele es schätzen würden, ist es bei weitem nicht ideal:

Obwohl ich nicht alle Fallstricke auflisten kann, ist das Formulieren einer Frage und das Aufteilen in ein eigenständiges Problem oftmals so aufwändig, dass Sie, wenn Sie es ausreichend vorbereitet haben, Ihre eigene Frage in mehr Schritten beantwortet haben Zeit, als es sonst gedauert hätte. Durch das Ausblenden von Details, um eine genau definierte Frage zu stellen, wird die Möglichkeit ausgeschlossen, dass jemand Probleme entdeckt, an die Sie noch nicht gedacht haben. Auch wenn ich es nicht genau sagen kann, kann die Reaktionsfähigkeit der freien Konversation nicht mit jeder Form von Internetdiskussion in Textform verglichen werden, die mir einfällt. Last but not least möchte ich aus offensichtlichen Gründen nicht mein gesamtes Projekt veröffentlichen, damit die Welt es für den Rest der Ewigkeit betrachtet.

Gibt es andere Antworten, als einen Berater zu bezahlen, der meinen Code überprüft?

CL22
quelle
3
Ich habe auch dieses Problem (bei lustigen Projekten), aber ich habe das Glück, ein paar enge Programmiererfreunde zu haben, die bereit sind, meinen Code zu durchsuchen.
Austin Hyde
23
Sie könnten immer mit sich selbst sprechen - dies ist besonders gut für Wahnsinnskontrollen :-)
Danny Varod
4
Wenn Sie es sich leisten können, ist dies ein Grund, warum es sich lohnt, ein Büro / einen Schreibtisch in einem Gewerbegebiet zu mieten (idealerweise dort, wo sich IT-Mitarbeiter zusammenfinden). Ich hatte viele gute Chats mit den IT-Leuten in meinen benachbarten Büros, als ich als Einzelprogrammierer in einem Büro arbeitete.
JW01
6
Selbstständig zu arbeiten kann besser sein als mit Idioten zu arbeiten.
Job
2
Keine wirkliche Lösung, aber Sie können sich in einem SO-Chat oder einem geeigneten IRC-Kanal unterhalten. Das könnte einige der Belastungen, die mit der Arbeit von Ihnen selbst verbunden sind, verringern.
Tikhon Jelvis

Antworten:

36

Ich war in Ihren Schuhen und glaube nicht, dass es eine einfache Lösung gibt. Wenn Sie einen Berater dafür bezahlen, dass er sich Ihren Code ansieht, ist dies kein guter Weg, um Geld auszugeben. Wenn Ihr Problem darin besteht, dass Sie sich einsam fühlen und mit niemandem über Programmierung zu sprechen haben, kann ich Ihnen dort nicht helfen, aber wenn Sie wirklich daran interessiert sind, die Qualität Ihres Codes zu verbessern, ist es das Beste, ihn einzustellen beiseite und komm in ungefähr einer Woche darauf zurück. Wenn der Code wirklich schlecht ist, liegt es auf der Hand, dass Sie keinen Sinn daraus machen und anfangen können, ihn zu überarbeiten, um Sinn zu machen. Nach einigen Iterationen dieses Vorgangs werden Sie feststellen, welche Codemuster den Code leicht verständlich machen und die Codequalität verbessern.

davidk01
quelle
Guter! ... 15
Marjan Venema
2
Theoretisch könnte das funktionieren, in der Praxis gibt es KEINE MÖGLICHKEIT, dass er auf Code zurückblicken wird, den er vor 2 Wochen geschrieben hat, wenn er funktioniert. Wahrscheinlich sollte er es auch nicht tun. Wenn es gelingt, Zeit damit zu verbringen, nur weil es "hübscher" ist, sollte es getan werden, wenn und wenn es erneut berührt wird.
Thomas Bonini
3
@Krelp: Ich schaue die ganze Zeit auf früheren Code und es gibt keine Möglichkeit, Funktionen hinzuzufügen und Software im Allgemeinen zu warten, ohne zuvor geschriebenen Code zu lesen. Es gibt keine perfekte Architektur, und undichte Abstraktionen sind eher die Regel als die Ausnahme. Daher ist es unvermeidlich, zuvor geschriebenen Code zu betrachten. Ich weiß, dass Marathon-Programmierer in Programmierkreisen ein Vorbild sind, aber Marathon-Programmierungen führen schnell zu Burnout und aufgegebenen Projekten.
Davidk01
@david: Du hast erwähnt, dass du nach einer festgelegten Zeit einen Blick auf den Code werfen solltest, auch wenn es im Moment nicht nötig ist. Sie haben anfangs nicht gesagt, dass Sie nur dann auf den Code zurückblicken sollen, wenn Sie dies tun müssen, um neue Funktionen hinzuzufügen. Wenn Sie also - wie Sie sagten - irgendwann auf den gesamten alten Code zurückblicken müssen, warum dann nicht? Also in einem Moment, der relevant ist, anstatt nach einer festgelegten Zeitspanne?
Thomas Bonini
3
@Krelp: Wenn Sie mit Ihren Fähigkeiten vertraut sind, sehen Sie sich den Arbeitscode nur an, wenn Sie Lust dazu haben, aber wenn Sie gerade erst anfangen und sich nicht sicher sind, wie gut Sie Ihren Code strukturieren, suchen Sie kontinuierlich Zurück zu dem, was Sie vor ein paar Wochen geschrieben haben, und Refactoring ist ein guter Weg, um die richtige Codestruktur zu erlernen. Mein Rat war für Leute, die nach Verbesserungen suchen und den Punkt erreichen möchten, an dem die Umstrukturierung von zuvor geschriebenem Code immer weniger notwendig wird, da die ursprüngliche Version die richtige erweiterbare Struktur aufweist. Gerne können Sie meinen Rat ignorieren.
Davidk01
17

Gibt es andere Antworten, als einen Berater zu bezahlen, der meinen Code überprüft?

Nein.

Mein Rat ist, einer lokalen Entwickler- / Benutzergruppe beizutreten und Ihre Ideen mit anderen zu besprechen. Sprechen Sie über Ihr Design. Fragen Sie andere, wie sie bestimmte Probleme angegangen sind.

Wenn sie Ihr Design überprüfen, auch ohne Ihren Code anzusehen, sollte das gut genug sein.

Idioten
quelle
4
Viele professionelle Autoren tun dies.
JeffO
10

Es gibt Selbsttesttechniken wie die testgetriebene Entwicklung, die helfen können, Feedback zu geben. Wenn es schwierig wird, Sie wissen, dass Ihre Architektur wahrscheinlich aus dem Ruder läuft.

Eine Frage zu formulieren und in ein eigenständiges Problem zu packen, erfordert oft so viel Arbeit, dass Sie, wenn Sie sie ausreichend vorbereitet haben, Ihre eigene Frage schneller beantwortet haben, als dies sonst der Fall gewesen wäre.

Problem gelöst. Sie benötigen kein externes Feedback für jede einzelne Codezeile, um Verbesserungen vorzunehmen. Sie benötigen lediglich eine gute Stichprobe an den Schlüsselgabeln auf der Straße und eine sorgfältige Selbstprüfung an dazwischen liegenden Punkten.

Sie müssen über die Idee hinwegkommen, dass Sie das gleiche Qualitätsniveau für sich behalten können, wenn Sie in der gleichen Zeit arbeiten wie jemand, der in einem Team arbeitet. Es gibt einen Grund, warum Menschen in Teams arbeiten. Die gute Nachricht ist, dass Sie keine Konflikte bei Designentscheidungen haben. Die schlechte Nachricht ist, dass Sie keine Konflikte bei Designentscheidungen haben. Hoffentlich wird die zusätzliche Zeit, die Sie für die Aufrechterhaltung der Qualität aufwenden, durch die Vorteile der Einzelarbeit etwas ausgeglichen.

Karl Bielefeldt
quelle
Ich verstehe nicht, wie TDD hier eine Antwort ist.
Aaronaught
1
@Aaronaught Ich bin im selben Boot wie der TS und kann Ihnen versichern, dass das Schreiben von Tests (entweder vor oder nach dem Schreiben von Code in TDD) DER Weg ist, um zu überprüfen, ob Ihr Code vernünftig ist. Wenn Sie es nicht testen können, ist es schlecht.
Stijn
1
@stijn: Es mag (etwas) zutreffen, dass das Schreiben von Tests für fehlerhaften Code schwieriger ist, aber es ist niemals unmöglich - so werden ältere Systeme aktualisiert. Selbst wenn wir die zweifelhafte Behauptung, guter Code führe zu guten Tests, bare Münze akzeptieren, ist die umgekehrte Behauptung immer noch nicht bewiesen. Ein bestandener Test bedeutet nicht, dass der Code von angemessener Qualität ist. Tatsächlich bedeutet die Prämisse von TDD - "Rot, Grün, Refaktor" - im Wesentlichen, dass Sie schlampigen Code schreiben , der den Test besteht, und ihn dann refaktorisieren, um die Qualität zu verbessern. Am Ende des Tages sind Sie also wieder da, wo Sie angefangen haben. nur mit tests.
Aaronaught
2
@Aaronaught: Sie machen zwar gültige Punkte, aber ich stehe trotzdem zu meinem Standpunkt, dass Tests eine sehr gute Möglichkeit sind, um die Code-Sicherheit zu überprüfen (obwohl dies nicht die einzige Möglichkeit ist). Die Erfahrung hat mir gezeigt, dass es besonders nützlich ist zu sehen, wo SRP schwer verletzt wird.
Stijn
@Mark: Das ist schön, aber all diese Anekdoten sind noch weniger wert als die Werbebotschaft "Ich habe in 2 Wochen 50 Pfund abgenommen", denn das, worüber gesprochen wird, wurde noch nicht einmal gemessen , geschweige denn unter kontrollierten Bedingungen beobachtet. Ja, es gibt Hinweise darauf, dass TDD Vorabversionsfehler reduziert, und das ist eine großartige Sache. Code Reviews lösen ein völlig anderes Problem, und es gibt keine Grundlage für die Annahme, dass TDD dasselbe Problem löst. "Old-School" -Einheitentests sind wahrscheinlich tatsächlich besser dafür, weil sie Testbarkeitsbeschränkungen für einzelne Klassen anstelle von Gruppen von ihnen auferlegen.
Aaronaught
6

Ich würde empfehlen, auf Konferenzen und in lokalen Benutzergruppen so viel wie möglich zu vernetzen. Ich kenne viele Entwickler, die bereinigten Code per E-Mail oder im ganzen Jahr durchschneiden, nur um scharf zu bleiben und die Algorithmen gemeinsam zu analysieren. Nein, es ist kein persönliches Gespräch, und es ist manchmal ein Schmerz für den Code von sanitze, aber eine Überprüfung von 20 Instant Messager-Codes kann von Zeit zu Zeit ziemlich nützlich sein, besonders wenn Sie verzweifelt nach einem zweiten Paar Augen suchen.

Morgan Herlocker
quelle
4

Ich bin in einer ähnlichen Situation und verlasse mich stark auf Stack Overflow, um Feedback zu kniffligen Fragen zu erhalten. Ich finde auch, dass die Antwort oft offensichtlich wird, wenn ich tatsächlich eine Beschreibung des Problems aufschreiben muss. In Bezug auf Best Practices bin ich ein .NET-Entwickler und verwende ReSharper, das Vorschläge für bewährte Methoden zu dem von mir geschriebenen Code enthält (den ich manchmal einfach ignoriere - das kann etwas umständlich sein). Ein weiteres nützliches Tool ist FxCop, das eine statische Code-Analyse durchführt und alle Probleme hervorhebt, die nicht mit dem Regelsatz übereinstimmen.

Ansonsten liegt es an Ihnen, die aktuellen Praktiken zu lesen und auf dem neuesten Stand zu halten. Ich mag Alvin Ashcrafts Morning Dew für Links zu den Neuerungen und Verbesserungen in der .Net-Welt.

David Clarke
quelle
4

Ich würde vorschlagen, eine kleine Benutzergruppe zu erstellen (oder zu finden). Stellen Sie Ihren Code zur Verfügung und fordern Sie alle dazu auf, dafür zu sorgen, dass er funktioniert - eine halbe Stunde oder länger täglich.

jmoreno
quelle
3

Ein konstruktives Feedback aus meiner Erfahrung ist, dass es in den ersten Jahren Ihrer Entwicklung sehr wichtig, aber nicht zwingend erforderlich ist, dass ein erfahrener Entwickler Ihren Code überprüft, um die Grundlage zu legen. Sobald Sie Erfahrung haben, können Sie dem von @ davidk01 vorgeschlagenen Ansatz folgen, dh Ihren eigenen Code regelmäßig überprüfen , um die Codequalität zu verbessern.

Karthik Sreenivasan
quelle
2

Ich kenne keine Details zu Ihrer Situation, aber wo ich jetzt bin, gibt es viele erfahrungsbedürftige Studenten, die mehr als glücklich sind, als Praktikant zu arbeiten und etwas zu lernen.

Es mag für Sie eine zusätzliche Aufgabe sein, mit ihnen umzugehen und ihnen dies und das beizubringen, aber wir waren alle da, als wir anfingen, und ich denke, es ist an uns, das zurückzuzahlen.

Sie sind keine Experten und können Sie manchmal sogar in die Irre führen, aber in der Regel fordern sie alles heraus, stecken voller Ideen und eignen sich hervorragend für Diskussionen, bei denen Sie jedes Detail Ihres Codes verteidigen müssen.

Azerafati
quelle
2

Obwohl ich nicht alle Fallstricke auflisten kann, ist das Formulieren einer Frage und das Aufteilen in ein eigenständiges Problem oftmals so aufwändig, dass Sie, wenn Sie es ausreichend vorbereitet haben, Ihre eigene Frage in mehr Schritten beantwortet haben Zeit, als es sonst gedauert hätte.

Ich erlebe dasselbe für> 75% der Fragen, die ich poste.

Dies ist jedoch kein Argument dafür, dies nicht zu tun. Dies ist effektiv das Debuggen von Gummienten. Sie finden Antworten auf Fragen, die Ihrer Meinung nach als Antwort auf Ihre Frage auftauchen könnten. was bedeutet, dass Sie über das Problem aus der Sicht verschiedener Personen nachdenken; was bedeutet, dass Sie aus allen möglichen Richtungen über das Problem nachdenken; Das ist der beste Weg, um den Fehler zu finden.

Bestenfalls haben Sie schlüssig bewiesen, dass Sie sich die Antwort hier nicht vorstellen können. Im schlimmsten Fall beantworten Sie am Ende Ihre eigene Frage. Beachten Sie die Anführungszeichen, denn das ist überhaupt nicht schlecht. Es war vielleicht ein wenig ineffizient, aber es ist besser, das Problem langsam zu lösen, als sich schnell zu entscheiden, das Problem nicht anzugehen . Sie werden das Problem irgendwann schneller lösen können.

Ein typisches Beispiel:

Als junger Entwickler habe ich mich oft mit der ASP.Net-Fehlerseite befasst . Ich musste die Nachricht googeln, um herauszufinden, was los ist. Es kann mehrere Stunden dauern, bis ich die richtige Lösung gefunden habe. Ich habe im Grunde jeden Fehler in dem Buch gemacht und musste mich anschließend mit den Konsequenzen aus der Fehlersuche auseinandersetzen.

Wenn jetzt ein Fehler auftritt, kenne ich bereits die "üblichen Verdächtigen" dafür, was das Problem verursachen könnte. Meine mentale Liste der "üblichen Verdächtigen" basiert effektiv auf den Problemen, mit denen ich während meiner Karriere am meisten zu tun hatte. Ohne die zeitineffiziente Beinarbeit von Stunden des Googelns hätte ich diese mentale Liste nie erstellt . Aber jetzt, wo ich diese mentale Liste habe, bin ich bei der Fehlersuche erheblich schneller.


Auch wenn ich es nicht genau sagen kann, kann die Reaktionsfähigkeit der freien Konversation nicht mit jeder Form von Internetdiskussion in Textform verglichen werden, die mir einfällt.

Ich bin hier etwas anderer Meinung. Sie haben Recht, dass die Internetkommunikation weniger reaktionsfreudig ist, aber Sie haben (meiner Meinung nach) Unrecht, dass dies schlecht für Sie ist.

Als Einzelentwickler sind Sie auf das Debuggen von Gummiente angewiesen. Der Schlüssel zu RDD besteht darin, dass Sie Fragen antizipieren , die die Gummiente für Sie haben könnte. Man kann sich offensichtlich nicht darauf verlassen, was die Gummiente tatsächlich sagt.

Wenn Sie sich mit langsamen Messagingsystemen befassen (Posten auf StackOverflow oder Schreiben von Briefen), sind Sie von Natur aus motiviert, sicherzustellen, dass Sie es beim ersten Mal richtig machen. Weil das Korrigieren eines Fehlers ein langsamer und mühsamer Prozess sein wird.
Beachten Sie im Vergleich dazu, dass Sie mit schnellen Messagingsystemen (Konversation, Instant Messaging) sofort etwas korrigieren können. Die Fähigkeit, etwas schnell zu korrigieren, führt dazu, dass die Menschen weniger Anreize haben, um sicherzustellen, dass es korrekt ist.

Vier Beispiele dafür:

  • Wenn ich als Entwickler meine persönliche Analyse- / Aufgabenliste erstelle, verwende ich immer noch Stift und Papier. Mir ist aufgefallen, dass ich Annahmen und Unwahrheiten beschönige, wenn ich meine Notizen schreibe, weil ich denke, dass "ich das später leicht beheben kann". Wenn Sie jedoch etwas korrigieren müssen, das Sie auf Papier geschrieben haben, ist dies ärgerlich. Sie müssen die Dinge durchstreichen und zwischen den Zeilen schreiben, und das Dokument sieht so viel schlimmer aus, wenn es Kritzeleien enthält. Wenn ich auf Papier schreibe , überprüfe ich mich anhand von Fakten, bevor ich mich dazu entscheide, es zu schreiben. Dies fängt viele Missverständnisse früh auf, bevor ich überhaupt Code schreibe, der Fehler produzieren würde.
  • Meine Großmutter war Sekretärin (Alter der Schreibmaschine). Um einen Tippfehler in einem formellen Dokument zu machen, musste die gesamte Seite erneut eingegeben werden. Meine Tante ist eine Sekretärin (Alter der Textverarbeitung). Sie kann sich auf eine automatische Rechtschreibprüfung verlassen und Fehler können einfach und mit minimalem Aufwand behoben werden. Es überrascht nicht, dass meine Großmutter im Vergleich zu meiner Tante erheblich weniger Tipp- und Rechtschreibfehler macht.
  • Früher wurden Videospiele auf Kassetten gedruckt. Das Beheben eines Fehlers nach der Veröffentlichung war nahezu unmöglich. Sie müssen alle Kassetten erneut drucken, an alle Anbieter verteilen und hoffen, dass die Anbieter sich irgendwie mit den Kunden in Verbindung setzen, die das Spiel bereits gekauft haben. Es würde Tonnen von Geld kosten (doppelte physische Produktionskosten) und würde immer noch einige Kunden nicht erreichen. Im Zeitalter von Internet-Patches haben Spieleentwickler gezeigt, dass sie wesentlich weniger in das Testen ihrer Spiele investieren, um Fehler am Veröffentlichungstag zu vermeiden, da es so viel einfacher ist, jedem Kunden direkt einen Fix zukommen zu lassen. Die Auswirkung eines Fehlers wird auf einen Punkt reduziert, an dem es besser ist, eine Handvoll Probleme nachträglich zu beheben, als alles Mögliche testen zu müssen Fehler, die auftreten könnten.
  • Früher lebte ich in einer Wohnung im dritten Stock, ohne Aufzug, und musste oft ein oder zwei Straßen von meinem Gebäude entfernt parken. Ich habe fast nie vergessen, etwas aus meinem Auto mitzunehmen. Jetzt wohne ich in einem Haus mit meinem Auto direkt neben mir in der Einfahrt. Ich vergesse die ganze Zeit Dinge aus meinem Auto zu nehmen .

Der Grundgedanke dabei ist, dass ein schwieriges Austauschsystem die Menschen dazu anregt, korrekte und faktengeprüfte Austausche durchzuführen . Die Schwere der Bestrafung (= schwieriger Korrekturprozess) lehrt Sie, keine Fehler zu machen.


Durch das Ausblenden von Details, um eine genau definierte Frage zu stellen, wird die Möglichkeit ausgeschlossen, dass jemand Probleme entdeckt, an die Sie noch nicht gedacht haben.

Wenn Sie ein MCVE erstellen , sollten Sie es nicht einfach erstellen und in der Frage veröffentlichen. Sie sollten zunächst für machen es selbst , so dass Sie das Problem isolieren kann. Und dann, wenn Sie der Meinung sind, dass das Problem nicht mehr behoben werden kann und Sie die Ursache immer noch nicht erkennen können; Dann haben Sie eine gültige Frage für StackOverflow.

Ein typisches Beispiel:

Ich habe immer ein zweites Visual Studio mit einer einfachen Konsolen-App namens Sandbox. Immer wenn ich auf ein technisches Problem stoße, kopiere ich den fehlerhaften Code in die Sandbox und spiele damit herum.

  • Was passiert, wenn ich diese Einstellung ändere?
  • Kann ich das Problem reproduzieren, wenn ich den Code verkürze?
  • Welche Einstellungen machen es möglich / unmöglich, das Problem zu reproduzieren?

In 90% der Fälle stelle ich die Ursache des Problems fest, da mir die Sandbox dabei geholfen hat, den fehlerhaften Code zu betrachten, ohne vom umgebenden Kontext abgelenkt zu werden (oder beispielsweise Unsicherheiten in Bezug auf Werte, die für verschiedene Teile des Codes vorliegen).

In den anderen 10% der Fälle verbleibt mir der minimale Code zur Reproduktion des Problems, der als perfektes Beispielsnippet zum Posten auf StackOverflow dient.


Last but not least möchte ich aus offensichtlichen Gründen nicht mein gesamtes Projekt veröffentlichen, damit die Welt es für den Rest der Ewigkeit betrachtet.

Wenn Sie Ihr MCVE bereits haben, sollten Sie nicht viel an persönlichen (oder Unternehmens-) Informationen enthalten. Wenn Sie dies tun, ist es einfach, die Dinge in ein grundlegenderes Beispiel für foo / bar / baz umzubenennen, da der Code minimal ist.

Flater
quelle