"Se hanno svolto il loro lavoro molto bene sin dall'inizio, una grande parte, altrimenti una piccola parte."
Lingue rigorose mostrano questo tratto. Molto poco è dovuto cambiare nei linguaggi di Nicklaus Wirth, perché sono stati pianificati con precisione. (Questo in realtà è cambiato ultimamente per Delphi e cambierà di più con la prossima versione di distribuzione universale.)
C'è anche un rovescio della medaglia, ovviamente. Sta decidendo che il codice originale è abbastanza buono, come nel caso di Microsoft Windows, o applicazioni piacevoli come ACDSee, editor di testo o le ben note applicazioni a linea di comando di "spirito di Linux".
Anche se queste applicazioni possono sembrare goffe a coloro che forse non le hanno amate in primo luogo, mostrano un tratto ben pianificato e un insieme ben definito; anche se non hanno campane e fischietti, questo può essere preferito; fanno quello che c'è sul barattolo, la compatibilità con le versioni precedenti è ottima e probabilmente continuerà a funzionare bene in futuro.
Photoshop avrebbe il 90% dello stesso codice da 5.0, se si passasse allo strumento. ; P lo fa? No perchè? Vendita di aggiornamenti. Oggi non puoi farne di più.
Il set di funzioni di un gestore di file, fino al punto in cui si desidera eseguire FTP, Web e cloud è in gran parte lo stesso per qualsiasi piattaforma per decennale. L'unica ragione per cui un'applicazione non è ancora a 1.0 è dovuta a una cattiva pianificazione, a un capriccio, a un'urgenza di aggiornare e, almeno in piccola parte, al mondo che cambia intorno all'applicazione.
La risposta è che alcune gemme restano a 1.0 o 1.0.x perché lo sviluppatore ha deciso sul set di funzionalità, ha completato un programma privo di bug e non trae profitto dall'infinitamente aggiungere roba e correggere i bug nelle cose aggiunte, o è passato a sviluppare più gemme.
È improbabile che tutto il resto rimanga vicino al codice in 1.0. E perché non dovresti riscrivere l'applicazione se hai una grande idea? Dovresti, è divertente codificare! :) Tranne che non è ciò che è avvenuto in molti moderni prodotti software. Il cambiamento a scopo di cambiamento (vendite) e non motivato da set di funzionalità, e in misura minore l'aggiornamento per adeguarsi alle piattaforme che cambiano, è l'ordine del giorno.
E in questa zuppa di pezzi interattivi di software in costante aggiornamento, alcune codebase sfuggono alle revisioni. Alcuni mantengono ancora il sogno di fondazioni e modularizzazione (e non rilasciano prematuramente), ma la stragrande maggioranza è bloccata nel ciclo di rilascio-correzione-aggiornamento.