2012-01-20 16 views
5

Ci scusiamo se questa domanda è troppo aperta per il sito, ma mi è sembrato il posto migliore per chiederlo.Risorse per la creazione di competenze di ingegneria del software

Sono un programmatore autodidatta con poca matematica nel suo background formativo e che, nel corso di una carriera di dieci anni, si è mosso lentamente dallo scripting web front-end e dallo sviluppo web all'ingegneria del software middle e data-tier . Di conseguenza ci sono aree della mia conoscenza ed esperienza che sono un po 'carenti.

Dopo una recente recensione con il mio manager, mi è stato indicato che superare queste lacune era tutto ciò che c'era tra me e una promozione a un ruolo di ingegnere senior. Tuttavia, per ottenere ciò, dovevo trovare da solo un approccio strutturato all'apprendimento e dimostrare che avevo preso in considerazione ciò che dovevo sapere.

Personalmente identificherei le mie aree di debolezza come segue. Siate consapevoli che il problema in molti casi non è che non capisco, tecnicamente, come funzionano queste cose, ma che non vedo dove sia o non sia appropriato applicarle. Ad esempio, so cos'è un'interfaccia e, tecnicamente, quello che fa, ma ho difficoltà a distinguere quando è opportuno utilizzare un'interfaccia su, diciamo, un gruppo di classi OO correlate che ereditano da una classe base. Quindi è un po 'più ignoranza del buon design del software di quanto non sia l'ignoranza tecnica - ho difficoltà ad apprezzare, digerire e lavorare su cose come i sistemi con accoppiamento lento.

  • Interfacce
  • Delegati
  • Design Patterns
  • architettura di rete & protocolli

Inoltre ho mai fatto alcune delle cose di basso livello come compilatori e simili. A volte mi chiedo se farebbe una grande differenza per la mia capacità di scrivere codice che non è solo efficace ma ben ottimizzato se avessi una migliore conoscenza di questo tipo di materiale.

A volte la preoccupazione che non riesco a identificare punti deboli nel mio set di competenze perché non so come fare le domande giuste mi rapisce. Così, nella speranza che ho inquadrato la questione correttamente, mi piacerebbe vostri suggerimenti su:

  • Dal suono di quello che sto attualmente mancano ci sono altri argomenti che dovrei pensare guardando?
  • Dove sono alcune buone risorse per l'apprendimento di questo materiale?
  • Esistono corsi strutturati e autodidatti su cui lavorare che siano rilevanti? Purtroppo non ho tempo per prendere una qualifica formale.

Cheers, Matt

+0

Matt Vorrei anche partecipare a incontri serali basati su. Faccio fatica ad arrivare a tutti (come te ho dei bambini piccoli). Ma http://dotnetdevnet.com/ e http://cms.vbug.net/Regions/VBUG-Bristol/Bristol-Events.aspx sono locali e molto buoni. –

+0

Matt, Sono in una situazione simile ora. Qualche consiglio basato sulla tua esperienza. – jaamit

risposta

8

Ero un autodidatta coder non molto tempo fa in modo che possa riguardare la vostra posizione. Da allora ho spedito 10 milioni di applicazioni LOC, quindi ho dovuto sviluppare il discernimento. 3 cose mi aiutano a ottenere l'ingegneria del software: libri, codice e persone.

Prima di tutto, la buona ingegneria riguarda la bellezza, la bellezza di un design elegante, di un meccanismo efficiente. È necessario sviluppare questo senso per la bellezza e per farlo è necessario vederlo e discuterne.

Libri come SICP, Refactoring, Head First Design Patterns e Beautiful Code sono tutti di codice bello/migliore. Il più delle volte non parlano di una lingua di per sé (o di lingue esotiche). Il codice completo è anche interessante ma in qualche modo più basso livello.

La lettura online del codice è anche un buon modo per educare i tuoi gusti. Non ho alcun esempio in mente ma questo è un common question, dovresti trovare facilmente alcune idee. Inoltre, la creazione di un'applicazione ambiziosa (un gioco, modellatore 3d, server Web, database) è una buona prattica: è probabile che lo si ripeti 2 o 3 volte per avere un'architettura migliore.

Anche le persone sono molto importanti. Se trovi un/qualche architetto/i software/i appassionato/i con cui discutere, sarai in grado di confrontare la tua opinione su cosa sia la bellezza. Sto ancora digerendo alcune discussioni che ho avuto con il mio manager alcuni anni fa.

Questo "giro" è un processo continuo, quindi non scoraggiarti e vai avanti. Un giorno, vedrai un brutto codice con un'implementazione ovvia alternativa, una che potresti discutere e confrontare oggettivamente meglio dell'originale.

1

Avere un progetto per animali domestici che gira attorno a te è un refactoring continuo che va molto lontano nell'autoeducazione.

In tutta onestà, darei un'occhiata ad alcuni dei corsi aperti pubblicati dal MIT o dal Caltech e simili. Scegli un argomento che ritieni possa avvantaggiarti e impartire una lezione. Cerca di capire i concetti nel miglior modo possibile. Mentre continui a codificare e rifattare il tuo progetto per animali domestici, inizierai naturalmente ad aggiungere cose che stai imparando.

Hai menzionato di non aver mai toccato i compilatori: dare una lezione a quel corso e vedere dove ti trovi. Con decine di programmi CIS completi disponibili su YouTube, è facile trovare un istruttore con cui ti piace imparare. Mi butto fuori Introduzione agli algoritmi come insegnato da Leiserson e Demaine come un punto di lancio:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

Lei parla di "Io non, purtroppo, non hanno il tempo di prendere una qualifica formale." Formale o no, ci vorrà un buon investimento di tempo per farlo accadere. Scegli il percorso migliore per te e seguilo. Assicurati di mettere in pratica le tue conoscenze per solidificare e far crescere la tua comprensione.

Problemi correlati