Cosa può studiare uno sviluppatore di software senior tecnicamente competente per continuare a migliorare [chiuso]


15

Supponiamo che tu stia programmando da oltre 10 anni. Conosci molte lingue, con alcune di quelle a livello molto dettagliato. Hai progettato architettura per soluzioni, lavorato e realizzato progetti più grandi. Hai studiato modelli, migliori pratiche, linee guida di codifica efficaci, unit test, multi-threading, ecc.

E poi lentamente sviluppi la sensazione che la maggior parte dei libri che leggi, fornisca informazioni sempre meno preziose per 100 pagine di testo. Quindi iniziano a dare rendimenti decrescenti. Impari ancora, ma non migliorerai più a passi da gigante.

Perché l'apprendimento diventa meno produttivo rispetto a come era prima?

Allora, cambiava il tuo modo di pensare, ti insegnava cose nuove e allargava i tuoi orizzonti che in seguito migliorarono la tua attuale professione o permisero di inventare / gestire / costruire qualcosa di nuovo. Perché non è più il caso?


9
Per le domande frequenti , le domande su cosa dovresti fare dopo (progetto, libro, tecnologia o lingua) sono fuori tema. Posso capire il tuo punto di vista, ma non puoi assolutamente sapere tutto quello che c'è da sapere sullo sviluppo del software. Il tuo problema è che ti sei annoiato, forse caduto in una carreggiata intellettuale. La cosa che ti ispira a uscire da quella routine dipende molto da te e probabilmente sarebbe qualcosa di completamente diverso per qualcun altro. Ma ecco la risposta: esci dalla tua zona di comfort . Scopri i sistemi embedded, la matematica, la grafica o qualunque cosa ti interessi.
Caleb,

2
Non vedo questa domanda limitata su cosa dovrebbe fare il PO successivo. Si tratta piuttosto di approcci generali che i professionisti hanno a disposizione per promuovere il loro studio. Forse può essere formulato meglio, ma non legge come "che cosa dovrei io fare dopo" a me.
Frank

3
Beh, onestamente non so quali domande non siano fuori tema in questi giorni. In realtà sta diventando difficile trovare qualche discussione interessante qui di recente. Ok, w / e, blocca l'argomento ...
Coder

2
Credo che la domanda possa essere modificata per riaprirla. Per quanto ne so, il problema presentato: "rendimenti decrescenti ... studio di schemi, migliori pratiche, linee guida di codifica efficaci, unit test, multi-threading" è abbastanza argomento per i programmatori
moscerino

2
Otterrai una comprensione più completa di una materia quando provi a insegnarla a qualcun altro.
JeffO

Risposte:


23

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.


+1, in particolare per "Conoscenza del dominio", è qualcosa che ha funzionato almeno per me.
Doc Brown

1
Sono d'accordo al 100% con quello che dici. Mi sto interessando molto alle conoscenze di base più profonde. Per l'effetto che mi sono iscritto ad un corso sui compilatori in questo momento. Ciò che non hai toccato è ciò che classificherei come conoscenza supplementare: progettazione grafica, gestione del progetto, ecc.
Michael Brown,

+1 per il paradigma - ho fatto OOP / procedurale per circa 10 anni (e stancandomi di esso) e poi ho iniziato a imparare la programmazione funzionale e i miei occhi erano aperti a un mondo completamente nuovo.
paul

9

Penso che il software sia in continua evoluzione e in quanto tale si pone l'accento sul miglioramento costante. Capisco da dove vieni, mi sono sentito un po 'simile di recente e ora sto perseguendo un MCSM in SQL Server.

Impara la nuova lingua o framework successiva o ciò che è attualmente "hot". Ogni anno viene fuori una tecnologia, una struttura o un linguaggio, o raggiunge una massa critica che diventa una parola d'ordine a sé stante. Posso pensarne alcuni negli ultimi anni: node.js, Ruby, jQuery. Ciò avrà probabilmente un impatto anche sul tuo modo di pensare per altre piattaforme, ad esempio guarda cosa ha fatto ROR a Java con Grails.

C'è sempre spazio per il miglioramento. Penso che sia molto improbabile che tu possa essere un esperto di tutto, e leggo molto e imparo sempre. Sono d'accordo con quello che dici sull'apprendimento sempre meno per 100 pagine, ma questo è prevedibile quando sei un esperto in materia.

In termini di cosa puoi fare, ecco alcuni suggerimenti:

  1. Tieniti aggiornato sui cambiamenti della comunità e su ciò che le persone "stanno entrando". Impara le nuove pile, almeno in modo da avere abbastanza per raccomandarle dove appropriato

  2. Partecipa a siti di domande e risposte come questo, in cui puoi comunicare le tue conoscenze sugli altri. Se ti prendi il tempo di leggere i contributi degli altri, probabilmente imparerai qualcosa e, per lo meno, vedrai le prospettive delle altre persone.

  3. Scegli un hobby che abbia qualche relazione con il tuo lavoro. Ci sono molti hobby con crossover, pensare a AI, lego mindstorms, RaspPi, ecc.

  4. Oltre a cercare di aumentare la larghezza delle tue conoscenze, cerca di aumentare la profondità. Ad esempio, scopri come funziona EF sotto la copertura, in modo da poter diagnosticare quegli strani casi angolari piuttosto che usare solo il framework.

  5. Perseguire la certificazione di alto livello solo per dimostrare che conosci le tue cose

