Competenze ampie e limitate: competenze di ingegneria del software demistificate

Pubblicato: 2022-03-11

Ogni ingegnere del software ha uno skillset composto dalle diverse competenze che ha acquisito. Un set di abilità è "profondo e ristretto" se hai imparato da una a due abilità e poco altro; è “ampio e superficiale” se puoi fare un po' di tutto senza essere un esperto in nessun campo.

La maggior parte di noi si trova da qualche parte nel mezzo con alcune abilità forti, alcune nella media e molte lacune. In questo articolo, vorrei discutere dell'ampio spettro e sostenere che avvicinarsi all'estremità più ampia gioverebbe alla maggior parte dei programmatori.

Competenze di Software Engineer: Rappresentazione grafica di uno skillset

L'ampiezza e la profondità sono, ovviamente, relative. Ad esempio, potresti essere un esperto di sviluppo web, o semplicemente di sviluppo web lato client, o solo di JavaScript. Tutte queste sono abilità "profonde e ristrette" in un certo senso, ma l'ultima è molto più ristretta della prima.

Inoltre, gli skillset "profondo e ampio" e "superficiale e ristretto" sono entrambi possibili: il primo significa che tutti vogliono assumerti e il secondo significa che devi ancora imparare qualcosa di significativo. Dal momento che non sono molto comuni, non vale nemmeno la pena discuterne in dettaglio.

Tipi di competenze e set di competenze dell'ingegnere del software

Profondo e stretto

Avere un set di competenze profondo significa che sei un esperto in almeno un campo.

Prendi SQL: supponiamo che tu sappia tutto sulla teoria dei database relazionali; i pro ei contro di MySQL, PostgreSQL, Oracle e SQLite; come ottimizzare le query; quando e come denormalizzare un database, ecc. I clienti che cercano questa competenza specifica vorranno assumerti il ​​prima possibile, e con una buona ragione. Potrai correre a terra e fornire valore come pochi altri potrebbero.

Tuttavia, se il progetto si espande o cambia in modo significativo, verrai sostituito o integrato da programmatori con le competenze che ti mancano. Anche senza modifiche sostanziali, saresti in grado di suggerire modifiche architettoniche? Il cliente potrebbe stare meglio con un database NoSQL o nessun database, ma la tua ristretta esperienza potrebbe distorcerti contro queste opzioni sconosciute.

Ampio e poco profondo

D'altra parte, se sei un generalista che non è un esperto di dominio, avrai bisogno di un po' di tempo per avviare nuovi progetti prima di raggiungere il picco di produttività.

Per fare un esempio, forse devi fare un progetto Python e non hai mai usato quel linguaggio prima. Tuttavia, probabilmente ne avrai sentito parlare (dinamico, interpretato, multiparadigma) e la tua esperienza con altre lingue renderà la transizione molto più semplice.

Il codice che scrivi inizialmente potrebbe non essere Pythonic (con tuple, comprensioni o generatori) ma saprai da dove iniziare. Farai progressi costanti e i tuoi moduli ben calcolati saranno facili da migliorare in seguito. La tua ampia prospettiva sulla tecnologia ti darà idee che altri potrebbero perdere.

Quando il progetto cambia, sarai una risorsa per il tuo team piuttosto che una responsabilità.

Competenze nel mondo reale

In termini geografici, gli skillset ristretti sembrano montagne alte e gli skillset ampi sono come altipiani. Usando questa analogia, è probabile che gli skillset tipici presentino un paio di montagne, una collina qua e là e molte pianure.

Rappresentazione grafica di montagne, colline e pianure

Un programmatore casuale potrebbe essere bravo in SQL e Python, OK nella programmazione web e negli algoritmi e molto preoccupato per la maggior parte delle altre cose, come i core dump, i server OAuth o le app native. Un tale programmatore dovrebbe continuare a sfruttare le proprie aree di competenza, trovando e colmando anche le lacune di conoscenza.

È probabile che questa strategia li serva meglio nel corso degli anni.

Perché i programmatori devono diversificare le proprie competenze

Molti progetti richiedono abilità non correlate combinate in modi imprevedibili. Mentre ingegneri ampiamente qualificati potrebbero contribuire utilmente alla maggior parte di loro, le competenze di un esperto soddisferanno i requisiti precisi di pochi datori di lavoro. Questo non è necessariamente un problema nel breve periodo, poiché hai solo bisogno di un lavoro per pagare le bollette.

Tuttavia…

