Ho scritto un calcolatore binario & programma di insegnamento binario nel linguaggio di programmazione Rust. Stavo prendendo un approccio iterativo in cui ho deciso di iniziare per prima cosa un gioco base "learn binary". Questo gioco visualizza un numero esadecimale o decimale nella console e richiede al giocatore di inserire il numero in binari 1s e 0s come mezzo per aiutare gli studenti ad imparare il binario.
Ho quindi deciso di aggiungere funzionalità di calcolatrice binaria al programma creando una schermata di benvenuto e un menu in cui l'utente seleziona tra 1. Learn Binary 2. Binary Calculator e 3. Exit.
Ho quindi implementato la funzionalità del Calcolatore Binario.
Tuttavia, dopo averlo fatto, mi sono reso conto che all'interno del mio modulo di Calcolatore Binario mancava un'opzione "torna al menu principale", quindi una volta che un utente ha inserito la calcolatrice, lui / lei avrebbe dovuto uscire completamente dal programma per ottenere al gioco Learn Binary e viceversa.
Tuttavia, al fine di implementare una funzionalità di "ritorno al menu", mi sto rendendo conto che ora devo astrarre un loop out nella funzione principale o una funzione in basso, e ora ogni funzione in successione deve restituire alcuni dati in modo che questo ciclo possa sapere quando uscire. Sto finendo per dover cambiare e aggiungere diversi tipi di ritorno alle funzioni che stanno avendo un effetto domino e che richiede più tempo del previsto.
Questo è solo un piccolo esempio, ma mi trovo spesso ad affrontare questo genere di cose - è tipico dell'ingegneria del software? È normale dover tornare indietro e cambiare un sacco di cose quando vengono aggiunte nuove funzionalità o è un'idea migliore per pensare a tutto questo tipo di cose in anticipo?
Si noti che il mio programma è in gran parte procedurale ma usa un paio di costrutti OOP come necessario.