Hilft der Umgang mit altem Code, sich als Programmierer weiterzuentwickeln? [geschlossen]

18

Ich bin ein Java-Entwickler mit etwas mehr als einem Jahr Erfahrung, was mich über einen Junior stellt, aber noch nicht unter den Entwicklern auf mittlerer Ebene. Vor kurzem wurde mir ein langfristiges Projekt angeboten, bei dem es darum geht, einen bestehenden Bankanwendungscode für 4 Monate zu studieren und dann bei Bedarf Änderungen einzuführen. Als weniger erfahrener Programmierer suche ich nach Entwicklungsmöglichkeiten und frage mich, was ein solches Projekt wohl bringen könnte.

Würden Sie den Umgang mit einer großen und wahrscheinlich nicht so gut geschriebenen Bewerbung als eine gute Übung für einen Anfänger betrachten?

svz
quelle
1
Aus den Fehlern anderer zu lernen ist der sicherste Weg, Erfahrungen zu sammeln ...
Michael Borgwardt
Ich habe kürzlich ungefähr einen Monat lang den Code anderer Leute studiert. Tolle Lernerfahrung, aber saugte viel Zeit. Musste mit sedierenden Tees experimentieren.
USR
Es kann gutes Java geben, aber es ist schwieriger, für eine jr zu finden. Ich würde mir vorstellen, dass Entwickler die meisten anderen anfänglichen Sprachhintergründe haben, basierend auf Erfahrungen, die in erster Linie als Front-End-Webentwickler gemacht wurden und mit einer großen Vielfalt von Back-Ends zu tun hatten. Das Problem, denke ich, ist, dass Java die Sprache ist perfekt zu bedienen, aber in Java der Kultur geht es darum, absolut alles so sicher und tadellos wie möglich zu spielen.
Erik Reppen

Antworten:

34

Die Fehlerbehebung bei vorhandenem Code ist eine hervorragende Möglichkeit, sich als Programmierer zu entwickeln. Wenn der Code schlecht ist, lernen Sie die Auswirkungen der Fehler, die sie gemacht haben, und vermeiden möglicherweise einige davon, wenn Sie den Entwurf ausführen. Wenn der Code gut ist, erfahren Sie, wie Sie eine wartbare Anwendung erstellen.

Sie werden auch lernen, mit der Komplexität einer echten Geschäftsanwendung umzugehen. Da dies im Bankensektor der Fall ist, erfahren Sie etwas über Vorschriften des Bundes und interne Rechnungslegungskontrollen, an die Sie vielleicht noch nie gedacht haben. Das sollten Sie wissen, wenn Sie gefragt werden, ob Sie etwas anderes in der Finanzwelt entwerfen möchten. Und Finanzprogrammierung kann eine lukrative Branche sein, weshalb es für Sie von Vorteil sein kann, Bankerfahrung zu sammeln.

Sie werden vielleicht sogar erfahren, dass etwas, das vor 15 Jahren in einer Sprache geschrieben wurde, die Sie lieber nicht verwenden würden, nicht unbedingt schlecht ist. Immerhin lief es die ganze Zeit über erfolgreich.

Wenn die Anwendung, wie bei den meisten älteren Apps, keine Komponententests enthält, müssen Sie sicherstellen, dass sich eine Änderung nicht auf etwas anderes auswirkt. Möglicherweise erfahren Sie, wie Sie diese Tests hinzufügen und wie Sie das Management dahingehend verkaufen, warum diese Tests hinzugefügt werden eine gute Idee.

