Nel mio lavoro da sviluppatore, c’è una cosa che ho imparato nel tempo, ovvero:
puoi completare dieci corsi di programmazione e continuare a non sentirti pronto per lavorare su un progetto reale.
Non perché i corsi siano inutili, anzi, spesso sono il modo più veloce per acquisire le basi di una nuova tecnologia o colmare una lacuna. Il problema arriva quando confondiamo studiare una tecnologia con saperla utilizzare.
Seguire un corso è relativamente semplice. Hai un insegnante che ha già scelto il problema, gli strumenti, l’architettura e spesso anche la soluzione. Tu devi seguire i passaggi.
Poi arriva il progetto personale. E improvvisamente nessuno ti dice:
- Quale tecnologia utilizzare;
- Come organizzare il codice;
- Come strutturare il database;
- Quale approccio sia migliore;
- Perché qualcosa non funziona;
- Cosa fare quando la soluzione che avevi immaginato non funziona.
Sei tu a dover decidere.
Ed è proprio qui che inizia il vero apprendimento.
Un progetto ti obbliga a pensare
Quando costruisci qualcosa da solo, prima o poi incontri problemi che il corso non aveva previsto o magari scopri che la libreria che volevi utilizzare non supporta esattamente quello che ti serve. Potresti accorgerti che l’architettura che avevi scelto all’inizio rende tutto più complicato e/o ancora passi due ore a cercare un bug che sembrava impossibile da trovare.
In quel momento non stai semplicemente imparando una nuova API.
Stai imparando a risolvere problemi.
Ed è una competenza molto più difficile da acquisire guardando qualcuno programmare.
Il progetto personale ti mette davanti alle conseguenze delle tue scelte
Durante un corso puoi tranquillamente scrivere:
const users= [...]
e andare avanti.
In un progetto reale, invece, dopo qualche settimana potresti ritrovarti con centinaia di righe di codice che dipendono da quella scelta.
E allora iniziano le domande:
“Avrei dovuto strutturarlo diversamente?”
“Perché questa parte è diventata così difficile da modificare?”
“Se aggiungo questa funzionalità, cosa rischio di rompere?”
Queste domande sono estremamente formative, perché inizi a capire che programmare non significa soltanto far funzionare qualcosa. Significa anche prendere decisioni che dovrai essere in grado di mantenere nel tempo.
E soprattutto impari a cavartela da solo
Questa, secondo me, è una delle differenze più importanti.
Quando segui un corso, se non sai come procedere puoi aspettare che arrivi la spiegazione. In un progetto personale non arriva nessuno, devi cercare nella documentazione, che ammettiamolo non sempre è scritta in maniera chiara.
Leggere GitHub.
Consultare Stack Overflow.
Chiedere a qualcuno.
Usare un’AI.
Fare tentativi.
Sbagliare.
Tornare indietro.
Riprovare.
E alla fine trovare una soluzione.
Questa capacità di orientarsi quando non si conosce la risposta è una delle competenze che distinguono un developer che sa soltanto applicare ciò che ha studiato da uno che riesce ad affrontare problemi nuovi.
Quindi i corsi non servono?
Servono, ma hanno un ruolo diverso.
Un corso può darti una mappa, un progetto personale ti costringe a percorrere la strada.
Il corso può spiegarti come funziona una tecnologia. Il progetto ti obbliga a capire quando utilizzarla, perché utilizzarla e cosa succede quando la utilizzi nel modo sbagliato.
Per questo non credo che la soluzione sia smettere di fare corsi, credo sia smettere di usarli come misura della propria preparazione.
Aver completato un corso non significa essere pronti.
Aver costruito qualcosa da zero, aver incontrato problemi e averli risolti ti dà qualcosa di molto più prezioso:
la prova che sai imparare anche quando nessuno ti sta guidando.
Ed è probabilmente questa una delle competenze più importanti che un developer possa sviluppare.