In primo luogo, nonostante il modo in cui è formulata la tua domanda, non c'è fine a nessuno studio, specialmente non nel nostro campo, dove nuove cose spuntano più velocemente di quanto tu possa leggere su di esse. Detto questo, quando vuoi migliorare, ci sono le seguenti categorie che prenderei in considerazione. Per il massimo beneficio / ROI dovresti scegliere qualcosa dalla tua area più debole, ovviamente.
Conoscenza di base
Pur conoscendo i linguaggi di programmazione e avendo esperienza pratica, spesso si hanno (specialmente autodidatti) aree in cui le questioni fondamentali di base sono lasciate incomplete. Pensa a cose come strutture dati, algoritmi, strategie cache, funzioni hash, ...
Si noti che ciò include anche le basi dei linguaggi di programmazione: tutto, dai compilatori, tecniche di ottimizzazione e sistemi di tipi, fino alla teoria delle categorie, monadi e simili.
Se ti viene insegnato bene, poiché hai perseguito un titolo universitario per diversi anni, è probabile che tu sia già forte in questa categoria (lungi dall'essere ovviamente finito, ma una base solida). Altrimenti, prova a leggere alcuni libri in queste aree per scoprire se c'è qualcosa che non sapevi nemmeno che mancasse nel tuo repertorio. Questa categoria è la più semplice per sopravvalutare te stesso.
Conoscenza paradigmatica
Sono sempre sbalordito quando si presentano i programmatori che pensano di essere tutti-so-tutto, eppure sono completamente ignoranti su altri paradigmi tradizionali. Se pensi che l'orientamento agli oggetti ne sia la fine, questa è la tua categoria da migliorare. Se pensi che esista anche la programmazione funzionale e che potresti anche aver sentito parlare della programmazione logica, allora è ancora una buona scelta. Esistono molti più paradigmi e apprenderli ha il profondo effetto di darti qualcosa di simile a una nuova visione del mondo della programmazione.
Non dimenticare: ci sono spesso (piuttosto filosofiche nella loro natura) argomenti su ciò che può essere considerato un paradigma o meno. Non farti seguire da questi. Il tuo obiettivo dovrebbe essere quello di ampliare il tuo orizzonte e ciò significa apprendere queste cose, indipendentemente dal fatto che qualcun altro consideri X un paradigma o no, non fa alcuna differenza.
Conoscenza specialistica
Il più semplice di tutti - e il meno utile allo stesso tempo. Certo, puoi impegnarti in una sola tecnologia e conoscerne tutti i dettagli, ma dovresti essere pronto a pagare il prezzo. Le tecnologie invecchiano e lo fanno a una velocità sempre crescente, il che rende quasi una garanzia che il tempo investito qui sarà inutile diversi anni lungo la strada.
Anche qui il problema della diminuzione del rendimento. Per la stessa natura essere uno specialista in qualcosa significa che devi passare innumerevoli ore su quell'argomento ristretto, e quindi, per definizione, ci vorrà molto tempo per imparare qualcosa di nuovo e quella nuova cosa sarà un minuscolo puzzle che è non cambierà le opinioni di nessuno su nulla.
Conoscenza del dominio
Sia perché è il dominio del tuo lavoro, o semplicemente basato sul tuo interesse personale, ma essere un esperto di informatica e un determinato dominio è molto prezioso e gratificante. Non sto parlando di aree secondarie di CS qui, come la computer grafica o l'IA. Si noti invece che i computer hanno preso piede nella vita di tutti e che rende ogni altro campo soggetto ai computer e in un'area in cui è possibile entrare.
Questo rientra chiaramente nella categoria di "fuori dal tuo campo", eppure non è un acuto "fuori" matematico, ma piuttosto un campo di applicazione. Considera la medicina: non ti sto suggerendo di diventare un medico. Tuttavia, imparare le basi della medicina per applicare le tue conoscenze esistenti sull'informatica ai problemi di quel campo è davvero utile. Ciò spazia dalle tecniche di visualizzazione, oltre alla robotica, ai sistemi esperti e alla semplice gestione dei dati per la contabilità / amministrazione. Mentre hai già fatto tutto ciò, farlo in un altro dominio può finire per essere un'esperienza completamente nuova.
Tieni presente, tuttavia, che questo è un cambiamento molto più radicale nella tua direzione rispetto alle altre categorie. Potresti non avere alcun contatto con quel campo nel tuo lavoro quotidiano, il che rende estremamente difficile farlo. Può anche significare cambiare lavoro. Inoltre, avrai bisogno di una sorta di certificazione per il tuo nuovo dominio: dopotutto, sei un principiante completo di quel dominio e dovrai competere con i laureati di studi interdisciplinari, che hanno già iniziato il loro viaggio per diventare esperti in quella nicchia.
Conoscenza Supplementare
Come ha aggiunto Mike Brown, c'è anche l'area della conoscenza che in qualche modo accompagna il tuo lavoro attuale, ma non è strettamente necessaria. Non è necessario essere un project manager per conoscere la gestione del progetto, ma come al solito, ulteriori conoscenze ti daranno una visione più ampia di come spunta l'altra parte. Si potrebbe anche generalizzare questo al punto di concentrarsi sulle competenze trasversali. Immagino che chiunque abbia lavorato a un vero progetto con altre persone ne conosca il valore.