É eficaz revisar o código em uma linguagem que não conheço?

108

Sou um desenvolvedor experiente, mas não fiz muitas revisões de código. Estou sendo solicitado a revisar o código escrito em Python, mas não conheço o Python.

Faz algum sentido rever o código em um idioma que eu não conheço?

    
por Heather Smith 13.01.2016 / 16:14
fonte

11 respostas

120

Qualquer sentido? Sim. Mesmo que você não saiba nada sobre a semântica de uma linguagem de programação, você ainda pode ler caracteres e notar formatações inconsistentes, comentários ausentes, identificadores mal escolhidos, duplicação óbvia, etc.

Muito sentido, ou sentido suficiente para pagar o custo do seu tempo ? Não tenho certeza. Isso depende da sua posição, da importância das revisões de código no fluxo de trabalho de sua equipe e de vários outros fatores que não podemos quantificar o suficiente.

    
por 13.01.2016 / 16:16
fonte
59

Como contribuidor regular da troca de pilhas de revisão de código , encontro muitas questões que sofrem de problemas agnósticos, por exemplo:

  • Formatação, recuo
  • Escopo
  • Loops
  • Operações de tipo

e a lista continua. No entanto, embora eu não precise saber o idioma, ainda posso revisar esses problemas / pontos.

Alguns dos nossos principais usuários têm as melhores respostas em idiomas que eles não usam ou não sabem. Até mesmo dois dos meus dez principais idiomas não sei nem posso compilar / executar na minha máquina.

Eu diria mesmo que seria o mesmo que rever o pseudo código de alguém. Contanto que você possa observar e comentar sobre coisas relevantes para as coisas que você entende, você estará bem, e isso será relevante.

    
por 13.01.2016 / 18:13
fonte
44

Conselho geral

Aqui está a linha de fundo, na minha opinião:

  • Se você não conhece bem o idioma para conhecer os recursos e expressões comuns , provavelmente não contribuirá muito para a revisão.
  • Se você quiser aprender os recursos e idiomas do idioma, participe da análise. Seu foco deve ser observar os idiomas e fazer perguntas sobre padrões e organização que não fazem sentido para você. Isso pode ajudar a identificar áreas problemáticas, mas apenas no sentido de que você pode forçar o desenvolvedor a defender o que eles fizeram. Faça suas perguntas de uma maneira que deixe espaço para sua lacuna no conhecimento. Observe que isso pode acabar sendo um custo de rede na própria revisão, mas esse custo é um investimento em seu conhecimento.
  • Sua capacidade de contribuir até se familiarizar com os recursos, idiomas e padrões do idioma será limitada. Eu não esperaria que isso mudasse até que você realmente tenha escrito uma quantidade significativa de código na linguagem.

Considerações e exemplos específicos do Python

Para a situação específica de não saber Python, eu seria especialmente cauteloso com isso. O Python tem muitos idiomas e práticas padrão que fazem o Python parecer muito diferente do que você espera em outras linguagens. (De fato, acho que as coisas que o Python enfatiza fizeram meu código parecer melhor em outros idiomas, e não o contrário.) Além do PEP8 tem um bom exemplo de como você pode perder completamente a mentalidade que o Python incentiva.

Vamos dar uma olhada em um exemplo simples. Pegue este código:

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

Veja o problema com este código? Se você não trabalhou com Python, provavelmente não trabalhou. O problema é que existe um muito estilo preferido no Python que faz exatamente a mesma coisa:

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

Este é um gerenciador de contexto. Você sabe o que é bom para eles? Você sabe quando seria apropriado usar um? Você sabe quando seria apropriado criar o seu próprio? Não? Então você provavelmente não está pronto para rever o Python.

Vamos ver outro exemplo.

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)

Veja o problema? O problema é que este método é completamente desnecessário. Você provavelmente deve usar apenas uma compreensão no lugar, quando a operação é simples:

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

Se você não viu isso, não está familiarizado com os recursos e idiomas do Python.

    
por 13.01.2016 / 18:53
fonte
21

Eles podem ter pedido que você revisasse o código Python precisamente porque você não conhece o Python . há uma teoria de gestà £ o que é útil ter um "tolo" em um time. Eu não estou chamando você de um nome ruim :) A idéia é que uma equipe possa sofrer com o pensamento de grupo e desenvolver a visão de túnel. Uma forma de romper com isso é incluir alguém da equipe que os outros membros da equipe considerariam um "idiota", ou seja, alguém que não conhece o assunto. Você fará perguntas para se informar, e as perguntas virão de um ponto de vista que os outros membros da equipe provavelmente nunca consideraram.

Você não conhece o Python, então o que pode parecer comum para os programadores do Python pode parecer estranho para você. Você pode sugerir uma melhoria que a equipe nunca considerou.

    
por 13.01.2016 / 21:41
fonte
21

Revisão de código não se trata de pesquisar variáveis com ortografia inválida e formatação incorreta. Se você usa a revisão de código para encontrar essas coisas, pare de desperdiçar seu tempo e use uma ferramenta.

A revisão de código é sobre como melhorar o design e detectar erros comuns de um programador iniciante.

Desde que eu programo em C ++ , e eu não sei Python bem o suficiente, eu não sei Não ouse rever o código Python. No entanto, eu poderia ajudar com uma revisão de código Java.

Você não disse em qual idioma você programou, mas eu não vejo o que você poderia contribuir em uma revisão de código, se você não conhece o idioma em que está programado.

    
por 13.01.2016 / 16:24
fonte
11

As revisões de código (além de realmente procurarem falhas) são uma boa introdução de um membro da equipe para outros para o código ser adicionado ou alterado. Se você é um desenvolvedor experiente, você deve ser capaz de ler o suficiente para entender o que está acontecendo.

