Come si lascia memoria a una macchina
Nel file di istruzioni del mio gioco c'era una regola che vieta di copiare i numeri del progetto. Trenta righe più su c'erano i numeri copiati, e sbagliati.
di Nicola Sabaini 4 min di lettura Progetto: ExaWar
Il 17 settembre ho riaperto il file di istruzioni di ExaWar, il gioco di strategia che porto avanti. In fondo c’era una riga che avevo scritto per me stesso: i conteggi del progetto stanno in un file solo, e copiarli altrove serve unicamente a farli sfasare.
Trenta righe più su, nello stesso file, c’era scritto che il progetto aveva circa 424 file Python e 133 mila righe, e che la suite di test ne faceva 1311.
I numeri veri, misurati quel giorno, erano 471 file, 145 mila righe, 1690 test.
Il file che vietava di copiare i conteggi aveva i conteggi copiati, sfasati di un anno di lavoro. Li avevo scritti io, in tutti e due i posti.
Ogni sessione riparte da zero
Lavoro quasi sempre con una macchina accanto, e quella macchina non si ricorda niente della volta prima. Apre il progetto senza sapere cosa ci sia dentro, cosa sia già stato provato, cosa non si debba toccare.
Quello che trova scritto nel repository è tutta la differenza fra una che diventa utile in cinque minuti e una che ci mette un’ora facendo domande a cui ho già risposto tre volte.
La conversazione non è memoria: finisce quando chiudo la finestra. I file restano.
Vale per la macchina e vale per me. Fra sei mesi, su un modulo che non tocco da un anno, sono anch’io uno che apre il progetto senza sapere cosa ci sia dentro.
Le regole sono cicatrici
Nel file di istruzioni di ExaWar ci sono otto invarianti, con scritto sopra «non romperli». Nessuno è venuto da un ragionamento a tavolino.
«Mai procedere con i test rossi» c’è perché è successo il contrario. «Le modifiche al comportamento dell’AI si validano in scontro diretto» l’ho scritta il 16 settembre, dopo mezza giornata buttata dietro a metriche che salivano tutte mentre l’avversario si indeboliva. «La nebbia di guerra si applica solo a quello che vede il giocatore, mai alla conoscenza dell’AI» protegge da una modifica ragionevolissima che renderebbe stupido l’avversario senza che nessuno abbia deciso di renderlo stupido.
Su NucleoOS, il sistema operativo che sta su un microcontrollore, la regola più importante non riguarda il codice: non si manda mai firmware al dispositivo di propria iniziativa. Si costruisce, si prova sul PC, si passano i controlli. Spedire si fa solo quando lo chiedo io, perché quello è il passo che non si riprende indietro.
Una regola senza una cicatrice dietro è decorazione. Quelle si accumulano, non le legge nessuno, e seppelliscono le quattro che contano davvero.
Dove va cosa
L’altra metà del lavoro è impedire che la memoria diventi un magazzino.
| Serve | Dove va | Tracciato da git |
|---|---|---|
| una regola che vale ogni volta | il file di istruzioni | sì |
| come funziona un sistema | i documenti di architettura | sì |
| come si esegue un lavoro ricorrente | una procedura scritta | sì |
| i conteggi del progetto | un file solo | sì |
| lo scarto di una sessione | una cartella ignorata | no |
L’ultima riga è quella che fa il lavoro sporco. Uno script buttato giù per sistemare una cosa e poi mai più usato non si committa: la sua traccia è il commit che ha applicato la modifica, non il file.
Con una macchina questo conta il doppio. Quaranta script morti in giro per il repository non sono brutti da vedere: sono materiale. Vengono letti, presi per buoni e imitati, e la sessione dopo ti ritrovi codice nuovo modellato su roba che avevi abbandonato a maggio.
La parte che marcisce
Le regole non scadono. I numeri sì, e in fretta.
Per questo i conteggi stanno in un posto solo e ovunque altro ci va il rimando, non la copia. Che è esattamente la regola che avevo scritto, e che ho violato nello stesso file in cui l’avevo scritta.
Non credo che si risolva con più disciplina. Si risolve avendo un file solo da guardare quando il dubbio viene, invece di sei che dicono cose diverse: allora sistemarlo costa dieci secondi, e uno lo fa.
La macchina non si ricorda niente della volta scorsa. Neanche io, dopo sei mesi. La differenza è che io sono convinto di sì.