En tant qu'ingénieur logiciel, est-il important de lire le code des autres?


25

Je suis un ingénieur logiciel en herbe (maintenant un étudiant en deuxième année, majeur en CS) et j'ai vraiment du mal à comprendre les programmes des autres. Je veux savoir si cette compétence (ou son absence) peut être un handicap pour moi, et si oui, comment puis-je la développer?


1
Pensez-vous que vous comprenez le code lorsqu'il vous est également expliqué ou apprenez-vous simplement par essais et erreurs?
JeffO

1
Pourquoi ce «style de codage» est-il étiqueté? Est-ce la raison pour laquelle vous avez du mal à lire le code car il est mal formaté? La capacité de lire le code ne signifie pas que vous devez avoir la capacité de comprendre le code très mal formaté ou obscurci. Exécutez d'abord le code via un outil de mise en forme si cela vous aide.
Brandin

Il suffit de lire un article ce matin qui m'a rappelé cette question. Pourquoi travailler sur Chrome m'a fait développer un outil pour lire le code source
Eric King

C'est une excellente question! J'avais une question complémentaire: si vous travaillez principalement par vous-même sur votre propre code (par exemple en tant que programmeur scientifique sur un petit projet), comment trouvez-vous un bon code à lire? Cela a déjà été demandé: softwareengineering.stackexchange.com/questions/69892/…
Gaurav

Réponses:


49

C'est essentiel.

La façon dont vous le développez est en écrivant votre propre code (en grande partie), et oui, en luttant pour lire le code des autres.

Le problème, bien sûr, est que tout le monde ne pense pas comme vous. J'étais dans une classe Java de première année il y a longtemps et on nous a confié une mission. Contrairement à ce que je pensais (à savoir que les réponses convergeraient vers trois ou quatre solutions communes), tout le monde dans la classe avait une solution unique à la tâche.

Il s'ensuit que vous devriez lire un bon code.

C'est l'une des raisons pour lesquelles les modèles de conception sont devenus si populaires et pourquoi vous devriez les étudier. Les modèles de conception fournissent un vocabulaire commun avec lequel les programmeurs peuvent communiquer et régler votre esprit pour de "meilleures" façons de résoudre les problèmes informatiques.

Vous devez également étudier les algorithmes et les structures de données.

Corollaire: vous devez toujours vous efforcer d'écrire du code que les autres développeurs peuvent facilement comprendre.


7
Corollaire: Commencez simplement en vous efforçant d'écrire du code que vous pouvez facilement comprendre :-)
gnasher729

4
Généralement une bonne réponse, sauf pour la partie sur les modèles. La plupart des modèles du GoF (ce à quoi les gens pensent lorsque vous utilisez le terme) sont sur-conçus, beaucoup trop fins, bien trop orientés OO ou tout simplement anti-modèles. Et puis les gens viennent ici pour demander lequel de ces modèles ils devraient utiliser pour leur solution. S'il vous plaît, ne conseillez jamais aux développeurs de perdre leur temps avec des modèles.
David Arno

Pour les petits problèmes (par exemple, inversez les nombres dans une liste), les réponses possibles devraient converger vers un petit nombre de solutions possibles. De bonnes affectations doivent nécessiter la résolution d'un grand nombre de ces problèmes et l'organisation des solutions à ces problèmes d'une manière ou d'une autre, de sorte que le nombre total de solutions possibles à l'affectation augmentera très rapidement.
Brandin

15

C'est très important.

Une fois que vous aurez obtenu votre diplôme et que vous vous lancerez dans le monde, la plupart des projets sur lesquels vous travaillerez auront déjà du code fourni par d'autres. Lucky est le programmeur qui passe tout son temps sur des projets entièrement nouveaux!

C'est une compétence qui s'acquiert par la pratique et la patience, et dans de nombreux cas, c'est une compétence sur laquelle beaucoup de gens n'ont pas vraiment l'occasion de travailler avant d' avoir obtenu leur diplôme et d'obtenir ce premier emploi. Se détendre!

(bien que si votre école a un programme coopératif, cela vous donnerait une expérience de pré-diplôme pour travailler sur de grands projets qui sont principalement écrits par d'autres personnes ET cela vous donne des crédits académiques! Quelque chose à examiner, s'il est disponible)


7

C'est une compétence majeure , selon les spécificités de l'endroit où vous travaillez, elle pourrait même être plus importante que l'écriture de code elle-même.

Comme d'autres compétences, la pratique rend parfait! Essayez de lire le code d'un autre programmeur, de le déboguer et ce qui m'aide personnellement, c'est de refactoriser ou d'améliorer de petits morceaux de code et de les développer à partir de là.


De plus, apprendre à connaître un projet open source que vous utilisez et essayer de comprendre comment fonctionne le code interne peut être utile
RMalke

4

