Technology Experience
VivendoByte.ByteAdventure

[ByteAdventure] Anonima Variabili

ITIS Alessandro Volta (Lodi), ore 10:51
Il prof riconsegna i compiti in classe di informatica. Il suo miglior studente oggi ha preso solo sei e mezzo, decisamente sotto media. Per questo non si stupisce quando, a fine lezione, lo vede arrivare per chiedergli delucidazioni. Lui, paziente, spiega e racconta dove ha sbagliato.

… … … …

– E’ per questo che nessuno mi usa più. Sono abbandonato a me stesso, e non so come uscirne.

Il racconto di GOTO aveva commosso un po’ tutti. Una semplice istruzione che agli albori dell’informatica, qualche decennio fa, era il mezzo più comodo e più utilizzato per modificare il flusso di esecuzione del software. Ma con il passare del tempo, nuove tecniche e nuovi pattern l’avevano soppiantato e reso obsoleto. GOTO ne soffriva molto: sapeva benissimo che in fondo a basso livello esisteva ancora, seppur con altri nomi più astrusi e meno user-friendly, ma la cosa che lo rendeva davvero infelice era il fatto di essere deriso da altri costrutti suoi colleghi più evoluti. Cicli For…Next, Do…While, per citarne qualcuno. GOTO non poteva più andare in giro tranquillo senza evitare di venir insultato con termini come spaghetti-code o mangia-spaghetti-code. E ricorda ancora episodi di bullismo che ha dovuto subìre da ragazzino, quando in un semplice programma BASIC, venne inserito in una linea:

1) GOTO 1

Il programma non faceva nulla, infinitamente costretto a collassare su se stesso, in un loop senza uscita e senza alcuna via di scampo. A meno che qualcuno non arrivasse sulla tastiera a premere BREAK per interrompere il run del codice. Cosa che alla fine avvenne, ma solo dopo tantissimo tempo. GOTO ha ancora incubi di questo tipo, che lo svegliano la notte, che lo tormentano quando è escluso da tutti i processi gestiti dall’OS. Cosa che gli succede sempre più spesso.

Il profiler riprende la parola per chiudere l’intervento di GOTO.

– Capiamo bene la tua situazione, GOTO. Con l’avvento di paradigmi di programmazione via via sempre più raffinati ed evoluti, le istruzioni come te tendono a sparire. Ma concentrati su questo, GOTO: tu puoi sparire nei linguaggi ad alto livello, ma non potrai mai venir spazzato via davvero. Statement e costrutti che a prima vista possono sembrare più eleganti, in fondo al loro cuore si basano tutti sul buon caro vecchio GOTO. Di questo puoi stare certo.

– Ma ci sarà tempo per continuare questo discorso. I tuoi dieci minuti sono terminati. Avanti il prossimo!

GOTO attua un banale JMP 0x89FA12 e torna al suo posto, in fondo, dove la luce arriva appena. Si alza un oggetto di 4 bytes dal colore opaco, a cui si fa fatica assegnare un ruolo ben preciso. Profiler attende con calma che l’oggetto raggiunga il suo posto, e poi lo invita a parlare, a raccontarsi, a tirar fuori il suo disagio, ciò che lo turba. E’ questa la terapia a cui tutti si sottopongono.

– Buongiorno a tutti. Mi chiamo Pippo, ho un TimeSpan.FromMinutes(14) e sono una variabile anonima.

– Cosa significa essere una variabile anonima? Spiegaci meglio. Tira fuori ciò che senti, dopo…ti sentirai meglio.

– Le variabili come noi sono nate negli anni ‘80, con l’avvento degli home-computer, dei linguaggi di programmazione come il BASIC e dei manuali che permettevano a tutti di scrivere poche e semplice linee di codice. Proprio perchè i programmi erano semplici e tranquillamente gestibili anche da una singola persona, nessuno si lamentava se una variabile si chiamava A, K, L oppure I. Eravamo tutte variabili globali, e prendevamo vita senza grossi problemi in un unico listato di codice. Non esistevano subroutine o function. Poi pian piano sono arrivati linguaggi più importanti, e più strutturati. Ma noi continuiamo ad esistere, purtroppo.

Profiler capisce bene il problema. Non è la prima volta che tratta questioni di questo tipo. Ma è importante che continui a parlare. Sa benissimo che anche se ad una variabile non viene assegnato un nome significativo, può essere comunque importante per l’esecuzione corretta di un software.

– Dove ti trovi, adesso, Pippo?

– Sono stata creata 14 minuti fa, in un software semplice semplice, durante il compito in classe di uno studente delle scuole superiori. E’ un programma semplice che implementa il gioco della battaglia navale. E’ anche bacato. Io sono la variabile che contiene la coordinata X del punto in cui il giocatore vuole fare fuoco. Vorrei solo avere un nome diverso, esplicativo, più parlante. Lo studente ha trovato un baco, ed è la 15° volta che ci fermiano ad un breakpoint impostato nel codice perchè deve capire cosa sbaglia. Non ne posso più, davvero.

