Mi occupo di sviluppo web dal ’99 e nella mia carriera ho insegnato in vari ambiti formativi.
Partendo da corsi finanziati dalla regione Piemonte, passando per lo IED e corsi pre universitari e negli ultimi 5 anni per uno dei principali Boot Camp italiani.
Nelle varie classi che ho tenuto il background di provenienza dei vari studenti era piuttosto eterogeneo.
Altrettanto eterogenea era anche la predisposizione dei ragazzi.
Di conseguenza c’è chi ha trovato meno difficoltà ad assimilare gli argomenti e chi ne ha avuta di più.
Quello che però ho notato in queste esperienze è che le problematiche principali non erano sempre legate semplicemente a mancanze di pregresse conoscenze o attitudini tecniche.
Spesso invece erano legate maggiormente a difficoltà su come navigare tra tutte le informazioni ricevute.
Capire in sostanza come gestirle nel miglior modo possibile per non farsi sopraffare e riuscire quindi ad ottimizzare al meglio l’apprendimento.
Ecco quindi quello che credo di aver individuato fin ‘ora come piccoli hacks utili da sapere quando si intraprende un corso del genere.
Per farsi sorprendere il meno possibile, cioè per cercare di avere la giusta prospettiva su ciò che ha più senso focalizzarsi.
Inoltre credo possano essere spunti che rimangono utili anche quando si sta già lavorando, soprattutto ad inizio carriera.
Ecco i punti, che dividerò in due macro categorie:
COME INTERFACCIARTI IN MODO EFFICACE NELL’APPRENDIMENTO:
Non pretendere di portarti a casa il 100% di ciò che stai cercando di imparare.
Per quanto ti possa appassionare l’argomento, le cose da sapere sono tantissime.
Più andrai avanti e più te ne accorgerai.
Non si tratta di svolgere un compito o apprendere qualcosa di finito, é troppo ampia la gamma di ciò che si può sapere.
Qui inizi un percorso che non avrà mai una fine definita.
Va da se quindi che qualcosa entrerà prima e altro no, ma non avere fretta.
Non perderti nell’oceano di argomenti e cerca di rimanere nel livello di complessità proposto.
In quanto argomenti complessi e molto articolati è un attimo partire da una problematica e perderti nelle sue tante possibili diramazioni e livelli di complessità.
Se stai seguendo un corso, c’è un percorso che è stato studiato e creato per questo motivo.
In questo devi affidarti ai tuoi insegnanti ed avere pazienza.
Vedrai che pian piano che ampli la tua esplorazione di questo mondo, anche questo aspetto diventerà chiaro.
Non preoccuparti troppo se ci sono periodi in cui farai molta confusione e ti sembrerà di non capire più nulla.
E’ normale di fronte a tante informazioni e su un argomento molto tecnico.
Molte cose arriveranno anche in un secondo momento, non per forza in quello specifico in cui le stai vedendo per la prima volta.
Non hai bisogno di un controllo del 100% di ciò che ti è stato spiegato per provare a metterlo in pratica.
Gli esercizi servono anche a far emergere questo.
Quando svolgi le esercitazioni per mettere in pratica ciò che stai imparando, non farti prendere dall’ansia.
Perlomeno non cercare di risolvere il compito nel più breve tempo possibile, ma cerca di capire quello che stai facendo.
E’ molto più importante che tu capisca ciò che stai applicando e in caso emerga ciò che dalla semplice teoria non hai compreso, che non che tu completi tutto l’esercizio ma senza aver imparato e solidificato le conoscenze in questione.
Le esercitazioni sono momenti didattici, non esami.
Non sono gli insegnati che stanno testando te, ma tu che stai testando la tua comprensione degli argomenti visti.
Non stai seguendo il corso per imparare un linguaggio di programmazione o un framework in particolare.
Da un certo punto di vista questo contraddice un pò quello che molti corsi sembrano pubblicizzare.
In realtà molto spesso, soprattutto nei Boot Camp dove si parte da zero, il focus è incentrato su entrare mentalmente nella logica della programmazione in se, non tanto imparare del tutto un linguaggio o Stack particolare.
[Con Stack si intende l’insieme di linguaggi di programmazione, librerie, framework e strumenti vari, scelti per un progetto.]
Certo il linguaggio è importante e le varie esercitazioni ti porteranno ad usarlo. Ma non è detto che continuerai da usare quello Stack visto nel corso, anche successivamente.
Quindi se cerchi di far tua più la logica che si porta dietro ciò che stai usando in quel dato momento, focalizzandoti più sulla logica applicata ad un problema (a prescindere che poi sia in quel contesto, con uso di quel linguaggio specifico) hai portato a casa qualcosa di più utile.
Il linguaggio potrà poi cambiare, ma le logiche sono simili o contigue e anche dovessero divergere maggiormente, avrai una base di partenza più solida dalla quale partire.
Il focus è principalmente imparare il pensiero logico e analitico, e la sua applicazione per risolvere problemi pratici in ambito digitale.
Quindi appunto in respiro più ampio, un modo di affrontare problemi, capendo come scomporli in sotto problemi sempre più banali.
Questo senza poi perdere di vista il punto di vista globale che poi ti poterà a collegare e comporre queste risoluzioni di micro problemi a servizio di livelli di complessità più alti, cioè problemi più articolati.
Che se vogliamo è un pò una definizione di algoritmo già di per se.
Non c’è “IL” modo giusto per risolvere le cose.
Questa è una delle questioni più ricorrenti durante i corsi. Domande ricorrenti sul quale sia IL modo giusto di affrontare un problema specifico.
Da qui in genere nasce l’unica risposta possibile a tutte queste domande, ovvero: “dipende”.
A seconda del contesto, del linguaggio usato, dello Stack utilizzato etc., certo che si può restringere il ventaglio di opzioni applicabili ad un dato problema.
Ma rimane il fatto che non ci sarà mai un unico modo di risolvere un problema.
Ci saranno quasi sempre più modi egualmente efficaci per la situazione.
Fare domande è la miglior cosa che puoi fare.
Ogni persona ha le sue caratteristiche e c’è chi per natura è più timido o introverso e quindi tende a perdersi un pò nello sfondo ed interagire poco.
Quello del corso è un ambiente protetto, dove si ha tutti lo stesso target. Ovvero quello di imparare il più possibile.
Quindi mettiti un pò più in gioco e trova la tua voce.
Questo non solo ti permetterà di imparare molto di più. Ma darà modo, a te di allenare anche una delle cosiddette “soft skill”, che tanto soft non definirei, che è quella della comunicazione, che vedrai ti sarà essenziale nel mondo del lavoro. Inoltre darà modo ai tuoi insegnati di poter essere più efficaci nel poter intercettare i vari modi di apprendere e le mappe mentali diverse presenti nella classe.
Non paragonarti agli altri continuamente.
Ognuno ha i suoi punti forti e le sue debolezze.
Vedrai anche dopo vari anni di esperienza questo sarà sempre vero.
Inoltre ognuno ha anche tempi diversi di apprendimento. non è detto che chi riesce a far propri determinati concetti più velocemente possa raggiungere livelli più alti. Spesso non c’è molta correlazione tra tempi di apprendimento e livello raggiunto, soprattutto quando si parte da zero.
Lo sviluppatore più veloce non è il più bravo.
Lo sviluppo software non è una gara di velocità.
Quello a cui devi puntare è la consistenza e la solidità.
Anche perché entrando nel mondo del lavoro avrai spesso pressioni per l’approccio contrario. Da un punto di vista generale è normale, il tempo è denaro.
Ma non cadere nella trappola o ti brucerai presto e non avrai mai la possibilità di avere del codice scritto bene.
Quindi se parti bene ora potrai schermarti e durare di più e avere un livello più alto nel tempo.
Le applicazioni sono sviluppate da un team, non da un singolo.
Per quanto i media facciano risultare il contrario, per esigenze narrative o altro, il buon software è creato da un buon team e non dal singolo rock star developer.
Ci sono anche occasioni dove potresti trovare personaggi simili, o presunti tali, e spesso non è una esperienza piacevole ed il risultato non da buoni frutti.
Un buon team di lavoro invece ne da sempre e comunque.
Se hai la fortuna di avere più insegnati, è facile che sentirai pareri discordanti e opinioni diverse.
Questo è normale e si collega anche con ciò che erano i punti precedenti.
Ovvero ci sono tanti approcci possibili per risolvere problemi, per utilizzare determinati strumenti e incastrarli tra loro.
In genere è molto più utile che tu diventi mentalmente flessibile, che non estremista di un determinato pattern o modo di affrontare le cose, piuttosto che di un linguaggio o altro.
In linea di massima consiglierei anche di diffidare da chi ha un approccio del genere, spesso denota più insicurezza, che non il contrario, come invece potrebbe sembrare.
COME APPLICARE IN MODO EFFICACE LA SCRITTURA DEL CODICE:
Quello che stai scrivendo è un software e in quanto tale non sarà mai finito.
Sarà solo finito quando non lo userà più nessuno, quindi sarà “finito” nel vero senso della parola, cioè morto.
Quindi fin quando stai scrivendo un software devi pensare sempre in ottica futura. Ovvero questo codice continuerà a dover essere mantenuto, editato, migliorato, ottimizzato, accresciuto.
Questa è una delle cose dove c’è più scetticismo soprattutto all’inizio, perché è difficile fin quando non si lavora a progetti un pò consistenti farne esperienza.
Ma se punti semplicemente a far funzionare le cose nell’immediato senza pensare alle conseguenze di manutenibiltà, non avrai un buon futuro (o al minimo verrai odiato da chiunque lavorerà con te, spesso te stesso che dopo qualche tempo dovrai riprendere un progetto).
Si dice, “scrivi il tuo codice come chi lo dovesse mantenere sia uno psicopatico che sa dove vivi”.. e appunto quello coinciderà con te stesso, spesso.
Non ottimizzare troppo presto e troppo nel processo di sviluppo.
Questo sembra andare contro al precedente ma in realtà lo completa.
Vedrai che molto spesso la verità sta nel cercare un buon equilibrio tra parti apparentemente opposte.
Lo sviluppo è un processo, che ha una sua parte creativa e una sua parte di consolidamento.
Non scriverai mai, o quasi, ciò che potrà essere una versione definitiva di qualcosa al primo colpo.
Quindi il tuo primo focus dev’essere risolvere il micro problema, poi passerai al consolidare e ottimizzare.
Non puoi fare tutto insieme.
Inoltre nella ottimizzazione anche qui potrebbe non esserci mai fine.
Concentrarti sul livello di complessità in cui sei al momento. Poi procedi e quando i punti del livello di complessità più alto iniziano ad unirsi allora potrai ulteriormente migliorare il codice.
Questa porta alla definizione di “refactoring”, ovvero appunto il tornare sul proprio codice per migliorarlo sia sulla questione di performance che sulla sua manutenibilità.
Per es. un refacoring potrebbe anche essere aggiunta o miglioramento dei commenti del tuo codice.
il codice lo scrivi 50% per la machina, 50% per l’umano.
Quindi non essere criptico per essere “figo” (spoiler: non lo saresti).
Molti dei punti sopra mettono in luce la manutenibilità e comprensibilità del codice.
Deve essere una priorità se non la priorità.
Come sempre dipende dai casi e dai dettagli specifici del progetto e situazioni in cui ti trovi, ma direi che per la maggioranza delle volte, se devo proprio sacrificare qualcosina di performance per la chiarezza del codice, lo faccio.
La qualità del tuo codice non si misura in linee di codice.
Anche qui speso nasce il dibattito “ho scritto troppo”, “ho scritto troppo poco”.
Devi scrivere il necessario, è trovare il giusto compromesso tra manutenibilità e efficacia.
Quante linee di codice hai alla fine non è molto importante.
Cercare e riusare codice non è un male, anzi la ricerca è una skill molto importante per uno sviluppatore.
Anche questo è un aspetto molto ricorrente che emerge nei corsi. Una sorta di colpa nel copiare e nel cercare soluzioni da cui prendere spunto.
Non finirai mai di cercare (per questioni anche di memoria) e non c’è nessun valore aggiunto nello scrivere tutto di tuo pugno.
L’obbiettivo deve essere avere il controllo totale del tuo codice e che sia manutenibile ed efficiente, il come arrivi a quel risultato non è di grande importanza.
Sottolineo però “controllo totale del tuo codice”, quindi se usi codice che non comprendi, allora sei fuori strada.
Non esiste software senza bug.
Lo avrai anche notato usando le varie App anche più famose e dei cosiddetti BIg Tech, o semplicemente facendo caso quanti aggiornamenti vengono richiesti anche dai sistemi operativi piuttosto che dai browser.
Finché il software in questione è utilizzato sarà mantenuto, migliorato, verranno risolti bug e problemi, ma non è un ciclo che porterà mai ad una conclusione.
Come scrivevo, dobbiamo sempre pensare ai nostri programmi come qualcosa di vivo, e ciò che è vivo è imperfetto.
Lavoriamo muovendoci in un mosaico di pezzi di software e tool fatti da altri che non sono perfetti.
Qui torniamo ad un’aspetto molto importante nel mondo della programmazione, il riutilizzo.
Imparerai presto che grazie alla possibilità di astrazione (ovvero rendere una soluzione ad un problema il più generico e riutilizzabile possibile), si può evitare di “reinventare la ruota” ogni volta.
Utilizzando quindi anche strumenti come librerie, framework, ma gli stessi browser o IDE (software che ci permettono di editare il codice), stiamo usando strumenti creati da altri.
Quindi ci permettono di velocizzare non poco il lavoro.
Chiaro che però rimane sempre vero ciò che abbiamo scritto nel punto precedente, quindi con i pro ci assorbiamo anche i contro, quindi bug su parti non sviluppate da noi, sulle quali quindi non abbiamo controllo diretto.
CONCLUSIONE
Gli argomenti trattati sono complessi e non c’è spesso un modo lineare di affrontarli.
I livelli di complessità sono diversi e non si può trattarli tutti contemporaneamente.
Spesso si deve procedere facendosi guidare dall’insegnate e avendo fiducia sul fatto che presto, pian piano i puntini inizieranno ad unirsi e anche ciò che era più oscuro prenderà significato.
Dovresti ora avere una situazione più chiara sulla complessità del mondo in cui ti troverai a doverti muovere.
Avrai quindi compreso che è un continuo equilibrio in mezzo a tante variabili, alcune delle quali non sono neanche direttamente sotto il tuo controllo.
Quindi avere un approccio ordinato, metodico e il più possibile calmo, è fondamentale per scrivere codice efficace e di buon livello.
Che quindi sia semplice e lineare, manutenibile e ben organizzato, oltre che efficace.
Inoltre questo tipo di approccio ti aiuterà anche a non impazzire completamente, cosa altrettanto utile.
Soprattutto poi in un contesto didattico è fondamentale darsi il tempo di assimilare i concetti.
Che tu stia affrontando un corso o sia alle prese con le prime esperienze lavorative, troverai attuali molte di queste situazioni.
La sensazione di smarrimento e confusione sarà poi mitigata un pò nel tempo, ma non ti abbandonerà mai del tutto, perciò è meglio imparare a conviverci.
Sembra una pessima notizia, ma lo è solo in parte. Vedrai che, come tutte le “energie vitali” possibili, ha i suoi contro ma anche il suoi pro.
Spero che questo post possa esserti d’aiuto. ✌️🤓