Più programmo più mi rendo conto che la maggior parte del mio tempo è dedicato alla scrittura di scaffolding per i programmi in modo da poterli eseguire il debug e quindi rimuovere l'impalcatura per la produzione.
Il problema è che non ho trovato una lingua in cui l'idea di scaffolding sia una nozione incorporata. Idealmente voglio che lo scaffolding faccia parte del programma effettivo che viene rimosso per le distribuzioni di produzione invece di essere sezioni di codice che vengono commentate e non commentate ogni volta che eseguo il debug di un problema.
Un esempio di ciò di cui sto parlando in una pseudo-lingua inventata
def scaffold(f, *args)
# ... pre condition verifications and state logging
f(*args)
# ... post condition verifications and state logging
end
@scaffold
def buggy_function(a, b, c)
# ... some buggy code
end
Questo sembra un po 'come decoratori di pitone, ma la semantica è diversa. Quando si esegue in produzione @scaffold
si dissolve letteralmente dall'AST e non si trova da nessuna parte. Alcuni di voi potrebbero obiettare che ho creato un tipo di sistema di tipo molto gonfiato e ad-hoc, ma non è proprio così. Darò un esempio da dimostrare.
Avevo scritto un parser per stringhe tra virgolette singole e doppie e stava fallendo da qualche parte nel mezzo dell'analisi di un'altra espressione. Il motivo per cui non funzionava era perché non stavo gestendo correttamente il caso vuoto ( ''
) e non sono a conoscenza di alcun sistema di tipi che sarebbe stato in grado di verificare la validità della macchina di stato per l'analizzatore di stringhe su verificare che il caso vuoto sia stato gestito correttamente. L'unico modo per scoprire questo sarebbe stato scrivere dei test e anche allora ottenere un caso di test ridotto avrebbe richiesto il tipo di ponteggio che dovevo mettere in atto per individuare il problema. Inoltre, puoi facilmente immaginare altri scenari in cui né il sistema di tipi né i test avrebbero colpito il bug.
Non ho trovato un buon modo per gestire il tipo di ponteggio di cui ho bisogno durante il debug e un modo semplice per liberarmene una volta terminato il debug. In che modo la gente di solito la gestisce?