– Lo so bene, Pippo. Sai però che nonostante il tuo nome, sei essenziale allo svolgimento del gioco e del codice, vero?

– Certo che lo so. Eppure vorrei essere più importante, avere una certa dignità. Sarebbe più semplice debuggare il codice, più semplice leggerlo e capirne il significato. Per questo non capisco il motivo per cui non ho il rispetto che merito. Non serve a nulla avere un nome corto o così stupido. Io sono convinto che tutte le variabili dovrebbero avere uguale dignità di fronte al codice; non dovrebbero esistere variabili di serie A o di serie B. Tutte noi collaboriamo per uno scopo ben preciso: permettere ai software di funzionare. E questo obiettivo può essere raggiunto solo se tutte le variabili lavorano bene, come in una grande catena di montaggio. Tutte: da quella che coordina un ciclo For…Next a quella che invece valida un certificato digitale X509.

Profiler rimase molto impressionato da questa analisi. Raramente una entità possiede una conoscenza di così ampio respiro rispetto al mondo del software in cui vive. Se venisse instradato in modo adeguato, quel Pippo potrebbe sicuramente diventare un pezzo grosso, governare l’OS, o comunque essere qualcuno che conta, seduto nella stanza dei bottoni. In quel frangente era però insicuro e debole.

Aveva bisogno di più fiducia, dopotutto, come tutti.

– Vedi – rispose Profiler – il Creatore spesso è incosciente, soprattutto gli esemplari più giovani lo sono. Non hanno ancora l’arguzia necessaria a capire cosa è meglio fare con i principali costrutti del codice. E spesso accadono episodi di questo tipo. Ma il Creatore dispone di strumenti evoluti, come il compilatore, il debugger ed i vari ottimizzatori di codice. Sono certo che le cose cambieranno, devi avere fiducia in questo. Gli IDE moderni hanno funzionalità che fino a poco tempo fa erano mancanti: lo sapevi, per esempio, che è possibile rinominare una variabile con pochi click di mouse?

Pippo ascoltava paziente.

– E poi, ci sono altri aspetti da valutare. Immagina che tu venga utilizzata in una funzione di poche righe, magari un extension method. Può essere un disagio chiamarsi Pippo, ma se il problema è circoscritto è anche più facilmente risolvibile. Impatta meno nella qualità del codice. Sarebbe ben diverso se fossi una proprietà o il nome di un metodo pubblico di una classe. Magari addirittura del domain model! Nomi deboli all’interno del domain model comportano un problema ben più grave, non credi? Una debolezza intrinseca in ciò che è stato progettato. E soprattutto, sei stata creata pochissimo tempo fa, c’è tutto il tempo di assegnarti un nome diverso. Il Creatore spesso agisce in questo modo: il più delle volte comincia dando un nome impersonale alle cose, poi via via che passa il tempo ne comprende appieno l’importanza e torna sui propri passi. E’ un processo che lui chiama refactoring.

Pippo si rese conto solo in quel momento che non ci aveva mai pensato. Profondamente offeso e turbato per la sua condizione, non aveva mai fatto tutte quelle considerazioni di natura tecnica. Forse proprio a questo servono sedute di questo tipo, a farti vedere le cose sotto un’altra luce, da una prospettiva diversa. E a sentirsi meglio. Improvvisamente si sentì più fiducioso. La vita è fatta così, ci sono alti e bassi. Adesso era un momento non proprio dei migliori, ma tutto è destinato a cambiare. O almeno, ci sperava. Sperava davvero che quello studente si ravvedesse e cambiasse il suo modo di programmare.

– Ti senti meglio, adesso? – chiese Profiler a Pippo.

– Sì, forse un pochino meglio sì. – rispose lui un po’ soprappensiero.

– Dai, torna al tuo posto, adesso. Stai tranquillo e vedrai che tutto passerà. Avanti il prossimo!

Pippo si alza e torna al suo posto. Le altre entità lo guardano, e tutti notano che ha ripreso un po’ di colore. Mentre prima era una sorta di grigio opaco, monotono e molto triste, adesso la sua texture è di un rosa tenue e pallido. Un colore tutto sommato ancora debole, ma pur sempre un colore.

… … … …

Durante il tragitto che lo porta a casa, lo studente rimugina sulle spiegazioni che il prof gli ha fornito. Consuma rapidamente un pasto frugale, perchè ha ben altro per la testa. Va in camera sua, accende il PC e dopo il login lancia Visual Studio, aprendo la solution direttamente dalla chiavetta USB. Ha capito l’errore di design che ha fatto, perciò non vuole perdere tempo. Raggiunge la variabile Pippo, preme F2 e gli assegna un nome più parlante: playerFireCoordinateX. Questa semplice operazione automaticamente rinomina la variabile in tutto il codice che ha scritto, ed in pochi secondi lo porta ad identificare anche il bug che affliggeva il programma.

Ma questa è un’altra storia.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.