C’è qualcosa di irresistibile nel chiedere una funzione a un assistente e vederla comparire quasi subito, completa di commenti e spiegazione. Il cursore si ferma e io ho già voglia di premere “esegui”. La parte difficile arriva quando devo capire se quel codice può davvero entrare nel mio progetto.

Il punto che mi interessa in Dal prompt al software è proprio questo passaggio. La velocità è una bella cosa. Vorrei però arrivare al giorno successivo sapendo ancora spiegare che cosa ho messo nel programma. Anche senza riaprire la conversazione e sperare che l’assistente si ricordi al posto mio.

“Controlla le date” sembra chiarissimo. A me.

Prendo l’applicazione per i prestiti di libri. Chiedo di controllare le date e, nella mia testa, il requisito sembra completo. Ma le date sono già valide? Posso restituire un libro il giorno stesso? Che cosa deve succedere se la restituzione precede l’inizio del prestito? Sono dettagli che conosco io. Per arrivare nel codice devono uscire dalla mia testa.

Quindi preciso il caso: le date sono già state lette correttamente, una restituzione precedente va rifiutata e quella nello stesso giorno è ammessa. Ho scritto qualche parola in più, ma almeno adesso so che cosa andare a cercare nel risultato.

Il caso delle date uguali è il mio piccolo guastafeste. Un confronto può sembrare perfetto e rifiutare proprio il prestito che avevo deciso di consentire. Per scoprirlo, faccio eseguire la funzione sui tre casi e confronto ogni risultato con quello atteso. Questi controlli, resi automatici, sono test: posso ripeterli quando cambio il codice.

Leggo anche la funzione. Voglio riconoscere dove applica la regola e come comunica un errore. Una spiegazione piena di buone intenzioni mi aiuta soltanto se riesco a ritrovarle nel comportamento del programma.

Poi arrivano due lettori e un solo libro

Le date possono essere corrette e il prestito avere comunque un problema. Immagino due persone che richiedono contemporaneamente l’ultima copia disponibile. Se entrambe la ottengono, i miei tre test sulle date avranno poco da dire. Devo definire anche la regola sulla disponibilità e verificare che cosa succede quando le richieste si sovrappongono.

È il motivo per cui considero la verifica parte del lavoro fin dalla richiesta iniziale. Ogni prova risponde a una domanda precisa; quando cambia la domanda, preparo altre prove. Il numero di righe generate, per quanto impressionante, non mi dice quante di quelle domande ho risolto.

Continuo a trovare entusiasmante poter costruire così velocemente. Mi interessa farlo conservando la possibilità di capire, correggere e mantenere ciò che costruisco. Prima del brindisi, dunque, qualche caso scomodo. Il codice se ne farà una ragione.