Wie kann ich beurteilen, ob ein Projekt besonders komplex ist oder ob ich es nur langsam aufgreife?

16

Bei einem Großprojekt mache ich nur geringe Fortschritte. Die Quelle ist riesig, viele Schichten von Objekten, Makkaroni-Code, Doppel-Diamant-Diagramme mit mehrfacher Vererbung, halbherbe Merkmale, die eingefroren waren, als der ursprüngliche Schreiber abreiste, und niemand weiß, warum viele Teile so entworfen wurden, wie sie waren.

Ich nehme an, dass jeder kompetente Programmierer Probleme haben würde, alles gut genug herauszufinden, um Fehler zu beheben, das halbgebackene Zeug zu beenden und neue Funktionen hinzuzufügen. Ich vermute jedoch, dass ich langsamer werde als ein typischer Programmierer.

Wie kann ich beurteilen, ob die Quelle ungewöhnlich schlecht ist und ich mich so gut wie jeder andere mache? Im Gegensatz dazu ist die Quelle typisch für ein Projekt wie dieses und ich bin nur langsam oder schlecht ausgebildet.

DarenW
quelle
11
Das Verstehen des Codes anderer ist ein Akt des Einfühlungsvermögens. Vergiss, wie schnell du fährst und vergiss auch, was für ein Haufen dummer Trottel die Leute waren, die den Code geschrieben haben. Herauszufinden, ist eine Übung in Flexibilität. Angenommen, die Quelle ist ungewöhnlich schlecht und Sie sind überfordert, und machen Sie sich wieder an die Arbeit und hören Sie auf, in diesen dummen Foren herumzuspielen. Was auch für mich zutrifft ... Ich muss mich mit Code auseinandersetzen.
Dan Rosenstark
2
Vergessen Sie besonders "was für ein Haufen ...", wenn diese Person (en) der Chef, der Bruder des Chefs, der Chef des Chefs oder der Neffe des Chefs usw. sind!
DarenW
2
Ah, das fehlende "Warum". Denken Sie daran, sie einzusetzen, wenn Sie sie herausfinden.
@DarenW - es ist Spaghetti-Code, nicht Makkaroni-Code: D (Sorry, ich musste).
Jas
1
@Jas google für Makkaroni-Code ... es gibt mehr Arten von Nudeln als nur Spaghetti ;-)
Jürgen A. Erhard

Antworten:

6

Die einzige Möglichkeit, diese Frage zu beantworten, besteht darin, mehr Programmierer zu gewinnen, um dasselbe Problem anzugehen und zu prüfen, ob es ihnen besser geht.

Dies ist natürlich selten praktikabel, die Aufgabe ist Ihrem guten Willen zugefallen und vorausgesetzt, Sie tun das Beste, was Sie können, um herauszufinden, wo Ihr Wissen Sie verfehlt. Brechen Sie es auseinander, wo die Komplexität Sie in den Bann zieht, und informieren Sie jeden, der sich für Sie interessiert, über Ihre Fortschritte. Dann würde ich mir keine Sorgen machen und dranbleiben.

Orbling
quelle
16

Zuallererst würde ich nicht zu viel Zeit damit verbringen, mir Sorgen zu machen, dass Sie "schlecht oder schlecht ausgebildet" sind. Einige Projekte sind schwer zu verstehen, und bei großen Projekten dauert es oft eine Weile, bis sie in Betrieb sind. Zu denken, dass Sie "dumm" sind oder der Aufgabe nicht gewachsen sind, hilft Ihnen in keiner Weise.

Es hört sich so an, als ob Sie Hilfe beim Code benötigen. Berücksichtigen Sie also Ihre Ressourcen. Haben Sie Zugriff auf die Original-Codierer? Wenn sie verfügbar sind, könnten sie gute Informationsquellen sein. Welche Dokumentation ist verfügbar? Wenn die Dokumentation knapp ist, ziehen Sie ein Notizbuch heraus und beginnen Sie mit der Erstellung Ihrer eigenen persönlichen Dokumentation.

Die große Idee dabei ist, dass Sie damit rechnen sollten, dass dieser Prozess Zeit in Anspruch nimmt. Je weniger Zeit Sie damit verbringen, sich im Kopf zu schlagen, desto mehr Energie müssen Sie aufwenden, um den Code zu analysieren und herauszufinden. Viel Glück!

