Questa settimana, dal 10 al 18 ottobre, si celebra la #EuCodeWeek, la settimana europea della programmazione.
Può sembrare a prima vista un evento per addetti ai lavori e nerd, ma in realtà la programmazione, spesso indicata con il (per me bruttissimo) termine coding, è qualcosa che dovrebbe interessare chiunque. Sposo in pieno l’introduzione del sito web dell’organizzazione, CodeWeek.eu, che ne spiega le ragioni:
Oggi viviamo in un mondo che è segnato dai rapidi progressi della tecnologia. Il nostro modo di lavorare, comunicare, pensare e fare acquisti è radicalmente mutato. Per fare fronte a questi rapidi cambiamenti, e per dare un senso al mondo che ci circonda, abbiamo bisogno di sviluppare non solo la nostra comprensione di come funziona la tecnologia, ma anche sviluppare le competenze e le capacità che ci aiuteranno a vivere meglio in questa nuova era.
Imparare a programmare ci aiuta a comprendere come funzionano le cose, esplorare idee e fare cose, sia per lavoro che per gioco. Cosa che, in più, ci aiuta a liberare la nostra creatività e collaborare con persone meravigliose, ovunque esse vivano: vicino a noi o nel resto del mondo.
E se la programmazione una volta richiedeva la conoscenza di linguaggi ostici, al giorno d’oggi lo sviluppo tecnologico ha reso disponibile ambienti interattivi, molto semplici da imparare e padroneggiare. Un esempio è costituito dai sistemi a blocchi, come scratch e blockly, di cui ho ampiamente scritto nel mio blog iltecnico.info.
Ma anche per chi volesse avere un approccio più tradizionale, linguaggi come pyton, lua e perl, solo per citare i più diffusi, sono un ottimo punto di partenza per avvicinarsi ad un mondo intrigante e pieno di sfide. Che non esito ad etichettare come un alimento per la mente.
Vi lancio una piccola sfida proponendovi un piccolo programmino scritto in python:
def cx(x): if x: return chr(x % 128) + cx(x // 128) else: return "" print(cx(35420714581441648087770132627080869203981473401485350993919209967728469))
Il programma contiene un piccolo messaggio nascosto. E’ una forma di codifica che deriva dal lavoro di un matematico e logico austriaco del secolo scorso, Kurt Gödel. Il grosso numero dell’ultima linea è la trasformazione matematica di una frase, ed utilizza la logica della gödelizzazione.
Le prime cinque linee del programma definiscono una funzione ricorsiva, un frammento di programma che richiama se stesso più volte, ripetendo la stessa operazione fino all’ottenimento del risultato richiesto, che è quello di decodificare il numero nel testo corrispondente.
Siete curiosi di conoscere il messaggio? Scaricate l’interprete python, è del tutto gratuito, oppure usate uno degli interpreti online come repl.it, ed eseguite il programma. E se siete veramente curiosi, cercate di capire come funziona. Se avete bisogno di una dritta, il mio indirizzo email è nella pagina chi sono. E se avete decodificato il messaggio nascosto, inviatemi una risposta!
Buona programmazione!
def code(x):
tot = 0
par = 0
for i, c in enumerate(x):
par = ord(c)
for j in range(i):
par *= 128
tot += par
return tot
print(cx(code(‘ciao’)))
o più leggibile
def code(x):
__tot = 0
__par = 0
__for i, c in enumerate(x):
____par = ord(c)
____for j in range(i):
______par *= 128
____tot += par
__return tot
print(cx(code(‘ciao’)))
ciao