Affrontare il codice legacy aiuta a evolvere come programmatore? [chiuso]

18

Sono uno sviluppatore Java con un po 'più di un anno di esperienza che mi colloca da qualche parte sopra un giovane, ma non ancora tra gli sviluppatori di livello medio. Recentemente mi è stato offerto un progetto a lungo termine che riguarda lo studio di un codice di applicazione bancaria esistente per 4 mesi e quindi l'introduzione di modifiche quando necessario. Essendo un programmatore non esperto, sto cercando dei modi per svilupparmi e mi chiedo cosa possa dare un simile progetto.

Considereresti di occuparti di un'applicazione scritta grande e probabilmente non così ben scritta come una buona pratica per un principiante?

    
posta svz 29.07.2013 - 22:07
fonte

6 risposte

34

La risoluzione dei problemi relativi al codice esistente è un ottimo modo per svilupparsi come programmatore. Se il codice è cattivo, imparerai l'impatto degli errori che hanno commesso e forse eviterai alcuni di loro mentre stai progettando. Se il codice è buono, imparerai qualcosa su come creare un'applicazione gestibile.

Imparerai anche a gestire la complessità di una vera applicazione aziendale. Dato che questo è nel settore bancario, imparerai cose come la regolamentazione federale e i controlli contabili interni che potresti non aver mai nemmeno pensato. Queste sono cose buone da sapere quando ti viene chiesto di progettare qualcos'altro nel mondo finanziario. E la programmazione finanziaria può essere un settore piuttosto redditizio in cui lavorare, quindi fare esperienza bancaria può essere molto buono per te.

Potresti persino imparare che solo perché qualcosa è stato scritto 15 anni fa, in una lingua che preferiresti non usare, non è necessariamente negativo. Dopo tutto, ha funzionato con successo tutto questo tempo.

Se, come con la maggior parte delle applicazioni legacy, l'applicazione non ha test delle unità, devi essere sicuro che una modifica non influirà su qualcos'altro, potresti imparare come aggiungere quel test e come vendere la gestione sul perché aggiungere questo test è una buona idea.

    
risposta data 29.07.2013 - 22:17
fonte
8

Penso che sia una pratica eccellente per un principiante chiunque. Imparare dagli altri può essere molto efficace.

La vera sfida è non trovare errori, ma entrare nella testa dell'altro sviluppatore e cercare di capire why il codice è stato scritto in quel modo. A volte è perché erano sciatti, ea volte è perché avevano un buon motivo. Supponiamo che lo sviluppo sia almeno buono come te, ma potrebbe avere avuto più conoscenza del dominio.

    
risposta data 29.07.2013 - 22:17
fonte
6

Questa è una buona pratica per qualsiasi sviluppatore in qualsiasi momento della loro carriera. Se riesci a rivedere e analizzare il software esistente e a trovare modi per migliorarlo, dimostrerai di essere un valido sviluppatore. Non solo imparerai come altri hanno progettato e sviluppato il software, ma lungo la strada imparerai cosa non fare, che è una conoscenza preziosa di per sé.

Se sei pronto per la sfida, affronta questo progetto e rendilo migliore.

    
risposta data 29.07.2013 - 22:16
fonte
2

Ti aiuterà assolutamente, ma devi stare attento.

Devi assicurarti di imparare dal codice precedente. Come fai a sapere cosa è buono e cosa è male? Forse puoi riconoscere i pro ei contro di diversi modelli / metodi, ma se fossi uno sviluppatore junior appena agli inizi, potresti non essere in grado di farlo.

E rimani troppo a lungo in quel primo lavoro, e potresti non essere in grado di apprendere o costruire abbastanza competenze e finire lì bloccato lì.

    
risposta data 01.08.2013 - 09:50
fonte
2

L'eredità può significare qualsiasi cosa, ma in base al tuo commento "non così ben scritto" assumerò che Legacy significhi tecnologie e modelli "cattivi" o almeno "obsoleti". Se il codice legacy è buono, non ti trattenere e impara ogni riga di esso.

Non penso che ci siano abbastanza chiari avvertimenti contro il tipo di lavori e progetti che distraggono la tua carriera e ti fanno rimanere bloccato in buche senza valore su questo thread fino ad oggi.

Avviso di analogia sportiva: pensi che un sostenitore di linea della NFL impari di più e diventi più prezioso giocando nella squadra con il peggior record o il migliore? La mia risposta: non solo hanno più valore aver giocato per le migliori squadre, ma probabilmente hanno raccolto le migliori pratiche e conoscenze e hanno evitato di cogliere pratiche e atteggiamenti di fine carriera.

C'è un sacco di terribili codici anti-pattern là fuori che in realtà funzionano per il business e pagano molti stipendi per sviluppatori. Propongo che uno sviluppatore che non ha visto abbastanza codice fatto il modo "giusto" potrebbe confondere il codice anti-modello per una soluzione legittima a un problema. L'azienda potrebbe dire che la soluzione funziona, ma non è quella che si desidera sul proprio curriculum o quella che si potrebbe vantare con altri sviluppatori. Questo è anche rilevante solo se il tuo percorso di crescita personale include ottenere il rispetto dei tuoi colleghi di ingegneria e non solo aumentare temporaneamente il reddito di qualsiasi azienda per cui lavori (Sembra male, ma alla fine, la migliore ingegneria fa assolutamente la maggior parte del denaro IMO) .

