Fork me on GitHub
con Valerio Galano

Il podcast dove si ragiona da informatici

Un informatico risolve problemi, a volte anche usando il computer

Riflessioni e idee dal mondo del software

Episodio del podcast

Perché tutti dovremmo imparare a programmare?

20 febbraio 2019 Podcast Episodio 1 Stagione 1
Perché tutti dovremmo imparare a programmare?

Descrizione

“Tutti in questo Paese dovrebbero imparare a programmare un computer, dovrebbero impara un linguaggio di programmazione perché ciò insegna a pensare” - Steve Jobs

Le abilità richieste ad un buon programmatore possono essere impiegate per migliorare un po’ la vita di tutti i giorni. Proviamo a vedere insieme qualche consiglio pratico.

Fonti:
Think Like a Programmer: An Introduction to Creative Problem Solving - https://amzn.to/3sJekyI
https://medium.com/@mich.murabito/il-duro-lavoro-dello-sviluppatore-34bf3a1668f6
https://medium.freecodecamp.org/how-to-think-like-a-programmer-lessons-in-problem-solving-d1d8bf1de7d2
https://youtu.be/IY7EsTnUSxY

Attrezzature:
Microfono Blue Yeti* - https://amzn.to/3kSE35f
Filtro anti-pop* - https://amzn.to/3baPMsh
Filtro anti-pop* - https://amzn.to/2MH0Wf1
Schermo fonoassorbente* - https://amzn.to/3sOZE0P

  • Il costo di acquisto non sarà maggiore per te, ma Amazon mi girerà una piccola parte del ricavato.

Sostieni il progetto

Sostieni tramite Satispay
Sostieni tramite Revolut
Sostieni tramite PayPal
Sostieni utilizzando i link affiliati di Pensieri in codice: Amazon, Todoist, Readwise Reader, Satispay

Partner

GrUSP (Codice sconto per tutti gli eventi: community_PIC)
Schrödinger Hat

Crediti

Montaggio - Daniele Galano - https://www.instagram.com/daniele_galano/
Voce intro - Costanza Martina Vitale
Musica - Kubbi - Up In My Jam
Musica - Light-foot - Moldy Lotion
Cover e trascrizione - Francesco Zubani

Mostra testo dell'episodio

Nascondi

Quella che segue è una trascrizione automatica dell'episodio.

