¿Estudios sobre qué tan bien puede un programador entender el código en lenguajes desconocidos? [cerrado]


15

¿Existen estudios serios sobre qué tan bien un programador experimentado que conoce el lenguaje X puede entender el código escrito por un programador competente que usa el lenguaje Y, para una buena variedad de lenguajes ampliamente utilizados como X e Y?

Por supuesto, el mundo real no es tan simple como los programadores conocen un solo idioma. Lo que nos gustaría saber es: si hacemos nuestro proyecto en, digamos, C #, y algún día algunos físicos viejos que solo conocen a Fortran y Algol lo miran, ¿hasta qué punto tendría sentido para ellos? Las partes matemáticas de la misma pueden leerse bien para ellos, si ignoran lo que para ellos son algunos signos de puntuación aleatorios. O, ¿podría un experto en Python encontrar fallas en mi inteligente script Ruby?

Podría haber problemas desde el nivel de sintaxis superficial hasta el nivel de grandes conceptos como objetos, metaprogramación de plantillas, funcional, etc. No espero que un programador entienda completamente cada detalle de sintaxis del código en un "idioma extranjero" o que siga la religión de algún gran concepto, pero me pregunto hasta qué punto obtendrían el flujo principal de control, encontrar el lugar cuando se dibuja algo en la pantalla y lo que determina su color o tamaño, verifique que un robot programado para conducir un automóvil apague el motor cuando termine, ese tipo de cosas.

Un estudio de buena calidad incluiría una investigación académica publicada, un informe oficial de algún grupo de la industria o una importante empresa de software, aunque tomaré observaciones sistemáticas imparciales de líderes experimentados de talleres y clases u otras fuentes. No estoy interesado en blogs cortos, ejemplos de casos únicos o anécdotas. (Bueno, tal vez algunas anécdotas si hacen una buena lectura).


1
No sé si hay algún estudio, pero desde mi experiencia personal, digo que sí, logré entender un programa sin saber el idioma.
SuperM

2
Esto dependería de un par de lenguajes: elija C # frente a Java, y obtendrá una familiaridad casi instantánea; elija Algol vs. C, y se familiarizará con una hoja de trucos de una página. Buena suerte eligiendo C vs. Prolog o Whitespace vs. Ada; será frustrante. Por cierto, el lenguaje no es lo único que juega en la comprensión de un programa: un experto en C especializado en diseños integrados que trata de entender el código MFC escrito en C es una visión bastante lamentable (esta es una experiencia de primera mano).
dasblinkenlight

¿Qué tan fácil es para alguien que entiende Álgebra para ellos aprender Trigonometría versus alguien que entiende Cálculo? Depende del lenguaje y el paradigma. Detectar y aislar las diferencias entre los idiomas es bastante difícil, especialmente porque los idiomas están en constante evolución. Dudo seriamente que alguien pueda evaluar la comprensión con una cantidad razonable de precisión.
Evan Plaice

Respuestas:


9

Obviamente, depende del grado de relación entre los idiomas. Por ejemplo, si tiene antecedentes en C o C ++ y ha realizado alguna programación en C # o Java, debería ser fácil para usted leer y comprender el otro de los dos lenguajes (Java o C #). Si conoce bien a Lisp, Scheme no debería ser un gran problema. Una vez depuré un programa PHP sin tener ningún conocimiento sobre PHP, solo con mi conocimiento de C, C ++ y Perl. Estoy bastante seguro de que cuando ese programa se hubiera escrito en Haskell o Smalltalk, eso habría sido inmensamente difícil y casi imposible para mí.

De hecho, no creo que una investigación académica sobre este tema tenga sentido (al menos, no seria). No existe tal cosa como un "programador experimentado estándar que conoce el lenguaje X", por lo que cualquier estudio perdería datos de base segura. Las personas tienen conocimientos diferentes, e incluso si han pasado por las mismas escuelas, tienen talentos y motivaciones diferentes.

pero preguntándose en qué medida obtendrían el flujo principal de control, encontrar el lugar donde se dibuja algo en la pantalla

Eso puede ser difícil incluso cuando está muy familiarizado con el lenguaje, ya sea porque la calidad del código es muy baja, o el marco utilizado es tan complejo, o la base del código es muy grande.


6

No estoy seguro acerca de una referencia de estudio realizado académicamente, sin embargo, los nombres bien explicativos de los métodos, clases y funciones en los lenguajes C # / C ++ / Java / Python o etc. deberían facilitar la comprensión de la base del código, así como el flujo del proceso comercial.

La convención de nomenclatura dentro del proyecto y generalmente en el desarrollo de software es un aspecto muy importante. Sin embargo, laits importancerelevancia para crear software de calidad a menudo se pasa por alto o se ignora por completo.

Las pautas de nomenclatura utilizadas en .NET Framework y las convenciones generales de nomenclatura utilizadas en .NET también son buenas referencias.


El buen diseño de API y las convenciones de nomenclatura ayudan, pero incluso las convenciones de nomenclatura basadas en el lenguaje a menudo son 'obstinadas' de una manera que solo se aplica a ese idioma. Además de C # / Java (que son casi idénticos), la mayoría de los lenguajes operan con diferentes principios que tienen flujos de trabajo únicos e implementaciones específicas para ese lenguaje. Por ejemplo, en los idiomas que no siguen el modelo de marco central megamonolítico, generalmente encontrará un gran ecosistema de paquetes que se unen mediante un administrador de paquetes común.
Evan Plaice

3

Depende enormemente del programador individual y de cómo internalizan los idiomas. No tengo absolutamente ningún problema para trabajar en una docena de idiomas, mientras que tengo un amigo que solo conoce C ++. Él no es peor en programación que yo, acaba de aprender una forma diferente.

Personalmente, encuentro una pregunta relacionada más interesante: cuando hay un error en el código (es decir, el programador X pensó que escribió someFunction(x, y)pero realmente escribió algo más), qué tan difícil es para el segundo desarrollador identificar el error. Un buen programador X haría extremadamente obvio lo que QUERÍA que hiciera la computadora, y eso sería fácil de leer. Sin embargo, si cometió un error, puede ser un gran problema. Cosas como el siguiente error de C ++:

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

Puede ser notoriamente difícil de detectar a menos que sepas el idioma.


1

No solo depende del programador como han dicho otras personas, sino también de las similitudes entre los idiomas, tanto en sintaxis, filosofía e implementación.

Muchos lenguajes diferentes usan una sintaxis derivada de C, por lo que seguir el flujo de control será más fácil si está familiarizado con ese tipo de sintaxis. Lo mismo ocurre con los idiomas fuertemente tipados y sueltos, lenguajes con soporte de funciones de orden superior, nivel de abstracción y filosofías programáticas. No solo depende de que puedas leer la sintaxis, sino que también estés familiarizado con los conceptos y filosofías de los idiomas.

Si aprendió C, por ejemplo, creo que sería razonable esperar que pueda derivar el flujo de control de C #, Java o C ++, etc. Sería un poco más difícil descifrar VB debido a la diferencia de sintaxis, o JavaScript debido a cierres, mecanografía débil y funciones de orden superior (sé que puedes hacer esto en C pero es un poco inestable). Sin embargo, no esperaría que pudieras depurar Lisp, F #, R o, Dios no lo quiera, ensamblar porque estos usan un paradigma de programación completamente diferente.

TL; DR No solo es importante poder reconocer la sintaxis, sino que la mayoría de las veces se puede descifrar una declaración o una llamada a un método, pero ser capaz de comprender la razón detrás de por qué un programa se escribe de cierta manera es el quid de la comprensión y la lectura del código .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.