Zeke
quelle
5
+1 Es kann mehr als 6 Monate dauern, bis Sie mit einigen komplexen Systemen so vertraut sind, dass Sie diese beherrschen. Auch wenn die Codebasis "gut" ist, haben verschiedene Entwickler und Teams unterschiedliche Stile, und es dauert manchmal sehr lange, bis man sich zurechtfindet.
Ryan Hayes
3
@ Ryan, und 6 Monate danach werden Sie selbst Teil des Problems :)
Benjol
@Benjol Ja, ich war dort.
Ryan Hayes
FWIW, als ich (mehrmals!) In diesem Boot war, fand ich es hilfreicher, häufige Pausen einzulegen, als mich nur über den Code zu setzen. Wenn Sie eine Pause einlegen, stehen Sie auf und entfernen Sie sich physisch vom Computer. Strecken Sie sich, schauen Sie aus dem Fenster, denken Sie über das nach, was Sie gerade gesehen haben, und gehen Sie dann zurück und schauen Sie sich etwas mehr an. YMMV, aber ich habe dabei viel bessere Fortschritte gemacht. Viel Glück!
TMN
+1 für die Erstellung Ihrer eigenen persönlichen Dokumentation. Wenn ich diese Arbeit mache, finde ich es hilfreich, viele Notizen (entweder im Code oder auf Papier) zu machen und viele Diagramme zu zeichnen (die mir normalerweise nur etwas bedeuten). Ein zusätzliches Plus ist die Stärkung der Konzepte in Ihrem eigenen Kopf.
Andy Hunt
6

Schon mal die Lernkurve gesehen. Die Lernkurve

Die Theorie besagt, dass es anfangs Zeit braucht, um sich zu steigern. Der Trick besteht darin, den Step-Up-Punkt schnell zu überschreiten. Wenn Sie regelmäßig stecken bleiben, bitten Sie Ihren Vorgesetzten um Hilfe oder informieren Sie ihn über die Probleme, mit denen Sie konfrontiert sind. Solange Sie für den Zeitplan keine Probleme in Ordnung sind.

Manoj R
quelle
2

Zerlegen Sie es Stück für Stück

Ihre Situation ist sehr verbreitet, "sich zurechtzufinden" braucht Zeit, wie andere bereits erwähnt haben.

Was ich finde ist, dass, wenn Sie es "Stück für Stück" angehen , unabhängig davon, wie komplex ein Projekt ist, Sie es herausfinden werden. Man muss nur logisch sein.

Beginnen Sie mit einer Schaltfläche, stöbern Sie im Quellcode , setzen Sie Haltepunkte, und sehen Sie Schritt für Schritt, was los ist. Es gibt zwei Dinge, die Sie erfüllen müssen:

  • Die übergeordnete Übersicht.
  • Die wirklich wichtigen Details, die die oben gewünschte Funktionalität implementieren.
  • Wenn Sie Teile davon verstanden haben, müssen Sie sie neu faktorisieren.
Dunkle Nacht
quelle
"Stück für Stück" mag bei anderen Projekten funktionieren, aber dies hat so viele Klassen, die von anderen abgeleitet sind, Freundesklassen, Zeiger auf die Innereien des jeweils anderen, dass es nur wenige Teile gibt, die unabhängig voneinander verstanden werden können.
DarenW
Ich bin sicher, es ist ein komplexes Labyrinth (etwas, das im Laufe der Zeit "gewachsen" ist). Wenn Sie jedoch mit einer Funktion beginnen, sagen Sie mir dann, dass Sie sie nicht von Ende zu Ende verfolgen können?
Darknight
Die Verfolgung des Datenflusses oder der Abfolge von Ereignissen, wenn der Benutzer beispielsweise auf eine Schaltfläche klickt, hat sich als unmöglich herausgestellt.
DarenW
1

Wie wäre es mit einer anderen Sichtweise: Was müssen Sie über diesen Code wissen und haben Sie eine Möglichkeit, dies zu messen? Wenn Sie beispielsweise versuchen, einen Fehler zu beheben, ist möglicherweise eine andere Art von Tauchgang erforderlich, als wenn Sie versucht haben, den Code von einer Sprache in eine andere zu migrieren, z. B. von VBScript nach C #. Wenn Sie versuchen, alle Anforderungen aus dem aktuellen Code herauszuholen, kann dies eine Weile dauern, obwohl ich vermute, dass die meisten Leute ein solches Problem haben würden.

JB King
quelle
Ich mag diesen Kommentar. Man sollte ein bestimmtes Ziel haben und daran arbeiten, dieses (und nur dieses) Ziel zu erreichen. Andernfalls verlieren Sie sich darin - sehr ähnlich einer Kartensache.
NoChance
1

Während ich etwas Neues lerne, werden viele Schüler denken: „Verdammt, das ist schwer für mich. Ich frage mich, ob ich dumm bin. “
Bevor Sie fortfahren, versichern Sie sich, dass Sie nicht dumm sind und einige Dinge schwierig sind. …

Herr Aaron Hillegass mit den klugen Worten.

Du bist nicht dumm, du bist nicht langsam und du bist nicht unterqualifiziert. Ich sitze im selben Boot, habe eine neue Rolle übernommen und die vorhandene Codebasis ist unglaublich groß und weist Anzeichen einer wiederholten Überentwicklung auf. Es hat Wochen gedauert, bis ich zu einem Punkt gekommen bin, an dem ich das Gefühl habe, überhaupt zu werden fast auf Hochtouren. Stellen Sie sich das Projekt so vor, als würde man eine ganz neue Sprache lernen. Es geschieht nicht über Nacht, sondern erfordert Geduld.

Nicholas Smith
quelle