web-dev-qa-db-fra.com

Est-il efficace de revoir le code dans une langue que je ne connais pas?

Je suis un développeur expérimenté, mais je n'ai pas fait beaucoup de révisions de code. On me demande de revoir le code écrit en Python mais je ne connais pas Python.

Est-il sensé de revoir le code dans une langue que je ne connais pas?

109
Heather Smith

Tout sens? Oui. Même si vous ne savez rien de la sémantique d'un langage de programmation, vous pouvez toujours lire des caractères et remarquer un formatage incohérent, des commentaires manquants, des identifiants mal choisis, une duplication évidente, etc.

Beaucoup de bon sens, ou assez de bon sens pour rembourser le coût de votre temps? Je ne suis pas sûr. Cela dépend de votre position, de l'importance des révisions de code dans le flux de travail de votre équipe et de plusieurs autres facteurs que nous ne pouvons pas suffisamment quantifier.

118
Kilian Foth

En tant que contributeur régulier chez Code Review Stack Exchange , je rencontre beaucoup de questions souffrant de problèmes liés à la langue, par exemple:

  • Formatage, indentation
  • Portée
  • Boucles
  • Opérations de saisie

et la liste continue. Cependant, même si je n'ai pas besoin de connaître la langue, je peux quand même revoir ces problèmes/points.

Quelques-uns de nos meilleurs utilisateurs ont les meilleures réponses dans des langues qu'ils n'utilisent pas activement ou qu'ils ne connaissent pas. Même deux de mes dix premiers sont dans des langues que je ne connais pas et que je ne peux pas compiler/exécuter sur ma machine.

Je dirais même que ce serait la même chose que d'examiner le pseudo-code de quelqu'un. Tant que vous pouvez observer et commenter des choses pertinentes à des choses que vous comprenez, tout ira bien et ce sera pertinent.

57
Quill

Conseil général

Voici le résultat, à mon avis:

  • Si vous ne connaissez pas suffisamment la langue pour connaître les fonctionnalités et les idiomes courants , vous n'allez probablement pas contribuer beaucoup à la revue.
  • Si vous voulez apprendre les caractéristiques et les idiomes de la langue, vous pouvez participer à la révision. Votre objectif devrait être d'observer les idiomes et de poser des questions sur les modèles et l'organisation qui n'ont pas de sens pour vous. Cela peut aider à identifier les zones à problème, mais uniquement dans le sens où vous pourriez forcer le développeur à défendre ce qu'il a fait. Posez vos questions d'une manière qui laisse de la place à votre manque de connaissances. Notez que cela peut finir par être un coût net dans l'examen lui-même, mais ce coût est un investissement dans vos connaissances.
  • Votre capacité à contribuer jusqu'à ce que vous vous soyez familiarisé avec les fonctionnalités, les idiomes et les normes du langage sera limitée. Je ne m'attendrais pas à ce que cela change tant que vous n'avez pas écrit une quantité importante de code dans la langue.

Considérations et exemples spécifiques à Python

