Published on

Come ho imparato a programmare

Authors

Parte 1: Come ho scoperto la programmazione (2007-2013)

La mia prima console in assoluto fu un Nintendo DS Lite comprato usato nel 2007. Avevo 7 anni, sono classe 1999. Una delle feature più incredibili del Nintendo DS Lite era la retrocompatibilità TOTALE con i giochi della console precedente (il GameBoy Advance). Fu così che entrai in contatto con uno dei videogiochi che avrebbe cambiato la mia vita per sempre: Pokémon Versione Smeraldo.

Smeraldo

Forse voi non vi rendete conto di quale videogioco stiamo parlando. Pokémon Smeraldo. Incredibile. Assurdo. Un gioco in cui ti imbarchi in una avventura accompagnato da pochi amici, con i quali avete in comune una sola passione: quei cazzo di Pokémon. Zaino in spalla e sono subito battaglie, scoperte di nuovi posti incredibili, scene indimenticabili. Chi ha giocato almeno un gioco Pokémon (tra la prima e la quinta generazione) sa benissimo di cosa sto parlando.

Inutile dire che io ho interamente spolpato questo gioco da capo a coda, rigiocandolo in tante occasioni e salse diverse (cartucce diverse, anche). In seguito fu il turno di Pokémon Diamante, anche quello un fottuto capolavoro (superato solo da Platino che ne è la versione definitiva). Tutt'oggi gioco ancora ai Pokémon, sebbene io non abbia mai comprato una Switch (emulo tutto lol).

Insomma per farla breve io ero in fissa con i Pokémon. Dato che però i giochi costavano un bel po', mio padre ebbe la felice idea di comprare un R4 (nello specifico il TTDS), ossia una cartuccia speciale per il DS in cui ci potevi mettere dentro dei file in formato NDS e giocare. Ovviamente anche piratando, ma non ditelo alla Nintendo se no mi denunciano.

R4 TTDS

Grazie all'R4 ho giocato a tantissimi giochi (ad esempio: tutti gli spin-off dei Pokémon e l'intera serie del Professor Layton pre-3DS, che molti anni dopo ho recuperato in versione fisica), e grazie al fatto che dovevi essere un po' tecnico per riuscire ad operare sulla R4, iniziai a farmi una cultura a riguardo. Visitavo svariati forum (in lingua inglese, e questo mi ha aiutato tantissimo ad impararla) per scaricare i giochi e in breve tempo scoprii che era possibile modificare i giochi tramite l'uso di appositi "cheat-codes". Per me fu incredibile, in quanto potevo scoprire nuovissimi lati dei miei giochi Pokémon preferiti (ad esempio l'evento speciale di Arceus).

Da lì la domanda sorse un po' spontanea: ma come faccio a scrivere dei miei trucchi? Come faccio a modificare il gioco dall'interno per ottenere ciò che voglio? Iniziai a pensare alle ramificazioni... pensa che figata poter SCRIVERE il tuo gioco Pokémon con gli eventi e i dialoghi che vuoi tu, la storia ideata totalmente da te, e tanto altro...

Dato che avevo spolpato i giochi fino all'osso, questa risultava essere l'unica frontiera a cui dovevo puntare. Sempre tramite i forum venni a conoscenza dell'esistenza di un'intera scena di produzione di quelle che si chiamano "Hack ROM" (ROM era il termine usato per indicare i file dei giochi, hack per dire che erano modificati).

E come si creano queste "Hack ROM"?

Il mio primo linguaggio di programmazione: ASSEMBLY (dialetto THUMB)

All'epoca ero un bambino non particolarmente sveglio quindi non riuscivo a capire bene come funzionasse, tuttavia avevo più o meno capito che il mio Nintendo DS (o un emulatore sul mio PC fisso con Windows XP) eseguiva delle istruzioni scritte da qualche parte sulla ROM. Queste istruzioni potevano servire a disegnare cose a schermo, oppure ad assegnare determinati Pokémon a un certo allenatore.

"Che figata!" pensai "Quindi per modificare il comportamento del gioco mi basta modificare queste istruzioni in modo puntuale...". Sui forum esistevano già svariati tool che consentivano la modifica semplice e veloce di alcune parti "fondamentali" dei giochi Pokémon. Ad esempio, era possibile usare un programma per aggiungere nuovi dialoghi, un altro programma per creare nuovi Pokémon. Torna alla mente il programma "Advance Map", usatissimo praticamente dall'intera community per customizzare mappe e tileset dei giochi di terza generazione.

Tuttavia, per creare comportamenti più complessi (ad esempio nuove scene ad hoc con effetti speciali fighi), l'unico modo era scrivere delle routine in assembly e scriverle sulla ROM in modo tale da poter essere poi eseguite dal gioco.

Pokémon Rubino era in assoluto il gioco più facile da modificare, per svariate ragioni, dunque partii da quello. In relativamente breve tempo (circa un annetto, era già il 2009) imparai tutte le istruzioni e come metterle assieme per creare scene complesse andando a mettere assieme tutto ciò che avevo aggiunto alla ROM utilizzando gli altri tool. In questo modo, stavo creando le mie primissime ROM personalizzate, che facevo vedere agli amici della scuola (anche loro appassionati di Pokémon).

Ovviamente da solo potevo fare ben poco, per cui mi facevo aiutare dai membri della community. Ricordo che erano molto simpatici e disponibili, anche se a volte capitavano alcuni un po' più "elitisti" (o si dice "elitari"? Daaamn odio l'italiano) per cui tutto era "ovvio" e che ero fondamentalmente troppo stupido per arrivare a capire da solo certe cose. Forse avevano ragione? Chissà.

