Comment suivez-vous les classes et fonctions écrites par votre équipe?

43

Lorsque je travaille sur du code, je suis confronté à bon nombre des mêmes problèmes que mes coéquipiers. J'ai également écrit des fonctions et des classes utiles. S'il y a une bonne communication, j'entendrai parler d'une bonne chose, mais six mois plus tard, quand j'en aurai besoin, je me souviendrai peut-être et j'appellerai cette fonction, ce qui me fera gagner du temps. Si je ne m'en souviens pas ou si je n'en ai jamais entendu parler, je réinventerai probablement la roue.

Existe-t-il une pratique particulière consistant à documenter ce genre de choses? Comment les rendez-vous faciles à trouver?

Si votre équipe ne dispose pas de cette documentation, comment savoir si votre roue existe déjà?

MODIFIER:

À ce jour, toutes les réponses sauf une concernent une situation idéale; laissez-moi donc résumer ces solutions: documentation et communication; wikis, réunions stand-up, etc. Ce sont toutes d'excellentes choses, mais elles reposent sur le fait que les programmeurs ont le temps (et les compétences) nécessaires pour rédiger la documentation, assister aux réunions, prendre des notes et tout mémoriser.

La réponse la plus populaire à ce jour (Caleb) est la seule qui puisse être utilisée par un programmeur incapable de documentation et de réunion et ne faisant qu'une chose: la programmation. La programmation est ce que fait un programmeur, et oui, un grand programmeur peut écrire de la documentation, des tests unitaires, etc., mais soyons honnêtes - la plupart d’entre nous préfèrent la programmation à la documentation. Sa solution en est une où le programmeur reconnaît le code réutilisable et l'extrait dans sa propre classe, son référentiel ou autre, et par le fait qu'il est isolé, il devient trouvable et facilite la courbe d'apprentissage pour l'utiliser ... . et cela a été accompli par la programmation.

D'une certaine manière, je le vois comme ceci: je viens d'écrire trois fonctions et il me semble que quelqu'un d'autre devrait les connaître. Je pourrais les documenter, les écrire, les annoncer lors d'une réunion, etc. - ce que je peux faire, mais ce n'est pas ma force - ou ... Je peux les extraire en classe, les nommer bien, les faire fonctionner comme une boîte noire, et collez-le là où les autres fichiers de classe vont. Ensuite, un bref courriel l’annonçant est facile. D'autres développeurs peuvent analyser le code et le comprendre mieux qu'une fonction isolée utilisée dans du code qu'ils ne comprennent pas complètement - ce contexte est supprimé.

J'aime cela parce que cela signifie que disposer d'un ensemble de fichiers de classe bien nommés, avec des méthodes bien nommées, est une bonne solution qui nécessite une bonne programmation. Il ne nécessite pas de réunion et réduit le besoin de documentation détaillée.

Y at-il d'autres idées dans ce sens ... pour les développeurs isolés et pressés par le temps?

Changokun
la source
5
J'élargirais la question à une plus grande échelle, peut-être que dans une entreprise de plus de 100 employés, on fait la même chose. Quelles sont les meilleures pratiques à suivre pour éviter la duplication de travaux déjà effectués?
Asaf
1
@ Asaf - Je suppose que la réponse correcte dépend de la taille de la population - ce qui fonctionne pour un magasin de 5 personnes ne fonctionnera pas à 50% et celui qui fonctionne à 50% ne fonctionnera pas à 500. Des réponses à toutes les questions seraient les bienvenues.
Dan Pichelman
3
C'est une excellente question!
Rocklan
4
Loi de Conway : "Les organisations qui conçoivent des systèmes ... sont contraintes de produire des modèles qui sont des copies des structures de communication de ces organisations".
Mark Rushakoff
2
@nathanhayfield: c'est une solution qui peut fonctionner pour 1 développeur, et dans une certaine mesure pour 2, mais pas pour 20 ou 100. Et même lorsque je travaille seul, je préfère séparer les fonctions d'assistance par thème.
Doc Brown

Réponses:

29

Bibliothèques Cadres. Contrôle de version.

Si vous avez du code réutilisable, la dernière chose que vous souhaitiez est que différents membres de l'équipe copient le code source dans leur projet. S'ils le font, il y a des chances qu'ils changent un peu ici et en modifient un peu, et bientôt vous avez des dizaines de fonctions ou méthodes qui portent toutes le même nom mais qui fonctionnent un peu différemment. Ou, peut-être plus probablement, l'auteur d'origine continuera à affiner le code pour corriger les bogues, le rendre plus efficace ou ajouter des fonctionnalités, mais le code copié ne sera jamais mis à jour. Le nom technique pour cela est un énorme bordel .

La bonne solution consiste à extraire ces éléments réutilisables de tout projet pour lequel vous les avez construits et à les placer dans une bibliothèque ou une structure dans son propre référentiel de contrôle de version. Cela facilite la recherche, mais décourage également les modifications sans prendre en compte tous les autres projets susceptibles de l’utiliser. Vous pouvez envisager d’avoir plusieurs bibliothèques différentes: une pour le code bien testé qui ne risque plus de changer, une pour les éléments qui semblent stables mais qui n’ont pas été testés et révisés en profondeur, une pour les ajouts proposés.