La sovraspecializzazione è rischiosa. Mettere le uova nello stesso paniere potrebbe andare bene se puoi prevedere il futuro meglio di chiunque altro, ma questa capacità è rara e non correlata alle abilità tecnologiche. Considera la richiesta di competenze di programmazione Windows nel nostro millennio. Oppure chiediti: molti di noi avrebbero potuto indovinare le rispettive traiettorie di Android, Flash, Nokia o Blackberry dieci anni fa?

Infine, i migliori datori di lavoro apprezzano molto le diverse competenze. Facebook non assegna nuove assunzioni ai team fino a sei settimane dopo l'inizio. Google incoraggia i trasferimenti interni ed esegue diversi programmi di rotazione. Anche se ti piace fare il freelance, tenere aperte le tue opzioni non farà male. Se mai avresti preso in considerazione l'idea di lavorare per quelle aziende, dovrai essere almeno un po' generalista.

Supponendo che tu sia convinto e desideri diversificare le tue abilità, come lo faresti?

Come diversificare e migliorare le competenze tecniche

Potresti scambiare denaro con abilità:

  • Accetta una tariffa più bassa durante la transizione a un campo sconosciuto. Se sei produttivo al 75% come al solito, una riduzione temporanea dello stipendio del 25% è giusta. Lo rialzerai abbastanza presto.
  • Fai un lavoro dimostrativo non retribuito con le competenze che desideri mentre fai domanda per lavori che le richiedono. Se si scopre che non sei pronto per il cambiamento, è comunque un'utile lezione da aver imparato.

Potresti anche scambiare tempo con abilità:

  • Contribuisci a un progetto open source. Riceverai consigli e conferme, restituirai alla comunità e forse verrai notato da potenziali datori di lavoro o colleghi.
  • Fai un progetto personale per la gioia, l'ispirazione e un cambiamento dal lavoro quotidiano. Ad esempio, ho clonato il gioco Snake pre-smartphone mentre imparavo React.

Devi cercare opportunità di apprendimento, ma non puoi farlo costantemente. Per il mio progetto di intervista Toptal, ho usato Node.js e Backbone, nessuno dei quali avevo molta esperienza. È stato divertente, ma il ritmo di apprendimento richiesto non poteva essere mantenuto per mesi.

Idealmente alterneresti lunghi periodi di stabilità (con una produzione e un reddito costanti) e brevi intervalli quando ti sfidi a imparare qualcosa di nuovo. La frequenza con cui esegui quest'ultimo dipende da diversi fattori, come le tue attuali competenze, la domanda del mercato e i tuoi obiettivi personali.

Perché l'ampiezza fa bene ai datori di lavoro

Per quanto riguarda i datori di lavoro, in alcuni scenari saranno sempre richieste competenze approfondite:

  • Quando c'è poca fiducia o impegno di tempo tra datore di lavoro e dipendente.
  • Quando sono probabili esiti catastrofici (come privacy o incidenti di sicurezza).
  • Quando sono richieste abilità esoteriche.
  • Quando le scadenze sono urgenti e non negoziabili.

Tuttavia, molti progetti non selezionano nessuna di queste caselle e i loro responsabili delle assunzioni dovrebbero prendere in considerazione ingegneri a tutto tondo. Molte competenze tecniche, come test e documentazione del codice, e tutte le competenze trasversali (come la comunicazione) trasferiscono. La resilienza conta anche quando i prodotti non cambiano completamente; se la parte che hai assunto per le bancarelle, un generalista può lavorare sulla priorità successiva più alta.

Rappresentazione grafica di un datore di lavoro che sceglie uno sviluppatore con un set di competenze ampio e superficiale rispetto a uno con un set di competenze profondo e ristretto

Data l'importanza di ampi set di competenze, dovremmo incoraggiare gli sviluppatori a diversificare e dovremmo comunicare l'importanza di un'ampia conoscenza ai datori di lavoro che potrebbero essere troppo concentrati su "anni di esperienza" con vari campi e competenze.

L'obiettivo finale è un track record di clienti soddisfatti; oltre alle competenze hard e soft, ciò dimostra la capacità dell'ingegnere di passare ad aree sconosciute. È anche un forte incentivo per i freelance a non avventurarsi in nuovi campi prima che siano pronti a farlo.

Trovare il giusto equilibrio

Quando le competenze generali sono sottovalutate, alcuni buoni sviluppatori sono inattivi e alcuni buoni progetti sono a corto di personale o fuori budget. Richiedere un perfetto abbinamento di competenze è come esigere un lavoro in loco, in quanto rende più difficile far coincidere l'offerta (manodopera qualificata) con la domanda (lavoro gratificante).

Niente di tutto questo è un argomento contro l'esperienza di dominio; avrà sempre importanza e sarà profumatamente ricompensato. Dovremmo semplicemente tenere a mente che anche le competenze generali contano più di quanto sia evidente.