A un certo punto avevo iniziato a scrivere i miei progressi su qualche thread (ormai sperduto tra le sabbie del tempo), per aiutare i più novizi come me a capirci qualcosa.

All'improvviso, la svolta: qualcuno in un thread aveva menzionato qualcosa che si chiamava "C". Diceva che con quello non dovevi scrivere ASM, scrivevi quello e l'output era ASM. Pensai "COSA? Perché nessuno me l'ha detto prima!". La ragione è che banalmente in quel periodo nessuno si era messo a scrivere un compilatore che aveva come target quel "dialetto" di ASM (e il compilatore usato da Nintendo era ovviamente super privato e segreto all'epoca - non che la situazione sia tanto cambiata nel 2025).

Io cadevo dalle nuvole, così mi spiegarono cosa fosse il C e anche come tutto ciò che avevo fatto finora fosse "programmazione".

Ricordo che ero semplicemente estasiato alla vista del C. Cose che per me prima erano difficilissime da scrivere, si potevano ora scrivere molto semplicemente.

Quindi con "programmazione" si intende mettere insieme delle logiche semplicissime (atomiche, quasi) per creare logiche complesse? Oddio, cosa sono queste cose che si chiamano "algoritmi"? Stavo imparando tantissimo, ero come una spugna. Avevo iniziato a scrivere le mie routine in C, e per me era quasi magia vedere quel compilatore funzionare.

In definitiva, non mi è stata semplicemente spiegata la differenza tra linguaggio a basso livello e ad alto livello, l'ho scoperta solo molto dopo.

Fu amore a prima vista: decisi che da quel momento in poi la programmazione sarebbe stata la mia vita.

Parte 2: Tra C++ e Java, con un pizzico di Game Maker (2013-2017)

Questo periodo della mia vita da programmatore corrisponde esattamente con il periodo del liceo. Dato che alle medie non avevamo fatto nulla di programmazione a scuola (e questo ritengo essere un GRAVISSIMO ERRORE della scuola italiana), il mio primo approccio scolastico con la programmazione è stato durante il liceo scientifico (in quanto scelsi di frequentare l'Opzione Scienze Applicate, la leggendaria OSA, coloro che OSArono non fare latino, ma questa... questa è un'altra storia...)

Opzione Scienze Applicate sacrifica il latino interamente per aggiungere la materia di informatica (più approfondita) e più ore di biologia e matematica. Ottimo per me!

Comunque sia, la scuola ha comunque aiutato a darmi delle indicazioni su quali argomenti di teoria studiare e approfondire, anche se di pratica c'era ben poco. Pensate ai puntatori, che sono LA BASE del C: praticamente toccati di striscio. Spero abbiano migliorato i programmi in questi anni...

Nel mio tempo libero, intanto, stavo concentrando i miei sforzi sull'imparare il C++: all'epoca mi sembrava il passo successivo "naturale" dopo il C. Non avevo idea del cattivo sangue che scorresse tra gli sviluppatori C e C++, l'ho scoperto molto dopo. Il C++ introduceva il concetto di programmazione orientata agli oggetti come parte fondamentale del linguaggio, dunque non potevo esimermi dall'impararla.

Questo paradigma di programmazione va a braccetto con un altro linguaggio che si chiama Java. Quindi ho imparato anche quello (notando come fosse molto più semplice ma anche più "stupido" rispetto a C e C++). Per me non aveva senso l'impostazione "garbage collected" del linguaggio, in quanto pensavo che se il programmatore fosse abbastanza bravo di sicuro saprebbe a menadito come andare a deallocare correttamente la memoria. Mi sbagliavo di grosso. Più o meno qui ho scoperto che tantissimi al mondo non prendono la programmazione come una passione ma solo come un lavoro da casellante... quindi in definitiva il Java ha molto senso, seppur con tutte le sue innumerevoli pecche.

Durante questo periodo, inoltre, un altro gioco in particolare occupava parte del mio tempo libero... Counter-Strike: Global Offensive (CS:GO).

Ci giocavo con i miei amici online molto spesso, facevo anche parte di un team competitivo "amatoriale" (i SealX) con cui partecipavamo a tornei e ci divertivamo insieme (in realtà era più un bestemmiare dio insieme ma vabbè). In quel periodo sono anche entrato nel giro di trading delle skin, un argomento talmente vasto e ampio che preferirei non aprire in questa sede.

All'inizio del 2016 mi stufai un po' del gioco, anche a causa della presenza costante di cheaters: mi riferisco a persone infami che fanno utilizzo di software esterni al gioco per avere un vantaggio non regolare all'interno del gioco stesso (ad esempio vedendo i nemici dietro i muri). In parole povere: giocavano sporco. Allora decisi che avrei giocato sporco anch'io: sfruttando la mia conoscenza del C a basso livello e C++ per costruire oggetti complessi, creai il mio primo cheat (seguendo delle guide online per CS:GO) ed entrai a far parte della community (come faccio sempre quando si tratta di imparare qualcosa di nuovo).

Fu un periodo davvero divertente in quanto provavo i miei cheat con i miei amici, e distruggevamo altri cheater online facendoli rosicare. Inoltre CS:GO era un gioco veramente rotto quindi si scopriva un exploit dietro l'altro, sempre divertenti (come dimenticarsi dell'exploit che faceva scoppiare immediatamente la bomba?)