Pour la situation spécifique de ne pas connaître Python, je serais particulièrement méfiant à ce sujet. Python a beaucoup d'idiomes et de pratiques standard qui finissent par faire du bien Python est très différent de ce à quoi vous pourriez vous attendre dans d'autres langues. (En effet, je pense que les choses Python souligne a fait que mon code ressemble mieux dans autre langues, et non l'inverse.) Au-delà de PEP8 a un bon exemple de la façon dont vous pourriez complètement manquer l'état d'esprit Python encourage.

Regardons un exemple simple. Prenez ce code:

f = open('/home/me/something.txt')
try:
    content = f.read()
finally:
    f.close()

Vous voyez le problème avec ce code? Si vous n'avez pas travaillé avec Python, vous ne le faites probablement pas. Le problème est qu'il y a beaucoup style préféré dans Python qui fait exactement la même chose:

with open('/home/me/something.txt') as f:
    content = f.read()

Ceci est un gestionnaire de contexte. Savez-vous à quoi ils servent? Savez-vous quand il serait approprié d'en utiliser un? Savez-vous quand il serait approprié de créer le vôtre? Non? Ensuite, vous n'êtes probablement pas prêt à passer en revue Python.

Regardons un autre exemple.

def add_fifty(other_list):
   result = list()
   for i in other_list:
       result.append(i + 50)
   return result

x = range(10)
y = add_fifty(x)

Vous voyez le problème? Le problème est que cette méthode est complètement inutile . Vous devriez probablement simplement utiliser une compréhension en place, lorsque l'opération est aussi simple:

x = range(10)
y = [i + 50 for i in x]

Si vous ne l'avez pas vu, vous n'êtes pas familier avec les fonctionnalités et les idiomes de Python.

44
jpmc26

La révision de code ne consiste pas à rechercher des variables avec une orthographe non valide et un formatage incorrect. Si vous utilisez la révision de code pour trouver de telles choses, alors arrêtez de perdre votre temps et utilisez un outil.

La révision du code consiste à améliorer la conception et à détecter les erreurs courantes des programmeurs débutants.

Puisque je programme en C++ , et que je ne connais pas assez bien Python, je n'oserais pas revoir Python code . Cependant, je pourrais vous aider avec une révision du code Java.

Vous n'avez pas dit dans quelle langue vous programmez, mais je ne vois pas ce que vous pourriez apporter dans une révision de code, si vous ne connaissez pas la langue dans laquelle il est programmé.

21
BЈовић

Ils peuvent vous avoir demandé de revoir le code Python précisément parce que vous ne connaissez pas Python . Il y a une théorie de la gestion qu'il est utile d'avoir un "idiot" dans une équipe. Je ne vous appelle pas un mauvais nom :) L'idée est qu'une équipe peut souffrir de la réflexion de groupe et développer une vision tunnel. Une façon d'échapper à cela est d'inclure quelqu'un dans l'équipe que les autres membres de l'équipe considéreraient comme un "idiot", c'est-à-dire quelqu'un qui ne connaît pas le sujet. Vous poserez des questions pour vous informer et les questions proviendront d'un point de vue que les autres membres de l'équipe n'ont probablement jamais pris en compte.

Vous ne connaissez pas Python, donc ce qui peut sembler ordinaire aux codeurs Python peut vous sembler étrange. Vous pourriez suggérer une amélioration que l'équipe n'a jamais envisagée.

21
user2023861

Les révisions de code (en plus de rechercher des défauts) sont une bonne introduction d'un membre de l'équipe à d'autres pour le code ajouté ou modifié. Si vous êtes un développeur expérimenté , vous devriez être capable de lire suffisamment pour comprendre principalement ce qui se passe.

Regardez une revue de code du point de vue d'un chef d'équipe: il y a quelqu'un là-bas qui comprend ce que l'application devrait faire (logique métier), il y a quelqu'un là-bas qui comprend le code fait (logique d'implémentation ), et peut-être plusieurs autres personnes qui ont besoin d'avoir une idée de la façon dont tout cela s'imbrique.

10
Adam Zuckerman

Vous ne devriez certainement pas être le seul critique, mais il y a beaucoup de bonnes raisons pour que vous soyez un des évaluateurs. Ne pas connaître la langue n'est pas un obstacle majeur pour de nombreuses questions auxquelles il faut répondre lors d'une révision de code. À titre d'exemple, je suis l'un des 20 premiers répondants dans le balise C # sur ce site, et je n'ai pas tellement compilé bonjour le monde en C #.

Une expertise que vous pouvez partager sans connaître la langue:

  • Connaissance du domaine.
  • Conception générale orientée objet.
  • Pratiques générales de programmation: dénomination, clarté, etc.

C'est aussi un bon moyen de se mettre au courant d'un nouveau produit. Je viens de rejoindre une nouvelle équipe, où je connais assez bien les langues, mais je ne connais pas le domaine. Participer à des révisions de code m'a aidé à mieux connaître le domaine, même si je n'ai pas encore pu contribuer beaucoup dans ce sens.

Dans votre cas, ce sera un bon moyen d'apprendre les idiomes d'une nouvelle langue, comme vous voyez les commentaires des autres critiques. Ce sont des choses très difficiles à apprendre d'une autre manière, car votre interprète ne se soucie pas de savoir si votre code est Pythonic ou non.

7
Karl Bielefeldt

Cela pourrait être une situation gagnant-gagnant. J'irais jusqu'à dire que vous pourriez être un critique particulièrement précieux parce que vous êtes une Python vierge qui n'a pas été entaché par le Malédiction de la connaissance .

