Erstens ist mir klar, dass diese Frage etwas lang und vage sein kann, und ich entschuldige mich dafür. Dies ist wahrscheinlich ein grundlegendes Problem mit einem kurzen Namen für jeden, der es "verstanden" hat, aber da mir diesbezüglich etwas fehlt, bitte beschreiben Sie das Problem mit mir.
Ich programmiere auf die eine oder andere Weise, seit ich ungefähr 11 Jahre alt war. Das bedeutet, dass ich mir von Anfang an meistens alles selbst beigebracht habe. Ich habe eine technische Ausbildung erhalten, aber nicht ausschließlich in Informatik (ich habe einen Abschluss in Photonik). Wir hatten natürlich Programmierkurse, aber das waren hauptsächlich grundlegende Dinge für mich und ich habe nicht viel Neues gelernt. Ich habe mich auf diesem Weg aus Freude weitergebildet und wusste immer, dass ich eine Karriere als Programmierer verfolgen würde, aber alle meine Projekte waren zu dieser Zeit ziemlich klein. Ich hatte keine Probleme, sie im Kopf zu behalten und zu pflegen.
Jetzt bin ich in einem Team führend, aber nicht in einem Unternehmensumfeld. Ich arbeite für die Universität und entwickle wissenschaftliche Software (in C ++) für technische Anwendungen. Plötzlich wächst das Projekt (relativ) groß und ich habe die meiste Zeit Probleme, mich darum zu kümmern. Ich verliere viel Zeit und Mühe in zwei Dingen:
- Wenn ich zu einem Codeabschnitt zurückkehren muss, an dem ich eine Weile nicht gearbeitet habe, fällt es mir schwer, mich daran zu erinnern, wie er funktioniert hat. Ich verbringe viel Zeit damit, die Header-Dateien für die relevanten Klassen zu überprüfen und die Kommentare zu lesen, die ich unterwegs in die Quelldateien eingefügt habe. Ich wünschte, es gäbe eine Art "Schaltplan", den ich leichter sehen und wiedererlangen könnte.
- Wenn ich Änderungen einführe, merke ich manchmal auf halbem Weg, dass das, was ich versuche, die Dinge woanders kaputt macht (oder schlimmer noch, es wird nur zur Laufzeit als Überraschung angezeigt). Ich kehre zurück und beginne es anders zu machen, nur um herauszufinden, dass ich den Einfluss auf eine andere Komponente vernachlässigt habe. Ich wünschte, es gäbe ein "Architekturdiagramm", in dem ich sehen könnte, wie Dinge erledigt werden, wie das, was ich versuche, andere Komponenten beeinflusst und eine Möglichkeit für mich, detailliert zu planen, bevor ich mit der Implementierung von Änderungen beginne.
Die meisten Leute, mit denen ich zusammenarbeite, haben ähnliche Geschichten wie ich - starke technische Orientierung und manchmal großartige Fähigkeiten, aber keine Möglichkeit, ihre Arbeit zu organisieren. Ihre Projekte sind jedoch normalerweise viel kleiner als meine, so dass sie irgendwie zurechtkommen. Für mich bedeutet das jedenfalls, dass ich alleine bin und niemanden habe, von dem ich die guten Praktiken lernen kann.
Ich habe einen Aufbaustudiengang in IT-Management absolviert und finde ihn zwar recht zufriedenstellend, er richtet sich jedoch hauptsächlich an Nicht-Programmierer, die über Projektmanagementmethoden, Budget- / Zeitplanschätzungen, Unternehmensarchitektur usw. unterrichten - nicht über Software-Design und -Planung als solche. Das ist in Ordnung, ich versuche auch das Zeug zu lernen. Natürlich wurden einige Tools (wie UML) und die Arten von Softwareentwicklungsprozessen (Kaskade, iterativ, agil ...) eingeführt, aber offensichtlich nicht sehr detailliert, und es fällt mir schwer, zu entscheiden, was ich auswählen und verwenden soll ( und in welchem Umfang).
Ich habe viele Fragen und Antworten zum Software-Design auf SO gelesen - es gibt viele, die dies mit diesem oder jenem speziellen Tool oder dieser Methode tun, und wenn ich davon überzeugt wäre, dass die UML-Dokumentation meine Probleme lösen würde, würde ich es aufgreifen und fang an es zu benutzen. Aber einige Leute schwören darauf, andere sagen, es sei nutzlos. Ich suche nach einer Antwort auf einer höheren Abstraktionsebene - gibt es Möglichkeiten, die beiden Probleme zu lösen, die ich habe, und wie machen Sie das persönlich? Was soll ich lernen, um es zu können, möglicherweise ohne an ein bestimmtes Werkzeug gebunden zu sein? Diese kommen und gehen von Zeit zu Zeit aus der Mode, und ich gehe davon aus, dass ihre Anwendbarkeit je nach Art des Projekts unterschiedlich ist.
Vielen Dank für das Lesen, ich konnte nicht kurz sagen, was ich meine (mangelnde Erfahrung im Software-Design und Vokabeln).