9 Möglichkeiten, schrecklichen Code zu meistern, schnell
Sie haben die Aufgabe erhalten, eine neue Funktion auf einer alten Codebasis zu implementieren, aber der Code sieht schrecklich aus. Wie können Sie es so schnell wie möglich verstehen? Hier sind einige Verknüpfungen, die Ihnen helfen, die wichtigen Teile des neuen Codes zu lernen, ohne sich in den irrelevanten Details zu verlieren.
Als Programmierer müssen wir uns oft neuen Projekten anschließen, und die Qualität des Codes kann überall sein. Selbst mit einem organisierten Team ist es eine Herausforderung, die Codequalität in einem mittelgroßen bis großen Projekt konstant zu halten.
Aus diesem Grund kann es eine wertvolle Fähigkeit sein, schlechten Code schnell zu verstehen. Es kann Ihnen helfen, in kurzer Zeit sehr produktiv zu werden und den Stress zu reduzieren, der normalerweise damit einhergeht, der Neue zu sein und aufholen zu müssen. In einem Gespräch mit einem Kollegen zu sein und nicht zu wissen, wovon diese Person die Hälfte der Zeit spricht, ist ein schreckliches Gefühl.
Andererseits ist dies eine erstklassige Gelegenheit, um Ihrem Kunden oder Chef Ihren Wert zu zeigen und schnell auf den neuesten Stand zu kommen und ihn zu beeindrucken. Die meisten Entwickler brauchen Wochen bis Monate, um mit einer Codebasis, die sie nicht selbst erstellt haben, wirklich produktiv zu werden.
So meistern Sie schrecklichen Code schnell.
- Bitten Sie um Hilfe. Es ist die effizienteste Strategie
- Erstellen Sie eine Liste von Konzepten, die für Sie keinen Sinn ergeben
- Fehler einfach reproduzieren
- Erstellen Sie ein Komponentendiagramm
- Bereiten Sie sich auf automatisierte Tests vor
- Identifizieren Sie ungewöhnliche oder unzureichende Codierungsstrategien
- Arbeiten Sie zunächst an einer kleinen Aufgabe
- Machen Sie sich vertraut, bevor Sie sich mit kritischem Code befassen
- Umgang mit einem unbekannten Tech-Stack
- Teilen Sie Ihre Ideen
Bitten Sie um Hilfe. Es ist die effizienteste Strategie
Andere Leute haben bereits gelernt, wie der Code funktioniert, warum also nicht danach fragen? Sie denken vielleicht, dass Sie dadurch wie ein Neuling aussehen, aber Neugier kann sich stark auf Ihr Image als Mitarbeiter auswirken. Wenn die Erwartung Ihres Chefs war, dass Sie schnell produktiv werden, ohne Fragen zu stellen, ist das eine Fehleinschätzung ihrerseits.
Jeder braucht Zeit, um sich auf den neuesten Stand zu bringen. Stellen Sie Fragen, und Sie werden die Menschen beeindrucken, die die richtige Einstellung für Teamarbeit haben.
In vielen Fällen haben die ursprünglichen Entwickler seltsame oder unerwartete Entscheidungen getroffen, und hier ist es viel wertvoller, über den Code zu sprechen, als ihn zu lesen. Dies gilt umso mehr, wenn die Dokumentation fehlt. Denken Sie daran, dass bestehende Entwickler über wertvolles Projektwissen verfügen, das nirgendwo geschrieben wird.
Erstellen Sie eine Liste von Konzepten, die für Sie keinen Sinn ergeben
Möglicherweise gibt es Geschäftskonzepte, die für Sie neu oder zu komplex sind. Es ist wichtig, sie zu klären, bevor Sie versuchen, an Code zu arbeiten, der diese Konzepte behandelt, um Missverständnisse zu vermeiden, deren Klärung eine Weile dauern kann.
Es kann sogar vorkommen, dass diese Ideen in einer Datenbank falsch beschriftet oder auf unerwartete Weise dargestellt werden. Vermeiden Sie es also, gestresst zu werden, wenn Sie Ihr Gehirn darum wickeln, und gehen Sie einfach zur Quelle und fragen Sie Ihre Mitarbeiter danach.
In gleicher Weise kann es Module, Klassen oder Entitäten geben, die keine geeigneten Namen haben. Notieren Sie sie. Schlecht benannte Elemente können zu großer Verwirrung führen, also dokumentieren Sie sie frühzeitig, sowie alles andere, was sich negativ auf Ihre Fähigkeit auswirkt, darüber nachzudenken, wie der Code funktioniert.
Fehler einfach reproduzieren
Durch Hinzufügen von Codeversionierung und einer virtuellen Maschine wie Docker oder Vagrant reduzieren Sie die Zeit, die zum Reproduzieren eines Fehlers und zum Testen Ihrer Arbeit an einer neuen Funktion benötigt wird, erheblich.
Jede Art von Missverständnis darüber, wie der Code funktioniert, könnte Sie auf den Weg bringen, das Falsche zu bauen, entweder weil das, was Sie bauen, vielleicht schon da ist und Sie es nicht gesehen haben, oder weil die Dinge einfach nicht so funktionieren, wie Sie dachten.
An dieser Stelle möchten Sie die Git-Versionskontrolle in Ihrem Projekt haben. Auf diese Weise können Sie zu einer stabilen Version zurückkehren oder einfach nur an separaten Zweigen arbeiten, die bei Bedarf verworfen werden können.
Mit Git ist es sogar möglich, eine bessere Reproduzierbarkeit zu erzielen, da Sie den Stash verwenden können, um Test- oder Debugging-Code hinzuzufügen, während Sie sich mit einem schwer zu verfolgenden Problem befassen.
Um mehr über die Architektur Ihres Projekts zu erfahren, übernehmen Sie frühzeitig Konfigurations- und Dokumentationsaufgaben.
Dasselbe gilt für VMs und Reproduzierbarkeit. Sie sind für jedes moderne Entwicklungsteam allgegenwärtig geworden, aber Sie werden sicherlich auf Projekte stoßen, die sie nicht verwenden oder sogar bereit sind, in einem zu laufen. Manchmal besteht Ihr erster Schritt als neues Teammitglied darin, die Schritte zu dokumentieren, die Sie unternommen haben, um eine Umgebung zum Laufen zu bringen, und diese Schritte schließlich in ein VM-Setup-Skript umzuwandeln.
Erstellen Sie ein Komponentendiagramm
Eine Mindmap von Geschäftskonzepten, ein Entity-Relational-Diagramm (ERD) der Datenbanktabellen und ein einfaches Diagramm von Codekomponenten können erheblich dazu beitragen, das Verständnis von neuem Code zu vereinfachen. Erinnerst du dich nicht, wie etwas funktioniert? Halten Sie das ERD offen.
In der Tat wird jedes grafische Tool, das Ihnen hilft, Informationen schnell zu verdauen und eine Zehntausend-Fuß-Ansicht eines Projekts zu haben, wertvoll sein. Weitere Beispiele für Tools, die Ihnen helfen könnten, sind Abhängigkeitsdiagramme, Protokolle und eine Karte des Technologie-Stacks des Projekts.
Einer der größten Zeitverbraucher in der Entwicklung ist der Integrationspunkt zwischen Systemen. Wenn Sie einen globalen Überblick über die Projektlandschaft haben, können Sie feststellen, welche Integrationspunkte interessant zu untersuchen sind. Dies sind die Stellen, an denen am meisten Arbeit geleistet wird, und die meisten Fehler.
Andererseits entwickelt sich die Technologie schnell und es könnte Möglichkeiten geben, große Teile der Codebasis durch modernere und ordnungsgemäß integrierte Lösungen zu ersetzen. Ein altes Framework hat möglicherweise eine neue und offizielle Methode zur Lösung eines Problems entwickelt, oder eine völlig neue Bibliothek wurde unter Berücksichtigung einer besseren Kompatibilität entwickelt.
Verwenden Sie Visualisierungs- und Modellierungswerkzeuge, um das Gesamtbild zu sehen.
Bereiten Sie sich auf automatisierte Tests vor
Bevor Sie anfangen, Dinge zu brechen, ist es immer ratsam, relevante Komponententests hinzuzufügen. Das Problem bei Tests und schlechtem Code ist, dass schlechter Code normalerweise eng gekoppelt und schwer (wenn nicht unmöglich) zu testen ist. Sie können keine Komponenten isolieren, die miteinander verflochten und unteilbar sind.
Machen Sie in diesen Fällen einen Schritt zurück und testen Sie von weiter weg. In der Regel bedeutet dies, Integrationstests durchzuführen, für die viele Tools verfügbar sind. Web-Apps können anhand von HTTP-Anforderungen getestet werden, sodass zumindest überprüft werden kann, ob das System auf dieselben Eingaben auf dieselbe Weise reagiert.
Integrationstests haben jedoch eine viel schlechtere Leistung als Komponententests. Wann immer Sie können, implementieren Sie Komponententests, damit Sie schneller Feedback zu Codeänderungen erhalten. Wenn dies nicht möglich ist, entscheiden Sie sich für Funktions- oder sogar Integrationstests.
Dieser Schritt sollte etwas Licht auf die Teile des Codes werfen, die funktionieren müssen. Wenn es eine große Menge an eng gekoppeltem Code gibt, ist dies ein gutes Ziel für das Refactoring nach Abschluss der Integrationstests und später für Unit-Tests.
Identifizieren Sie ungewöhnliche oder unzureichende Codierungsstrategien
Es ist Zeit, mit dem Refactoring zu beginnen, aber wo fangen Sie an?
Normalerweise ist der beste Ort dort, wo die Dinge seltsam aussehen oder wo Best Practices für die Entwicklung nicht befolgt wurden. Für die Webentwicklung könnte das Fat-Controller mit eng gekoppeltem Modellcode bedeuten.
Denken Sie daran, dass die gleichen Strategien an anderer Stelle verwendet werden können. Wenn Sie also beispielsweise feststellen, dass Fat-Controller vorhanden sind, haben frühere Entwickler wahrscheinlich nicht versucht, Thin-Controller zu verwenden. Sie können erwarten, das gleiche Problem auch in anderen Controllern zu sehen, da dies den Stil oder die Mängel des bisherigen Entwicklungsprozesses widerspiegelte.
Arbeiten Sie zunächst an einer kleinen Aufgabe
Das Beheben eines kleinen Fehlers bei einer konzeptionell einfachen Funktion ist sehr aufschlussreich und hilft Ihnen, sich von Anfang an produktiv zu fühlen.
Dies ist eine ähnliche Idee wie Andy Hunt und Dave Thomas in The Pragmatic Programmer “Tracer Bullets” nennen. Die zugrunde liegende Logik ist dieselbe: Arbeiten Sie an etwas End-to-End, um sich selbst zu beweisen, dass es möglich ist, und verbessern Sie dann diese anfängliche Arbeit schrittweise.
Der “Tracer Bullet”-Ansatz. Kredit: Der pragmatische Programmierer
Ein gutes Beispiel für die Art der einfachen Verbesserung, die Sie machen können, ist kleine Refactoring-Schritte mit einfachem Code zu nehmen. Identifizieren Sie eine gängige Programmierpraxis, die nicht befolgt wird, und wenden Sie sie an.
Einer meiner Favoriten dafür ist das Aufheben der Verschachtelung bedingter Blöcke. Anstatt also mehrere if-if-if Blöcke ineinander zu haben, negieren Sie den ersten und kehren Sie zurück und machen Sie dasselbe für alle Validierungstypprüfungen, die Sie finden können. Dies kann so einfach sein wie das Invertieren einer “Wenn” -Prüfung und das Verschieben von Code, sodass das Risiko fast nicht besteht und der flache Code leichter zu lesen ist.
Stellen Sie sicher, dass Sie zuerst an Refactoring-Funktionen arbeiten, die einfach zu testen sind, denn obwohl die Änderungen ein geringes Risiko darstellen, ist es immer eine gute Idee, Ihren Code zu validieren, bevor Sie ihn an die Produktion senden.
Machen Sie sich vertraut, bevor Sie sich mit kritischem Code befassen
Lernen Sie immer zuerst, wie das Projekt aufgebaut ist, und tauchen Sie erst dann in die architektonische Seite ein. Die kritischsten Teile des Geschäfts- und Integrationscodes sind am schwierigsten zu verstehen und zu ändern. Vermeiden Sie es, frühzeitig in Schwierigkeiten zu geraten.
Vermeiden Sie in der Regel geschäftliche Probleme, bei denen Sie mehr über das Projekt oder die geschäftliche Seite wissen müssen als derzeit. Das bedeutet normalerweise, sich von Transaktions-, Zahlungs- oder mathematiklastigem Code fernzuhalten, bis er anfängt, vertrauter Boden zu werden.
Sobald Sie produktiv sind, mit dem Codierungsstil für das Projekt vertraut sind und keine Probleme mehr haben, einfache Probleme zu beheben, ist es Zeit, an den schwierigeren Dingen zu arbeiten — aber nicht vorher.
Selbst wenn es beispielsweise dringend erforderlich ist, Zahlungsprobleme zu beheben, kann diese Art von Aufgabe unglaublich riskant sein. Ein Fehler dort könnte das Projekt teuer zu stehen kommen, und das liegt auch an Ihnen. Weigern Sie sich, wenn möglich, frühzeitig an risikoreichen Aufgaben zu arbeiten.
Umgang mit einem unbekannten Tech-Stack
Zum letzten Punkt ist ein häufiges Problem, auf das ich gestoßen bin, dass jedes neue Projekt normalerweise eine Technologie enthält, mit der ich nicht vertraut bin.
Wenn das passiert, habe ich ein paar Strategien, die mir helfen, schnell auf den neuesten Stand zu kommen. Der naheliegende Weg zum Lernen besteht darin, die Dokumentation zu lesen und sich mit der neuen Technologie vertraut zu machen. Aber während Sie viel über Struktur lernen werden, wird Ihnen dieser Weg nicht helfen, die Eckfälle zu lernen, die normalerweise mit Erfahrung einhergehen. (“Eckfall” ist ein technischer Begriff, der sich auf eine Situation bezieht, die außerhalb der normalen Betriebsparameter auftritt.)
Eine Möglichkeit, diesen Prozess des Erfahrungserwerbs zu beschleunigen, besteht darin, fragenbasierte Ressourcen wie Stack Overflow und Quora zu nehmen und sie einfach wie ein Buch durchzulesen. Finden Sie die beliebtesten Fragen zu der Bibliothek, die Sie lernen, und sehen Sie, auf welche Art von Problemen andere Personen normalerweise stoßen. Sie werden nicht unbedingt selbst auf sie stoßen, aber nur zu wissen, was möglich ist, ist wie ein helles Licht auf Ihre Mindmap dieser neuen Ideen zu werfen.
Nutzen Sie Stack Overflow-Fragen, um schnell Erfahrungen zu sammeln. Credit: Stack Overflow
Für einen gezielteren Ansatz finden Sie Informationen zu Bibliotheksfunktionen, die speziell in Ihrem neuen Projekt verwendet werden. Schauen Sie sich diejenigen an, die für Sie neu sind, und lernen Sie sie im Voraus, bevor Sie diesen Code überhaupt berühren müssen.