È meglio specializzarsi su un unico linguaggio di programmazione o essere poliglotti?
Meglio imparare un nuovo linguaggio di programmazione o approfondire quello che si conosce già? Che strada è meglio intraprendere, specializzazione o generalizzazione? Arriva sempre il momento in cui sviluppatori di software affrontano queste domande. Questo articolo ti fornirà gli strumenti per aiutarti ad affrontare al meglio questa decisione.
Un famoso detto inglese recita:
Jack of all trades is a master of none but oftentimes better than a master of one. – Robert Greene
Si potrebbe parafrasare dicendo: le persone che sanno fare tutto non sanno fare niente, ma spesso sono meglio di chi sa fare una mansione sola. Se sei un giovane sviluppatore, magari appena uscito dall’università potresti ritrovarti di fronte a un bivio: diventare esperti in un singolo linguaggio di programmazione, o ampliare le proprie competenze per diventare uno sviluppatore full-stack?
Se ti sei già appassionato di un linguaggio specifico come Java o C, specializzarti potrebbe essere una decisione immediata e naturale. Se invece al contrario, il tuo sogno è quello di entrare a far parte del mondo delle startup emergenti, diventare full-stack potrebbe sembrare la mossa giusta, avere un quadro generale meno specifico per poter indossare più cappelli e ricoprire più ruoli.
Che strada intraprendere quando la scelta non ti è ancora del tutto chiara? È necessario specializzarsi per avere una marcia in più di fronte ai futuri selezionatori? Oppure bisogna imparare tutti i linguaggi possibili per un curriculum appetibile?
Persino gli esperti del settore hanno pareri discordanti a riguardo. In questo articolo perciò ti indicheremo quali sono i vantaggi e gli svantaggi di entrambe le correnti di pensiero e potrai formulare la decisione più adeguata alla tua situazione.
La strada del poliglotta generalista
Se il tuo obiettivo lavorativo è quello di entrare come programmatore in startup emergenti o addirittura esserne il fondatore dovrai essere pronto a ricoprire diversi ruoli.
Nelle piccole e medie realtà lavorative infatti una delle figure più ricercate è proprio quella del full-stack developer. Questo professionista è uno sviluppatore a tutto tondo in quanto si occupa della programmazione sia back end sia front end.
Ciò non significa essere esperti in ogni singolo linguaggio e tecnologia esistenti, significa però sapersi muovere agilmente tra i diversi aspetti di un’applicazione, conoscendo le tecnologie principali della programmazione front end come HTML, CSS e JavaScript, e almeno un linguaggio di back end, come Java o Python, riuscendo a gestire le chiamate lato server e lato client, e le integrazioni con il database.
Poiché gli sviluppatori full-stack devono avere una così vasta gamma di competenze, è indispensabile saper imparare in fretta e stare al passo con i progressi della tecnologia.
I pro e contro
I benefici di questo approccio generalista sono molti. In primis il tasso di occupazione sarà maggiore. Con il boom della tecnologia, le aziende stanno cercando sviluppatori che possano adempiere più di un ruolo, invece di dover assumere più sviluppatori e aumentare i loro costi.
Se sei una persona che cerca un lavoro dinamico e mai ripetitivo avere un impiego in cui utilizzi vari linguaggi di programmazione eviterà le giornate ripetitive e noiose.
Come abbiamo visto prima la figura full-stack ad esempio ha le conoscenza per sviluppare l’interezza dello sviluppo. Essere in grado di portare un progetto al 100% di completamento end-to-end da solo ti porterà non solo alla soddisfazione personale, ma eviterà anche divergenze di opinioni che sono destinate a sorgere quando si hanno più sviluppatori su un progetto.
Sarà necessario però scendere a compromessi se volete percorrere questa strada. Secondo la regola delle 10.000 ore di Malcolm Gladwell, ci vogliono circa 10.000 ore di pratica per avere la massima esperienza in qualsiasi campo, o circa 20 ore di lavoro alla settimana per 10 anni.
Se fate i conti, vi rendete subito conto che gli sviluppatori full-stack difficilmente potranno diventare massimi esperti di ogni linguaggio di programmazione e spesso dovranno affidarsi all’esperienza di altri quando incontrano problemi non risolvibili con la propria conoscenza.
La strada della specializzazione
L’idea di uno sviluppatore full-stack spesso però viene contestata in alcuni angoli del mondo tecnologico di oggi. Quando si tratta di aziende di dimensioni elevate, nella maggior parte dei casi, vogliono un programmatore che conosca molto bene un solo linguaggio.
Un’analisi di Stack Overflow, il famoso sito che tratta discussioni in ambito di sviluppo, mette Java, Python e C# tra i linguaggi di programmazione più ricercati dalle aziende nel 2021. Questo tipo di tecnologie sono sempre più complesse, gli stack sono molto più grandi di una volta. Dieci anni fa, uno sviluppatore full-stack era qualcuno che conosceva PHP o Python, più JQuery, HTML e CSS.
Quando si opera su prodotti di ampia scala la tecnologia sta diventando troppo complicata per gli sviluppatori per non farlo.
I pro e contro dell’approccio
La specializzazione in tanti casi ti rende più prezioso per le aziende. E specializzandosi, ci si rende conto di quanto più profondo possa essere il proprio apprendimento, il che a sua volta farà di te uno sviluppatore migliore.
Andare in profondità in un linguaggio non solo permette di diventare esperti, ma alla fine introduce a competenze di programmazione più avanzate e generali come scrivere codice pulito e le trovare le sfumature sottostanti che un generalista non incontrerà mai. Capisce il dietro le quinte del linguaggio, come è costruito e perché è strutturato in un modo particolare.
Lo sviluppatore specializzato inoltre svilupperà skill di lavoro di squadra. È di fatto essenziale il confronto con ogni altro membro del team, dai professionisti UX, a manager di prodotto a sviluppatori di back-end. Il prodotto finito sarà composto da tanti individui di grande talento.
In questo ruolo uno degli svantaggi potrà essere proprio la ripetitività che viene invece maggiormente evitata da chi lavora usando più linguaggi di programmazione. Inoltre la durata della ricerca del lavoro potrà essere maggiore rispetto a chi ha conoscenze generiche di più linguaggi.
Quindi qual è la scelta migliore?
Specializzazione e generalizzazione non sono in assoluto contrasto tra loro. Hanno solo bisogno di essere messe in contesto. Gli sviluppatori che decidono di specializzarsi in un solo avranno maggiore commerciabilità in quella specifica nicchia, inoltre avranno una conoscenza approfondita e a 360° sul linguaggio stesso.
Al tempo stesso però, essere un generalista nei concetti e principi di programmazione permette agli sviluppatori di adattarsi con maggiore facilità e rapidità ad altri linguaggi richiesti sul lavoro. Avendo una solida base ed essendo in grado di leggere bene la documentazione, sono equipaggiati per gestire altre tecnologie che vengono loro incontro.
La scelta giusta universale giusta per tutti ovviamente non esiste. Gli elementi che potrebbero sembrare svantaggi per alcuni, possono invece apparire come vantaggi per altri.
Se hai ancora dubbi riguardo quale delle opzioni possa essere il perfect fit per te ti consiglio di leggere l’articolo Come scegliere l’azienda giusta per te? per capire meglio che dimensione di azienda fa al caso tuo e che domande dovresti porti per trovare il tuo ambiente lavorativo ideale.