Pensieri in codice, idee dal mondo del software a cura di Valerio Galano Salve a tutti ragazzi e benvenuti a questo primo episodio di Pensieri in codice, il podcast nel quale vorrei chiacchierare con voi di argomenti presi dal mondo del software, di internet e della programmazione Questo piccolo progetto vuole essere per me uno scambio di idee, quindi sono bene accetti commenti, sia positivi che negativi e anche consigli sull’utilizzo di questo splendido mezzo che è il podcast e che per me è un territorio quasi inesplorato Spero dunque di riuscire a darvi degli spunti di riflessione sui quali poi poter discutere assieme Ora però basta con le presentazioni e passiamo a parlare del nostro primo argomento che come avrete capito dal titolo riguarda la programmazione Penso che tutti in questo paese dovrebbero imparare a programmare un computer, dovrebbero imparare una lingua del computer perché ti insegna come pensare dovrebbero imparare un linguaggio di programmazione perché ciò insegna a pensare Per capire le parole di Jobs dobbiamo tenere a mente un fatto importante e cioè che imparare a programmare un computer o volendo dirla in termini più moderni, imparare a sviluppare un software non è un’attività che richiede unicamente la conoscenza di uno o più linguaggi di programmazione né consiste unicamente nello scrivere codice che non abbia errori di sintassi o che si compili e si esegua correttamente in realtà sviluppare software vuol dire principalmente essere in grado di risolvere problemi Ad un buon programmatore infatti non è unicamente richiesta la mera conoscenza di uno o più linguaggi di programmazione quanto piuttosto una specifica abilità definita problem solving Problem Solving Proviamo a descrivere il concetto di problem solving utilizzando un esempio immaginiamo quindi di avere un oggetto che potrebbe essere un cimelio di famiglia come ad esempio un vecchio orologio al quale siamo magari per qualche motivo particolarmente affezionati un giorno di punto in bianco questo nostro orologio smette di funzionare a quel punto avremo un problema e banalmente questo problema sarà poter sapere l’ora ovviamente ora voi starete pensando che questo è un problema di poco conto basterà semplicemente sostituire il nostro orologio con uno qualsiasi anche comprato all’IKEA Bene, dal punto di vista teorico questa è sì una soluzione al nostro problema ma dal punto di vista del problem solving essa non tiene conto di una cosa fondamentale detta all’inizio e cioè che noi siamo particolarmente affezionati a quell’orologio e non vorremmo sostituirlo per nessun motivo al mondo questa condizione dunque viene a rappresentare per noi un vincolo sul problema iniziale che rende non valida la soluzione di sostituire l’orologio riparare il nostro orologio sarà una soluzione che risolve il problema e contemporaneamente ne rispetta il vincolo per problem solving si intende quindi quell’attività del pensiero volta ad individuare la soluzione di un problema rispettandone i vincoli in particolare nel caso della programmazione tale soluzione sarà espressa come un insieme finito di operazioni con determinate caratteristiche che andranno poi a formare un algoritmo tale algoritmo potrà poi essere trasformato in un vero e proprio software per un programmatore è quindi imprescindibile conoscere e affinare questo tipo di tecnica ma anche per chi si occupa di tutt’altro conoscerne le tecniche base può risultare molto utile e interessante nel libro Think Like a Programmer di cui vi lascio un link in descrizione piccola parentesi vi avviso che se acquisterete i libri o i prodotti che vi segnalo dai link ad Amazon che trovate nella descrizione voi non pagherete una quota aggiuntiva ma parte del ricavato invece di andare ad Amazon verrà trasferito al mio account ed io potrò utilizzare questi fondi per migliorare e portare avanti questo progetto come vi dicevo appunto nel libro Think Like a Programmer Sproul individua tutta una serie di tecniche che possono essere utilizzate per affinare le proprie capacità di problem solving in particolare egli menziona 8 tecniche di base tra le quali io ne ho selezionate 3 che ora vi andrò a illustrare tecnica numero 1 munirsi di un buon piano nel nostro percorso verso la risoluzione di un problema sarà sempre buona norma spendere un po’ di tempo per redigere un buon piano un insieme di passi che se completati tutti e nel giusto ordine ci porteranno automaticamente alla soluzione del problema se infatti affronteremo il nostro problema sprovvissi di un buon piano probabilmente ci troveremo in difficoltà nel momento in cui sarà necessario misurare i progressi o pianificare le risorse e i tempi se invece avremo il nostro piano da seguire sarà molto più facile per noi pianificare le attività, controllare lo stato di avanzamento dei lavori e sapere in ogni momento quanto siamo lontani dal nostro obiettivo immaginiamo ad esempio di dover redigere una tesina per un esame e di avere 15 giorni di tempo per consegnarla un buon piano potrebbe essere il seguente primo giorno scegliere gli argomenti da inserire nella tesi successivi tre giorni studiare gli argomenti selezionati e raccogliere le informazioni necessarie ancora altri tre giorni per scrivere una prima bozza due giorni poi per rivedere e correggere la bozza appena scritta un ulteriore giorno per redigere la versione definitiva della tesina in questo modo ci avanzerebbero ben cinque giorni da impiegare in caso di imprevisti o errori di valutazione il nostro obiettivo non sarebbe quello genericamente di dover redigere una tesina bensì giorno per giorno avremo un singolo e più gestibile obiettivo potremo inoltre verificare i nostri progressi se siamo in anticipo o in ritardo sulla tabella di marcia ed eventualmente correggere il nostro piano ovviamente infatti dobbiamo essere consci del fatto che il nostro piano per quanto dettagliato e preciso una volta a contatto con la realtà potrebbe subire tutta una serie di modifiche ma fintanto che conserveremo il controllo sulla nostra pianificazione questo per noi non sarà un problema in ogni caso però approcciarsi alla risoluzione di un problema senza avere alle spalle un piano ben definito equivarrà praticamente ad affidarsi alla fortuna tecnica numero 2 riformulare il problema così come quando si intraprende un viaggio è buona norma esaminare tutte le strade disponibili per poter scegliere quella più adatta alle nostre esigenze magari quella più breve o quella panoramica o semplicemente quella che ci piace di più allo stesso modo quando si affronta un problema è bene riformularlo in vari modi analizzare infatti lo stesso problema da più angolazioni potrebbe mettere in evidenza collegamenti e informazioni poco chiare o nascoste riformulare quindi il problema ci permetterà di plasmarlo nella forma più adatta ad essere risolta proviamo a chiarire il concetto riformulando il rompicapo del piano e quindi la risoluzione del problema per chi non lo conoscesse in questo rompicapo c’è un contadino che si trova sulla riva di un fiume con appunto un lupo una pecora ed un cavolo il problema del nostro contadino è portare sulla seconda riva del fiume i tre oggetti ma per farlo egli dispone solamente di una barca che può trasportare un unico oggetto e quindi non ha bisogno di altri oggetti ma per farlo egli dispone solamente di una barca che può trasportare un unico oggetto per volta oltre a ciò il contadino sa che non potrà lasciare su una delle due rive del fiume la coppia formata da pecora e lupo perché quest’ultimo mangerà la prima o cavolo e pecora sempre perché l’ovino mangerà l’ortaggio in questa che è la formulazione classica del problema abbiamo dunque tre vincoli il primo è che il contadino possa portare un solo oggetto per volta gli altri due sono rappresentati dal fatto che esistono specifiche coppie quindi pecora lupo e pecora cavolo che non possono essere lasciati da soli sulla stessa riva ora so che molti di voi già conosceranno la soluzione al rompicapo o saranno comunque in grado di trovarla in poco tempo facilmente ma quello che interessa a noi è il processo di riformulazione del problema quindi proviamo a ragionare insieme innanzitutto esaminiamo i vincoli sugli oggetti che il contadino deve trasportare il problema ci dice esplicitamente quali non possono essere lasciati insieme tuttavia a partire da queste informazioni se ne può dedurre una terza e cioè che esiste una particolare coppia che può essere lasciata senza sorveglianza da sola su una riva del fiume e cioè la coppia cavolo lupo questa informazione pur non aggiungendo o togliendo nulla alla formulazione del nostro problema risulta però più utilizzabile rispetto alle altre e dopo andremo a vedere perché nel frattempo notiamo anche che benché ci venga detto che la barca del nostro contadino non può trasportare più di un oggetto per volta nessuno vieta che egli possa portare avanti e indietro lo stesso oggetto più di una volta e anche questa è un’informazione non menzionata esplicitamente ma fondamentale ai fini della risoluzione grazie a queste due informazioni che abbiamo scoperto infatti per il nostro contadino sarà tutto molto più semplice innanzitutto egli potrà decidere immediatamente qual è il primo animale da portare ovviamente la pecora perché sarà l’unico oggetto che se separato dal gruppo lascerà sulla riva quella che potremmo definire la coppia sicura il lupo e il cavolo detto ciò la seconda delle nostre informazioni nascoste permetterà al nostro contadino di riportare indietro la pecora nel momento in cui avrà portato il secondo animale sulla seconda riva in questo modo potrà comunque evitare di lasciare due animali incompatibili sulla stessa riva a questo punto la soluzione sarà molto semplice per risolvere il rompicapo basterà portare prima la pecora sulla seconda riva tornare indietro e prendere ad esempio il lupo portarlo sulla seconda riva riprendere la pecora in modo che il lupo non la mangi riportarla sulla prima riva a quel punto prendere il cavolo portarlo sulla seconda riva e tornare finalmente a riprendere la pecora tecnica numero 3 suddividere il problema questa tecnica si basa su di un concetto molto semplice se riesco a prendere il mio problema e suddividerlo in due problemi più semplici potrò allora risolvere singolarmente i due problemi e unire le loro soluzioni per giungere alla soluzione del problema iniziale applicando questa tecnica in modo iterativo è quindi possibile suddividere il problema in tanti problemi a mano a mano sempre più semplici fino ad ottenere una serie di problemi sufficientemente semplici da essere risolti in modo agevole a quel punto ricombinando insieme tutte le soluzioni di questi problemi sarà possibile ottenere la soluzione del problema di partenza immaginiamo ad esempio di dover calcolare l’area di un quadrato di cui conosciamo solamente il perimetro certamente potremmo trovare una formula per calcolare direttamente questo valore tuttavia possiamo suddividere il nostro problema in due più semplici il primo che a partire dal perimetro calcoli il lato e il secondo che a partire dal lato calcoli l’area a questo punto risolvendo i due problemi avremo risolto il nostro problema di partenza siamo dunque giunti al termine del primo episodio di pensieri in codice io vi ringrazio tantissimo per essere arrivati fin qui so che questo episodio è venuto un po’ lungo e vi prometto che i prossimi saranno più brevi quindi rapidamente vi invito a lasciarmi la vostra opinione nei commenti e vi do appuntamento alla prossima

Nascondi