Veja uma revisão de código do ponto de vista de um líder de equipe: há alguém lá que entende o que o aplicativo deveria estar fazendo (lógica de negócios), há alguém que entende que o código está fazendo (lógica de implementação), e possivelmente várias outras pessoas que precisam ter uma idéia de como tudo isso se encaixa.

    
por 13.01.2016 / 16:51
fonte
7

Você definitivamente não deve ser o revisor somente , mas existem muitas boas razões para você ser um dos revisores. Não saber o idioma não é um grande obstáculo para muitas perguntas que precisam ser respondidas em uma revisão de código. Por exemplo, eu sou um dos principais 20 respondentes no C# tag neste site, e eu não compus o hello world em C #.

Alguma experiência que você pode compartilhar sem conhecer o idioma:

  • Conhecimento do domínio.
  • Desenho geral orientado a objetos.
  • Práticas gerais de programação: nomeação, clareza e assim por diante.

É também uma boa maneira de acelerar um novo produto. Acabei de me juntar a uma nova equipe, onde sei que as linguagens são muito usadas, mas não conheço o domínio. Participar de revisões de código ajudou-me a aprender melhor o lado do domínio, mesmo que ainda não tenha conseguido contribuir muito nesse sentido.

No seu caso, será uma boa maneira de aprender os idiomas de um novo idioma, à medida que você vê os comentários deixados por outros revisores. Estes são os tipos de coisas que são muito difíceis de aprender de outra maneira, porque o seu intérprete não se importa se seu código é pythonic ou não.

    
por 13.01.2016 / 20:37
fonte
5

Esta poderia ser uma situação ganha-ganha. Eu diria até que você poderia ser um revisor especialmente valioso, porque você é uma virgem do Python que não foi contaminada pelo Maldição do Conhecimento .

Pense desta forma: se o código for claro o suficiente para que até mesmo uma virgem do Python possa entendê-lo, então deve ser um bom código. As partes que você tem dificuldade em entender podem ser candidatas a retrabalho ou a comentários melhores.

Obviamente, também seria benéfico para você, porque você estaria aprendendo uma nova língua. (Espero que o código que você recebeu seja um bom exemplo para aprender). Esse arranjo deve funcionar particularmente bem para o Python, uma linguagem que tem a reputação de ser "pseudocódigo executável". Se você é um desenvolvedor experiente, não deve ter muita dificuldade em entender a essência de um programa em Python.

A ressalva seria que você não seria esperado para detectar erros decorrentes de pegadinhas específicas do idioma . Mas encontrar os bugs não é o único propósito das revisões de código. Se nada mais, você estaria participando da transferência de conhecimento simplesmente por estar ciente do tipo de coisa que acontece no código do seu colega.

    
por 14.01.2016 / 10:52
fonte
2

Uma vez me pediram para auditar um projeto que estava sendo realizado por um subcontratado e parecia ter sérios problemas de desempenho. Eu rapidamente estabeleci que o fator crítico era um único módulo Perl. Eu nunca havia encontrado Perl antes e não tínhamos ninguém na organização que soubesse disso, então comecei a tentar entender por mim mesmo. Eu nunca cheguei a entender os detalhes, mas ficou muito claro que o algoritmo que ele estava usando era quadrático no tamanho dos dados e essa foi a causa de todos os problemas. Então, sim, ler código em um idioma que você não entende completamente pode definitivamente ser produtivo. O bônus é que você aprende novos truques enquanto fala sobre isso.

    
por 16.01.2016 / 16:20
fonte
1

Algumas observações:

1) Se você é um desenvolvedor experiente, você vai pegar o Python (ou pelo menos tanto quanto você precisa saber), apenas trabalhando com ele. Será um caso de "aprender fazendo". Será difícil no começo, mas ficará mais fácil conforme você escolhe o idioma. Pense nisso como uma oportunidade de aprender outro idioma (as pessoas geralmente aprendem idiomas "estrangeiros" por meio da "imersão").

2) Há um número de pessoas valiosas em sites SE que são "não-técnicos", mas são qualificados em gramática, comunicação e lógica. Essas pessoas trazem um "olho novo" aos sujeitos e fazem uma série de "correções" que os outros perdem, porque estão "amarrados" demais no material. Você está sendo consultado presumivelmente por suas habilidades não "técnicas" (ou seja, não Python), como lógica e conhecimento geral de programação.

E se você não fez muita revisão de código, quase qualquer experiência de revisão de código irá ajudá-lo como desenvolvedor. Isso parece uma boa combinação entre suas habilidades e necessidades e as da equipe.

    
por 13.01.2016 / 17:38
fonte
0

Isso depende do objetivo da revisão; ou seja, o que você quer dizer com efetivo .

Você provavelmente poderá detectar alguns problemas. Se você é tudo o que eles têm para rever e eles estão apenas esperando que você dê uma olhada sobre isso ajuda alguns e, possivelmente, pega algo, então com certeza. Muitos conceitos de estrutura são semelhantes entre idiomas. Um especialmente é poder rever os comentários. Deve-se comentar bem o suficiente para que um programador que não seja daquela língua em particular ainda possa ter uma boa noção do que está acontecendo. Se não ... então você pode dizer-lhes onde está faltando seu comentário. Se isso for bem comentado ... então você deve ser capaz de rever um pouco de sua estrutura apenas através das anotações do que está acontecendo, em vez de realmente ler o código do que está acontecendo.

Mas você provavelmente não detectará muitos outros problemas. Por isso, se pretenderem que a sua análise seja uma determinação exaustiva sobre se é ou não um programa bem feito / viável, ficarão desapontados.

O fato de esse resultado valer ou não o tempo que você faz depende em grande parte do projeto.

    
por 14.01.2016 / 18:48
fonte