HLGEM
quelle
2
In der Tat, wenn Sie 4 Monate Zeit haben, um den Code zu studieren, sollten Sie viele dieser 4 Monate damit verbringen, Kommentare hinzuzufügen, die dokumentieren, was Sie gelernt haben, und Tests zu schreiben, die beweisen, dass Schlüsselkomponenten korrekt funktionieren (wie man hofft, dass sie es tun).
Ross Patterson
1
@ RossPatterson, da dies Banking ist, hoffe ich, dass sie jetzt wirklich richtig funktionieren. Wenn es keine Tests gibt, ist das Risiko einer Änderung bei Bank- und Schreibeinheitentests, die Ihnen helfen sollen, das System zu erlernen, immens.
HLGEM
3
Beim Programmieren muss man wissen, wie man die Teile bewegt. Ein System zu verstehen bedeutet zu wissen, wie man das Spiel spielt. Sie werden die Erfahrung aus Sicht des Kompetenzaufbaus nicht bereuen. Für Unternehmen zu arbeiten, die Witwen und Waisen bestehlen, wird Ihr Gewissen möglicherweise nicht tolerieren.
Meredith Poor
8

Ich denke, es ist eine ausgezeichnete Übung für Anfänger . Von anderen Erfahrungen zu lernen kann sehr effektiv sein.

Die eigentliche Herausforderung besteht nicht darin, Fehler zu finden, sondern sich in den Kopf des anderen Entwicklers zu setzen und herauszufinden, whyob der Code so geschrieben wurde. Manchmal ist es, weil sie schlampig waren, und manchmal ist es, weil sie einen verdammt guten Grund hatten. Angenommen, der Entwickler war mindestens so gut wie Sie, verfügt jedoch möglicherweise über mehr Domänenwissen.

Dan Pichelman
quelle
2
Es hilft Ihnen auch zu verstehen, dass die Methode, von der Sie glauben, dass sie hätte verwendet werden sollen, beim Schreiben des Codes nicht verfügbar war.
HLGEM
In solchen Situationen wäre es großartig, einige Codekommentare oder Projektdokumentationen zu finden. Andernfalls bleibt der Hack oder die seltsame Art, eine Funktion zu implementieren, ein Geheimnis. Dieser Entwickler ist möglicherweise nicht mehr im Unternehmen, sodass Sie ihn nicht mehr danach fragen können.
Radu Murzea
6

Dies ist eine gute Praxis für jeden Entwickler zu jedem Zeitpunkt seiner Karriere. Wenn Sie vorhandene Software überprüfen und analysieren und nach Verbesserungsmöglichkeiten suchen, beweisen Sie, dass Sie ein wertvoller Entwickler sind. Sie werden nicht nur lernen, wie andere Software entworfen und entwickelt haben, sondern auch lernen, was nicht zu tun ist, was für sich genommen wertvolles Wissen ist.

Wenn Sie der Herausforderung gewachsen sind, nehmen Sie dieses Projekt direkt an und verbessern Sie es.

Bernard
quelle
2

Es wird Ihnen absolut helfen, aber Sie müssen vorsichtig sein.

Sie müssen sicherstellen, dass Sie aus dem Legacy-Code lernen. Woher weißt du, was gut und was schlecht ist? Vielleicht können Sie die Vor- und Nachteile verschiedener Muster / Methoden erkennen, aber wenn Sie ein Junior-Entwickler wären, der gerade erst anfängt, könnten Sie dies möglicherweise nicht.

Und bleiben Sie zu lange in diesem ersten Job, und Sie lernen möglicherweise nicht oder bauen nicht genug Fähigkeiten auf und bleiben dort hängen.

ozz
quelle
2

Vermächtnis kann alles andere bedeuten, als basierend auf Ihrem "nicht so gut geschriebenen" Kommentar. Ich gehe davon aus, dass Vermächtnis "schlechte" oder zumindest "veraltete" Technologien und Muster bedeutet. Wenn der alte Code gut ist, halten Sie sich nicht zurück und lernen Sie jede Zeile davon.

Ich denke nicht, dass es genug Warnungen gegen die Art von Jobs und Projekten gibt, die Ihre Karriere ablenken und Sie bisher in wertlosen Löchern in diesem Thread stecken lassen.

