| L'agoritmo del serpente
L’algoritmo del serpente Parliamo dell’acerrimo nemico di Snake che pur di non far mangiare le deliziose fragole al simpatico serpentello, farlo allungare e superare il livello, affannosamente corre cercando
di anticiparlo e “soffiargli” tutto il cibo. Quale sarà la migliore strategia? Qual è il percorso più breve per raggiungere il cibo nel minor tempo possibile?  Ah! Dimenticavo... Snake è il serpentello verde! Questo problema risolto con un apposito algoritmo ed altri come questo, convergono tutti,
insieme a varie problematiche di tipo grafico all’interno di una mia applicazione
realizzata appositamente per
 Snake Mobile  Questa applicazione è accompagnata da un articolo tecnico sullo sviluppo della stessa,
che ha riscosso un certo interesse e di cui voglio parlare più approfonditamente,
dopo un mio personale “volo pindarico”. Avevo 3 anni quando mio padre mi regalò per il mio compleanno quelle famose calamite
che si attaccano sul frigorifero, ma invece di comprarmi le lettere, aveva deciso per i numeri,
ed alla domanda di mia madre: “ ma non era meglio cominciare con le lettere? ”, lui, ironicamente, aveva risposto: ” sono solo 10 caratteri; costavano meno ”. Questo piccolo aneddoto me lo ha raccontato quando un giorno di qualche anno fa gli ho chiesto:
“oh pa’! Ma secondo te, perchè a me piacciono tanto i numeri e la Matematica? ”. Come al solito, ad ogni mia domanda, lui risponde o con un’altra domanda o con una frase
che lascia lì, sospesa, nella speranza che io trovi da solo la risposta. Ancora oggi, oltre a vari giochi e piccole competizioni tra noi, spesso ci troviamo a discutere
del perchè delle cose e se la domanda “non sorge spontanea”, lui, se la inventa di sana pianta. Ricordo ancora quando, da piccolo, mi batteva con quel suo dito “nodoso” sulla testa e con voce quasi minacciosa sussurrava: “questo è il muscolo che devi allenare, questa è la vera “arma segreta”
che ti permetterà di sconfiggere i nemici ”. Oggi non “picchietta” più e la frase si è così trasformata: “ qui di spazio ce n’è tanto, come hai intenzione di riempirlo? ”. Questo per far comprendere l’aria che si respira in casa e per rendere
in qualche modo merito al mio “vecchio”. Ma merito di cosa? Forse del fatto che non ho paura di chiedere perchè? Forse perchè ancora mi stupisco e meraviglio di fronte agli eventi ed alla spiegazione di essi? Forse perchè, nel mio piccolo, con i numeri ho imparato a colloquiare. Forse perchè dai numeri mi aspetto risposte; almeno le cerco, anche se non sempre le trovo o,
se le trovo, non sempre le comprendo. Ma che importa? Ho ascoltato; è un primo passo. Ho appreso, credo, che non esiste un linguaggio universale in cui la Matematica comunica. Questa “vecchina rugosa” borbotta instancabilmente verso destinatari inconsapevoli
che devono solo limitarsi ad ascoltare, scoprire e spiegare. La mia passione per i numeri e per i “tasti” da premere, mi ha spinto, in maniera del tutto naturale,
verso l’informatica, uno dei tantissimi mezzi con cui “la Signora” comunica, ed in particolar modo,
verso i linguaggi di programmazione. Cos’è un “algoritmo”? In informatica e matematica, con il termine algoritmo si intende, in genere, un metodo
per la risoluzione di problemi utilizzando un numero finito di passi. Un algoritmo può essere riscontrato anche in semplici sequenze d’azioni quotidiane,
come ad esempio la nonna che deve prepararci un bel piatto di pasta. Queste le sequenze: - Riempire la pentola d’acqua
- Posarla sui fornelli
- Accendere il fuoco
- Aggiungere la giusta dose di sale
- Attendere finchè l’acqua non raggiunge il punto di ebollizione
- Inserire la pasta
- Attendere i 10 minuti di cottura
- Scolare la pasta
- Aggiungere il condimento
- Servire a tavola
Un esempio più prettamente matematico di algoritmo potrebbe essere il procedimento
per il calcolo del minimo comune multiplo. Data una certa quantità di numeri iniziali, si procederà in modo ordinato e sequenziale
nello svolgimento delle seguenti azioni: - Fattorizzare i numeri
- Scrivere un elenco di fattori, comuni e non comuni, presi ciascuno una sola volta,
con l’esponente maggiore con cui figurano nelle varie scomposizioni - Moltiplicare tutti i fattori della lista
- Ecco il risultato
La natura ed il mondo che ci circonda sono contenitori inesauribili di algoritmi logico-matematici. Le quattro proprietà fondamentali per un algoritmo sono: - Sequenza di istruzioni finita (finitezza)
- La sequenza deve portare ad un risultato (effettività)
- Istruzioni eseguibili materialmente (realizzabilità)
- Istruzioni espresse in modo non ambiguo (non ambiguità)
Se l’idea di algoritmo aveva una certa importanza per il calcolo matematico,
l'avvento dell'informatica l'ha arricchita di una nuova rilevanza, è infatti con l'informatica
che il termine "algoritmo" ha iniziato a diffondersi.
Se per ottenere un certo risultato o risolvere un certo problema, esiste un procedimento infallibile,
che può essere descritto in modo non ambiguo fin nei dettagli, e conduce sempre
all'obiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare questo compito
a un computer, semplicemente descrivendo l'algoritmo in questione in un programma
scritto in un opportuno linguaggio comprensibile alla macchina detto anche
“linguaggio di programmazione”. Creare algoritmi è diventato per me un piacevolissimo gioco. Non so se sia il giusto esercizio ginnico per i miei neuroni di cui parlava il mio “vecchio” e non so se sconfiggerò i miei nemici, diciamo che cerco solo di non farmi trovare impreparato
di fronte alle sorprese che la vita mi riserverà, o almeno, provo a riempire il “vuoto”
con più conoscenze possibili “algoritmicamente“ riscontrabili. Ma torniamo a The Code Project.  "The Code Project è una comunità di sviluppatori software a di designer, uniti insieme per raggiungere
degli obiettivi comuni: imparare, insegnare e divertirsi programmando. Gli sviluppatori di tutto il mondo si riuniscono insieme per condividere codici sorgente, tutorial e conoscenze, gratuitamente, per aiutare i loro compagni programmatori. E’ nostra speranza che The Code Project venga valutato come una preziosa risorsa e una fonte di informazioni.” Così recita il testo di autodescrizione del sito. The Code Project, però, non è solo questo. In un posto dove gli sviluppatori di tutto il mondo
( ben oltre 7.400.000 iscritti! ) si riuniscono insieme per aiutarsi l’un l’altro, infatti, abbiamo
molto più di un semplice forum dove le persone scambiano idee: ci sono articoli tecnici molto ben fatti, accese discussioni sulle tematiche più recenti inerenti al mondo tecnologico e aziendale,
sondaggi per valutare le idee degli sviluppatori, zone speciali nelle quali le persone in difficoltà
possono chiedere aiuto per un problema. La condivisione per la “didattica della programmazione” è il suo punto di forza, o almeno quello
che io reputo un fine divulgativo “onorevole”. Si impara e si aiuta ad imparare. Tra le miriadi di iniziative ci sono anche le competizioni. Le competizioni sono sempre un argomento scottante, ma al tempo stesso stimolante e intrigante.
Ogni mese ce ne sono per il migliore articolo, per i migliori consigli o le migliori discussioni;
in palio ci sono sempre circa 1500$-2000$ in premi vari. In occasioni particolari, invece, posso essere indetti alcuni concorsi “a tema”: in questo momento, c’è quello sulla robotica ed un altro sullo sviluppo per una piattaforma
chiamata Windows Azure; i premi anche qui, non sono da meno:
un kit per la costruzione e la programmazione di un robot per il primo,
mentre per il secondo una Xbox 360 con Kinect. Mi sono iscritto come membro qualche mese fa; per uno che aspira ad imparare
i diversi linguaggi di programmazione, The Code Project è forse la comunità di sviluppatori
con filosofia “Open Source”, o meglio “Codice libero”, più importante ed attiva al mondo. Ho iniziato come semplice fruitore di informazioni, poi, successivamente,
il desiderio di misurare il mio livello di preparazione, mi ha spinto a partecipare in maniera attiva. Volevo che persone competenti potessero valutare i miei piccoli lavori, in modo da comprendere
se la mia passione per la programmazione poteva trasformarsi in qualcosa di più concreto per il futuro. Si trattava di decidere cosa fare... A novembre, leggendo una newsletter... “In occasione dell’uscita nel periodo di Natale del nuovo sistema operativo per gli smartphone chiamato Windows Phone 7. The Code Project non poteva perdere un’occasione così golosa, quindi,
ecco il concorso che ha indetto: ” Windows Phone 7 Competition Dal 11 Novembre 2010 al 31 Marzo 2011  Ho così deciso di partecipare, anche se, in quanto minore, mio padre si è presentato
come titolare dell’account e responsabile in qualità di genitore. Questa competizione consiste nello sviluppare un’applicazione per questa nuova piattaforma
e scrivere un articolo che spieghi tecnicamente la sua costituzione. Ogni mese, poi, verrà selezionato il migliore articolo e l’autore vincerà il premio in palio. Il processo di selezione si divide in due fasi: innanzitutto, l’intera comunità di The Code Project vota gli articoli assegnando un voto da 1 a 5; successivamente,
una giuria deciderà insindacabilmente il migliore articolo, scegliendolo fra quelli più votati
dalla comunità. Per votare è sufficiente iscriversi gratuitamente al sito. Qual è il premio? Eccolo: un fantastico HTC 7 Surround ! E veniamo finalmente al mio articolo. A "little snake" leads us through the most important features of the Windows Phone 7 L’ho pubblicato il 2/01/2011 e sin da subito sembra aver avuto un ottimo riscontro. ( permettetemi di “sbrodolarmi” un po’ addosso ) Alcuni numeri: IL primo giorno, l’articolo è stato letto da circa 774 persone ed ha ricevuto 16 Excellent,
già questa è un’ottima performance, ma ancora più graditi sono stati
i commenti positivi ricevuti da grossi nomi della programmazione. Il secondo giorno il numero dei lettori è salito a 2140 con un totale di 29 Excellent. Al momento in cui scrivo (28/01/2011 ore 19:30) questi sono i dati: 23859 lettori 99 voti 89 bookmarked 4,97 / 5 ranking 9,91 popularity 137 commenti Dulcis in fundo: L’articolo è entrato nella top 100 degli articoli più popolari del sito, da un anno a questa parte ed attualmente occupa la 14a posizione.
Chiedo scusa per quest’elenco di dati che sembrerebbero privi di significato,
ma che invece per me sono molto importanti, perchè premiano la qualità del mio lavoro. ( fine “sbrodolamento” ) Vi invito a visitare il sito e leggere il mio articolo.
Nella prima settimana di Febbraio partiranno le votazioni
per altri due concorsi e dureranno due settimane precise: 1. Il miglior articolo del mese 2. Il miglior articolo per il linguaggio di programmazione C# In questi due concorsi saranno gli iscritti a votare i migliori articoli che verranno esposti in Home page. Il mio articolo dovrebbe poter partecipare e spero che riceva i voti necessari per poter vincere.
Date le dovute informazioni lascio tutto al buon cuore dei votanti. Mi riservo di comunicare i risultati dei tre concorsi verso la fine di Febbraio. Aggiornamento del 08/03/2011: Come promesso, in questa pagina, si possono visualizzare i risultati ed i premi delle diverse competizioni.
|