In primo luogo, mi rendo conto che questa domanda potrebbe essere alquanto lunga e vaga e mi scuso per questo. Questo è probabilmente un problema di base con un nome breve per chiunque abbia "capito", ma non trovandomi a questo riguardo, per favore, ricordati di descrivere il problema.
Ho fatto programmazione in questo modo o nell'altro da quando avevo circa 11 anni. Ciò significa che ho iniziato a insegnarmi tutto sin dall'inizio. Ho ricevuto una formazione tecnica, ma non strettamente in informatica (mi sono laureato in ingegneria fotonica). Avevamo ovviamente corsi di programmazione, ma per me questo era principalmente roba di base e non ho imparato molte cose nuove. Ho continuato a educarmi lungo la strada per la gioia di farlo e ho sempre saputo che avrei intrapreso una carriera nella programmazione, ma tutti i miei progetti erano piuttosto piccoli in quel momento. Non ho avuto problemi a tenerli nella mia mente ea mantenerli.
Ora, mi trovo ad essere il protagonista di un team, ma non in un ambiente aziendale - lavoro per l'università sviluppando software scientifico (in C ++) per applicazioni di ingegneria. All'improvviso il progetto sta crescendo (relativamente) grande e ho difficoltà a spostarmi la mente per la maggior parte del tempo. Sto perdendo molto tempo e impegno su due cose principalmente:
- Quando devo tornare a una sezione di codice su cui non ho lavorato per un po ', ho difficoltà a ricordare come funzionava. Trascorro molto tempo a rivedere i file di intestazione per le classi pertinenti e a leggere i commenti che ho inserito lungo il percorso nei file di origine. Vorrei che ci fosse una qualche forma di "schematico" che potessi intravedere e recuperare più facilmente l'immagine;
- Quando introduco i cambiamenti, a volte mi rendo conto a metà strada che ciò che sto cercando di fare andrà a finire da qualche altra parte (o peggio, si presenta solo a runtime come sorpresa). Io ripristino e inizio a farlo in modo diverso, solo per scoprire ho trascurato l'influenza su qualche altro componente. Vorrei che ci fosse un "diagramma di architettura" in cui ho potuto vedere come si fanno le cose, come quello che sto cercando di fare influenzerà altri componenti e un modo per pianificare in dettaglio prima di iniziare ad implementare le modifiche.
La maggior parte delle persone con cui lavoro ha storie simili a me: strong orientamento tecnico e talvolta grandi capacità, ma senza alcun modo di organizzare il proprio lavoro. Tuttavia, i loro progetti sono di solito molto più piccoli dei miei, quindi in qualche modo riescono a farcela. Ad ogni modo, ciò che significa per me è che sono da solo e non ho nessuno con cui imparare le buone pratiche.
Ho seguito un corso post-laurea nella gestione dell'IT e, mentre lo trovo abbastanza soddisfacente, è rivolto principalmente ai non programmatori, insegnando metodologie di project management, stime del budget / pianificazione, architettura aziendale ecc. come. Va bene, sto cercando di imparare anche quella roba. Ovviamente, sono stati introdotti alcuni strumenti (come UML) e i tipi di processi di sviluppo del software (a cascata, iterativo, agile ...), ma ovviamente non in grande dettaglio e ho difficoltà a decidere cosa dovrei scegliere e usare ( e fino a che punto).
Ho letto molte domande e risposte sulla progettazione del software su SO - ci sono molte cose sul farlo usando questo o quel particolare strumento o metodologia, e se fossi convinto che la documentazione UML avrebbe risolto i miei problemi - sceglieresti e iniziare a usarlo. Ma alcune persone lo giurano, altri dicono che è inutile. Sto cercando una risposta ad un livello più alto di astrazione - ci sono modi per risolvere i due problemi che sto avendo, e come lo fai personalmente? Cosa dovrei imparare per essere in grado di farlo, possibilmente senza essere legato a uno strumento particolare? Questi vanno e vengono di moda di volta in volta, e mi aspetto che la loro applicabilità vari a seconda del tipo di progetto.
Grazie mille per la lettura, non sono stato in grado di dire cosa intendo più brevemente (senza esperienza di progettazione del software e vocabolario).