Sportanalogie-Alarm: Glaubst du, dass ein Unterstützer in der NFL mehr lernt und wertvoller wird, wenn er in der Mannschaft spielt, die die schlechteste oder die beste Bilanz hat? Meine Antwort: Sie sind nicht nur wertvoller, weil sie für die besten Teams gespielt haben, sondern sie haben wahrscheinlich auch Best Practices und Wissen aufgenommen und es vermieden, Praktiken und Einstellungen zum Karriereende aufzunehmen.

Es gibt eine Menge schrecklicher Anti-Pattern-Codes, die tatsächlich für das Geschäft funktionieren und eine Menge Entwicklergehälter bezahlen. Ich schlage vor, dass ein Entwickler, der nicht genügend Code auf die „richtige“ Weise gesehen hat, Anti-Pattern-Code für eine legitime Lösung eines Problems hält. Das Unternehmen kann sagen, dass die Lösung funktioniert, aber es ist keine, die Sie in Ihrem Lebenslauf haben möchten, oder eine, mit der Sie anderen Entwicklern prahlen würden. Dies ist auch nur dann relevant, wenn Ihr persönlicher Wachstumspfad darin besteht, den Respekt Ihrer Kollegen im Ingenieurwesen zu erlangen und nicht nur vorübergehend das Einkommen des Unternehmens zu erhöhen, für das Sie arbeiten. .

Leider gibt es eine Menge Code und eine Menge Zeit, die vergehen kann, bevor die technischen Schulden aufgedeckt werden. Und diese technischen Schulden werden normalerweise genau dann erfasst, wenn es zu spät ist. Wer schon einmal versucht hat, Tech Debt oder Anti-Patterns zu stoppen, könnte aufgrund der wahrgenommenen zusätzlichen Kosten oder des Mangels an Verständnis für die Skalierbarkeit ect. Aus dem Ruder gelaufen sein. Es ist unsere Pflicht als Ingenieure, technische Schulden sofort aufzudecken. Projekte ohne erfahrene Ingenieure laufen Gefahr, irgendwann gegen eine Mauer zu stoßen, eigentlich alle Projekte auch mit talentierten Entwicklern. Die meisten Unternehmen sehen "irgendwann" genügend Zeit, um es später zu beheben. Dies macht die Jobauswahl für aufstrebende Entwickler zu einer sehr komplizierten Angelegenheit. Es zeigt auch die völlig unterschiedlichen Ziele und Einstellungen zwischen Entwicklern und Unternehmen auf und wie kompliziert es ist, diese Lücke zu schließen.

Es ist das Ziel der Ingenieure, echte wissenschaftliche Arbeit und Entwurfsüberlegungen einzubeziehen, während es das Ziel der Unternehmen ist, unnötige Kosten und Zeit „auszuschließen“. Da Ingenieure oft nicht wissen, wie viel Aufwand und Zeit erforderlich sind, bis der Endzustand tatsächlich erreicht ist, spielt die Softwareentwicklung wie jedes gute Drama mit Figuren wie Agile, Scrum und Kanban eine Hauptrolle.

Eine Möglichkeit besteht darin, sich von schlechtem Code fernzuhalten, bis Sie genug guten Code gesehen haben, um nicht "beschädigt" zu werden. Ich liebe das Sprichwort, dass erfahrene Entwickler einfache Lösungen für komplexe Probleme erstellen. Nachwuchsentwickler des mittleren Niveaus erarbeiten ebenso komplexe Lösungen für einfache und komplexe Probleme.

Eine weitere Möglichkeit besteht darin, dass Sie an verschiedenen Stellen an gutem UND schlechtem Code arbeiten müssen, um ein besseres Verständnis zu erlangen. Wenn Sie beides nicht getan haben, versuchen Sie es und seien Sie bereit, alles zu verlernen, wenn Sie auf ein besseres System stoßen. Ich denke, dass dies für die meisten Entwickler eine häufigere Methode ist.