Caleb
la source
5
Je voudrais également recommander d'avoir un ensemble très complet de tests de régression pour la bibliothèque réutilisable. Même si le changement semble inoffensif, quelqu'un pourrait dépendre de ce comportement.
Bobson
2
Je pensais que le terme technique était BBOM .
zzzzBov
2
Votre réponse semble raisonnable à première vue, et de petite à moyenne échelle, mais j’ai également vu le côté sombre d’une directive «ne pas copier». Si vous avez différentes équipes pour différents produits, avec des termes de licence différents, des cycles de vie différents et des contrats de maintenance différents, la dernière chose que vous souhaitiez est de coupler les différents produits à une bibliothèque de fragments de code élaborée à la maison qui ne correspond pas aux exigences de maintenance. . Les bibliothèques pour ce genre de scénario doivent être de très haute qualité, et parfois c'est encore plus efficace pour une équipe qui copie le code et ..
Doc Brown
3
@Caleb: restez calme, lisez mon message complètement. Ce que je veux dire, c’est: copier du code ailleurs, le modifier et l’intégrer dans une bibliothèque d’équipes ne vous amène pas nécessairement sur le "chemin de la perdition". Lorsque vous avez deux bibliothèques avec des fonctionnalités qui se chevauchent et deux équipes dont chacune est responsable du maintien de leur bibliothèque, la situation n’est pas si mauvaise. Ce n’est pas parfait, puisqu’une équipe peut faire un travail l’autre aussi, mais l’avantage que ces équipes gardent toujours d’indépendance l’emporte sur le double travail.
Doc Brown
1
@DocBrown Il existe des situations dans lesquelles il devient nécessaire de copier du code, mais cela doit être une décision consciente et non quelque chose que vous êtes obligé de faire en raison de la manière dont le code a été partagé.
Caleb
13

Une approche consiste à créer un wiki à cette fin et à rédiger des documents de haut niveau sur les composants réutilisables que vous avez, comment vous avez résolu un problème, etc.

Le plus difficile est de faire en sorte que tous les membres de votre équipe maintiennent constamment ce wiki. Mais tout autre type de documentation souffre du même problème.

Une partie de votre code peut également être suffisante pour être placée dans une bibliothèque réutilisable. Cela facilite également la recherche du code ultérieurement.

Doc Brown
la source
5
Un wiki n'est pas le bon moyen de diffuser du code. C'est un excellent moyen de communiquer sur le code, mais (voir ma réponse), vous ne voulez pas que les utilisateurs copient quelque chose de plus grand qu'un extrait de wiki d'un wiki et le collent dans leur projet.
Caleb
@Caleb la communication est la partie difficile
jk.
@jk - Les problèmes de communication sont aggravés si vous n'avez pas le contrôle de source mentionné dans C
JeffO
3
@Caleb: la question du PO ne portait pas sur la diffusion de code, mais sur la communication et la recherche ultérieure.
Doc Brown
@DocBrown Encore une fois, les wikis sont excellents pour la communication, et c'est probablement pourquoi des outils tels que GitHub en ont un intégré. Mais ce qui rend le code facile à trouver, ce n'est pas qu'il soit mentionné dans un wiki, c'est qu'il est conservé dans un endroit connu. Cela pourrait être un wiki, mais si nous parlons de code que les gens vont réellement utiliser (par opposition à un tas d'extraits qui illustrent une solution), il devrait s'agir d'une sorte de bibliothèque, quelque chose qui peut être construit, testé, et qui peuvent être incorporés sans multiplier le nombre d’endroits où il faudra tôt ou tard mettre à jour.
Caleb
7

Etre dans une entreprise de 700 employés, au sein d'équipes de 2 à 20 personnes, voici mon expérience.

Au niveau de l'équipe

Nous organisons des "réunions debout" chaque jour pendant environ 15 à 20 minutes. Nous pouvons rapidement partager des connaissances communes telles que "j’ai fait cette fonction hier, ça cogne tellement fort".

Nous avons également un wiki par projet. Cela signifie que nous pouvons partager des informations (techniques) sur ce qui est fait dans le projet, y compris les classes / fonctions personnalisées intégrées.

Au niveau de l'agence

Au niveau des agences, nous disposons de 4 outils:

  • Un autre wiki. C'est principalement là pour nous donner des informations sur le matériel et les choses, mais nous l'utilisons parfois pour partager des informations techniques à examiner avant de les mettre au niveau de l'entreprise.
  • Réunions hebdomadaires. Ils doivent principalement connaître les progrès de chaque équipe / projet, mais comme nous sommes principalement des passionnés de technologie, nous pouvons apporter des informations intéressantes.
  • Liste de diffusion. Nous avons un mailing avec tous les membres de l'agence. Beaucoup de choses intéressantes / amusantes / utiles peuvent passer par là.
  • Référentiel VCS. Chaque agence a son référentiel personnel où nous avons de petits projets, principalement des modules que nous utilisons dans différents projets.

