¿Es efectivo revisar el código en un idioma que no sé?

108

Soy un desarrollador experimentado, pero no he hecho muchas revisiones de código. Me piden que revise el código escrito en Python, pero no sé Python.

¿Tiene algún sentido revisar el código en un idioma que no conozco?

    
pregunta Heather Smith 13.01.2016 - 16:14
fuente

11 respuestas

120

Cualquier sentido? Sí. Incluso si no sabe nada sobre la semántica de un lenguaje de programación, todavía puede leer caracteres y notar un formato inconsistente, comentarios faltantes, identificadores mal seleccionados, duplicación obvia, etc.

¿Tiene mucho sentido, o tiene suficiente sentido para pagar el costo de su tiempo ? No estoy seguro. Esto depende de su posición, la importancia de las revisiones de código en el flujo de trabajo de su equipo y varios otros factores que no podemos cuantificar lo suficiente.

    
respondido por el Kilian Foth 13.01.2016 - 16:16
fuente
59

Como colaborador habitual en Intercambio de pila de revisión de código , me encuentro con muchas preguntas que sufren problemas relacionados con el lenguaje, por ejemplo:

  • Formato, sangría
  • Ámbito
  • Bucles
  • operaciones de tipo

y la lista continúa. Sin embargo, aunque no necesito saber el idioma, todavía puedo revisar esos problemas / puntos.

Algunos de nuestros principales usuarios tienen las mejores respuestas en idiomas que no usan activamente o no saben. Incluso dos de mis diez principales están en idiomas que ni conozco ni puedo compilar / ejecutar en mi máquina.

Incluso diría que sería lo mismo que revisar el pseudo código de alguien. Mientras pueda observar y comentar cosas relevantes para las cosas que entiende, estará bien y será relevante.

    
respondido por el Quill 13.01.2016 - 18:13
fuente
44

Consejo general

Aquí está la línea de fondo, en mi opinión:

  • Si no conoce el idioma lo suficientemente bien como para conocer las características y modismos comunes , probablemente no vaya a contribuir mucho a la revisión.
  • Si desea aprender las características y expresiones idiomáticas del idioma, puede participar en la revisión. Tu enfoque debe ser observar los modismos y hacer preguntas sobre patrones y organización que no tienen sentido para ti. Esto puede ayudar a identificar áreas problemáticas, pero solo en el sentido de que podría forzar al desarrollador a defender lo que han hecho. Haga sus preguntas de manera que deje espacio para su brecha de conocimiento. Tenga en cuenta que esto puede terminar siendo un costo neto en la propia revisión, pero ese costo es una inversión en su conocimiento.
  • Su capacidad para contribuir hasta que se haya familiarizado con las características, los modismos y los estándares del idioma será limitada. No espero que esto cambie hasta que haya escrito una cantidad significativa de código en el idioma.

Consideraciones y ejemplos específicos de Python

Para la situación específica de no conocer Python, sería especialmente desconfiado de esto. Python tiene una gran cantidad de expresiones idiomáticas y prácticas estándar que terminan haciendo que Python se vea muy bien de lo que podría esperarse en otros idiomas. (De hecho, creo que las cosas que Python enfatiza han hecho que mi código se vea mejor en otros idiomas, y no al revés.) Beyond PEP8 tiene un buen ejemplo de cómo podría pasar por alto la mentalidad que Python recomienda.

Veamos un ejemplo simple. Toma este código:

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

¿Ves el problema con este código? Si no has trabajado con Python, probablemente no. El problema es que hay un estilo preferido por mucho en Python que hace exactamente lo mismo:

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

Este es un administrador de contexto. ¿Sabes para qué sirven? ¿Sabes cuándo sería apropiado usar uno? ¿Sabes cuándo sería apropiado crear el tuyo? ¿No? Entonces probablemente no estés listo para revisar Python.

Veamos otro ejemplo.

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)

¿Ves el problema? El problema es que este método es completamente innecesario . Probablemente debería utilizar una comprensión en su lugar, cuando la operación es así de simple:

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

Si no lo viste, no estás familiarizado con las características y los modismos de Python.

    
respondido por el jpmc26 13.01.2016 - 18:53
fuente
21

La revisión de código no se trata de buscar variables con ortografía no válida y formato incorrecto. Si usa la revisión de código para encontrar esas cosas, deje de perder su tiempo y use una herramienta.

La revisión de código se trata de mejorar el diseño y detectar errores comunes por parte de programadores novatos.

Desde que programé en C ++ , y no conozco bien Python, no lo haría ' No te atrevas a revisar el código de Python. Sin embargo, podría ayudar con una revisión de código Java.

No dijo en qué idioma programa, pero no veo qué podría aportar en una revisión de código, si no conoce el idioma en el que está programado.

    
respondido por el BЈовић 13.01.2016 - 16:24
fuente
11

Las revisiones de código (además de buscar fallas) son una buena introducción de un miembro del equipo a otros para el código que se agrega o se modifica. Si eres un desarrollador experimentado , deberías poder leer lo suficiente como para comprender en su mayor parte lo que está pasando.

Observe una revisión del código desde el punto de vista del líder del equipo: hay alguien allí que entiende lo que la aplicación debería estar haciendo (lógica de negocios), hay alguien que entiende que el código está haciendo (lógica de implementación), y posiblemente otras personas que necesiten tener una idea de cómo encaja todo eso.

    
respondido por el Adam Zuckerman 13.01.2016 - 16:51
fuente
7

