Come posso apprendere le applicazioni pratiche dei principi di ingegneria del software?

6

Ho problemi nel portare l'ingegneria del software che ho imparato a scuola nei miei progetti nel mio lavoro.

I pattern sono tutti abbastanza facili da applicare, ma venire con architetture e strutture generali di classe è difficile per me. È così aperto e non so mai come affrontare i miei progetti, ad eccezione di qualsiasi progetto che si adatti perfettamente all'architettura MVC.

Ho lavorato su progetti sempre più grandi. Il prodotto finale funziona perché so testare bene, ma arrivarci è un inferno e tornare ad aggiungere funzionalità è peggio. Il mio lavoro di solito si riduce alla pianificazione dal punto di ingresso delle applicazioni e al pensiero attraverso i casi d'uso. Funziona alla fine, ma finisco con una bassa coesione e un codice strettamente accoppiato. Ho avuto abbastanza esperienza in uscita da scuola per iniziare un lavoro con più responsabilità rispetto ai programmatori entry level, quindi non ho i benefici di imparare da un team più esperto.

Il problema è che sono molto inefficiente. Una volta il mio capo ha detto che se avessi realizzato questi progetti più velocemente e con lo stesso livello di test potrei fare di più.

Quindi devo insegnarmi ingegneria del software. Ho letto molti libri, ma sono un po 'troppo astratti; Ho bisogno di qualcosa di concreto. Dove devo andare per imparare l'ingegneria del software di progetto reale?

Modifica Può essere d'aiuto sapere che a volte finisco con un codice pulito. Mi ci vuole davvero molto tempo per arrivarci, o mi arrendo e lo hackerò perché so che funzionerà. La maggior parte delle persone dirà che questo arriva con l'esperienza, ma ci deve essere un posto dove posso andare che dice: se il tuo progetto è così questo e questo, prova queste architetture.

    
posta justausr 15.12.2011 - 15:42
fonte

3 risposte

3

Acquista un libro.

Modelli di Enterprise Application Architecture .

Potresti anche iniziare a utilizzare il Pattern di interfaccia separato insieme a un inversion of control contenitore poiché ti obbliga a disaccoppiare il tuo codice.

Lavorare contro le interfacce rende anche i test delle unità molto più semplici e per il refactoring delle parti del tuo codice.

    
risposta data 15.12.2011 - 15:59
fonte
14

I had enough experience coming out of school to start as a Sr. level programmer (after all, a lot of older sr. level programmers don't know this stuff), so I don't have the benefits of learning from a more experienced team.

Sono completamente e sinceramente in disaccordo con ciò che viene detto qui. Il problema esatto che stai descrivendo è quello in cui hai solo bisogno di esperienza. Potresti essere uno sviluppatore di talento, potresti avere un sacco di abilità moderne e aggiornate, ma "livello senior" è una misura dell'esperienza.

The problem is I'm very inefficient.

Questo perché sei relativamente nuovo al mestiere. Nessuno esce da scuola come esperto. Ci sono cose che non puoi imparare a scuola e puoi imparare solo da anni di esperienza. Stai andando a scrivere del codice cattivo lungo la strada. Noi tutti facciamo. Imparerai quelle lezioni. Questo va bene. Avere imparato quelle lezioni è ciò che rende uno sviluppatore "di livello senior".

Ad esempio, dai uno sguardo ai pattern di progettazione accettati dal settore nel gruppo di quattro libri . Questi non sono stati scritti come un esercizio accademico. Non sono stati scritti perché le persone che li hanno scritti erano più intelligenti di altri sviluppatori. Sono stati scritti perché le persone trascorrevano anni nell'industria a risolvere problemi e migliorare il loro mestiere, arrivando infine a modelli riutilizzabili.

Devi passare attraverso la stessa cosa. Esistono già molte conoscenze del settore che puoi imparare, ma non aspettarti di essere un esperto subito. L'abilità richiede tempo.

    
risposta data 15.12.2011 - 15:49
fonte
2

I had enough experience coming out of school to start as a Sr. level programmer

Non sono sicuro che questo sia il tuo ego che fugge con il tuo buon senso o se sei semplicemente ingenuo? Forse entrambi. Imparare i principi accademici è completamente diverso rispetto a vivere in realtà in una situazione in cui un buon processo chiaramente ti ha aiutato, o il team o un anti-modello ti costa caro. Realmente non lo sai e non puoi pretendere di essere un esperto in qualsiasi cosa.

My boss, being pretty savvy, knew this and hired me in between entry level and sr level pay

Sembra terribilmente presuntuoso ... ti preghiamo di prendere in considerazione la revisione di questo.

Where should I go to learn real project software engineering?

Sei lì. La vera ingegneria del software non assomiglia a ciò che hai sperimentato in Academia, è il processo del software di ingegneria in conformità con le buone pratiche, gli standard e la qualità per risolvere i problemi del mondo reale.

Questo non include la pontificazione sui pro e contro dell'algoritmo di Djikstras per alcuni millisecondi di esecuzione, né altre varie forme accademiche di masturbazione mentale. Devi imparare attraverso l'esperienza diretta quali cose funzionano, quali cose non funzionano e cosa può essere fatto con risorse e tempo limitati.

    
risposta data 15.12.2011 - 16:05
fonte

Leggi altre domande sui tag