web-dev-qa-db-fra.com

Comment restez-vous productif lorsque vous traitez avec un code extrêmement écrit?

Je n'ai pas beaucoup d'expérience dans le travail dans l'industrie du logiciel, d'être autodidacte et d'avoir participé à une source open source avant de décider de prendre un emploi. Maintenant que je travaille pour de l'argent, je dois aussi faire face à des trucs désagréables, ce qui est normal bien sûr.

Récemment, j'ai été chargé d'ajouter une journalisation à un grand projet SharePoint qui est écrit par certains programmeurs qui apprenaient évidemment à coder au travail. Après 2 ans de collaboration, le client est passé à notre société, mais les dégâts ont été endommagés, et je dois maintenant conserver ce code.

Pas que le code était aussi difficile à lire. Malgré les problèmes - chaque projet a une classe avec plusieurs méthodes collées de copie, énormes if nichons, systèmes hongrois et non exposés, c'est toujours lisible.

Cependant, je me suis retrouvé absolument improductif malgré de travailler sur quelque chose d'aussi simple que d'ajouter une journalisation. Fondamentalement, j'ai juste besoin de passer par le code étape par étape et d'ajouter des appels de trace. Cependant, l'idiotie du code est si ennuyant que je suis fatigué dans les 10 minutes suivant le début. Au début, j'avais l'habitude d'ajouter using constructions, réduisez la nidification en inversant if 's, renommez les variables aux noms lisibles - mais le projet est grand et j'ai finalement abandonné. Je sais que ce n'est pas la tâche que je devrais faire, mais au moins réduire le désordre m'a donné une sorte de récompense psychologique afin que je puisse continuer à aller. Maintenant, l'astuce a cessé de travailler et j'ai toujours 60% de mon travail à faire.

J'ai commencé à avoir des maux de tête après le travail, et je ne reçois plus le sentiment de satisfaction que je devais me permettre, ce qui me permettrait généralement de coder pendant 10 heures tout droit et de me sentir toujours frais.

Ce n'est pas seulement un gros rant, car j'ai vraiment une question réelle:

Y a-t-il un moyen de rester productif et de ne pas combattre les moulins à vent?

Y a-t-il une sorte d'astuce psychologique à rester concentré sur la tâche, au lieu de penser "Comment est stupide c'est-à-dire?" Chaque fois que je vois une autre astuce intelligente par le précédent programmeur? Le problème avec l'ajout de la journalisation est que je dois réellement comprendre Quel est le code, et ce faisant si mal mon cerveau de manière désagréable.

62
Dan

Je suis désolé de vous dire, mais tous les emplois ne sont pas pleins de soleil et de glamour. La majorité des tâches de développement impliquent des travaux de dragage comme celui-ci. Triste mais vrai.

Vous êtes chargé d'un travail important, même s'il est ennuyeux du point de regarder la peinture au sec. Il est important pour deux raisons: 1. Il a ajouté beaucoup besoin de se connecter à un grand système de sorte que lorsque quelque chose ne va pas, vous aurez un outil pour vous aider à le trouver. Et 2. Cela vous connaît bien avec la base de code de sorte que si et quand quelque chose ne va pas, vous pouvez sauter et le réparer.

Vous créez essentiellement votre propre filet de sécurité ici. Glamors, non, mais important oui!

Alors, cela étant dit comment devriez-vous vous motiver? Quand j'ai une tâche d'engourdissement menant au travail, je fixe des objectifs pour moi-même. Terminer faire la tâche x à la fin de la semaine. Si je fais mon but, je me récompense moi-même. Nouveau restaurant que je veux essayer? Allez vendredi soir si je finis. Un nouveau film vient de sortir? Voyez-le le week-end si je termine.

Je trouve parler avec mon superviseur et lui laissez-le savoir où je suis et comment je suis progressant me maintient responsable. Si je leur dis que je leur dis que je serai fait de vendredi, je me sens plus enclin à le faire par le vendredi B/C, je leur ai dit que je l'aurais fait.

Gardez la foi qu'une fois que vous avez terminé cette tâche et que vous le feriez bien, à temps et au budget que les gens remarqueront et lorsque ce nouveau projet Shinny viendra, votre nom pourrait simplement être suggéré comme celui qui l'obtient. :)

32
Tyanna

Gardez un fichier d'extraits de code candidat pour la soumission à TheDailyWTF.com. Même si vous n'avez pas vraiment l'intention de les soumettre, cela vous donne un bon côté pour trouver du code qui est encore pire que la moyenne.

29
Peter Taylor

J'étais dans une situation similaire, chargée de nettoyer un grand corps de code mal écrit et massivement copié et collé.