Da lì a vendere effettivamente i miei cheat il passo fu davvero breve: la mia tariffa per i software si aggirava intorno ai 200 euro per l'ingresso (invito) + 20 euro al mese per tenere attivo il cheat. Sembra tanto ma altri cheat chiedevano molto di più. E tanta gente pagava. Che tristezza. Però SO SOLDI. Era diventato davvero il mio lavoro: passavo i pomeriggi interi a reversare il gioco per aggiungere nuove feature per l'HvH (Hack VS Hack, in cui 2 cheater si scontrano per decidere chi ha scritto il cheat migliore, o meglio gli algoritmi di risoluzione dei fake angles migliori).

Piccola parantesi: la community di Game Maker Italia

In questo periodo della mia vita ero anche molto attivo su un forum di creatori di videogiochi indie, chiamato Game Maker Italia. Dato che amo programmare e amo i videogiochi, ovviamente mi piace creare videogiochi da zero oltre che modificarli. Ho anche creato dei tutorial (ancora disponibili sul mio canale YouTube, ma mi vergogno quindi non cercateli).

Ho creato diversi giochi (veramente brutti). Il mio più famoso è sicuramente Serious Zeb, videogioco del 2015 dedicato al noto personaggio di YouTube Italia Zeb89. Purtroppo il progetto non è mai stato concluso per svariate ragioni (anche legate allo youtuber stesso, che per qualche ragione non vedeva di buon occhio il gioco). Con la demo di Serious Zeb ho vinto la competizione annuale di Game Maker Italia nel 2015 (la competizione, abbreviata in "compe" si tiene ogni anno ancora oggi!).

Ho anche partecipato a diverse game jam, vincendo a volte anche premi in denaro. Son soddisfazioni, sicuramente, tuttavia al momento, per varie motivazioni, credo che la creazione di videogiochi rimarrà per me solo un hobby.

Parte 3: Inizio lavoro e la triennale (2017-2020)

🚧 WORK IN PROGRESS 🚧

Parte 4: La pandemia e il post-pandemia (2021-2023)

🚧 WORK IN PROGRESS 🚧

Parte 5: Milano City e la magistrale (2023-present)

🚧 WORK IN PROGRESS 🚧