¿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).
Respuestas:
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.
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.
fuente
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, la
its importance
relevancia 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.
fuente
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 ++:Puede ser notoriamente difícil de detectar a menos que sepas el idioma.
fuente
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 .
fuente