Wie gehen Sie mental mit einer sehr langen Arbeit um? [Geschlossen]

8

Dies ist mein erster Job in der Spielebranche und meine Aufgabe ist es, eine wichtige Spielkomponente herauszunehmen und eine neuere einzufügen.

Bisher sind es 5 Wochen, und ich starre immer noch nur auf Fehler. Ich denke, es könnte Monate dauern, bis es kompiliert werden kann. Es bringt mich wirklich runter. Ich ändere nur Dinge, ich schreibe selbst nichts. es ist einfach endlos. Ich behebe tausend Fehler und neuntausend nehmen ihren Platz ein.

Ich bin mir sicher, dass dies eine häufige Sache sein muss, also habe ich mich nur gefragt, wie Sie damit umgehen. Es scheint nicht so, als könnte ich es überhaupt in kleine Stücke zerlegen.

Sir Yakalot
quelle
3
Eeek. Wer würde so schlechten Code schreiben, dass das Kompilieren Monate dauern würde? Vielleicht möchten Sie überdenken, wie Sie das tun ... Sobald das kompiliert ist, wird es voller logischer Fehler sein.
MichaelHouse
7
Diese Frage ist wahrscheinlich besser für programmers.stackexchange.com geeignet (wenn überhaupt).
George Duckett
3
@GeorgeDuckett Auf diese Frage könnte eine branchenspezifische Antwort gegeben werden, die sich mit Problemen befasst, auf die Sie in dieser Branche nur beim Programmieren stoßen würden. Wörtlich zitiert, bietet der Teil der FAQ, der entscheidet, ob Codefragen hierher oder zu SO gehören, auch hier Weisheit: Würde mir ein professioneller Spieleentwickler eine bessere / andere / spezifischere Antwort auf diese Frage geben als andere Programmierer? Wenn ja, können Sie hier nachfragen.
Doppelgreener
5
Ich stimme auch als allgemeine Programmierfrage dafür. Er überarbeitet ein großes Code-Durcheinander, das zufällig ein Spiel ist. Er benötigt allgemeine Programmier- / Refactoring-Ratschläge, keine Ratschläge zur Spieleentwicklung.
Tim Holt
1
Kann dieser Beitrag und seine Antworten nicht migriert und nicht einfach geschlossen werden?
SirYakalot

Antworten:

21

Willkommen in der Spielebranche :)

Sie führen also ein massives Refactoring durch. Massives Refactoring ist böse, aber das ist nicht das Thema. Wahrscheinlich haben Sie diese Aufgabe erhalten, um Ihre Nerven zu testen. Geben Sie sie also nicht auf.

Meine Antwort lautet: Sie müssen es in kleine Stücke zerlegen. In ein paar Monaten wird es Ihre tägliche Routine sein, also müssen Sie lernen, wie man teilt und siegt. Es ist im Grunde dein Job. Einige Vorschläge:

  • Stellen Sie sicher, dass Sie verstehen, was diese Komponente tun soll . Spielen Sie mit dem, was Sie herausnehmen müssen, und sehen Sie, was es tut. Fragen Sie Ihre Kollegen, ob Ihre Annahmen richtig sind.

  • Sie schreiben dieses Modul aus einem bestimmten Grund neu. Es mag für Sie nicht offensichtlich sein, aber wenn Sie diese Aufgabe erhalten haben, ist es höchstwahrscheinlich, weil etwas so beschissen war, dass die Leute das Gefühl haben, es sei besser, es von vorne zu beginnen. Fragen Sie herum: Was sind diese Mängel ?

  • Versuchen Sie, das Kernmerkmal der Komponente, die Sie neu schreiben, zu finden, ihre Substanz, den Grund, warum es existiert, und beginnen Sie damit, dieses zum Laufen zu bringen. Es muss wirklich winzig sein, so klein wie du kannst. Fragen Sie Ihre Kollegen, wie diese Funktion ihrer Meinung nach aussehen würde. Wenn es sich um ein GFX-System handelt, muss nur ein Polygon angezeigt werden. Wenn es sich um ein Animationssystem handelt, platzieren Sie einfach einen Knochen richtig. Wenn es sich um ein KI-System handelt, lassen Sie es einfach eine Animation abspielen. Usw. usw. Müll einfach alles weg, was dir im Weg steht und dir all diese entmutigenden Fehler macht. Lassen Sie sich nicht von den Details stören, sondern sorgen Sie dafür, dass diese Kernfunktion so schnell wie möglich funktioniert. Ihre Implementierung wird hässlich sein, voller Bugs und Hacks und magischer Zahlen, und Sie würden niemanden einen Blick auf Ihren Code werfen lassen, aber das ist kein Problem.

  • Sobald Sie diese Kernfunktion haben, werden Sie sich bereits besser fühlen. Es ist wichtig, das Ergebnis Ihrer Arbeit so früh wie möglich zu sehen 1) für Ihre Moral 2) um es testen zu können. Also, teste es, Stresstest, foltere es . Wenn es abstürzt oder einen wirklich schlimmen Fehler zeigt, beheben Sie dies. Es ist das Herzstück Ihres Moduls. Überarbeiten Sie es also ein wenig und räumen Sie es auf, bis Sie sich damit wohl fühlen.

  • Zeigen Sie es dann Ihren Kollegen und fragen Sie sie, ob das Spiel das braucht. Bitten Sie um eine Codeüberprüfung : Ihre Kollegen werden Ihnen wahrscheinlich viele Dinge erzählen, an die Sie nicht gedacht haben. Sie müssen erneut umgestalten , um sicherzustellen, dass Ihre Implementierung den Anforderungen des restlichen Teams entspricht.

  • Wenn Sie sich dazu bereit fühlen, wählen Sie eine der anderen Funktionen aus, die Sie zuvor verworfen haben, spülen Sie sie aus und wiederholen Sie sie. Lassen Sie es so schnell wie möglich funktionieren, überarbeiten Sie, bitten Sie um eine Überprüfung, überarbeiten Sie.