Pensez-y de cette façon: si le code est suffisamment clair pour que même une Python vierge puisse le comprendre, alors ce doit être du bon code. Les parties que vous avez du mal à comprendre pourraient être des candidats pour un remaniement ou mieux commentant.

Évidemment, cela vous serait également bénéfique, car vous choisiriez une nouvelle langue au fur et à mesure. (Si tout va bien, le code qui vous est donné est un bon exemple à apprendre.) Cet arrangement devrait fonctionner particulièrement bien pour Python, un langage qui a la réputation d'être un "pseudocode exécutable". Si vous êtes un développeur expérimenté, vous ne devriez pas avoir de difficulté à comprendre l'essentiel d'un programme Python.

La mise en garde serait que vous ne seriez pas censé repérer les bogues résultant de gotchas spécifiques à la langue . Mais la recherche de bogues n'est pas le seul objectif des revues de code. Si rien d'autre, vous participeriez au transfert de connaissances simplement en étant conscient du genre de choses qui se passent dans le code de votre collègue.

5
200_success

On m'a demandé une fois de vérifier un projet qui était entrepris par un sous-traitant et qui semblait avoir de graves problèmes de performance. J'ai rapidement établi que le facteur critique était un seul module Perl. Je n'avais jamais rencontré Perl auparavant et nous n'avions personne dans l'organisation qui le savait, alors j'ai commencé à essayer de le comprendre moi-même. Je n'ai jamais réussi à comprendre les détails, mais il était très clair que l'algorithme qu'il utilisait était de taille quadratique et c'était la cause de tous les problèmes. Alors oui, lire du code dans une langue que vous ne comprenez pas complètement peut certainement être productif. Le bonus est que vous apprenez de nouveaux trucs pendant que vous y êtes.

2
Michael Kay

Quelques observations:

1) Si vous êtes un développeur expérimenté, vous prendrez Python (ou au moins autant que vous devez savoir), juste en travaillant avec lui. Ce sera un cas "d'apprentissage" en faisant. "Ce sera difficile au début, mais cela deviendra plus facile lorsque vous prendrez la langue. Considérez cela comme une opportunité d'apprendre une autre langue (les gens apprennent souvent des langues" étrangères "par" immersion ".)

2) Il existe un certain nombre de personnes précieuses sur les sites SE qui sont "non techniques", mais qui sont compétentes en grammaire, en communication et en logique. De telles personnes apportent un "regard neuf" aux sujets et font un certain nombre de corrections "évidentes" que d'autres manquent, car elles sont trop "liées" dans le matériel. Vous êtes probablement consulté pour vos compétences non "techniques" (c'est-à-dire non Python) telles que la logique et la connaissance globale de la programmation.

Et si vous n'avez pas fait beaucoup de révision de code, presque toute expérience de révision de code vous aidera en tant que développeur. Cela ressemble à une bonne adéquation entre vos compétences et vos besoins et ceux de l'équipe.

0
Tom Au

Cela dépend de l'objectif de l'examen; c'est-à-dire ce que vous entendez par efficace.

Vous pourrez toujours détecter certains problèmes. Si vous êtes tout ce qu'ils ont à revoir et qu'ils espèrent simplement que vous jetez un coup d'œil, cela aide certains et peut-être attrape quelque chose, alors bien sûr. De nombreux concepts de structure sont similaires entre les langues. On est surtout en mesure de revoir les commentaires. Il devrait être suffisamment bien commenté pour qu'un programmeur qui ne soit pas de ce langage particulier puisse toujours avoir une bonne idée de ce qui se passe. Sinon ... alors vous pouvez leur dire où leurs commentaires font défaut. Si c'est si bien commenté ... alors vous devriez être en mesure de revoir un peu de leur structure juste à travers les annotations de ce qui se passe plutôt que de lire réellement le code de ce qui se passe.

Mais vous ne détecterez probablement pas beaucoup d'autres problèmes. Donc, s'ils ont l'intention que votre examen soit une détermination exhaustive de la question de savoir s'il s'agit d'un programme bien conçu/réalisable, ils seront déçus.

Que ce résultat en vaille la peine ou non, cela dépend en grande partie du projet.

0
Jimbo Jonny