Stai chiedendo il Santo Graal per l'ingegneria del software e nessuno ha ancora "la" risposta a questa domanda.
Ciò che è essenziale è tenere traccia dei tipi di errori che si stanno facendo e quindi fare un'analisi di tali errori per determinare se esiste una tendenza comune. L'analisi della causa principale è il nome formale di questo tipo di introspezione e sul web è disponibile molto materiale.
I professionisti utilizzano un sistema di tracciamento dei bug in modo che possano (1) sapere cosa deve essere risolto, ma anche (2) analizzare ciò che deve essere corretto dopo il fatto. Non è necessario essere così formali: tenere un conteggio di un quaderno può andare bene per te.
Difetti della fase di progettazione
Se scopri che la maggior parte dei tuoi errori proviene da un malinteso sull'affermazione del problema, o se continui a scoprire che hai scelto l'algoritmo o il percorso sbagliato da seguire nella risoluzione dei problemi, hai problemi in fase di progettazione.
Sarebbe opportuno che tu impiegassi più tempo all'inizio del progetto e scriva esattamente cosa deve essere fatto e come dovrebbe farlo. Rivedi attentamente questo lavoro e rivisita il problema originale e determina se lo stai davvero affrontando nel modo giusto. Un'ora o tre in più all'inizio può farti risparmiare molte ore lungo la strada.
Errori di codifica
Se il tuo design è solido, ma stai costantemente combattendo il linguaggio con cui stai codificando, procurati alcuni strumenti che analizzeranno il tuo codice per te e ti avvertiranno presto e spesso che stai commettendo errori.
Se stai programmando in C, attiva tutti gli avvisi del compilatore, usa un controllo semantico simile lint
e usa uno strumento simile valgrind
per rilevare problemi comuni relativi alla memoria dinamica.
Se si programma Perl, accendere strict
e warnings
ed attenzione quello che dice.
Indipendentemente dalla lingua che stai utilizzando, probabilmente esistono molti strumenti per aiutarti a rilevare errori comuni molto prima che tu raggiunga la fase di debug.
Difetti dello stadio di integrazione
Man mano che sviluppi il codice seguendo le buone pratiche di modularità, devi iniziare a incollare i pezzi separati. Ad esempio, diverse sezioni del codice potrebbero avere a che fare con l'input dell'utente, l'interazione con il database, la visualizzazione dei dati, gli algoritmi / la logica e ognuno di questi è costruito relativamente indipendente l'uno dall'altro (vale a dire, si tende a concentrarsi sulla sezione a portata di mano piuttosto che preoccuparsi dell'integrazione con tutto il resto).
Qui è dove lo sviluppo test driven (TDD) è molto utile. Ogni modulo del tuo codice può avere test che verificano che funzionino secondo il modo in cui sono stati progettati. Questi test dovrebbero essere scritti prima o molto presto nel processo in modo da poter avere una serie di "aiutanti" per renderti onesto. Quando inizi a far funzionare tutto insieme e scopri che devi cambiare il modo in cui questo o quello viene implementato o interagisce con un altro sottosistema, puoi ricorrere ai tuoi test per assicurarti che ciò che hai fatto per rendere tutto funziona insieme non rompe la correttezza del codice.
E così via...
Raccogli alcuni libri sull'ingegneria del software e sulle tecniche pratiche di codifica e imparerai molti modi diversi per rendere lo sviluppo meno caotico e più affidabile. Scoprirai anche che solo una semplice vecchia esperienza - guadagnare una laurea dalla scuola dei colpi duri - ti metterà in forma.
Ciò che quasi tutto si riduce a è che un po 'di tempo e lavoro in anticipo paga in enormi dividendi più avanti nel processo di sviluppo / rilascio.
Il fatto che tu abbia notato questi problemi così presto nella tua carriera parla bene per il tuo futuro e ti auguro buona fortuna.