Le traitement du code hérité aide-t-il à évoluer en tant que programmeur? [fermé]

18

Je suis un développeur Java avec un peu plus d'un an d'expérience, ce qui me place quelque part au-dessus d'un junior, mais pas encore parmi les développeurs de niveau intermédiaire. Récemment, on m'a proposé un projet à long terme qui consiste à étudier un code d'application bancaire existant pendant 4 mois, puis à introduire des modifications si nécessaire. En tant que programmeur peu expérimenté, je recherche des moyens de développer et je me demande ce qu'un tel projet pourrait apporter.

Envisageriez-vous de traiter une grande application probablement moins bien écrite comme une bonne pratique pour un débutant?

svz
la source
doublon possible de Devenir un "développeur de maintenance"
gnat
1
Apprendre des erreurs des autres est le moyen le plus sûr d'acquérir de l'expérience ...
Michael Borgwardt
J'ai étudié le code d'autres peuples pendant environ un mois récemment. Grande expérience d'apprentissage, mais aspiré beaucoup de temps. Nécessaire pour expérimenter avec des thés sédatifs.
usr
Il peut y avoir un bon Java mais c'est plus difficile à trouver pour un junior. dev que les devs de la plupart des autres antécédents linguistiques, j'imagine basé sur l'expérience qui est principalement en tant que développeur web frontal devenu généraliste qui a été exposé à une très grande variété de backends. Le problème, je pense, est que Java, le langage est parfaitement utilisable, mais Java la culture consiste à jouer absolument tout aussi sûr et sans blâme que possible.
Erik Reppen

Réponses:

34

Dépanner le code existant est un super moyen de se développer en tant que programmeur. Si le code est mauvais, vous apprendrez l'impact des erreurs qu'ils ont faites et peut-être en éviterez quelques-unes lors de la conception. Si le code est bon, vous apprendrez quelque chose sur la façon de créer une application maintenable.

Vous apprendrez également à gérer la complexité d'une véritable application métier. Comme il s'agit du secteur bancaire, vous apprendrez des choses comme la réglementation fédérale et les contrôles comptables internes auxquels vous n'avez peut-être jamais pensé. Ce sont de bonnes choses à savoir quand on vous demande de concevoir autre chose dans le monde financier. Et la programmation financière peut être un secteur très lucratif dans lequel travailler, donc acquérir une expérience bancaire peut être très bon pour vous.

Vous pouvez même apprendre que, simplement parce que quelque chose a été écrit il y a 15 ans, dans une langue que vous préféreriez ne pas utiliser, ce n'est pas nécessairement mauvais. Il a fonctionné avec succès tout ce temps après tout.

Si, comme avec la plupart des applications héritées, l'application n'a pas de test unitaire, vous devez vraiment être sûr qu'un changement n'affectera pas autre chose, vous pouvez apprendre comment ajouter ce test et comment vendre la gestion sur la raison pour laquelle l'ajout de ce test est une bonne idée.

