Come altri hanno notato, farlo bene la prima volta è ovviamente più economico. Ma vorrei anche sottolineare che qualsiasi costrutto di programmazione cade da qualche parte sullo spettro del pattern pattern-anti. Stai implementando qualcosa in modo ordinato o no; Il codice infestato 'goto' sta seguendo uno schema, è solo qualcosa che è stato riconosciuto all'inizio come potenzialmente dannoso. Ma si noti che tutto il codice si riduce a salti e diramazioni a un certo punto del ciclo di compilazione. Non c'è nulla di intrinsecamente sbagliato nel saltare: finisce per rendere i progetti più grandi più difficili da capire.
È facile essere fuorviati da schemi che sembrano banali per casi di uso semplice. Non appena inizi a richiedere più flessibilità, la maggior parte dei modelli fragili degenererà in anti-schemi. Quindi la mia regola è scrivere solo codice che riesco a capire e avere una ragionevole possibilità di debugging. Se decido di applicare ciecamente un modello intelligente, devo essere altrettanto intelligente del codice del pattern per poterlo fare il debug. Quindi, la chiave è assicurarsi che tu stia isolando e utilizzando schemi specifici per il tuo problema direttamente, che ti stai avvicinando al problema al livello appropriato di astrazione e che puoi capire ed eseguire il debug di ogni riga del tuo codice.
Una chiave qui sta colpendo il giusto equilibrio tra i requisiti a breve e lungo termine. Tieni presente che scrivere velocemente un buon codice è qualcosa che a partire da modelli ben compresi può certamente aiutare - il codice degli spaghetti potrebbe sembrare più veloce, soprattutto all'inizio. Ma vedrai rapidamente i limiti degli anti-pattern in qualsiasi progetto più grande, dove la scomposizione, la modularità, ecc. Diventano incredibilmente importanti.