CONTATTACI

Blog

Pensieri in codice – Sviluppo software ed enigmistica a confronto

Da un po' di anni si sente un gran parlare di coding insegnato a scuola e di programmazione intesa non più solo come una vocazione e una competenza professionali, ma come una basic skill  da apprendere per vivere nel prossimo futuro da persone pienamente alfabetizzate. 

Personalmente mi permetto di aggiungere che non solo la programmazione è una competenza non più opzionale, perché affrontata anche solo superficialmente ci aiuta a capire come funziona il software, un'entità sempre meno astratta che di fatto ormai determina il comportamento di qualsiasi dispositivo, persino di una lampadina (se abbiamo comprato delle lampadine intelligenti); in aggiunta a questo, la programmazione ha tutte le carte in regola per sostituire (o almeno affiancare) un'attività ben più classica e tradizionale, a cui tutti noi siamo abituati, ma che ultimamente abbiamo visto quasi completamente sparire dalla scena: l'enigmistica

Programmazione vs Enigmistica

Riflettiamo un po' su che cos'era l'enigmistica quando era ancora mainstream. Se penso a me stesso, da utente quasi esclusivamente estivo, il mio rapporto con questa materia era: 

Giornata al mare durante una vacanza in solitaria 

  • Sveglia abbastanza presto;

  • Arrivo in spiaggia quando ancora fa freschino;

  • Abbiocco sulla sabbia;

  • Cruciverba per la compagnia;

  • Attività varie ed eventuali;

  • Ancora cruciverba misto a sudoku, rebus e trova le differenze.

Fine. Non ci sono concretamente molte altre situazioni in cui avrei fatto ricorso all'enigmistica per ammazzare il tempo. 