Pour maintenir ma motivation et ma santé mentale, j'ai écrit un script appelé current_score Cela a compté le LOC dans le projet (qui a régulièrement diminué, alors que j'ai éliminé la duplication et la commutée à de meilleurs algorithmes) et la comparé contre le LOC quand j'ai commencé. Chaque fois que je me suis découragé ou frustré par la montagne du code, j'étais confronté à la course current_score me donnerait un sentiment de progrès tangible et me rappellerait combien j'avais déjà accompli. Et c'était amusant de voir à quel point une score que je pouvais accumuler lors de la résolution d'une section de code particulièrement mauvaise.

Je chercherais des métriques similaires que vous pourriez facilement script pour vous donner un sentiment de progrès et la transformer en une sorte de sens. Lignes de code (juste courir wc -l ), la complexité cyclomatique (qui devrait descendre à mesure que vous nettoyez ces méchants "IFS"), lignes de code qui ont été touchées par vous au lieu de votre prédécesseur (je pense que Fisheye Je peux vous dire ceci pour 10 $), etc. Vous pouvez même écrire un script perl sans trop de problèmes pour compter le nombre de blocs de code qui n'ont pas encore de relevés de journalisation.

24
Josh Kelley

J'ai vu ce livre recommandé: fonctionnant efficacement avec le code hérité , mais heureusement n'a pas eu besoin de le lire.

Comme si vous le faites, refactorez ce dont vous avez besoin pour que vous puissiez comprendre le code et vous rappelez-vous simplement que vous ressuscipliez un système, ce qui sera remboursé lorsque vous le maintenez.
[.____] Cela devrait espérer mettre un printemps à votre pas sur le chemin du retour.

13
StuperUser

Essayez de briser le projet en morceaux. Chaque jour, apprenez comment fonctionne un morceau spécifique. Essayer de comprendre tout cela à la fois est probablement ce qui vous stresse.

Prenez la fierté de rendre le projet mieux. Y a-t-il d'autres codeurs que vous pouvez parler? Il est utile de rester autour du refroidisseur d'eau discutant/rire de la dernière logique que vous avez trouvée. J'essaie de faire cela pour garder une atmosphère joviale au travail.

6
davidhaskins

Prendre des notes étendues pour organiser vos questions, pensées et compréhension du système. Cela a travaillé merveille pour moi lorsqu'il s'agit de grands systèmes hérités. Il aide à cristaliser votre compréhension, contribue à mettre les questions ouvertes en mots, et parce que vos pensées sont déjà assemblées, cela facilite la communication spontanément avec d'autres problèmes de problèmes/de questions/idées/etc.

À titre d'exemple, comme je passe un morceau du code, je prendrai constamment des notes pour moi. Ceci est ma conversation avec moi-même. Le simple fait d'écrire aide davantage de pensées à sortir et à me aider à mieux comprendre les choses mieux. Après un certain temps, j'ai peut-être une eureka et avoir besoin d'établir un petit diagramme avec la "image plus grande" sur papier pour illustrer ce que je viens de penser ou quelles pièces je viens de mettre ensemble. Je fais toujours cela sur du papier seulement, débarrasser de toutes les distractions de l'ordinateur. Cela me permet d'être plus méthodique et réfléchi de ce que je fais.

Ceci est essentiellement un moyen pratique d'avoir une conversation perpétuelle avec un expert de domaine :)

6
Doug T.

Je sais que vous ne soyez peut-être pas improductif parce que vous le regardez du point de vue de "Je n'aijoute que de la journalisation" en fait, vous ajoutez une journalisation et de faire beaucoup de refactoring. Votre superviseur est probablement conscient de la situation du code. Tout le monde peut ne pas l'apprécier maintenant, mais lorsque vous avez une demande d'ajout d'une fonctionnalité très intéressante et stimulante, vous serez heureux que vous ayez nettoyé le code.

3
JeffO

Dans ces cas, j'ai tendance à réécrire une section du code. Pour faire que une zone sucer moins, j'ajoute juste de vous connecter à l'endroit où d'autre. Puis nettoyez un peu plus de code. Le mauvais code n'est que mal si vous le laissez là-bas.

1
Erin

"Travailler efficacement avec le code hérité" de Michael Plumes peut aider.

Si vous craignez de casser les choses lorsque vous les changez, écrivez d'abord des tests, assurez-vous qu'ils passent avant et après votre modification. L'écriture du test devrait vous aider à résumer et à comprendre ce qu'est un morceau de code donné et vous permettra de modifier avec confiance.

0
Stephen Paulger

L'astuce pour ne pas s'ennuyer ou en colère, vous risquez donc de rester productif consiste à accepter que le code est mal conçu. Accepter votre position pour avoir à comprendre et à mettre à jour le code vous permettra de ne pas continuer à commenter "à quel point cela est stupide" et à l'accepter discrètement et de passer à autre chose.

Une autre astuce consiste à avoir une bonne homelife à espérer à la fin de la journée. Petite amie, amis, jeux tout ce qui fonctionnera, pour vous donner un objectif de passer à travers la journée et de faire en train de faire trudger le mauvais code tout en vaut la peine.

0
Tim