Comment puis-je juger si un projet est particulièrement complexe ou si je suis juste lent à le reprendre?

16

Je fais peu de progrès sur un grand projet. La source est massive, de nombreuses couches d'objets, du code macaroni, des graphiques à double losange d'héritage multiple, des fonctionnalités à moitié figées lorsque l'auteur d'origine est parti, et personne ne sait pourquoi de nombreuses pièces ont été conçues comme elles étaient.

Je suppose que tout programmeur compétent aurait du mal à tout comprendre assez bien pour corriger les bugs, terminer les trucs à moitié cuits et ajouter de nouvelles fonctionnalités. Cependant, je pense que je vais plus lentement qu'un programmeur typique.

Comment puis-je juger si la source est inhabituellement mauvaise et je fais aussi bien que n'importe qui pourrait, par rapport à la source est typique pour un projet comme celui-ci et je suis juste lent ou peu qualifié?

DarenW
la source
11
Comprendre le code des autres est un acte d'empathie. Oubliez la vitesse à laquelle vous allez et oubliez aussi quel tas de stupides m ********** sont les personnes qui ont écrit le code. Le comprendre est un exercice de flexibilité. Supposons que la source soit inhabituellement mauvaise et que vous êtes trop qualifié, et remettez-vous au travail et arrêtez de déconner sur ces forums stupides. Ce qui s'applique aussi à moi ... J'ai du code à régler.
Dan Rosenstark
2
Surtout oubliez "quel tas de ..." quand lesdites personnes sont le patron, le frère du patron, le patron du patron ou le neveu du patron, etc!
DarenW
2
Ah, le "pourquoi" manquant. N'oubliez pas de les mettre lorsque vous les comprenez.
@DarenW - c'est du code spaghetti, pas du code macaroni: D (Désolé, je le devais).
Jas
1
@Jas google pour le code macaroni ... il y a plus de types de pâtes que de spaghettis ;-)
Jürgen A. Erhard

Réponses:

6

La seule façon de décider de cette question est d'acquérir beaucoup plus de programmeurs pour s'attaquer au même problème et voir s'ils s'en sortent mieux.

Ceci est bien sûr rarement pratique, la tâche est tombée à votre avantage et à condition que vous fassiez de votre mieux, recherchant où vos connaissances vous manquent. Le séparer là où la complexité vous rend fous et tenir celui qui se soucie bien informé de vos progrès. Alors je ne m'inquiéterais pas et je continuerais.

Orbling
la source
16

Tout d'abord, je ne passerais pas trop de temps à m'inquiéter de ce que vous pourriez être "lent ou mal qualifié". Certains projets sont difficiles à saisir, et les grands projets prennent souvent un certain temps pour se mettre à jour. Penser que vous êtes «stupide» ou pas à la hauteur ne vous aidera en aucune façon.

Il semble que vous ayez besoin d'aide avec le code, alors pensez à vos ressources. Avez-vous accès aux codeurs originaux? S'ils sont disponibles, ils pourraient constituer de bonnes ressources d'information. Quelle documentation est disponible? Si la documentation est rare, sortez un cahier et commencez à créer votre propre documentation personnelle.

La grande idée ici est que vous devez vous attendre à ce que ce processus prenne du temps, et moins vous passez de temps à vous battre mentalement, plus vous aurez d'énergie pour analyser le code et le comprendre. Bonne chance!