Il existe des compétences distinctes en lecture et en écriture de code.

  • L'un est la syntaxe. Savoir à quoi ressemble une déclaration de méthode.
  • L'autre est l'intention. Savoir pourquoi la méthode existe et à quoi elle sert.

Quant à la lecture contre l'écriture. Oui, la lecture est essentielle.
Quelques maximes qui aident beaucoup d'entre nous à cela:

  • Le code est lu 10 fois (au moins) pour chaque fois qu'il est écrit.
  • La lecture du code par quelqu'un d'autre est souvent ... moi à l'avenir la lecture du code.
  • Je ne défendrais pas mon style de code depuis plus d'un an, il s'est amélioré depuis.

D'ACCORD. C'est donc très bien. Passons maintenant à ce que vous vivez probablement.

omg, ce flippe énorme base de code avec des dizaines de milliers de lignes de code source et des classes qui sont plusieurs centaines de lignes avec dépendances folles et chaque fois que j'essaie de suivre quelque chose que je dois garder 10 niveaux dans ma tête, etc, etc.
Son familier ? Ouais. Profonde respiration. Se détendre. C'est normal. C'est de cela que sont faits les systèmes de production. Les gens survivent (et s'épanouissent) dans ces situations apparemment incompréhensibles parce que:

  • des tests (espérons-le) existent et ils aident également à documenter le système.
  • les programmeurs s'associent et cela apporte souvent plus du double du résultat.
  • un bon programmeur sait bien dire qu'il ne comprend pas tant qu'il ne le fait pas.
  • les modifications ne sont souvent qu'une ou plusieurs lignes de code permettant d'isoler les éléments à tester
  • les bases de code prennent des mois et même des années pour se familiariser avec

Et enfin, les bons programmeurs écrivent des messages de validation significatifs lors de la validation des modifications dans les systèmes de contrôle de version source. (N'hésitez pas à ajouter à la réponse)
rwong

1

La plupart de ces réponses se concentrent sur l'importance de la lecture de code pour l'auto-amélioration. Je suis entièrement d’accord avec et je l’approuve.

Il y a un autre angle dont il faut se méfier - même si vous étiez un prodige qui ne pouvait pas bénéficier de la lecture d'autres approches (impossible, mais pour les besoins de l'argumentation ...), vous auriez encore besoin de savoir lire le code à cause d'un concept qui n'existe pratiquement pas en milieu universitaire: la grande majorité des projets industriels sont des projets sur le terrain (c.-à-d. dans ou en intégrant une base de code préexistante).

Le besoin de lire le code juste pour comprendre la base de code et les processus existants est réel. Il est toujours possible de poser des questions à un autre développeur sur le code, mais cela ne vous prendra que si longtemps. Les gens partent, changent de projet ou le temps passe tout simplement. Les détails de bas niveau disparaissent de la mémoire et les programmeurs de maintenance appliquent des correctifs. À un moment donné, il n'y a pas de source unique de vérité, sauf le code lui-même.

Une bonne hygiène du code, des guides de style, des révisions de code et une aide à la documentation, mais à un moment donné, le code est la source de la vérité pour ce qui se passe et la seule façon de trouver la réponse sera d'aller le chercher vous-même. Mis à part ses utilisations dans l'auto-développement, la capacité de lire du code est une compétence distincte de l'écrire.


0

Comprendre le code d'autrui est quelque chose auquel vous ne pouvez pas échapper, car vous travaillerez très probablement en équipe même si vous ne le faites pas en équipe, vous rechercherez différentes choses sur Google et vous devrez comprendre un exemple de code. Alors oui c'est un must.

Ce que je ressens, c'est que tout le monde ressent ce sentiment peut-être moins que les autres spécialement au début, vous comprenez mieux votre code que les autres codes car vous passez beaucoup plus de temps avec votre propre code que le code de quelqu'un d'autre car non seulement vous lisez, mais vous écrivez et structurez dans votre esprit. Si vous commencez à passer plus de temps avec le code des autres et essayez d'abord de voir quel type de structure / flux est utilisé, cela vous fera certainement mieux comprendre le code.

Pour rendre mon argument encore plus convaincant si vous avez du code que vous avez écrit un an en arrière, essayez de le comprendre à nouveau et je peux dire avec certitude que vous prendrez plus de temps mais moins que le code des autres car vous avez une idée de la façon dont vous structurez votre code.

J'espère que cette aide, ne soyez pas déçu, c'est tout à fait normal. Passez plus de temps avec le code et vous finirez par l'obtenir.


0

Eh bien, je viens de recevoir un projet avec environ 100 000 lignes de code écrit par une équipe dans un autre pays, et je dois apporter des modifications très importantes à une copie de leur code au cours des prochains mois, tout en laissant autant de code en commun que possible.

Vous me dites comment je peux faire mon travail sans pouvoir lire le code des autres rapidement. Si vous ne pouvez pas lire le code des autres, vous êtes complètement, complètement coincé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.