Ich bin dieses Jahr voreingenommen, weil ich das Gefühl habe, auf einen extrem komplizierten Berg mit geheimer Sauce zu klettern. Ich werde zwar meine Fähigkeit verbessern, einige der schlimmsten Muster zu entschlüsseln, die ich je gesehen habe, aber es ist so „gewohnheitsmäßig“ und „einmalig“, dass ich nicht glaube, dass mein Kampf meine Marktfähigkeit oder meine nutzbaren Fähigkeiten in meiner Zukunft verbessern wird.

Um meine geistige Gesundheit zu bewahren, tuckere ich nur mit gleichmäßigen Schritten und nehme jede Straßensperre als Par für den Kurs an. Nachdem ich gerade meine jährlichen Ziele mit meinem Chef besprochen habe, zu denen das Ausgraben dieses alten Lochs gehört, denke ich, dass es ein Opferanstieg sein könnte. Ich könnte den Prozess mit schlechten Bewertungen und der wahrgenommenen Langsamkeit überleben. Dies ist eine realistische und ahnungsvolle Warnung für diejenigen, die sich fragen, welchen Job sie übernehmen sollen.

Haftungsausschluss: Dieser Beitrag wird viel länger als meine Meinung, nehmen Sie es mit einem Körnchen Salz. Morgen könnte ich alten Code lieben! (Bezweifel es).

Trawn
quelle
1

Es hängt sehr davon ab, wie Sie "Vermächtnis" in diesem Kontext definieren. Lassen Sie mich ein Beispiel aus C und C ++ geben. Viele C ++ - Programmierer nennen es eine schlechte Praxis, C-Zeichenfolgen in C ++ - Anwendungen zu verwenden, andere fordern kein Mischen, während andere wiederum behaupten, es sei einfach und völlig sinnlos, C-Code-Bits zu verwenden, weil sie alt sind, dh Legacy "-Code. Einige gehen noch weiter und vermeiden die Verwendung von Standardidiomen vor C ++ X (ersetzen Sie das 'X' durch die entsprechende Zahl), style - das ist Syntax, da es sich um einen "Legacy" -Stil handelt.

Abgesehen von Leistungsproblemen bei C ++ - Streams und -Strings und ein paar STL-Besonderheiten ist es sicher eine gute Übung, einen Blick darauf zu werfen, was in Ihrer so beliebten Präprozessor-Direktive enthalten ist #include <string.h>. Wenn Sie dem Pfad zur Implementierung folgen und sich auf einer Unix- / Linux-Maschine unter befinden /usr/include/string.h(und Libc-Implementierungsquellen erhalten, z. B. von gnu.org ) und lesen strcmp.coder strlen.coder strtok.c, ich wette, Sie werden "What a beautiful world" hören "einphasen.

Es gibt jedoch eine Einschränkung dieser Prosa - nämlich veraltete Klassen und Methoden. In Java ist immer noch eine ganze Reihe von Legacy-Inhalten aus einer aktuellen Umgebung zugänglich, aber wenn ich mich recht entsinne, nicht alles. Nach meiner eigenen Erfahrung wird im IB-Bereich nicht die gesamte Software von guten Programmierern geschrieben. Viele Absolventen hatten praktisch keine Erfahrung mit realer Programmierung, bevor sie eine Position als Analyst / Entwickler antraten. Aber verallgemeinern Sie diese Aussage nicht. Ich kenne viele Leute, die Java und C # als Kern für Umgebungen mit hohem Durchsatz und geringer Latenz einsetzen. Ich stimme ihnen nicht zu, aber gut, das ist zum Glück ihre Sache. Wären sie jedoch richtig hochgelaufen, würden sie in der Reihe weit zurückgedrängt werden. Aber wieder, Aus diesem Satz lässt sich leicht die Annahme (und in vielen Fällen die Tatsache) ableiten, dass Java-Code in hohem Maße optimierbar ist. Und wenn Sie bei Bedarf nicht nur dieses oder jenes optimieren können, werden Sie als Entwickler von unschätzbarem Wert. Es ist übrigens sehr befriedigend festzustellen, wie viel Sie beigetragen haben. Ich würde es versuchen.

Nikolaus
quelle