Zeke
la source
5
+1 Il peut falloir plus de 6 mois pour vraiment commencer à connaître suffisamment de systèmes complexes pour être compétent en eux. Même si la base de code est "bonne", différents développeurs et équipes ont des styles différents, et il suffit parfois de prendre le temps de se repérer.
Ryan Hayes
3
@Ryan, et 6 mois après cela, vous devenez vous-même une partie du problème :)
Benjol
@Benjol Oui, j'y suis allé.
Ryan Hayes
FWIW, quand j'ai été dans ce bateau (plusieurs fois!), J'ai trouvé plus utile de faire des pauses fréquentes que de simplement m'asseoir et fouiner sur le code. Lorsque vous faites une pause, levez-vous et éloignez-vous physiquement de l'ordinateur. Étirez-vous, regardez par la fenêtre, pensez à ce que vous venez de regarder, puis revenez en arrière et regardez encore plus. YMMV, mais je me suis retrouvé à faire de bien meilleurs progrès quand je l'ai fait. Bonne chance!
TMN
+1 pour créer votre propre documentation personnelle. Lorsque je fais ce travail, je trouve utile de prendre beaucoup de notes (dans le code ou sur papier) et de dessiner de nombreux diagrammes (qui ne signifient généralement que quelque chose pour moi à l'époque). Un plus supplémentaire à tout cela est le renforcement des concepts dans votre propre esprit.
Andy Hunt
6

Jamais vu la courbe d'apprentissage. The Learning Curce

La théorie dit qu'initialement, cela prend du temps pour s'intensifier. L'astuce consiste à passer rapidement le point de progression. Si vous êtes bloqué régulièrement, demandez l'aide de votre manager ou au moins tenez-le informé des problèmes que vous avez rencontrés. Tant que vous êtes d'accord pour planifier aucun problème.

Manoj R
la source
2

Disséquer, une pièce à la fois

Votre situation est très courante, "prendre le contrôle" prend du temps comme d'autres l'ont déjà mentionné.

Ce que je trouve, c'est que si vous vous y attaquez "une pièce à la fois" , quelle que soit la complexité d'un projet, vous le comprendrez. Vous devez juste être logique à ce sujet.

Commencez par dire un bouton, fouillez le code source , mettez des points d'arrêt, voyez étape par étape ce qui se passe. Il y a deux choses que vous devez accomplir:

  • La vue d'ensemble de haut niveau.
  • Les petits détails qui implémentent la fonctionnalité souhaitée ci-dessus.
  • une fois que vous en avez compris certaines parties, remodifiez-le.
Nuit noire
la source
"Une pièce à la fois" pourrait fonctionner sur d'autres projets, mais cela a tellement de classes dérivées des autres, des classes d'amis, des pointeurs vers les entrailles des autres, il y a peu de parties qui peuvent être comprises indépendamment.
DarenW
Je suis sûr que c'est un labyrinthe complexe (quelque chose qui a "grandi" avec le temps). Cependant, si vous commencez avec une fonction, vous me dites que vous n'êtes pas en mesure de la retracer de bout en bout?
Darknight
Il s'est avéré impossible de retracer le flux de données ou la séquence d'événements lorsque, par exemple, l'utilisateur clique sur un bouton.
DarenW
1

Que diriez-vous d'avoir un point de vue différent: que devez-vous savoir sur ce code et avez-vous un moyen de le mesurer? Par exemple, si vous essayez de corriger un bogue, cela peut nécessiter un autre type de plongée que si vous essayez de migrer le code d'une langue à une autre, par exemple en passant de VBScript à C #. Si vous essayez de retirer toutes les exigences du code actuel, cela peut prendre un certain temps, même si je soupçonne que la plupart des gens auraient ce genre de problème.

JB King
la source
J'aime ce commentaire. Il faut avoir un objectif spécifique et travailler pour atteindre cet objectif (et seulement cet objectif). Sinon, vous vous y perdrez - Tout comme une carte.
NoChance
1

Tout en apprenant quelque chose de nouveau, de nombreux étudiants penseront: «Merde, c'est difficile pour moi. Je me demande si je suis stupide. »
Avant d'aller plus loin, assurez-vous que vous n'êtes pas stupide et que certaines choses sont difficiles. …

M. Aaron Hillegass avec les mots intelligents.

Vous n'êtes pas stupide, vous n'êtes pas lent et vous n'êtes pas sous-qualifié. Je suis dans le même bateau, je suis entré dans un nouveau rôle et la base de code existante est incroyablement grande et montre des signes de surdéveloppement répété, il m'a fallu des semaines pour arriver à un point où j'ai l'impression de devenir proche de la pleine vitesse. Imaginez que le projet ressemble à l'apprentissage d'une toute nouvelle langue, cela ne se fait pas du jour au lendemain, mais demande de la patience.

Nicholas Smith
la source