Ich muss ein letztes Mal den Schwerpunkt darauf legen: kommunizieren . Fragen Sie Ihre Kollegen, nicht nur Ihren Lead, nicht nur die Programmierer, sondern alle, die dieses System verwenden, testen oder bewerten. Haben Sie keine Angst davor, dumme Fragen zu stellen: Im Zweifelsfall ist es immer besser, die Informationen sofort zu erhalten, als Wochen auf ein Meeting oder eine Überprüfung zu warten.

Die Realität der Spielprogrammierung ist, dass Sie nicht jeden Tag brandneue Systeme erstellen, sondern den Fokus behalten und die Dinge schnell und effizient erledigen müssen. Reiß dich zusammen, mach dich an die Arbeit und viel Glück!

BEARBEITEN

Es gibt zusätzliche Informationen, die ich in Leos Kommentar und Dhasenans Antwort nützlich finde. Ich stähle diese schamlos von ihnen, um diese Antwort zu vervollständigen.

Ich habe nicht darüber geschrieben, wie man mit Abhängigkeiten umgeht . Das Modul, das Sie neu schreiben, ist wahrscheinlich eng mit dem Rest des Spiels verbunden. Deshalb treten beim Ändern von Elementen so viele Fehler auf. Es gibt also zwei Lösungen:

  • Wenn es nur wenige Abhängigkeiten gibt, haben Sie Glück. Das alte und das neue Modul können für eine Weile parallel gehalten werden. Sie können sogar einen Schalter für Ihre Benutzer einrichten, damit diese bei Bedarf zwischen dem alten und dem neuen Modul wechseln können. Platzieren Sie einfach irgendwo einen Schalter, in einer Konfigurationsdatei oder in einem Debug-Menü, und verwenden Sie ihn, wo immer Ihr Modul an den Rest des Spiels angeschlossen ist. Wenn Ihr neues Modul für die Produktion bereit ist, schalten Sie den Schalter standardmäßig ein. Wenn das alte Modul später nicht mehr verwendet wird oder die Produktion fortgesetzt werden muss, entfernen Sie das alte Modul und den Schalter.

  • Wenn es viele gibtAbhängigkeiten müssen Sie nacheinander ausstecken und wieder einstecken. Versuchen Sie, beide Module im Hintergrund zu halten, und wechseln Sie jedes Mal, wenn Sie eine neue Funktion zum Laufen bringen, zum neuen Modul für diese Funktion. Dh ziehen Sie den Stecker heraus und stecken Sie ihn wieder ein, was mit dieser Funktion zusammenhängt. Es wird einige Zeit dauern, da es wahrscheinlich mehr Arbeit ist als nur einen Funktionsaufruf zu ändern: Einige Datenstrukturen können sich ändern, der Programmablauf kann sich ändern usw. Aber es ist immer noch besser, alles einmal neu zu schreiben und Wochen zu brauchen, um das Kompilierungs-Biest zu töten. Wenn es wirklich unmöglich ist, sowohl das alte als auch das neue Modul parallel zu halten, weil Ihr Modul für das Spiel so wichtig ist, können Sie in Betracht ziehen, es neu zu schreiben. Beachten Sie jedoch, dass dies bedeuten kann, dass Sie dieselben Fehler haben, wenn sich die Fehler in der Schnittstelle des alten Moduls befinden. Wie auch immer, wenn dies passiert,

