Imparare a programmare: 8 errori da evitare
In questo articolo prenderò in esame gli errori e le trappole più comuni in cui si incorre all’inizio di un percorso di studi e di addestramento come programmatore. Molto probabilmente sei finito su questa pagina perché vuoi diventare programmatore per trovare nuove opportunità di lavoro e di carriera, oppure perché sei sempre rimasto affascinato dall’informatica e hai deciso di imparare a programmare, per diletto e utilità personale. In entrambi i casi, ci sono alcuni errori che spesso i principianti commettono (e in cui sono incappato anche io), che rischiano di troncare ogni entusiasmo, aumentare la confusione e diminuire drasticamente le probabilità di riuscita. Se riuscirai a superare questi primi ostacoli, i tempi di apprendimento saranno molto più rapidi e i risultati concreti (in termini di produzione di software tuo) non tarderanno ad arrivare.
Ecco quindi quali sono a parer mio gli errori più comuni da evitare se hai deciso di imparare programmare.
Sezioni
Focalizzarsi troppo sul linguaggio
Qual è il miglior linguaggio di programmazione per imparare a programmare? E soprattutto, quante volte ti sei fatto questa domanda? Questa è la questione delle questioni, il quesito capitale che tutti i principianti si pongono, stretto parente di quello più generale, e cioè quale sia il miglior linguaggio di programmazione. Inutile dire che la querelle è spinosa anche tra gli operatori più smaliziati (leggi, i programmatori senior), e non di rado dà adito a vere e proprie guerre di religione. D’altronde anche i programmatori sono esseri umani e, per quanto siano adusi all’uso della logica e del ragionamento, non possono non subire l’influsso di pregiudizi, convenzioni e bias vari. Si trova una zona di comfort e su quella ci si attesta come porto sicuro. Ad ogni modo, quale che sia il linguaggio con cui sceglierai di iniziare, usalo come uno strumento e non come un fine; il suo scopo è risolvere problemi di tipo informatico e come tale va usato. Se temi di fare la scelta sbagliata, sappi che tutto quello che imparerai con lo strumento che hai scelto, sarà facilmente trasferibile in altri ambiti e, qualora sarà richiesto in futuro un nuovo percorso di addestramento con altre tecnologie, forte dell’esperienza pregressa, i tempi per te necessari per l’acquisizione di nuove abilità e competenze saranno drasticamente ridotti.
Focalizzarsi troppo sul framework
Questo errore è stretto parente del precedente, e viene commesso quando si ha impazienza di immettersi nel mercato del lavoro o si vuole subito creare un progetto di medie dimensioni. Un framework è un set di strumenti e librerie che facilitano la progettazione e il mantenimento di un software, spesso seguendo determinati desing pattern, senza che debba essere lo sviluppatore a implementarli da zero. I framework permettono di concentrarsi sulla risoluzione di un problema senza perdersi in una miriade di dettagli di basso livello. Per questo, anche in questo caso la scelta non è facile e, chiedendo consigli a sviluppatori esperti, la confusione aumenta, dato che ognuno non potrà fare altro che elencare i vantaggi e gli svantaggi del sottoinsieme di funzionalità del framework che già conosce. A volte un programmatore può darti un giudizio spietato di una tecnologia magari valida, ma con la quale un’azienda o un manager hanno fatto delle scelte di gestione sbagliate, rendendo un progetto software un incubo. Per cui, scegli un framework stabile, ben documentato e che verrà mantenuto da una folta community negli anni a venire; concentrati a imparare bene quante più tecniche e best practices suggerite dai mantainers puoi; come avviene per i linguaggi di programmazione, anche con i framework il transfer di competenze e abilità è sempre possibile.
Spulciare eccessivamente gli annunci di lavoro
Questo è uno dei problemi che gettano la massima confusione in un aspirante sviluppatore o in un programmatore junior, confusione causata dal desiderio di giocare d’anticipo e di non trovarsi impreparati ad un eventuale colloquio, oltre a quello di voler far incontrare le proprie competenze con il maggior numero di offerte di lavoro possibili. Gli annunci di lavoro, che arrivino da un recruiter o che si trovino in un qualunque job aggregator online o portale di annunci, difficilmente sono redatti da una persona competente in materia. Spesso un’azienda medio piccola cerca di trovare una figura jolly che possa prendere in carico progetti lasciati indietro da altri sviluppatori che si sono succeduti negli anni nella medesima posizione lavorativa. Gli sviluppatori senior sanno ben distinguere le trappole insite nelle offerte lavorative e attuano una forte scrematura prima di rispondere, ma uno sviluppatore alle prime armi non è in grado di attuare un filtro del genere. La domanda che di solito giunge inesorabile è: ma quanti linguaggi e framework devo conoscere per trovare lavoro come programmatore? Infatti, se provi a prendere a caso una decina di annunci, trovi mescolate in un’unica offerta, le seguenti competenze richieste:
- da due a quattro linguaggi di programazione diversi
- due o più database server e dialetto sql a corredo
- due o più framework lato client
- due o più framework lato server
- framework frontend e backend insieme
- competenze di sviluppo web, client/server e mobile insieme
- librerie dedicate a un settore di nicchia
Se a tutto ciò aggiungiamo le competenze opzionali (spesso etichettate con l’anglicismo ‘nice to have’), come l’utilizzo di strumenti di versionamento e di deploy, la nebbia non può che farsi ancora più fitta. Tieniti quindi alla larga dagli annunci di lavoro, fin quando non avrai un repository con alcuni progetti da mostrare e poi lascia fare un po’ al caso; spesso le aziende serie organizzano periodi di affiancamento e di formazione, seguendo nella loro carriera gli sviluppatori in base ai loro livelli di esperienza e competenze. Male che vada, continuerai a formarti da autodidatta come faccio io tuttora.
Creare precocemente un profilo linkedin
Questo errore è strettamente legato al precedente. Se hai appena finito la scuola superiore o stai terminando/hai terminato l’università, è ancora peggio. Linkedin è uno strumento validissimo per tessere una rete di contatti legati alle proprie competenze e trovare nuove opportunità di carriera, ma se sei agli esordi, può diventare fonte di perdite di tempo e di scelte sbagliate. Una volta aperto un profilo come sviluppatore, cominceranno ad arrivare messaggi e contatti da recruiter di vario tipo; questo potrebbe all’inizio entusiasmarti, e magari darti nuova carica, tuttavia il primo contatto telefonico dura in media dai 30 ai 60 minuti ed è per lo più a fini di schedatura. Può capitare che la posizione sia urgente e il recruiter abbia sparato nel mucchio senza studiare bene il tuo profilo (io ad esempio vengo contattato di tanto in tanto come sviluppatore React ma nelle competenze ho indicato espressamente solo Vue.js), per poi accorgersene solo dopo, facendoti perdere molto tempo e deludendo le tue aspettative; oppure semplicemente ti tiene come una ruota di scorta nel caso riesca a piazzarti inaspettatamente per una posizione in cui i colloqui sono già in dirittura di arrivo, proponendoti di fare un progetto di prova, che poi magari non viene nemmeno visto dall’azienda (è quello che è successo a me di recente; poco male, ci ho fatto un articolo tecnico sul mio blog ufficiale). Ovviamente ci sono tanti recruiter competenti, di cui alcuni di essi sono anche ex sviluppatori, ma il rischio di essere visto come una risorsa da collocare a casaccio è alto, e ti espone anche ad un altro problema, quello di intraprendere un percorso di carriera che non fa per te. Magari hai appena acquisito i fondamenti della programmazione e non hai alcuna idea di quale nicchia ti piacerebbe soddisfare, nicchia della quale devi imparare conoscere il sottodominio di problematiche e casistiche note; come fai quindi ad essere già su Linkedin?
Impantanarsi nei social
I social network sono molto utili per gli sviluppatori, tanto per entrare in contatto con altri colleghi, quanto per confrontarsi su questioni tecniche e lavorative. Purtroppo però, i social, data l’alta frequentazione di persone di tutti i tipi, ti espongono al sentito dire, a pregiudizi di ogni sorta, al sarcasmo, alle opinioni negative di chi è rimasto deluso da questo settore ecc. Una domanda di un principiante in un gruppo di sviluppatori esperti (mescolati a junior esaltati per il primo anno di esperienza), sfocia facilmente nel flame e pescare nel mezzo qualcosa di veramente utile diventa un’impresa. Per cui, se devi frequentare un gruppo, fa in modo che sia dedicato ad una determinata nicchia tecnica e intervieni solo per fare domande precise e circostanziate su un problema già da te ben analizzato e di cui fornisci più dati possibile. Non copincollare codice a casaccio (o peggio, non fotografarlo), ma caricalo su portali come pastebin.com. Leggi solo ed esclusivamente discussioni che riguardino problemi specifici che stai affrontando. Tieniti inoltre lontano dalle liti su linguaggi, librerie e framework e soprattutto da richiesta di consigli su stipendi, ral ed emigrazione all’estero, in modo da non essere influenzato dai pregiudizi e dallo scontento altrui.
Pensare che una feature sia inutile
Studiando un nuovo linguaggio o framework, spesso ci si imbatte in una funzionalità di cui non si riescono ancora a capire né i vantaggi, né i campi di applicazione. Spesso la documentazione tecnica sciorina una serie di dettagli e di esempi a corredo, ma proprio non si riesce a capire cosa farsene. Questo è normale se non si ha una visione di insieme delle problematiche che quelle feature vanno a risolvere e se non si ha alle spalle la progettazione di un software; succede molto spesso quando si passa dalla programmazione procedurale a quella ad oggetti (la domanda di solito è: perché usare gli oggetti se posso creare una miriade di librerie di funzioni? ). In questo caso il mio consiglio è di non essere impazienti e di applicarsi, le occasioni in cui si esclamerà “ma questo lo posso risolvere con sole due righe di codice con la feature X!” non tarderanno ad arrivare.
Tralasciare la teoria
In un periodo in cui l’esplosione del business degli infoprodotti ha visto il proliferare di corsi pratici on line praticamente per qualunque cosa, pochi vogliono leggere un manuale o studiare su articoli che arrivino alle 2000 parole (e se sei arrivato fin qui ti faccio i miei complimenti per la capacità di concentrazione). Sia chiaro, la formazione on line è valida, vedere un video dove un professionista mostra dal vivo come lavora può dare il turbo alla tua crescita professionale e alle tue competenze e anche io ho intenzione di lanciare i miei corsi su questo sito. Tuttavia il rischio insito in un approccio eccessivamente bilanciato sulla pratica è quello di non capire bene ciò che si sta facendo e di fare le cose un po’ meccanicamente, copiando a pappagallo e accumulando diplomini. Ad esempio, un tipico corso per sviluppatore web introduce alle basi di html, css, javascript, php, e mysql, arrivando all’utilizzo di librerie come bootstrap e jquery, ma difficilmente capirai anche solo i capitoli iniziali senza avere padroneggiato i concetti fondamentali della programmazione, del protocollo http e dei database relazionali. Per cui, prima di acquistare un corso, leggi bene i requisiti che di solito sono indicati in una delle sezioni iniziali e, se non ne possiedi qualcuno, dedica del tempo almeno ad averne un’infarinatura.
Tralasciare la pratica
Questo è l’errore opposto del precedente, forse legato un po’ a una tendenza al perfezionismo. Non si inizia a sviluppare nulla se prima non si hanno delle solidissime basi teoriche. Quindi si comincia a cercare l’università a cui iscriversi (tornando all’errore dei gruppi social, la domande ricorrenti sono: ingegneria informatica o informatica? Diploma o università? Autodidatta o certificazioni? Ecc.); oppure si studiano fior fiore di manuali di programmazione, risolvendo magari tutti gli esercizi ma senza uscire dal seminato o sforzarsi di creare un software proprio (anche minuscolo). Devo dire che ho molta simpatia per chi incorre in questo errore dato che è stato quello che più ha tormentato i miei primi passi in questo mondo; inoltre voler fare le cose per bene non è mai un difetto, ma diventa un limite se non porta a produrre qualcosa di concreto. Molto spesso si imparano cose nuove agendo un po’ da “praticoni”, ma non è questo il punto: dato che l’informatica è figlia della matematica e che le competenze matematiche si rafforzano agendo, cioè risolvendo grandi quantità di problemi, rinnovo ciò che ho già detto altrove. Prova a creare software per qualunque cosa, anche se i primi tentativi saranno mediocri. Periodicamente potrai tornare su quel codice per un refactoring migliorativo. Infine, le competenze teoriche apprese insieme ad un percorso pratico, sono quelle che più facilmente restano impresse a lungo senza costringerti a ripassi periodici. Quindi, studia tutto quello che vuoi, ma dedica del tempo a creare. Questo tempo deve essere perfettamente bilanciato con quello dedicato alla teoria.
Conclusioni
In questo articolo ho elencato alcuni errori che ostacolano il percorso di crescita di chi vuole imparare a programmare e viene facilmente preso dall’impazienza tanto dalla ricerca di opportunità lavorative, quanto dallo sbilanciamento o quasi esclusivamente verso la pratica o solo verso la teoria. Ho accennato anche ai rischi della frequentazione dei social network in una fase precoce del percorso che porta a diventare sviluppatore.