Definitivamente no debería ser el único revisor, pero hay muchas buenas razones para que usted sea uno de los revisores. No saber el idioma no es un obstáculo para muchas preguntas que deben responderse en una revisión de código. Como ejemplo, soy uno de los los 20 principales respondedores en el C# tag en este sitio, y no he compilado tanto como hola mundo en C #.

Algunos conocimientos que puedes compartir sin saber el idioma:

  • conocimiento del dominio.
  • Diseño general orientado a objetos.
  • Prácticas generales de programación: nombrar, claridad, etc.

También es una buena manera de ponerse al día con un nuevo producto. Acabo de unirme a un nuevo equipo, donde sé que los idiomas se usan bastante bien, pero no sé el dominio. Participar en revisiones de código me ha ayudado a aprender mejor el dominio, aunque aún no he podido contribuir mucho en ese sentido.

En su caso, será una buena manera de aprender los idiomas de un nuevo idioma, ya que verá los comentarios que dejan otros revisores. Estos son los tipos de cosas que son muy difíciles de aprender de otra manera, porque a su intérprete no le importa si su código es pythonic o no.

    
respondido por el Karl Bielefeldt 13.01.2016 - 20:37
fuente
5

Esto podría ser una situación de ganar-ganar. Me atrevería a decir que puedes ser un crítico especialmente valioso porque eres una virgen de Python que no ha sido contaminada por Curse of Knowledge .

Piénsalo de esta manera: si el código es lo suficientemente claro como para que incluso una virgen de Python pueda entenderlo, debe ser un buen código. Las partes que tiene problemas para entender pueden ser candidatos para un nuevo trabajo o un mejor comentario.

Obviamente, también sería beneficioso para ti, porque estarías aprendiendo un nuevo idioma a medida que avanzas. (Con suerte, el código que se le da es un buen ejemplo para aprender). Este arreglo debería funcionar particularmente bien para Python, un lenguaje que tiene una reputación de ser "pseudocódigo ejecutable". Si eres un desarrollador experimentado, entonces no deberías tener muchas dificultades para entender la esencia de un programa Python.

La advertencia sería que no se esperaría que vieras errores derivados de Gotchas específicas del idioma . Pero la búsqueda de errores no es el único propósito de las revisiones de código. Si no es nada más, estaría participando en la transferencia de conocimientos simplemente al estar al tanto de qué tipo de cosas ocurre en el código de su colega.

    
respondido por el 200_success 14.01.2016 - 10:52
fuente
2

Una vez me pidieron que auditara un proyecto que estaba siendo realizado por un subcontratista y parecía tener problemas serios de desempeño. Establecí bastante rápidamente que el factor crítico era un solo módulo de Perl. Nunca había conocido a Perl y no había nadie en la organización que lo supiera, así que intenté entenderlo yo mismo. Nunca llegué a comprender los detalles, pero estaba muy claro que el algoritmo que estaba usando era cuadrático en cuanto al tamaño de los datos y esta era la causa de todos los problemas. Entonces, sí, leer el código en un idioma que no entiendas del todo definitivamente puede ser productivo. La ventaja es que aprendes nuevos trucos mientras lo haces.

    
respondido por el Michael Kay 16.01.2016 - 16:20
fuente
1

Algunas observaciones:

1) Si usted es un desarrollador experimentado, obtendrá Python (o al menos todo lo que necesita saber), simplemente trabajando con él. Será un caso de "aprender haciendo". Al principio será difícil, pero se volverá más fácil a medida que aprendas el idioma. Considere esto como una oportunidad para aprender otro idioma (las personas a menudo aprenden idiomas "extranjeros" a través de la "inmersión").

2) Hay una cantidad de personas valiosas en los sitios de SE que no son "técnicas", pero tienen habilidades con la gramática, las comunicaciones y la lógica. Estas personas traen un "ojo fresco" a los sujetos, y hacen una serie de correcciones "obvias" que otros no pueden ver, porque están demasiado "atados" en el material. Se le está consultando, presumiblemente, por sus habilidades no "técnicas" (es decir, no de Python), como la lógica y el conocimiento de la programación en general.

Y si no has hecho mucha revisión de código, casi cualquier experiencia de revisión de código te ayudará como desarrollador. Esto parece una buena combinación entre tus habilidades y necesidades y las del equipo.

    
respondido por el Tom Au 13.01.2016 - 17:38
fuente
0

Eso depende de cuál sea el objetivo de la revisión; es decir, lo que quiere decir con efectivo .

Es probable que aún puedas detectar algunos problemas. Si eres todo con lo que tienen que revisar y solo esperan que echarle un vistazo, ayuda a algunos y posiblemente atrapa algo, entonces seguro. Muchos conceptos de estructura son similares entre lenguajes. Uno especialmente es poder revisar los comentarios. Debe comentarse lo suficientemente bien como para que un programador que no sea de ese lenguaje en particular aún pueda tener una buena idea de lo que está sucediendo. Si no ... entonces puedes decirles dónde faltan sus comentarios. Si está tan bien comentado ... entonces deberías poder revisar un poco de su estructura solo a través de las anotaciones de lo que está pasando en lugar de leer el código de lo que está pasando.

Pero es probable que no detectes muchos otros problemas. Por lo tanto, si pretenden que su revisión sea una determinación exhaustiva de si este es un programa bien hecho / viable, se sentirán decepcionados.

Si ese resultado vale la pena o no, el tiempo en que lo hagas depende en gran medida del proyecto.

    
respondido por el Jimbo Jonny 14.01.2016 - 18:48
fuente

Lea otras preguntas en las etiquetas