Oggi con i nostri telefoni sempre a portata di mano, pronti a metterci in contatto con il mondo o a intrattenerci con centinaia di giochini (tra cui magari anche qualcosa che all'enigmistica ci si avvicina), è diventato più impegnativo anche solo recuperare la rivista giusta in edicola e rimediare anche una penna da tenere in borsa. 

Se ti riconosci nella mia ricostruzione, potresti prendere in considerazione di ritrovare nella programmazione quegli stessi elementi di stimolo mentale, analitico, nozionistico e creativo che personalmente trovavo nelle riviste dedicate a cruciverba e altri giochi. Mi sono divertito a cercare alcune similitudini tra le tante attività che ruotano intorno alla scrittura di un software e alcuni noti giochi enigmistici. 

Facciamoci insieme questo viaggione mentale

Algoritmi vs Sudoku

Quando programmiamo possiamo approcciare gli algoritmi come il sudoku

  • abbiamo una struttura rigorosa nella quale possiamo muoverci;

  • abbiamo in mente poche regole sempre uguali che devono essere rispettate per risolvere un problema;

  • vanno evitati conflitti e sovrapposizioni;

  • i nostri dati di partenza sono dei vincoli nel contesto.

Ovviamente, quando programmiamo abbiamo molta più libertà. Ma se escludiamo la forma e ci concentriamo sul flusso, otteniamo due esercizi molto simili; abbiamo un contesto iniziale e sappiamo esattamente qual è il criterio che ci porterà alla soluzione finale; noi dobbiamo scrivere tutto quello che c'è in mezzo, facendo in modo che alla fine tutte le regole risultino rispettate. 

In qualche modo, le nostre regole possono essere considerate come dei test per il nostro algoritmo: lo scriviamo e poi il risultato viene esaminato rispetto alla sua conformità con le regole del sudoku, o con quelle di ciò che dobbiamo programmare. Gli algoritmi sono un ottimo esercizio mentale, ci aiutano a tradurre in modo rigoroso i passaggi che risolvono un problema, sono ottimi per ingannare il tempo e abbiamo sicuramente molta libertà nell'inventarceli. Il punto è che non devono essere utili, in questa veste sono solo esercizi mentali. 

Esempi di algoritmo 

  • In un insieme di numeri, individuare il massimo/minimo/medio/etc…;

  • Stabilire se una sequenza è palindroma;

  • Ordinare sequenze di numeri/stringhe/etc… in base ai più disparati criteri;

  • Verificare che un dato sia conforme a una serie di requisiti;

  • Eccetera eccetera.

Il tutto limitando l'uso della sintassi ai costrutti più semplici, altrimenti non vale. 

Certo, non possiamo sempre portarci dietro (magari in spiaggia, sotto il sole) un ambiente di sviluppo, ma per sviluppare un algoritmo può essere sufficiente disegnare un diagramma di flusso con carta e penna, oppure, cosa che a me piace molto, programmare utilizzando uno pseudolinguaggio

Che cos'è uno pseudolinguaggio (o pseudocodice) 

Uno pseudolinguaggio è esattamente ciò che sembra: un modo "verbale" per esprimere un flusso senza ricorrere a notazioni grafiche (parallelepipedi, rombi, etc…), ma semplicemente usando un linguaggio sintetico e rigoroso anche se non ufficiale e quindi libero dai vincoli sintattici specifici di un preciso linguaggio di programmazione. 

Progettazione vs Cruciverba 

La progettazione e pianificazione di un lavoro mi ricordano molto il completamento di un cruciverba: 

  • abbiamo un contesto iniziale che presenta alcuni vincoli e nessuna informazione intrinseca su come essere completato;

  • esternamente al nostro contesto abbiamo una moltitudine di informazioni che ci aiutano a completare il nostro lavoro;

  • le informazioni non sono fornite direttamente, ma richiedono una conoscenza nozionistica per essere tradotte in una soluzione;

  • non c'è alcun modo diretto di valutare la bontà delle informazioni utilizzate, ma il fatto che alla fine il quadro torni ci dà confidenza che sia tutto ok.

La similitudine che mi affascina di più è l'ultima. Quando progettiamo un lavoro, sappiamo benissimo che tutte le nostre previsioni sono stimate, parziali, soggette a errori e incertezze; ma risolvendo i conflitti tra le diverse entità del progetto ci si avvicina progressivamente a un piano convincente, nel senso che ogni attività risulta completare e confermare il quadro in cui si inseriscono le altre attività. 

Il bello dei compiti di questo tipo è che in qualche modo ci costringono a mettere da parte un atteggiamento mentale sequenziale (prima questo poi questo poi questo poi questo), in favore di un atteggiamento più esplorativo e basato sul tentativo (questo è così son sicuro, vediamo cosa ci sta vicino; qui ho un sacco di informazioni, questo dovrebbe rendere più facile capire cosa c'è nelle vicinanze). 

Altra cosa importante è che in questo tipo di attività, le nozioni sono all'esterno del problema; pertanto o le abbiamo già in mente, oppure dobbiamo andarle a cercare. Altrimenti il quadro non si completa. Quando progettiamo qualcosa, dobbiamo fare molta attenzione alle definizioni che non riusciamo ad usare per completare il quadro: sappiamo che prima o poi dovremo risolvere quei semplici indizi, concretizzandoli in informazioni spendibili, però sappiamo anche che possiamo proseguire con la pianificazione e magari usare le informazioni adiacenti per rendere più facile convalidare le nuove informazioni, quelle di cui non siamo sicuri. 

Debugging vs Rebus 

Arriva una segnalazione e dobbiamo risolvere un baco. Conosciamo abbastanza bene il codice e, se siamo fortunati, ci è stata fornita una precisa descrizione di come riprodurre la problematica. Così mettiamo insieme le informazioni in nostro possesso e iniziamo a esplorare diverse possibilità, sapendo che la soluzione dal problema non è (nella maggior parte dei casi) un qualcosa che creeremo implementando qualcosa di nuovo, ma un qualcosa che sarà immediatamente evidente una volta che avremo individuato con esattezza l'origine del problema. 

È un rebus! Si tratta di un'attività in cui la mente non deve cercare né produrre nuove informazioni, ma semplicemente trovare la giusta interpretazione per le informazioni già disponibili. Una volta chiara l'interpretazione, la soluzione emerge spontaneamente. 

Una nota interessante sul fronte delle interpretazioni: molto spesso il nostro pensiero va subito alle interpretazioni più comuni, più general purpose, mentre invece lo scopo di chi ha creato il rebus (o il codice bacato) era molto preciso, ed è proprio in quel disallineamento tra l'aspettativa più semplice e la precisa intenzione contestualizzata che risiede spesso la soluzione. 

Git vs Trova le differenze 

Qui non servirebbe scrivere niente. Dai, è palese: è la stessa cosa. Se ti piace il trova le differenze, puoi tranquillamente essere la persona giusta per risolvere tutti i conflitti di merge su Git. 

Che cos'è Git? Che cos'è conflitti di merge

Se sei corso a leggere qui, hai bisogno di una spiegazione, altrimenti non capirai la mia bellissima similitudine tra Git e trova le differenze. 

Git è uno strumento per versionare il software, cioè un programmino con cui è possibile tenere traccia di tutte le modifiche subite da un sorgente. Tali modifiche possono essere sequenziali (una dopo l'altra) oppure anche diramarsi in rami paralleli. Questo significa che tramite Git è possibile mantenere due diverse versioni concorrenti dello stesso software; se poi si decide di unire due versioni concorrenti (l'operazione si chiama merge), possono emergere dei conflitti, cioè modifiche al codice effettuate sui diversi rami di sviluppo, tra le quali Git non può sapere quali siano da tenere e quali da scartare. Tali conflitti vanno risolti da un essere umano. 

Per questo dico che se hai occhio nel guardare due cose molto simili e nel capire subito cosa cambia tra le due, probabilmente non farai fatica a capire quello che Git non è riuscito a capire. Anche perché Git non conosce il senso del progetto, e soprattutto non può chiedere aiuto ai colleghi che hanno lavorato sui due rami in conflitto

Squadra di sviluppo vs Cruciverba di gruppo (Avanzato) 

Classico pomeriggio in spiaggia, o fermi svaccati in una sudatissima radura in alta quota. Qualcuno propone cruciverba di gruppo. Lasciando che ciascuno stabilisca se questa sia una buona o una cattiva proposta, la realtà dei fatti è che molto spesso un team di sviluppo funziona un po' come un insieme di persone che fanno insieme un cruciverba. Il quadro lo si compone insieme, generalmente il ruolo del caposquadra (o team leader, come va di moda adesso) è quello di mantenere sempre chiaro il quadro della situazione, visualizzare gli obiettivi, tenere a mente gli ostacoli. Dopodiché ognuno contribuisce mettendo tutte le sue conoscenze al servizio dell'obiettivo. 

Le dinamiche sono pure le stesse: bisogna fare il possibile per mantenere l'ordine, pur sapendo che la stessa foga che è nemica di quell'ordine, è in realtà un requisito motivazionale imprescindibile per mantenere tutti concentrati e parallelamente impegnati verso l'obiettivo. Qui il ruolo mediatore del capo è fondamentale: questi deve ascoltare tutti, scrivere rapidamente, sintetizzare le proposte su come procedere, tentare di concludere un'intera area se possibile, in modo da poter concentrare il focus su un'area minore. 

Programmazione == Brain training 

Non solo quindi il coding, ma tutte le fasi dello sviluppo di un progetto software contribuiscono a un potente allentamento mentale; nelle diverse fasi avremo l'opportunità di mettere alla prova creatività, problem solving, rigore logico e matematico, conoscenza dei linguaggi, esperienza derivata dai progetti già compiuti. 

Un toccasana per il pensiero e la memoria, ma anche per la creatività e la curiosità. 
L'allenamento perfetto per una bellissima sinergia tra emisferi. 

Articoli correlati

Il linguaggio HTML (Hypertext Markup Language) è uno dei più conosciuti e diffusi: lo si trova infatti praticamente in tutte le pagine web esistenti. È una scelta popolare tra i principianti che si…

Seguici su Facebook

Vuoi entrare nel mondo della programmazione?

Scopri di più sui nostri corsi!

Chiamaci al numero verde

Contattaci su WhatsApp

Contattaci senza impegno per informazioni sul corso

Pagamento rateale

Valore della rata: A PARTIRE DA 115 €/mese.

Esempio di finanziamento 

Importo finanziato: € 2440 in 24 rate da € 115 – TAN fisso 9,55% TAEG 12,57% – importo totale del credito € 2841.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

*In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 210 €/mese.

Esempio di finanziamento  

Importo finanziato: € 4500 in 24 rate da € 210,03 – TAN fisso 9,68% TAEG 11,97% – importo totale del credito € 5146,55.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.