Wenn es etwas Spezifisches für die Entwicklung von Videospielen gibt, dann ist dies: Wir machen keine Raketenwissenschaft oder eine komplizierte Forschungsarbeit, wir sind Teil eines kreativen Prozesses. Wenn Sie etwas tun, müssen Sie so schnell wie möglich eine erste Version erstellen, damit sie getestet, gespielt, missbilligt und geändert werden kann. Sie können nicht Wochen damit verbringen, "eine sehr lange Arbeit" zu erledigen, ohne ein bisschen zu liefern.

Laurent Couvidou
quelle
Gute Antwort, eindeutig nicht nur für Spiele, sondern für jedes Projekt.
Tim Holt
1
+1, Schlüssel zum Mitnehmen für mich: nicht nur testen , sondern Foltercode :) Für mich ist dies ein ausgezeichneter Rat.
Stefan Hanke
5
+1, MÜSSEN Sie eine große Umgestaltung in kleine Stücke aufteilen. Ich stimme voll und ganz zu, dass dies der einzige Weg ist, eine massive Umgestaltung durchzuführen. Ändern Sie im Idealfall den Code Block für Block, und stellen Sie sicher, dass bei jeder Änderung das System funktioniert (dies reduziert die Anzahl der Fehler erheblich). Wenn dies für die volle Funktionalität nicht möglich ist, tun Sie dies zumindest für einige Kernfunktionen. Alles auf einmal zu ändern ist ein sicherer Weg, um Tonnen von schwer zu findenden Fehlern zu erzeugen.
Leo
1

Sie müssen Ihre Aufgabe aufteilen, aber niemand gibt Ratschläge dazu.

  • Arbeiten die neuen und alten Module zusammen? Können Sie Ihr Projekt mit beiden kompilieren? Auf diese Weise können Sie zumindest einige Meilensteine ​​automatisieren und wahrscheinlich automatisierte Tests ausführen.
  • Schreiben Sie das neue Modul? Oder ist der alte Code, den Sie besitzen? Umschreiben an Ort und Stelle (sofern die externe API gleich bleibt). Wenn Sie jeweils eine Funktion reparieren, sollten Sie in der Lage sein, die kombinierte Mischlings-API bis zu einem gewissen Grad weiter zu verwenden.
  • Gibt es andere Projekte im Unternehmen, die einen ähnlichen Übergang vollziehen werden? Schreiben Sie Wrapper um diese Module, um den Vorgang beim nächsten Mal zu vereinfachen. Es könnte sich lohnen, dies in der Zwischenzeit zu tun.
  • Können Sie das Kompilieren von Teilen Ihrer Abhängigkeitskette auskommentieren oder vermeiden? Wenn Sie insgesamt eine halbe Million Codezeilen haben, können Sie diese möglicherweise in zwanzig Abschnitte aufteilen, die unabhängig voneinander kompiliert werden, einen in ein paar Wochen zum Laufen bringen und dann zum nächsten übergehen. Vielleicht nicht immer völlig unabhängige Chunks, aber dann können Sie es in der Reihenfolge der Abhängigkeiten tun.

Außerdem: Fragen Sie Ihren Manager um Rat. Ich würde wahrscheinlich damit beginnen, das Problem zu beschreiben: Es dauert so lange, bis die Dinge richtig kompiliert sind, dass es schwierig ist, Änderungen im Auge zu behalten, was das Debuggen erschwert, sobald Sie etwas haben, das Sie testen können. Dann würde ich eine mögliche Lösung erwähnen und fragen: "Wie empfehlen Sie mir, diese Lösung zu implementieren, oder gibt es eine bessere Möglichkeit, dies vollständig zu tun?"

Dhasenan
quelle