Una "riscrittura" (o almeno una parte seria di refactoring) è a volte il modo migliore per realizzare un soluton non è scalabile.
Un esempio di questo è un pacchetto di pittura che scrivo negli anni '80. È stato un po 'divertente lavorare su una bitmap a 16 colori. Quando era 20kB di codice BASIC, ho pensato "dovrei riscrivere questo per renderlo capace di gestire 16 o 256 immagini a colori". Ma era "troppo lavoro". Quando era 50kB era chiaro che aveva davvero bisogno di essere riscritto, ma ci sarebbe voluto troppo tempo. Così ho continuato aggiungendo il codice che si basava sul fatto che fosse un'immagine a 16 colori, fino a raggiungere il punto in cui era di 140kB e assolutamente non pratico da riscrivere. Mi sono sempre pentito di non aver morso il proiettile quando la riscrittura era a poche ore di lavoro.
Un altro esempio: ho lavorato a un pacchetto di grafica vettoriale che trasmetteva eventi attorno a tutti gli oggetti nella sua gerarchia scenegrafica. Nelle fasi iniziali aveva poche decine di oggetti e, come disse il mio manager, "possiamo trasmettere a oltre 10.000 oggetti al secondo", quindi le trasmissioni continuarono. Ho suggerito di fare in modo che gli oggetti interessati sottoscrivano gli eventi di cui avevano bisogno per rimuovere l'inefficienza, ma non c'era "nessun bisogno". Dopo 2 anni (40 anni di sforzi), il programma si fermava per 2-4 secondi alla volta perché lo scenegraph conteneva più di 500 oggetti e i 2 eventi di trasmissione erano saliti a 40 circa.
Questo schema è stato ripetuto in diversi progetti in cui sono stato coinvolto nel corso degli anni: si riscontra un grave difetto di progettazione o un debito tecnico e si rinvia fissandolo perché (a) non è un problema "ancora", e (b) costerebbe troppo tempo per risolverlo ora. Col passare del tempo, diventa linearmente più un problema, ma esponenzialmente più costoso da risolvere. Quindi, anche se è necessario sistemare sempre di più, è più difficile giustificare il costo di fissarlo.
In questi casi, il problema tecnico o l'errore di progettazione deve essere risolto come all'inizio di come possibile. Ci vuole coraggio (se sei un manager) o persuasività (se sei un sottotenente) per trattenere il tuo programma per una settimana, ma immagina di non aver ricorso, ma di dedicare 2 mesi alla correzione tra un anno!
Ovviamente, questo argomento non si applica a tutti i casi. È necessario valutare il rapporto costi/benefici di qualsiasi soluzione proposta e considerare la scalabilità del problema: se il problema è una costante, è possibile correggerlo per lo stesso costo in qualsiasi momento in futuro. Se ogni nuova classe che aggiungi al tuo sistema combina il difetto e prevedi di aggiungere hundres di nuove classi, torna indietro e aggiustalo ora.
fonte
2010-05-28 20:39:28
Età. Quando una tecnologia ha visto giorni migliori * e * il supporto per esso, in termini di programmatori, si sta assottigliando, è probabilmente il momento di scrivere qualcosa di nuovo. Ho riscritto i sistemi COBOL, DataFlex e VB6. Si può sostenere che il supporto per questi sistemi è ancora disponibile, ma la maggior parte dei programmatori vuole commercializzarsi con le ultime competenze, lasciando quindi le vecchie tecnologie nella polvere. Quindi, se hai problemi a trovare un programmatore DataFlex, allora sì, è probabilmente il momento di riscrivere. –
Che ne dici di questo: cosa succede se hai creato un nuovo prodotto basato su ciò che hai appreso dal vecchio progetto che le persone vogliono riscrivere? Lasciare il vecchio e non considerare il nuovo progetto parte della stessa linea? –