HLGEM
la source
2
En effet, si vous allez avoir 4 mois pour étudier le code, vous devriez passer beaucoup de ces 4 mois à ajouter des commentaires qui documentent ce que vous apprenez et à écrire des tests qui prouvent que les composants clés fonctionnent correctement (comme on espère qu'ils le font).
Ross Patterson
1
@ RossPatterson, puisqu'il s'agit de services bancaires, j'espère qu'ils fonctionnent vraiment correctement maintenant. Quoi qu'il en soit, s'il n'y a pas de tests, le risque de faire un changement est énorme dans les opérations bancaires et les tests unitaires pour vous aider à apprendre que le système devrait être une vente facile.
HLGEM
3
La programmation, c'est savoir déplacer les pièces. Comprendre un système, c'est savoir jouer au jeu. Vous ne regretterez pas l'expérience du point de vue du renforcement des compétences. Travailler pour des entreprises qui volent des veuves et des orphelins est quelque chose que votre conscience peut ne pas tolérer.
Meredith Poor
8

Je pense que c'est une excellente pratique pour un débutant . Apprendre de l'expérience des autres peut être très efficace.

Le vrai défi n'est pas de trouver des erreurs, mais d'entrer dans la tête de l'autre développeur et d'essayer de comprendre que whyle code a été écrit de cette façon. Parfois, c'est parce qu'ils étaient bâclés, et parfois c'est parce qu'ils avaient une sacrée bonne raison. Supposons que le développeur était au moins aussi bon que vous, mais qu'il possède peut-être plus de connaissances dans le domaine.

Dan Pichelman
la source
2
Cela vous aide également à comprendre que la méthode que vous pensez qu'ils auraient dû utiliser n'était pas disponible lors de l'écriture du code.
HLGEM
Ce serait formidable de trouver des commentaires de code ou de la documentation de projet dans ces situations. Sinon, ce hack ou cette façon étrange d'implémenter une fonction restera un mystère. Ce développeur peut même ne plus être dans l'entreprise, donc vous n'avez aucun moyen de lui poser des questions à ce sujet.
Radu Murzea
6

C'est une bonne pratique pour tout développeur à tout moment de sa carrière. Si vous pouvez examiner et analyser les logiciels existants et trouver des moyens de les améliorer, vous montrerez que vous êtes un développeur précieux. Non seulement vous apprendrez comment d'autres ont conçu et développé des logiciels, mais en chemin, vous apprendrez ce qu'il ne faut pas faire, ce qui est une précieuse connaissance en soi.

Si vous êtes prêt à relever le défi, prenez ce projet de front et améliorez-le.

Bernard
la source
2

Cela vous aidera absolument, mais vous devez être prudent.

Vous devez vous assurer que vous apprenez du code hérité. Comment savez-vous ce qui est bon et ce qui est mauvais? Peut-être que vous pouvez reconnaître les avantages et les inconvénients de différents modèles / méthodes, mais si vous étiez un développeur débutant, vous ne pourrez peut-être pas.

Et restez trop longtemps dans ce premier emploi, et vous pourriez ne pas apprendre ou développer suffisamment de compétences et vous retrouver coincé là-bas.

ozz
la source
2

Legacy peut signifier autre chose que sur la base de votre commentaire `` pas si bien écrit '', je vais supposer que Legacy signifie `` mauvaises '' ou au moins `` technologies obsolètes ''. Si le code hérité est bon, ne vous retenez pas et apprenez chaque ligne de celui-ci.

Je ne pense pas qu'il y ait suffisamment d'avertissements clairs contre le type d'emplois et de projets qui détournent votre carrière et vous coincent dans des trous sans valeur sur ce fil à ce jour.

Alerte d'analogie sportive: pensez-vous qu'un supporteur de ligne dans la NFL en apprend plus et devient plus précieux en jouant avec l'équipe avec le pire record ou le meilleur? Ma réponse: Non seulement ils ont plus de valeur après avoir joué pour les meilleures équipes, mais ils ont probablement acquis les meilleures pratiques et connaissances et évité de ramasser les pratiques et attitudes de fin de carrière.

Il y a beaucoup de code anti-modèle terrible qui fonctionne réellement pour l'entreprise et paie beaucoup de salaires de développement. Je propose qu'un développeur qui n'a pas vu suffisamment de code fait de la bonne manière pourrait confondre le code anti-modèle avec une solution légitime à un problème. L'entreprise peut dire que la solution fonctionne, mais ce n'est pas celle que vous souhaitez dans votre CV ou celle que vous vanteriez auprès d'autres développeurs. Cela n'est également pertinent que si votre chemin de croissance personnel consiste à gagner le respect de vos pairs en ingénierie et non seulement à augmenter temporairement les revenus de l'entreprise pour laquelle vous travaillez (cela semble mauvais, mais en fin de compte, la meilleure ingénierie fait absolument le plus d'argent OMI) .

Malheureusement, il y a beaucoup de code et beaucoup de temps qui peut s'écouler avant que la dette technologique ne soit révélée. Et cette dette technologique est généralement reconnue exactement quand il est trop tard. Quiconque peut avoir essayé d'arrêter la dette technologique ou les schémas anti auparavant, aurait pu être mis à l'écart en raison des dépenses supplémentaires perçues ou du manque de compréhension de l'extensibilité, etc. Il est de notre devoir, en tant qu'ingénieurs, d'exposer immédiatement la dette technologique. Les projets sans ingénieurs expérimentés risquent de heurter un mur de briques à un moment donné, en fait tous les projets, même avec des développeurs talentueux. La plupart des entreprises considèrent «un certain point» comme suffisamment de temps pour y remédier plus tard. Cela rend les choix de travail pour les développeurs en devenir très compliqués. Il souligne également les objectifs et les mentalités entièrement différents entre les développeurs et les entreprises et la complexité de combler le fossé.

Le but des ingénieurs est d '«inclure» de véritables travaux scientifiques et des considérations de conception, tandis que l'objectif des entreprises est d' «exclure» les coûts et le temps inutiles. Comme les ingénieurs ne savent souvent pas quel est le niveau d'effort et de temps jusqu'à ce que l'état final soit réellement fait, le développement de logiciels se joue comme n'importe quel bon drame avec des personnages comme agile, scrum et kanban jouant des rôles principaux.

Une solution à retenir pourrait être de rester à l'écart du mauvais code jusqu'à ce que vous ayez vu suffisamment de bon code pour ne pas être «corrompu». J'adore le dicton selon lequel les développeurs seniors créent des solutions simples à des problèmes complexes. Comme les développeurs sages de niveau intermédiaire, ils créent des solutions complexes pour des problèmes simples et complexes.

Un autre point à retenir pourrait être que vous devez travailler sur du bon ET du mauvais code à différents points afin de mieux comprendre. Si vous n'avez fait ni l'un ni l'autre, allez-y et soyez prêt à tout désapprendre lorsque vous rencontrerez un meilleur système. Je pense que c'est probablement une trajectoire plus courante pour la plupart des développeurs.

Je suis partiale cette année parce que j'ai l'impression de gravir une montagne extrêmement complexe de «sauce secrète». Bien que j'augmente ma capacité à déchiffrer certains des pires schémas que j'ai jamais vus, c'est tellement `` personnalisé '' et `` unique '' que je ne pense pas que ma lutte augmentera ma commercialisation ou mes compétences utilisables dans mon avenir.

Afin de garder ma santé mentale, je me traîne à un rythme régulier et j'embrasse chaque barrage routier comme une normale pour le parcours. Après avoir passé en revue mes objectifs annuels avec mon patron, y compris creuser ce trou hérité, je pense que ce pourrait être une ascension sacrificielle. Je pourrais survivre au processus avec de mauvaises critiques et une lenteur perçue. C'est un avertissement réaliste et inquiétant pour ceux d'entre vous qui se demandent quel travail prendre.

Avertissement: Ce message vivra beaucoup plus longtemps que mes opinions, alors prenez-le avec un grain de sel. Demain, je pourrais aimer le code hérité! (J'en doute).

Trawn
la source
1

Cela dépend beaucoup de la façon dont vous définissez «héritage» dans ce contexte. Permettez-moi de vous donner un exemple de C et C ++. De nombreux programmeurs C ++ appellent une mauvaise pratique d'utiliser des chaînes C dans des applications C ++, d'autres n'exigent aucun mélange, tandis que d'autres, à leur tour, affirment qu'il est pur et complètement inutile d'utiliser des bits de code C car ils sont anciens, c'est-à-dire " code "hérité". Certains vont plus loin et évitent d'utiliser le pré-C ++ X (remplacez le 'X' par le nombre approprié) idiomes standard, style - c'est la syntaxe, car c'est le style "hérité".

Laissant de côté les problèmes de performances des flux et des chaînes C ++ et quelques particularités STL, il est certainement une bonne pratique de jeter un coup d'œil à ce qui se trouve dans votre directive de préprocesseur tant aimée #include <string.h>. Si vous suivez le chemin de l'implémentation et que vous vous trouvez sur une machine unix / linux à /usr/include/string.h(et obtenez des sources d'implémentation libc, par exemple, à partir de gnu.org ) et lisez strcmp.cou strlen.cou strtok.c, je parie que vous allez entendre "What a beautiful world "phasing in.

Il y a cependant une mise en garde à cette prose - à savoir, les classes et méthodes obsolètes. En Java, beaucoup de choses héritées sont toujours accessibles à partir d'un environnement récent, mais si je me souviens bien, pas tout. Dans le secteur de l'IB, d'après ma propre expérience, eh bien, tous les logiciels ne sont pas écrits par de bons programmeurs. Beaucoup de diplômés n'avaient eu pratiquement aucune exposition à la programmation du monde réel avant de commencer à un poste d'analyste / développeur. Mais ne généralisez pas cette affirmation. Je connais beaucoup de gens qui utilisent Java et C # au cœur d'environnements à haut débit et à faible latence. Je ne suis pas d'accord avec eux, mais bon, c'est heureusement leur affaire. S'ils étaient devenus vraiment HFT, ils auraient été poussés loin derrière dans la ligne. Mais, facilement déduit de cette phrase est l'hypothèse (et dans de nombreux cas le fait) que le code Java est hautement optimisable. Et si vous pouvez exceller dans l'optimisation, si nécessaire, non seulement de réparer ceci ou cela, vous deviendriez inestimable en tant que développeur. C'est très satisfaisant de constater combien vous avez contribué. J'irais pour ça.

Nicolas
la source