Avant de poser ma question, je dois expliquer la situation.
Je travaille pour une entreprise en tant qu'ingénieur logiciel junior. L'une des personnes âgées m'arrête toujours lorsque j'ai terminé mon développement et que je veux m'engager.
Il veut toujours que j'attende qu'il le passe en revue. C'est bon, car généralement il trouve des bogues et optimise certaines choses.
Cependant, je dois valider mon code avant la date limite. Quand j'ai fini, je l'appelle et dis que c'est fini. Il vient généralement en retard. Donc, mon code est en retard aussi.
Ma question est, que dois-je faire? Devrais-je l'attendre pour un examen?
EDIT: Ajout à la question. Je suis curieux d'un autre problème.
Je veux être libre lors du codage. Comment pourrais-je gagner la confiance pour la liberté de développement?
Quelques explications: je lui en ai parlé. Mais ça n'a pas aidé. Nous utilisons déjà un outil de suivi des problèmes, mais aucune tâche de révision n'est requise. Il n'y a que des tâches de développement et de test.
Réponses:
Non, ce n'est pas votre code, c'est le code de vous et de la personne âgée. Vous travaillez en équipe, vous avez une responsabilité partagée et lorsque vous manquez une échéance, c'est la faute de vous deux. Alors, assurez-vous que celui qui fixe les délais le remarque. Si cette personne voit cela aussi comme un problème, elle vous parlera sûrement à tous les deux - cela peut aider plus d'une conversation avec votre collègue.
Et à votre rédaction:
La révision du code est l’un des principaux économiseurs de qualité. Il est pratiquement impossible d'écrire un code excellent sans une deuxième paire d'yeux, même avec plus de 20 ans d'expérience en programmation. Donc, dans une bonne équipe, le code de Everyones doit être constamment révisé - le code de votre senior ainsi que votre code. Cela n'a rien à voir avec la méfiance envers vous en personne (ou du moins, cela ne devrait pas). Tant que vous croyez qu'il est préférable de "coder gratuitement" sans une deuxième paire d'yeux, vous êtes toujours un programmeur débutant.
la source
Dans une bonne équipe, une file de tâches de développement doit vous être affectée dans un suivi des problèmes .
De cette façon, pendant que vous attendez un relecteur, vous pouvez ( devriez ) travailler sur la prochaine tâche en attente dans cette file d'attente. Une fois que vous vous êtes habitué à travailler de cette manière, vous aurez l’occasion de revoir vos modifications par «lots», ce qui réduira les délais.
Pour le savoir, vous devez d'abord comprendre le but des révisions de code. Vous avez parlé de confiance - c'est une bonne "approximation", mais pas tout à fait exacte.
Vous voyez, il serait plus juste de penser à la révision de code en termes d’ efforts déployés pour prévenir certains risques . Dans une bonne équipe, vous pouvez vous attendre à une sorte de compréhension partagée de la manière de "bien équilibrer" cela. Notez qu'il n'existe pas d'équilibre unique, il dépend fortement du projet. Les risques et les impacts des bogues d'un logiciel essentiel à la mission diffèrent naturellement de ceux d'une application non critique.
En utilisant votre exemple, vous pouvez vous attendre à "bloquer les révisions" tant que les efforts investis par votre relecteur sont justifiés par la recherche de bogues et l'amélioration des améliorations à corriger avant de valider votre code.
Ils s'attendent probablement à ce qu'avec la pratique et les conseils reçus lors des examens, vous amélioriez votre codage, de sorte qu'ils trouveront de moins en moins de problèmes qu'il vaut la peine de résoudre avant de les engager. Dès qu'ils découvrent que votre code est "suffisamment sûr" pour permettre des "mesures de prévention des risques" moins lourdes, vous pouvez vous attendre à ce que le processus change, par exemple en révisions après validation .
En fonction du projet, votre code peut même être considéré comme suffisamment sûr pour ignorer les révisions, laissant la découverte des bogues aux testeurs (mais cela ne se produira pas nécessairement, voir mon exemple ci-dessus).
la source
Il y a plusieurs réponses possibles ici, en fonction de votre problème.
Si votre principale préoccupation est "il me manque des délais", non. Vous manquez tous les deux aux dates limites. Pouvez-vous (avec confiance) dire "Je vais avoir fini dans une heure, pouvons-nous alors réviser le code"? Cela pourrait suffire. Pouvez-vous compléter le code la veille de la date limite? Cela devrait être un tampon abondant. Complétez-vous votre code, avec beaucoup de tampon entre "merci de revoir" et la date limite? Si ce dernier, ce n'est même pas une faute commune, je dirais.
Le code doit toujours être revu. Je ne peux rien enregistrer sans (au moins) une deuxième paire d'yeux et un autre humain qui passe "c'est bon". Cela vaut pour les projets pour lesquels je suis le programmeur principal ainsi que pour les projets pour lesquels je ne contribue pas normalement (mais qui ont réussi à trouver un bogue qui me concerne que je veux réparer). Cependant, la rigueur d'un examen repose en grande partie sur la confiance. Si j'espère que la personne qui souhaite soumettre du code connaît bien la base de code, je ne serai pas aussi stricte que si je ne savais pas à quel point la personne connaissait la base de code.
la source
Non, vous ne devriez pas rester les bras croisés. Il y a toujours quelquechose à faire. Comme Gnat l'a suggéré , il devrait y avoir une file d'attente de tâches. Ou, de manière agile, développez la liste des tâches qui vous sont assignées pour l’itération en cours. Si vous restez inactif, il y a quelque chose qui ne va pas dans l'organisation de votre entreprise ou de votre équipe.
Une autre chose est la suivante: votre supérieur hiérarchique vérifie-t-il vraiment chaque élément de code que vous utilisez? Si oui, vous pouvez aussi faire de la programmation par paire.
Il existe certaines réglementations qui exigent que senior vérifie le travail de junior (je pense que l'iso médical 62304 l'exige). Si c'est le cas, vous ne pouvez rien faire.
Ce que vous pouvez changer, c'est de demander à senior de ne pas vérifier littéralement tout. Vous pouvez définir le processus de révision du code et vérifier les choses importantes.
la source
Utilisez git localement, validez vos modifications dans une branche et démarrez la tâche 2 pendant que vous attendez. Ensuite, une fois terminé, vous pourrez fusionner ses modifications dans votre nouveau travail et vous êtes déjà en avance sur la courbe pour la tâche suivante.
Faites-le assez longtemps et très bientôt, il peut examiner 2 choses ou plus en une seule fois. Choisissez des éléments où les lignes ne risquent pas de se chevaucher pour minimiser les conflits.
la source
Une solution à ce problème pourrait être d'impliquer le développeur senior beaucoup plus tôt par Pair Programming dans votre travail.
Page Wikipedia sur la programmation en binôme
L'avantage le plus évident pour vous serait que l'examen se produise beaucoup plus tôt dans le processus, vous évitant ainsi d'attendre le développeur principal.
En plus de cela, vous serez en mesure de voir les processus de pensée et les techniques du développeur principal au moment où il écrit le code, et d'apprendre de cela.
Vous pouvez avoir le problème du développeur principal peut ne pas vouloir jumeler avec vous. Cela peut être difficile, mais ma propre expérience est que les développeurs seniors et juniors gagnent beaucoup d’expérience grâce à la programmation en binôme.
Il est également souvent inquiétant de voir deux développeurs travailler sur le même travail et réduire de moitié leur productivité. Il est difficile de mesurer l'incidence de la programmation par paire sur la productivité. La réponse la plus courante que j'ai entendue est que la productivité des équipes qui travaillent en paire et de celles qui ne le font pas est à peu près la même. (Si quelqu'un a de bonnes recherches à ce sujet, j'aimerais en entendre parler)
la source
Pas une réponse complète en soi, juste un ajout aux excellentes réponses ci-dessus ...
Passez-vous en revue votre propre code avant de l'enregistrer? Je sais que ce n'est pas le plus amusant, mais j'essaie de me faire faire la plupart du temps. Je fais de la programmation professionnelle depuis 20 ans (34 ans au total), mais je trouve généralement au moins un bogue et / ou une chose que j'ai oubliée ou que du moins je pourrais améliorer. Je suis d'accord avec le sentiment que votre code doit toujours être révisé et qu'un deuxième jeu d'yeux vaut mieux qu'une paire. Mais même la même paire qui passe deux fois sur le code est préférable à une fois.
Est-ce que vous écrivez des tests unitaires pour votre code? En plus des tests unitaires, j'ai également un petit script shell qui recherche les erreurs les plus courantes que je fais personnellement. La grammaire anglaise et l’orthographe sont au nombre des problèmes de codage que le compilateur ne comprend pas. Je le lance avant de vérifier les gros changements par courtoisie envers tout le monde en aval.
Normalement, je laisse les gens écrire leur code et parfois m'en plaindre plus tard, mais je ne vérifie pas chaque enregistrement. Une fois, j'ai travaillé avec un programmeur très junior dont le code devait être révisé et annulé en général parce qu'il faisait beaucoup d'erreurs. Cela n'a pas bien fini. Vous travaillez dans une profession où il est souvent plus important de bien faire les choses que de le faire à temps. Si vous apprenez de vos erreurs, vous irez loin.
Si vous pouvez réduire le nombre de modifications que votre relecteur doit apporter à votre code, vous maximisez les chances qu'il vous fasse confiance pour écrire du code qui n'a pas toujours besoin d'être révisé avec autant de soin. Si vous voulez éviter les critiques, prenez la responsabilité maximale de la qualité de votre propre production.
Certaines ou toutes ces suggestions pourraient être faites en attendant que quelqu'un d'autre examine votre code.
la source
Je pense que passer en revue les codes manuels est ... bien ... un peu plus de 80 ans. Eh bien, peut-être 90.
En cette ère moderne d'intégration continue et de systèmes de révision de code en ligne, vous ne voulez vraiment pas retenir les validations de code simplement parce que vous craignez que "cela ne casse le contrôle de source".
Allez. C'est à quoi servent les changeset (ou les listes de modifications). Vous faites que vos programmeurs nourrissent les gueux affamés de votre système de contrôle de source. Ensuite, votre serveur d’intégration continue s’engage dans une litanie de builds ciblés (enfin, espérons-le, juste le build quotidien, mais certains d’entre nous s’emportent). Si quelque chose se brise, placez le trophée de code-singe (généralement un jouet en plastique trouvé dans une boîte de céréales Lucky Charms) sur le bureau de l'auteur du crime et annulez la liste des changements brusques. Certains systèmes d’intégration continue diffusent automatiquement les notifications par courrier électronique / messagerie instantanée / poste de travail à tous les membres de l’équipe / du service / de l’organisation signalant la rupture de la construction, ainsi qu’un hyperlien astucieux pour montrer à tous ceux qui ont cassé exactement la construction dans quel fichier ou test. C'est maintenant le malheureux programmeur '
À mesure que ce processus s'exécute, le système de révision de code se déclenche (à nouveau, à la suite de l'enregistrement). Une liste de membres qualifiés de l'équipe est informée de la validation de la liste de modifications dans le contrôle de source, une révision est lancée dans le système de révision et tout le monde commence à annoter les modifications apportées à la liste de modifications. Espérons que tout le monde dira "LGTM". Si le programmeur est intelligent, il se souviendra de prier / soudoyer / cacher. En cas de problème grave, les réviseurs peuvent créer un défaut (qui peut être connecté au système de suivi des bogues) ou même exiger que la liste de modifications soit supprimée. Oui, les changements annulés blessent non seulement l'ego, mais l'esprit, c'est vrai. Il est bon pour les développeurs débutants de réintégrer les listes de modifications rejetées.
Si votre environnement de développement manque d'un CI ou d'un système de révision de code, vous devez les étudier sérieusement. Quelques liens pourraient vous aider:
Atlassian Crucible
JetBrains TeamCity
Contrôle de croisière reitveld
Si vous souhaitez obtenir un serveur CI, vous devriez également réfléchir sérieusement aux frameworks de test unitaire. Si vous êtes un développeur C #, cherchez quelque chose comme NUnit pour commencer.
la source
Vous lui dites à l'avance quand votre code sera prêt, pas au moment où c'est fait. Vous devriez pouvoir déterminer que ca. une semaine à venir. Cela lui donne le temps de préparer et de planifier l’examen de manière à ce qu’il s’intègre à la fois dans votre planification.
la source