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

15

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

Por supuesto, el mundo real no es tan simple como lo saben los programadores de 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 antiguos que solo conocen Fortran y Algol lo miran, ¿en qué medida tendría sentido para ellos? Las partes matemáticas de la misma podrían leerles bien, si ignoran lo que para ellos son algunos signos de puntuación aleatorios. O, ¿un experto en Python podría encontrar fallas en mi inteligente script de Ruby?

Podría haber problemas desde el nivel de sintaxis superficial hasta el nivel de grandes conceptos tales como objetos, metaprogramación de plantillas, funcional, etc. No espero que el único programador comprenda completamente todos los detalles de sintaxis del código en una "lengua extranjera" o que siga la religión de algún gran concepto, pero me pregunto hasta qué punto obtendrían el flujo principal de control, encuentre el lugar donde 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 esté listo, ese tipo de cosas.

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

    
pregunta DarenW 04.08.2012 - 09:40

4 respuestas

9

Obviamente, depende del grado en que las lenguas estén relacionadas entre sí. Por ejemplo, si tiene un fondo 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 idiomas (Java o C #). Si conoces 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 se hubiera escrito ese programa en Haskell o Smalltalk, eso hubiera sido inmensamente más difícil, casi imposible para mí.

De hecho, no creo que una investigación académica sobre este tema tenga sentido (al menos, no una seria). No existe tal cosa como un "programador con experiencia estándar que sabe el idioma X", por lo que cualquier estudio perdería los datos básicos. Las personas tienen conocimientos diferentes, e incluso si han corrido por las mismas escuelas, tienen un talento y una motivación diferentes.

  

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

Eso puede ser difícil incluso cuando está muy familiarizado con el idioma, 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.

    
respondido por el Doc Brown 04.08.2012 - 11:05
6

No estoy seguro acerca de una referencia de estudio académico conducido, sin embargo, nombres bien explicados por sí mismos de métodos, clases y funciones en C # / C ++ / Java / Python o etc. los idiomas deberían proporcionar una fácil comprensión del código Base, así como el flujo de procesos de negocio.

convención de nomenclatura dentro del proyecto y generalmente en el desarrollo de software es una Aspecto muy importante. Sin embargo, its importance y la relevancia para crear software de calidad a menudo se pasan por alto o se ignoran todos juntos.

Pautas de nombres utilizadas en .NET Framework y < a href="http://msdn.microsoft.com/en-us/library/ms229045.aspx"> Convenciones generales de nomenclatura que se usan en .NET son buenas referencias para buscar también.

    
respondido por el EL Yusubov 04.08.2012 - 10:38
3

Depende enormemente del programador individual y de cómo internalizan los idiomas. No tengo ningún problema para trabajar en una docena de idiomas, mientras que tengo un amigo que solo conoce C ++. Él no es peor en la programación que yo, simplemente aprendió de una manera 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ó otra cosa), ¿qué tan difícil es para el segundo desarrollador identificar el insecto. 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 difícil de detectar, NOTORIOSAMENTE, a menos que sepa el idioma.

    
respondido por el Cort Ammon 18.02.2014 - 03:12
1

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

Muchos idiomas diferentes utilizan 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 se aplica a los lenguajes 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 en sintaxis, o JavaScript debido a los cierres, la escritura débil y las funciones de orden superior (sé que puedes hacer esto en C pero es un poco torpe). Sin embargo, no esperaría que pudieras depurar el ensamblaje de Lisp, F #, R o, god forbid, porque estos utilizan un paradigma de programación completamente diferente.

TL; DR No solo es importante poder reconocer la sintaxis, la mayor parte del tiempo que puede descifrar una declaración o una llamada a un método, sino que es capaz de comprender la razón por la que un programa está escrito de cierta manera es el quid de comprensión y lectura de código.

    
respondido por el Nimnam1 18.02.2014 - 04:14

Lea otras preguntas en las etiquetas