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 o conheço.
Faz algum sentido revisar o código em um idioma que eu não conheço?
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 o conheço.
Faz algum sentido revisar o código em um idioma que eu não conheço?
Respostas:
Algum sentido? Sim. Mesmo se você não souber nada sobre a semântica de uma linguagem de programação, ainda poderá ler caracteres e perceber formatação inconsistente, comentários ausentes, identificadores mal escolhidos, duplicação óbvia etc.
Muito sentido ou senso 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 da sua equipe e de vários outros fatores que não podemos quantificar suficientemente bem.
enumerate
.) Acho que seu comentário é um ótimo exemplo de por que tentar revisar um idioma com o qual você não está familiarizado deve ser, no máximo, educativo para si mesmo.
Como colaborador regular do Code Review Stack Exchange , encontro muitas perguntas que sofrem de problemas agnósticos de idioma, por exemplo:
E a lista continua. No entanto, embora não precise conhecer o idioma, ainda posso revisar esses problemas / pontos.
Alguns de nossos principais usuários têm as melhores respostas em idiomas que eles não usam ativamente ou não conhecem. Até dois dos meus dez melhores estão em idiomas que eu não conheço nem posso compilar / executar em minha máquina.
Eu diria que seria o mesmo que revisar o pseudo-código de alguém. Contanto que você possa observar e comentar coisas relevantes para as coisas que entende, você ficará bem e isso será relevante.
Aqui está a linha de fundo, na minha opinião:
Para a situação específica de não conhecer Python, eu ficaria especialmente cauteloso com isso. O Python possui muitas expressões idiomáticas e práticas padrão que acabam fazendo com que o bom Python pareça muito diferente do que você pode esperar em outras linguagens. (De fato, acho que as coisas que o Python enfatiza fizeram meu código parecer melhor em outras linguagens, e não o contrário.) Além do PEP8, há um bom exemplo de como você pode perder completamente a mentalidade que o Python incentiva.
Vejamos 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. O problema é que existe um estilo muito 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 para que servem? 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 revisar o Python.
Vejamos 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)
Vê o problema? O problema é que esse método é completamente desnecessário . Você provavelmente deve usar apenas uma compreensão, quando a operação for 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 os idiomas do Python.
Eles podem ter solicitado que você reveja o código Python precisamente porque você não conhece o Python . Há uma teoria de gerenciamento de que é útil ter um "tolo" em uma equipe. Não estou lhe chamando um nome ruim :) A idéia é que uma equipe possa sofrer com o pensamento do grupo e desenvolver a visão do túnel. Uma maneira de romper isso é incluir alguém na equipe que os outros membros da equipe considerariam um "tolo", 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; portanto, o que pode parecer comum para os codificadores do Python pode parecer estranho para você. Você pode sugerir uma melhoria que a equipe nunca considerou.
A revisão de código não se refere à pesquisa de variáveis com ortografia inválida e formatação incorreta. Se você usar 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 visa melhorar o design e detectar erros comuns de programadores iniciantes.
Como eu programa em C ++ , e não conheço Python o suficiente, não ousaria revisar o código Python. No entanto, eu poderia ajudar com uma revisão de código Java.
Você não disse em qual idioma programa, mas não vejo o que poderia contribuir em uma revisão de código, se você não souber o idioma em que está programado.
Revisões de código (além de realmente procurar falhas) são uma boa introdução de um membro da equipe para outros no código que está sendo adicionado ou alterado. Se você é um desenvolvedor experiente , deve poder ler o suficiente para entender principalmente o que está acontecendo.
Observe uma revisão de código do ponto de vista de um líder de equipe: existe alguém que entende o que o aplicativo deve fazer (lógica de negócios), existe alguém que entende que o código está fazendo (lógica de implementação) e, possivelmente, várias outras pessoas lá quem precisa ter uma idéia de como tudo isso se encaixa.
Você definitivamente não deve ser o único revisor, mas há muitas boas razões para você ser um dos revisores. Não conhecer o idioma não é um obstáculo para muitas perguntas que precisam ser respondidas em uma revisão de código. Como exemplo, sou um dos 20 principais respondedores da tag C # deste site e não compilei o hello world em C #.
Alguns conhecimentos que você pode compartilhar sem conhecer o idioma:
Também é uma boa maneira de acelerar o processo de um novo produto. Acabei de ingressar em uma nova equipe, onde conheço bem os idiomas, mas não conheço o domínio. Participar de análises de código me ajudou a aprender melhor o lado do domínio, mesmo que eu ainda não tenha conseguido contribuir muito nesse sentido.
No seu caso, será uma boa maneira de aprender os idiomas de um novo idioma, conforme você vê os comentários de outros revisores. Esses são os tipos de coisas que são muito difíceis de aprender de outra maneira, porque seu intérprete não se importa se seu código é python ou não.
Essa pode ser uma situação em que todos saem ganhando. Eu diria até que você poderia ser um revisor especialmente valioso, porque você é uma virgem Python que não foi contaminada pela Maldição do Conhecimento .
Pense desta maneira: se o código é claro o suficiente para que até uma virgem Python possa entendê-lo, então deve ser um bom código. As partes que você tem problemas para entender podem ser candidatas a retrabalho ou comentar melhor.
Obviamente, também seria benéfico para você, porque você escolheria um novo idioma à medida que avança. (Felizmente, o código que você recebe é 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 para entender a essência de um programa Python.
A ressalva seria que você não deveria encontrar bugs decorrentes de truques específicos do idioma . Mas a descoberta de bugs não é o único objetivo das revisões de código. Se nada mais, você estaria participando da transferência de conhecimento simplesmente por estar ciente de que tipo de coisa acontece no código do seu colega.
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 isso sozinho. Nunca cheguei a entender os detalhes, mas ficou muito claro que o algoritmo que ele estava usando era quadrático em tamanho de dados e essa era a causa de todo o problema. 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 faz isso.
Algumas observações:
1) Se você é um desenvolvedor experiente, escolhe o Python (ou pelo menos o quanto precisa saber), apenas trabalhando com ele. Será um caso de "aprender fazendo". No começo, será difícil, mas ficará mais fácil à medida que você escolhe o idioma. Pense nisso como uma oportunidade de aprender outro idioma (as pessoas geralmente aprendem idiomas "estrangeiros" por meio de "imersão").
2) Existem várias pessoas valiosas nos sites de SE que são "não técnicas", mas que possuem conhecimentos gramaticais, comunicacionais e lógicos. Essas pessoas trazem um "novo olhar" para os assuntos e fazem uma série de correções "desnecessárias" que outras pessoas perdem, porque estão muito "amarradas" no material. Você está sendo consultado, presumivelmente, por suas habilidades não "técnicas" (por exemplo, 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 em revisão de código o ajudará como desenvolvedor. Parece uma boa combinação entre suas habilidades e necessidades e as da equipe.
Isso depende de qual é o objetivo da revisão; ou seja, o que você quer dizer com eficaz .
Você provavelmente ainda poderá detectar alguns problemas. Se você é tudo o que eles precisam analisar e esperam que você dê uma olhada, ajude alguns e, possivelmente, pegue alguma coisa, então com certeza. Muitos conceitos de estrutura são semelhantes entre as linguagens. Um especialmente é poder revisar os comentários. Deve-se comentar bem o suficiente para que um programador que não seja dessa linguagem em particular ainda possa ter uma boa noção do que está acontecendo. Se não ... então você pode dizer a eles onde seus comentários estão faltando. Se for tão bem comentado ... você poderá revisar 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. Portanto, se eles pretenderem que sua análise seja uma determinação exaustiva de se esse é um programa bem-feito / viável, eles ficarão desapontados.
Se esse resultado vale ou não o tempo de execução, depende muito do projeto.