Personalmente, ti dirò cosa mi sta aprendo la mente in questo momento. Sto leggendo 97 cose che ogni architetto del software dovrebbe sapere e lo sono solo in parte, ma ha sollevato molti consigli prudenti. Il libro è libero di leggere online al link che ho fornito.

Per quanto riguarda l'hobby che alla fine ho intrapreso, mi sono appassionato alla diagnostica dei veicoli (con il computer, ovviamente) che mi ha permesso di mantenere completamente la mia auto. Mi piace davvero molto il tempo che trascorro lavorando con le mie mani.


Divertente, conosco uno degli autori di 97 Things;)
Michael Brown,

È un bel libro
Sam

Prego. È fantastico non è vero.
Sam

1

Dopo un certo punto, hai imparato abbastanza su un argomento specifico che ti senti a tuo agio nel raccogliere nuove conoscenze su una base ad hoc. Quando ritieni che non ci sia molto altro da imparare sul tuo campo primario, è tempo di iniziare ad acquisire conoscenze supplementari che completano le tue conoscenze primarie.

Per quanto mi riguarda, mi sto immergendo in UX e graphic design perché ritengo che ciò mi renderà migliore come sviluppatore per fornire non solo eleganti strutture in codice ma anche eleganti interfacce per l'utente finale.

Altri argomenti che è possibile affrontare includono la gestione dei progetti, l'analisi aziendale, l'amministrazione del sistema e il miglioramento dei processi software. Se ti trovi a lavorare in un dominio specifico, potrebbe essere logico approfondire quel dominio. Ad esempio, ultimamente ho lavorato molto nel settore dei servizi finanziari. Mi sono iscritto a corsi su Coursera sulla modellazione finanziaria e simili che mi aiuteranno a parlare con i miei clienti alle loro condizioni.

C'è sempre altro da imparare, basta pensare fuori dagli schemi.


0

Ci sono due parti in questa domanda: perché è più difficile da imparare e cosa puoi fare?

La prima parte è piuttosto semplice: gli argomenti più avanzati sono più difficili. Per quanto sia difficile imparare a programmare, è un po 'più difficile imparare a progettare bene i programmi e ancora più difficile imparare a progettare applicazioni di grandi dimensioni. Il fatto è che gli argomenti avanzati sono più difficili, altrimenti non sarebbero avanzati. Dovrai dedicare più tempo all'apprendimento; più tempo di pratica per dominarli.

Per quanto riguarda quello che puoi fare, sembri focalizzato sugli aspetti tecnici dell'essere un ingegnere informatico senior. Puoi fare molte più cose per aiutare il tuo team a creare software rispetto all'apprendimento di lingue e framework. Competenze trasversali, come il tutoraggio di altri sviluppatori, i requisiti di negoziazione, la gestione dei progetti, la progettazione del programma, la visione comunicativa, l'implementazione delle norme del team ... Tutte quelle cose importanti necessarie per rendere efficace un team di sviluppatori nel creare software, non solo tu.


-3

Ogni volta che vado sul sito Lambda The Ultimate , davvero non riesco / non riesco a pensare come sto sapendo tutto nel campo dell'informatica.

LtU ti darà un buon punto di partenza per il paradigma e le conoscenze teoriche rimaste da imparare.

"Più sai, più sai quanto poco sai."


1
come risponde alla domanda posta, "Perché l'apprendimento diventa meno produttivo rispetto a come era prima?"
moscerino del

Perché quando vado lì, ci sono articoli con qualcosa come il 90% di cose nuove che devo imparare. Il che è esattamente ciò di cui si lamenta l'OP: il rapporto tra le cose apprese dal numero di righe letto che diventa troppo basso nel suo caso. Non conosci neanche questo sito?
Stephane Rolland,

@gnat, e sbagli la domanda , intitolata: "Che cosa può fare uno sviluppatore di software senior tecnicamente competente per continuare a migliorare"?
Stephane Rolland,

hai letto il contenuto della domanda dopo il titolo?
moscerino del

@gnat Sì, certo, ho letto la sua domanda: è piuttosto un'affermazione se OP chiede solo perché : dopo 10 anni un cosiddetto software engineer senior legge libri che non cambiano più gli orizzonti perché un senior sa molto. Sì, l'ho letto. Ho sorriso. Mi ripeto "Più sai, più sai quanto poco sai."
Stephane Rolland,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.