• Passa alla navigazione primaria
  • Passa al contenuto principale
  • Passa alla barra laterale primaria
  • Passa alla barra laterale secondaria
  • Passa al piè di pagina
  • Home
  • Chi sono
  • Contatti
  • Tu che sei un fisico
  • Incontri e conferenze
  • Particelle familiari
  • Privacy

Qualche considerazione su Advent of Code 2019

20 Gennaio 2020 3 commenti

50 stelle!

È il 20 gennaio, e l'Avvento è finalmente finito. Ovviamente non parlo dell'Avvento inteso come il periodo di attesa che precede il Natale: quello si è concluso come si conviene il 25 dicembre scorso. L'Avvento a cui faccio riferimento è Advent of Code, una sorta di calendario dell'avvento fatto di piccoli problemi e rompicapi di programmazione inventato qualche anno fa da Eric Wastl. Con la scusa di una storia che ruota intorno al tema del Natale (quest'anno tutti i rompicapi avevano a che vedere con un viaggio nel sistema solare per raggiungere Babbo Natale), ogni giorno Eric pubblica un nuovo problema, da risolvere con un programmino scritto nel linguaggio preferito. Il sito fornisce qualche genere di input al problema (una mappa, una serie di istruzioni, un valore numerico) sotto forma di file di testo, e valida il risultato (di nuovo un numero numerico, o una stringa di caratteri) per assegnare una stella nel caso di una risposta corretta. Ogni giorno Advent of Code propone due problemi, il secondo accessibile solo dopo aver risolto il primo: si tratta sempre di una variazione del tema iniziale, spesso perso con condizioni al contorno più complete, che obbligano a ripensare la prima soluzione in un ambito più generale. Ci sono programmatori professionisti che partecipano in modo competitivo, altri invece che approfittano l'occasione per imparare un nuovo linguaggio di programmazione, altri ancora che usano i rompicapo come esercizi per i loro corsi universitari. E poi, almeno da quest'anno, ci sono i fisici delle particelle come me.

Come sono arrivato a Advent of Code? Sul quel socialino di nicchia che continua a essere uno dei social che frequento di più in rete, uno dei miei amici immaginari a inizio dicembre ha segnalato l'iniziativa. Presi dall'entusiasmo, un paio di informatici, un'ingegneressa, un matematico e il sottoscritto ci siamo messi partecipare, un po' in giocosa competizione tra noi, un po' (soprattutto) con la scusa di condividere gli sforzi, i problemi incontrati e le soluzioni, magari persino aiutandoci a vicenda. Un po' perché i miei amici immaginari ed io abitiamo in Europa (e Eric pubblica i problemi a orari impossibili per chi vive qui), un po' perché tutti quanti abbiamo lavori e famiglie che non ci permettono di dedicare a questi giochini il tempo che richiederebbero, non abbiamo certo partecipato in modo competitivo. Per me, la motivazione principale è stata invece sforzarmi di formulare le mie soluzioni in Python, un linguaggio che uso per lavoro ma non conosco (conoscevo!) abbastanza bene da potermi dire esperto, con lo scopo di imparare ad usarlo meglio.

Dicevo dunque che oggi, 20 gennaio 2020, ho finalmente terminato Advent of Code 2019. Ben oltre il 25 dicembre 2019, dunque! Un po' per la difficoltà crescente degli ultimi problemi, un po' perché il tempo da dedicarci prima di Natale (e durante le vacanze) si è ridotto drammaticamente rispetto a quello disponibile all'inizio di dicembre, ho finito i problemi dei quattro giorni che ancora mi mancavano nei ritagli di tempo delle ultime due settimane.  Non vi tedierò con i dettagli dei problemi e delle mie soluzioni: i primi sono ormai liberamente accessibili sul sito, mentre le mie soluzioni sono consultabili qui (questo vale anche per le immagini che trovate in questo articolo: se siete curiosi di sapere a che cosa corrispondono, andate a scavare tra problemi e soluzioni). Mi interessava invece segnalare alcune cose che mi sembra di aver imparato nel corso di questa divertente esperienza. Ecco qui:

  1. La formazione influenza fortemente il modo con cui affrontiamo i problemi.  Dicevo che tra i miei compagni di avventura c'erano informatici, ingegneri e matematici. Confrontando gli approcci scelti per affrontare i vari problemi (specie quelli della prima metà dell'Avvento, sufficientemente semplici da permettere approcci anche molto diversi) mi sono reso conto che avevamo modi spesso radicalmente opposti di analizzare i problemi e immaginare le soluzioni. Informatici e ingegneri hanno mostrato una certa preferenza per il rappresentare i problemi in maniera "discreta", immaginando strutture semplificate per rappresentare i dati, e soluzioni rapide e efficienti per trovare le risposte. Il fisico (io!) sembra invece preferire astrazioni tridimensionali, e pensare subito a soluzioni le più generali possibili, spesso a scapito dell'efficienza. Un certo problema, per esempio, descriveva due fili, rappresentati da una serie di coordinate bidimensionali, i cui tratti potevano incrociarsi, e chiedeva di contarne appunto gli incroci. Il sottoscritto ha descritto i fili come una serie di segmenti nel piano, scrivendo poi un programma che cercava le eventuali intersezioni di ogni coppia di segmenti. Almeno un paio dei miei colleghi hanno invece descritto il tutto come una matrice di punti, cercando le intersezioni come proprietà dei punti sulla matrice. Il matematico ama lavorare con precisione infinita, il fisico non disdegna le approssimazioni: un altro problema richiedeva di contare una certo numero di oggetti nello spazio, cosa che per me era evidentemente un problema di trigonometria, mentre per il matematico l'idea di usare funzioni trigonometriche con numeri interi rappresentava un'eresia inaccettabile. Confrontare le mie soluzioni con quelle degli amici con formazioni e mestieri diversi è stato dunque  molto formativo.
  2. Nonostante io sia un fisico, ci sono branche (anche relativamente accessibili) della matematica che non conosco per niente. Questo potrebbe sembrare ovvio, ma la mia tendenza è sempre stata quella di pensare che tutta la matematica che non conosco è matematica difficile e avanzatissima. Diversi problemi di Advent of Code mi hanno insegnato invece che ci sono aspetti della matematica anche potenzialmente accessibili di cui semplicemente non ho mai sentito parlare, semplicemente perché in quanto fisico non ho ragione di conoscerli e usarli. È il caso per esempio degli aspetti fondamentali della teoria dei numeri, o dell'aritmetica modulare, che stanno alla base per esempio delle crittografia, e che invece io non conoscevo per niente e le cui basi ho dovuto imparare per risolvere uno specifico problema.
  3. La stessa ammissione di ignoranza vale anche per molti algoritmi di calcolo. I fisici studiano certamente programmazione all'università, ma gli argomenti toccati sono molto orientati alle necessità specifiche del fisico: risoluzione numerica di equazioni, calcolo differenziale, simulazioni Monte Carlo. Di fatto, non studiamo niente di, per esempio, algoritmi di ricerca e navigazioni di grafi, che, da quanto ho potuto imparare, sono tra le altre cose alla base dell'esplorazione dei labirinti.
  4. L'approccio didattico di Advent Of Code funziona molto bene. Mentre dedicavo le mia pause caffè (prima) e qualche nottata (verso la fine) a risolvere i problemi di quest'anno ho pensato che il meccanismo "un problema la giorno di difficoltà crescente, con un po' di competizione a motivare i solutori" funziona molto bene. La conquista di una stella mi ha sempre portato un grande senso di soddisfazione, l'attesa del prossimo problema un grande anticipazione, e la dimensione competitiva, anche solo in un gruppetto scalcagnato di amici, una buona motivazione a continuare. Penso che un meccanismo simile, magari con tempi diversi, si possa usare con successo per i "compiti a casa" di un corso universitario di qualunque disciplina.
  5. Certi aspetti specifici di Advent Of Code 2019 non funzionano molto bene dal punto didattico. Non so dire se fosse una caratteristica di quest'anno, o se il formato fosse simile anche nelle edizioni precedenti, ma quest'anno ogni giorno dispari aveva un problema basato su un programma (o l'estensione di un programma) realizzato nei giorni precedenti. La cosa aveva il suo fascino, ma posso immaginare che abbia frustrato più di un partecipante che non fosse riuscito a risolvere correttamente uno dei problemi precedenti necessari a continuare. Rendere la soluzione di un rompicapo sistematicamente dipendente dall'aver risolto un rompicapo precedente può facilmente alienare parte del proprio uditorio, e non è qualcosa che userei con leggerezza in un corso. La cosa non mi ha toccato personalmente, ma ha rappresentato un problema per almeno uno dei miei compagni di avventura, ed è stato un peccato.

    Le statistiche di successo in AoC 2019: una perfetta legge esponenziale!
  6. Imparare cose nuove è molto gratificante. Partecipare a Advent of Code 2019 mi ha obbligato a "uscire dalla mia zona di conforto" intellettuale, e ho dovuto dedicare un po' di tempo a imparare le basi di nuova matematica, qualche nuovo algoritmo, e diversi dettagli sull'uso di un linguaggio di programmazione che non conoscevo così bene. A qualunque età, imparare è allo stesso tempo faticoso, divertente e gratificante, e non bisognerebbe mai smettere!

In conclusione, grazie a Agnello per aver segnalato la sfida, a Zar, Frugola, Dario, Larsen per aver attivamente partecipato e condiviso, e pure a .Mau. e Ghira per aver lurkato le nostre discussioni ed aver di tanto in tanto espresso qualche opzione o dato un suggerimento. Lo rifacciamo l'anno prossimo, d'accordo? Oppure ci lanciamo su Project Euler?

 

Condividi:

  • Facebook
  • Twitter
  • E-mail

Correlati

Archiviato in:Geeking & Hacking, Intenzioni educative Contrassegnato con: AdventOfCode, algoritmi, didattica, insegnamento, matematica, programmazione, puzzle, python

Interazioni del lettore

Commenti

  1. Luigi Buccelletti dice

    20 Gennaio 2020 alle 19:26

    BUENO

    Rispondi
  2. Oriella dice

    23 Gennaio 2020 alle 16:15

    è una mia impressione o non è ottimizzato per mobile?

    Rispondi
    • Marco dice

      23 Gennaio 2020 alle 16:19

      Ciao Oriella, ti riferisci al blog? Da qualche anno uso un tema responsive che dovrebbe scalare perfettamente su dispositivi mobili, e di fatto lo fa sul mio telefono (un iPhone SE con schermo "piccolo"). Cosa vedi dal tuo che ti disturba?

      Se invece ti riferisci a Github che ospita il codice delle mie risposte, anche quel sito mi pare risponda bene a dispositivi mobili, anche se forse non è il modo migliore per vederne i contenuti.

      Rispondi

Lascia un commento Annulla risposta

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.

Barra laterale primaria

Marco Delmastro Mi chiamo Marco Delmastro, sono un fisico delle particelle che lavora all'esperimento ATLAS al CERN di Ginevra. Su Borborigmi di un fisico renitente divago di vita all'estero lontani dall'Italia, fisica delle particelle e divulgazione scientifica, ricerca fondamentale, tecnologia e comunicazione nel mondo digitale, educazione, militanza quotidiana e altre amenità. Ho scritto un libro, Particelle familiari, che prova a raccontare cosa faccio di mestiere, e perché. Per qualche tempo ho risposto a domande di fisica (e non solo) sul podcast Tu che sei un fisico (e prima o poi potrei riprendere).

Barra laterale secondaria

Argomenti

  • Scienza
    • Fisica
    • Raccontare la scienza
    • Scienza e dintorni
  • Opinioni
    • Militanza
    • Mezzi e messaggi
    • Intenzioni educative
  • Sulla frontiera
    • Vita di frontiera
    • Letture e riflessioni
    • Geeking & Hacking

Footer

Iscriviti al blog tramite email

Non perderti neanche un aggiornamento! Inserisci il tuo indirizzo email per ricevere un messaggio ogni volta che un nuovo articolo viene pubblicato:

Trattamento dei dati, cookie e affiliate link

Questo sito fa uso di cookie: qui ti spiego quali sono e perché li uso, così puoi decidere se ti va bene. Uso anche Google Analytics per l'analisi delle visite e del traffico; per saperne di più, leggi la pagina sulla privacy, dove ti spiego anche come gestisco i tuoi dati se decidi di iscriverti al sito o di lasciare un commento. In certi post, alcuni dei link a prodotti venduti su Amazon sono affiliate link.

Qualche diritto riservato

I contenuti di Borborigmi di un fisico renitente sono rilasciati sotto licenza Creative Commons Attribuzione-Non Commerciale-Non opere derivate. Fatene buon uso.

Licenza Creative Commons

Copyright © by Marco Delmastro · Qualche diritto riservato

  • Facebook
  • Twitter
  • Instagram
  • Youtube
  • Linkedin
  • Github
Borborigmi di un fisico renitente usa alcuni cookie per funzionare al meglio. Se continui leggere o scorrere queste pagine dò per scontato che la cosa ti vada a genio. Ok! Dimmi di più
Politica dei cookie

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Sempre abilitato
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
ACCETTA E SALVA