Au niveau de l'entreprise

Au niveau de l'entreprise, c'est plus organisé.

Le wiki "niveau agence" fait en réalité partie du wiki de l'entreprise.

Et le wiki est ensuite divisé en fonction des technologies. Ainsi, tout le monde peut l’améliorer, le parcourir et donner une vie fondamentale au wiki.

Il existe également des listes de diffusion disponibles auxquelles nous pouvons nous abonner. N'importe qui dans l'agence peut s'inscrire, et la plupart des gens suivent au moins une ou deux technologies. En réalité, la plupart des gens en suivent 5 à 10.

Et le VCS est bien sûr le meilleur système de partage de code.

Conclusion

En résumé, il n'y a pas de solution claire. Le partage des connaissances a toujours été un gros problème et le restera probablement. Il existe de nombreuses solutions pour créer des bases de connaissances , et l'une d'entre elles pourrait probablement convenir à votre facture. Cependant, certaines personnes essaient d’obtenir des connaissances encore meilleures, car les solutions actuelles ne sont pas toujours très intelligentes.

Florian Margaine
la source
Je pense que la conclusion ne devrait rien dire de plus que "wiki, wiki, wiki, wiki, wiki", mais sur une note sérieuse, bonne réponse, un wiki interne peut être bon pour détailler les détails de niveau supérieur ou use-age, pour ne pas mentionner juste être consultable est un bon gain de temps.
RhysW
6

Eh bien, tout se résume à la communication.

Les wiki sont géniaux et vous devez absolument en installer et en utiliser un. Un bon intranet de programmeurs internes est utile si les utilisateurs le lisent et le mettent à jour. Vous parlez donc d'un problème de personnel. Vous pouvez suggérer des réunions hebdomadaires "mises à jour d'équipe" où tout le monde se réunit et donne un aperçu du travail en cours. Les responsables techniques (au moins!) Devraient se réunir et discuter de ce que fait chaque équipe. Les séances informelles "Brown Bag" sont excellentes, planifiez-les à l'heure du déjeuner et faites parler les gens.

Vous avez également besoin d'un moyen de partager le code, de le conditionner, de le versionner et de le distribuer. Les choses seraient plus faciles si vous disposiez d'un référentiel de code source vraiment bien géré, organisé dans des dossiers "communs" et de projet.

Si rien de tel n’est fait, parlez-en à votre patron, expliquez-lui les avantages pour l’entreprise et suggérez un moyen de progresser :)

Rocklan
la source
1
Je déplacerais le concept "commun" un peu plus loin dans votre réponse.
JeffO
4

Les sessions de révision de code peuvent aider. Si votre équipe se réunit régulièrement pour discuter de ce qui a été développé, la personne qui a proposé une solution peut montrer aux autres comment l'utiliser. Si quelqu'un soulève un point sur lequel il s'en tient, les autres membres de l'équipe pourraient proposer une approche qui augmente la réutilisation des composants existants.

Daenyth
la source
1
Puis 4 ans et 600 fonctions plus tard, quand vous voulez vous rappeler une fonction qui a été créée quelque temps? Une partie du problème du PO consistait à essayer de se souvenir de toutes les choses qui avaient été créées. Bien que ce soit une bonne chose au départ, cela ne résiste pas pendant un mois ou deux peut-être
RhysW,
2

La meilleure façon de gérer de tels problèmes est d’avoir une structure de référentiel qui comporte quelques conventions simples afin que je sache, en tant que programmeur, s’il existe une fonction doXYZ, à peu près où je devrais chercher cette fonction. Que vous utilisiez des espaces de noms, des répertoires, des modules, des plugins, des packages, peu importe, votre code doit être modulaire pour que les fonctions faisant la même chose ou accédant aux mêmes sources de données se trouvent presque au même endroit.

Jonathan Rich
la source
0

Idéalement, il devrait y avoir au moins une personne autre que l'auteur qui effectue une révision du code à chaque enregistrement. Le processus de révision du code peut aider à atténuer le problème de nombreuses méthodes en double archivées. Bien sûr, vous êtes limité par les connaissances des réviseurs.

TL; DR: avis de code pour chaque enregistrement.

Carolyn
la source
2
Ne comprends pas. Allez-vous jeter le code testé et fonctionnel simplement parce qu'il ressemble à un doublon dans une révision de code? La question était de savoir comment éviter d'écrire le code dupliqué en premier lieu. Une session comme celle de @ daenyth semble meilleure.
adrianm
Si un critique me dit que j'ajoute du code qui duplique des fonctionnalités, et que je trouve qu'elles ont raison, heu ouais, je supprimerais le code dupe. (Je vérifierais probablement aussi si ma mise en œuvre est meilleure et, dans l'affirmative, si je pourrais refactoriser l'autre mise en œuvre au lieu d'en ajouter une nouvelle.)
Carolyn