Sfortunatamente c'è molto codice e molto tempo che può passare prima che venga rivelato il debito tecnologico. E quel debito tecnologico viene di solito riconosciuto esattamente quando è troppo tardi. Chiunque potrebbe aver tentato di fermare il debito tecnologico o anti modelli prima, avrebbe potuto essere messo da parte a causa della spesa extra percepita o della mancanza di comprensione della scalabilità ect. È nostro dovere in quanto ingegneri esporre subito il debito tecnologico. Progetti senza ingegneri esperti sono a rischio di colpire un muro di mattoni ad un certo punto, in realtà tutti i progetti anche con sviluppatori di talento. La maggior parte delle aziende considera "qualche punto" come un sacco di tempo per risolverlo in seguito. Ciò rende le scelte di lavoro per gli sviluppatori emergenti una questione molto complicata. Indica inoltre gli obiettivi e le mentalità completamente diversi tra sviluppatori e aziende e quanto sia complicato colmare il divario.

L'obiettivo degli ingegneri è quello di "includere" un vero lavoro scientifico e una considerazione progettuale mentre l'obiettivo delle imprese è quello di "escludere" costi e tempi non necessari. Poiché gli ingegneri spesso non sanno quale sia il livello di sforzo e di tempo fino a quando lo stato finale non viene effettivamente eseguito, lo sviluppo del software si sviluppa come qualsiasi buon dramma con personaggi come agile, scrum e kanban che interpretano ruoli di primo piano.

Un take away potrebbe essere quello di stare lontano dal codice sbagliato finché non hai visto abbastanza codice buono da non essere "corrotto". Mi piace dire che gli sviluppatori senior creano soluzioni semplici a problemi complessi. Come gli sviluppatori saggi, junior di livello medio creano soluzioni complesse per problemi semplici e complessi.

Un altro take away potrebbe essere che devi lavorare su codice buono e cattivo in diversi punti per ottenere comprensione. Se non l'hai fatto, allora vai a prenderlo e preparati a disimparare tutto quando ti imbatti in un sistema migliore. Penso che questa sia probabilmente una traiettoria più comune per la maggior parte degli sviluppatori.

Quest'anno sono prevenuto perché mi sento come se stessi scalando una montagna di "salsa segreta" estremamente complicata. Mentre aumenterò la mia capacità di decifrare alcuni dei peggiori pattern che abbia mai visto, è così "personalizzato" e "unico" che non credo che la mia lotta aumenterà la mia commerciabilità o la mia abilità utilizzabile nel mio futuro.

Al fine di mantenere la mia sanità mentale, mi sto solo muovendo a ritmo sostenuto e abbracciando ogni blocco stradale come una par per il corso. Avendo appena rivisto i miei obiettivi annuali con il mio capo che includono scavare da questo buco dell'eredità, penso che potrebbe essere una salita sacrificale. Potrei sopravvivere al processo con recensioni negative e lentezza percepita. Questo è un avvertimento realistico e premonitore per quelli di voi che si chiedono quale lavoro intraprendere.

Disclaimer: questo post vivrà molto più a lungo delle mie opinioni, quindi prendilo con un pizzico di sale. Domani potrei amare il codice legacy! (Dubbio).

    
risposta data 22.04.2015 - 20:58
fonte
1

Dipende molto da come definite "legacy" in questo contesto. Lasciatemi fare un esempio da C e C ++. Molti programmatori C ++ chiamano una pratica sbagliata usare le stringhe C in applicazioni C ++, altri richiedono nessuna miscelazione, mentre altri, a loro volta, sostengono che sia semplicemente e assolutamente inutile usare qualsiasi bit di codice C perché sono vecchi, cioè " codice "legacy". Alcuni vanno oltre ed evitano l'uso di pre-C ++ X (sostituisci la 'X' con il numero appropriato) idiomi standard, stile - questa è la sintassi, per il suo stile "legacy".

Lasciando da parte i problemi di prestazioni degli stream e delle stringhe C ++ e alcune particolarità di STL, è sicuramente una buona pratica dare un'occhiata a ciò che c'è nella tua amata direttiva del preprocessore #include <string.h> . Se segui il percorso dell'implementazione e ti trovi su una macchina unix / linux su /usr/include/string.h (e ottieni sorgenti di implementazione libc, ad esempio, da gnu.org ) e leggi strcmp.c o strlen.c o strtok.c , scommetto che ascolterai" Che bel mondo ".

C'è tuttavia un avvertimento su questa prosa, vale a dire classi e metodi deprecati. In Java un sacco di materiale legacy è ancora accessibile da un ambiente recente, ma se ricordo correttamente, non tutto. Nel settore IB, dalla mia esperienza personale, non tutto il software è scritto da buoni programmatori. Molti laureati avevano avuto un'esposizione praticamente nulla alla programmazione del mondo reale prima di iniziare con una posizione di analista / sviluppatore. Ma non generalizzare questa affermazione. Conosco molte persone che utilizzano Java e C # al centro di ambienti ad alto throughput e bassa latenza. Non sono d'accordo con loro, ma, beh, per fortuna sono affari loro. Se fossero diventati veri e propri HFT, si sarebbero spinti in coda. Ma ancora una volta, facilmente dedotta da questa frase è l'assunzione (e in molti casi il fatto) che il codice Java è altamente ottimizzabile. E se riesci ad eccellere nell'ottimizzazione, se necessario, non solo risolvendo questo o quello, diventerai inestimabile come un dev. È molto soddisfacente capire come hai contribuito. Ci andrei.

    
risposta data 30.07.2013 - 13:31
fonte

Leggi altre domande sui tag