Ehi, ma io non sono un programmatore!
Un momento, un momento! Questo è comunque un articolo sul benessere personale! Questo articolo c’entra poco con l’informatica. Non è un prontuario per creare da casa l’app che ti renderà miliardario. Non è nemmeno un manuale di consigli per inesperti o principianti (no, non puoi contare su questo articolo per realizzare finalmente il tuo progetto no code).
Questo è comunque un articolo sul benessere personale. E in particolar modo sul mindset.
Come sai - sia dai nostri scritti che dai nostri libri e audiolibri - noi promuoviamo un approccio scientifico alla vita. Riteniamo che ogni momento di sfida e crescita che la vita ci pone davanti possa essere vissuto meglio se si ha un approccio razionale e sistematico. Questo anche quando si tratta di prendere decisioni o risolvere problemi, ricordi? Tutto parte sempre dal saper quantificare (un problema o un goal), dal saper creare uno scheduling per arrivare dove voglio arrivare, e dal sapermi anche adattare qualora i piani cambiassero o si presentassero anomalie.
Ecco perché un programmatore è, secondo noi, proprio l’esempio perfetto di un mindset giusto da trasmettere!
Perché il programmatore è colui che visualizza un obiettivo, si fa il mazzo per apprendere una tecnica, si butta nel duro lavoro preparandosi agli imprevisti. Uno che attiva il problem solving quando serve. Programmatore è colui che sa che prima di fare lo step iniziale serve studiare parecchio. Il programmatore è un ricercatore, ed è curioso per natura. Il programmatore sa anche che la perfezione forse non arriverà mai, ma che in fondo è bello anche sbagliare, apprendere ed evolversi.
Certo, queste cose valgono anche per un pianista o un artista marziale. E non è detto che in futuro non scriveremo un articolo tipo “Pensa come Bruce Lee” (sarebbe fantastico).
Ma oggi ti portiamo nella mente di un programmatore per spiegarti non come affrontare Css o Javascript. Ma per spiegarti un mindset appropriato per affrontare la vita stessa.
Il pensiero computazionale
La mente di un programmatore ha diverse qualità e capacità. Fra queste: l’estrema logica, il problem solving e l’ottimizzazione delle soluzioni.
Ma un’altra grande tendenza che è propria di un programmatore è il pensiero computazionale.
Si intende con pensiero computazionale quell’approccio mentale che rende l’essere umano più efficiente nella risoluzione dei problemi. Da esseri umani quali siamo, spesso molti fattori emotivi entrano in gioco e guastano la nostra capacità critica quando si tratta di sbrogliare una matassa.
La definizione di “pensiero computazionale” (teorizzata dapprima da Seymour Papert ma perfezionato solo nel 2006 da Jeannette Wing, direttrice del Dipartimento di informatica della Canergie Mellon University) si riferisce alla nostra capacità di gestire e processare informazioni per risolvere problemi e trovare soluzioni. Si tratta insomma di una integrazione fra pensiero umano e pensiero informatico. Il pensiero computazionale mira a rivoluzionare il nostro modo di pensare, ma anche il nostro modo di interagire con i tool che la scienza ci offre. Aiuta noi a pensare come la macchina, e la macchina a pensare come noi. Migliora la nostra velocità nel risolvere grattacapi con efficienza, e la nostra capacità nel comunicare i nostri bisogni ai tool tecnologici che devono supportarci. Ci permette di visionare un enorme casino in cui siamo piombati con mente serena e calcolatrice, trasformando suddetto “casino” in una serie di dati da elaborare, da scomporre per arrivare a toglierci dai guai.
E se pensi che tale tipo di pensiero sia poco interessante per te o che sia robaccia fantascientifica che non prenderà mai piede, sappi che si tratta invece dell’approccio mentale del futuro. È nel 2018 che la Commissione Europea ha emanato Digital Education Action Plan ristabilendo quali fossero le priorità per gli individui nell’età dell’apprendimento. Tra queste priorità vi sono le competenze computazionali e digitali. Il Plan mira a rimodellare la nostra istruzione in base all’era digitale in espansione. E ad aiutarci a pensare come programmatori. Ebbene sì, hai capito bene.
Non miriamo in un solo articolo ad aiutarti a sviluppare il pensiero computazionale. Però miriamo a raccontarti le avventure che un programmatore vive nel suo day-by-day e che coincideranno anche con le tue, di avventure, anche se fai un lavoro totalmente diverso. E ti daremo, questo sì, qualche assaggio sul pensiero computazionale soprattutto riferendoci a come scomporre il problema e trovare l’astrazione, su come confezionare una step-by-step solution. E uscire, appunto, dai casini!
Il mindset del programmatore
Ecco alcune chiavi per accedere a una mente da programmatore e che - vedrai - possono esserti utili nella quotidianità.
1 - Nessun problema è così enorme da non poter essere scomposto.
Il programmatore è colui che - nella sua pratica - si troverà di sicuro di fronte a ostacoli che sembrano insuperabili. La scienza dei computer è carogna: se non stai facendo le cose nel modo esattamente giusto, allora nulla funzionerà come deve. Ehi, ma non è forse così anche la vita? Nonostante i fuffaguru che ti propongono metodi con cui piegare gli altri e il mondo al tuo volere - e nonostante la cartolina social che quella certa zia ti manda ogni mattina dicendo che se la condividerai allora la tua giornata sarà strepitosa - nonostante tutto questo, dicevamo, la realtà non si piega al nostro volere. Siamo noi che dobbiamo seguire le regole. Già, la realtà segue regole specifiche e razionali. E quando siamo di fronte a un problema dobbiamo essere proprio razionali e semplicemente capire cosa stiamo sbagliando. O comunque - anche se non siamo noi a sbagliare - dove si trova la causa radice del grattacapo. L’approccio deve essere pragmatico. E, soprattutto, calmo. Un programmatore che spera di risolvere le cose dando pugni alla tastiera non è mai arrivato da nessuna parte. Anzi, i programmatori che hanno davvero sfondato sono quelli che hanno un approccio mentale sereno. I problemi possono capitare. Basta solo volerli affrontare.
E spesso i problemi possono essere anche giganteschi. Cosa fanno di solito i bravi programmatori? Cercano di scomporre il problema in micro-problemi o in micro-step. Ripercorrono il loro script riga per riga, con calma e metodo, per trovare la radice di tutto. Se il lavoro che devono affrontare è enorme lo scompongono. Cercano di smarcare uno step dopo l’altro. Seguono una checklist. Questo li aiuta anche a rimanere sul percorso. Ne parlammo già nel nostro articolo sulla forza di volontà. Sapere che non devi affrontare tutto e subito ma che hai dei micro-compiti da risolvere ti impedirà di mollare. Alimenterà il tuo sistema di ricompensa ogni volta che cancelli qualcosa dalla suddetta checklist. Ti farà avere meno ansia visto che non devi più affrontare un titanico boss finale, ma tanti piccoli livelli alla tua portata.
2 - La pazienza è essenziale, se vuoi la Qualità.
Un buon programmatore sa che, a codice terminato, dovrà effettuare una verifica. Anche un codice funzionante viene sottoposto a refactoring e, anche quando sembrava andare tutto bene, possono spuntare fuori errori e bug. Anzi, diciamo che spunteranno sicuramente! Il fatto che qualcosa non vada non deve snervarci. Se qualcosa non va, allora siamo di fronte a una possibilità di miglioramento. I problemi esistono proprio per dirci che possiamo ancora migliorare. La chiave per la crescita personale è proprio nel miglioramento continuo. Se io - nel momento della revisione - decido di passare a un altro progetto o ignorare gli errori o snervarmi, allora sto usando un approccio non proficuo. Se io, invece, mi butto nella revisione e cerco di risolvere i problemi e i bug, allora avrò anche imparato lezioni utili per il futuro. Chiudere gli occhi di fronte alle imperfezioni è infantilismo. Il mindset del programmatore di fronte alle sfide dell’esistenza è il mindset di un adulto che cerca di capire cosa non è andato (in qualsiasi progetto, situazione, relazione) e di risolvere o migliorarsi.
Altrettanto importante però è non sfociare nel perfezionismo. Ok migliorarsi ma senza farne una croce! Moltissimi perfezionisti, a sentirli, si ritengono persone ben organizzate e vincenti. Ma in parecchi casi il perfezionismo è qualcosa di tossico e non è un valore. E indugiare nel perfezionismo ci porta a essere inconcludenti, perché il prodotto finito non va mai bene per i nostri standard interiori. Nuovamente, tutto sta in come ti relazioni ai bug (dunque agli imprevisti, alle imperfezioni, ai problemi). I bug sono inevitabili. Ci saranno, ci saranno sempre. Lo stesso vale per imprevisti, imperfezioni e problemi. Devi solo capire come vuoi gestire ognuna di queste cose.
Per fare tutto questo ci vuole una grande apertura mentale. Sì, quando ti occupi di codici probabilmente ti troverai in situazioni snervanti e stressanti ma fa parte del tuo lavoro. E quando vivi la tua vita ti troverai in situazioni snervanti e stressanti ma è la vita. Se cedi alla frustrazione, ogni negatività la accuserai il triplo. Se riprogrammi la tua mente allora imparerai ad accettare che la vita di un adulto è fatta anche di momenti del cavolo dove bisogna rimettere in discussione il proprio lavoro, se stessi, le proprie certezze. Rimboccarsi le maniche e sistemare quel che non va.
3 - Non dimenticare mai perché lo stai facendo
Un programmatore passa per processi di apprendimento continui e terribilmente noiosi. Spesso la loro materia - pur se appassionante per loro - può essere davvero davvero faticosa. E spesso il periodo di praticantato sembra non finire mai. Un principiante che scrive le sue prime righe di codice da solo può sentirsi arrivato, ma arriva ben presto il conto. Il conto di una formattazione raffazzonata, di banali errori di maiuscole e minuscole che ti portano a ridiscutere tutta la tua vita (”ma perché lo sto facendo?!”). Lo stesso accade a ognuno di noi anche se non è attaccato a un computer. Sostituiamo i libroni sui linguaggi di programmazione con la nostra scheda di allenamento in palestra, la scheda del nutrizionista per la nostra dieta. Il manuale per imparare le tecniche di falegnameria, ora che abbiamo deciso di sviluppare la manualità. Le guide alla burocrazia per fare ristorazione in Italia, ora che ci siamo decisi ad aprire un locale. Arriveranno momenti in cui il monte di cose da apprendere sembrerà terrificante. E arriveranno prove pratiche che ci faranno sentire junior anche se pensavamo di aver ormai appreso tutto quel che ci serviva. Il punto è ricordarsi perché stiamo facendo qualcosa. Qual è il nostro proposito? Dove vogliamo arrivare? Un programmatore di successo è colui che ha sempre in mente il proprio scopo. Che può essere arrivare alla fine del lavoro con qualità. O può essere - più in grande - realizzare il sogno che egli ebbe da bambino quando i genitori gli comprarono il primo computer. Ci deve essere sempre una voce interiore che persista nel sussurrarci perché lo stiamo facendo. La nostra motivazione, magari, o il nostro Ikigai, per citare i concetti di altri articoli.
Ricorda inoltre che arriverà un punto in cui - proprio come un programmatore - dovrai abbandonare la teoria e imparare a cavartela da solo. La sola teoria non basta.
Ma perché le cose funzionino quando agiamo, c’è un altro trucchetto da programmatore che non dobbiamo scordare. Il principio GIGO! No, nulla di esoterico o astruso. Si tratta del motto Garbage In, Garbage Out! In ogni sistema la qualità dell’output è determinata dall’input. L’esempio più classico che viene fatto è quello dell’equazione che viene scritta male e dunque avrà una risposta scorretta. Garbage In, Garbage Out è però un principio valido non solo di fronte a un quaderno di matematica. Ma nella tua vita, sempre. La qualità di quello che produci dipende dalla qualità di quello che immagazzini. La qualità di qualcosa che viene fuori da te difficilmente sarà più elevata delle tue basi di partenza. Prendiamo ad esempio il tuo benessere personale, ok? Ogni percorso di benessere parte dallo studio. Lo studio di discipline, teorie, tecniche per evolversi. Se ci cibiamo di informazioni-spazzatura, allora anche i nostri approcci al mondo, i nostri modelli mentali e la nostra forma mentis saranno “spazzatura”. Per dirla ancora meglio: se mi nutro di informazioni false, superficiali, tendenziose (garbage in) allora produrrò che cosa? Bias cognitivi (garbage out)!
E in conclusione ricorda questa lezione. Una lezione che riguarda le sfide quotidiane.
Con un mindset da programmatore, le sfide quotidiane ti richiederanno due cose. La prima: di saper sviluppare soluzioni creative ai problemi. Dunque di tirare fuori il tuo talento e non solo quello che hai appreso o che ti è stato detto dal determinato insegnante di turno. La seconda: di divertirti. Te ne eri scordato? Ok, è tutto così faticoso e snervante ma, ehi, è la strada che ti sei scelto! Divertiti! Anche nel momento più incasinato, trova il motivo per riderci su. Festeggia i tuoi successi. Goditela quando sei sommerso di lavoro, perché è il lavoro che ti sei scelto. Ricorda, e siamo sinceri nel dirlo, tutto è davvero alla tua portata se sai come affrontarlo.
Questo vale se sei un programmatore.
Ma anche se sei una persona che sta lavorando su di sé per migliorare
Consiglio pratico: Fatti aiutare
Finora abbiamo dipinto l’immagine di un programmatore che suda freddo battendo i tasti e osservando un doppio o triplo schermo. E abbiamo paragonato tale immagine a te in qualsiasi momento sfidante della tua vita. Ma c’è una cosa che vale sia per te che per il nostro eroico programmatore. Non sei da solo.
Nessuno lavora da solo. Nessuno deve farlo. I programmatori di successo sono quelli che riescono ad apprendere dagli altri. Per nulla vittima della trappola dell’ego, se hanno un problema sono anche aperti a discuterlo con qualcuno. Sanno che “chiedere aiuto” non vuol dire “ho fallito, non ce l’ho fatta da solo”. I programmatori imparano continuamente (dai colleghi, dai compagni di corso, dalle community) condividendo i loro problemi.
Anzi, approfondiamo il tema nella maniera seguente: un motto molto comune fra i programmatori è proprio “Non serve re-inventare la ruota!”. Se esiste già una library che svolge il compito di cui hai bisogno, cosa pensi sia meglio fare? Usare quella library o scrivere da solo una nuova soluzione? Un programmatore che si affida a library di terzi avrà magari dei rischi da calcolare, ma di sicuro avrà più tempo da dedicare ad altri aspetti e parti del progetto. Non cercare risorse o parti o prodotti che potresti ottenere più facilmente già fatte. Se esistono già altrove, sperare di inventarle ex novo è davvero uno spreco di tempo.
Questo vale anche nella vita. Se vi sono soluzioni che sono già state create, testate e ottimizzate, perché ignorarle? Il rischio di fare da noi è quello di creare qualcosa di così basico che potrebbe funzionare male. Cerca sempre risorse e aiuti intorno a te! I programmatori lo fanno!
I programmatori sanno anche che - se arrivano al momento in cui il cervello fuma e le speranze sono perse - è bene chiedere assistenza. Se hai fatto davvero del tuo meglio nel tuo lavoro, allora devi solo essere fiero.
Ribadiamolo: chiedere aiuto non equivale a essere dei perdenti. Anzi, vuol dire essere individui maturi. Capaci di aprirsi a occasioni di confronto, e dunque imparare. E vuol dire evitare l’esaurimento nervoso.
Prima abbiamo parlato di infantilismo. Ebbene, è infantile avere la presunzione di aver appreso tutto quel che serviva e di voler fare tutto da soli. Nella vita non si finisce mai di apprendere, e nessuno di noi è self-sufficient. Grazie al cielo! Anche se il pensiero computazionale ci invita a pensare come macchine, non vuol dire che siamo freddi automi! Siamo esseri umani, e la cooperazione è un valore. Ed è un valore lo scambio. A volte basta solo fare la chiacchierata giusta in pausa caffè per ricevere quel consiglio (o quella pacca sulla spalla) che ci riporterà in binario.
Dunque ricorda: non sei solo. Non sentirti solo. Non fare le cose da solo.
Fatti aiutare, e aiuta. Solo così non smetterai mai di crescere.