Existe una creencia generalizada entre los programadores de que cuanto más dinámico y tipeado el lenguaje, más productivo será el programador. Guido van Rossum escribió sobre la productividad de la programación usando python en 1998 y al buscar en la web todavía veo personas haciendo referencia a esta afirmación exacta:
Sintácticamente, el código Python parece un pseudocódigo ejecutable. El desarrollo del programa usando Python es 5-10 veces más rápido que usando C / C ++, y 3-5 veces más rápido que usando Java. En muchos casos, un prototipo de una aplicación se puede escribir en Python sin escribir ningún código C / C ++ / Java. A menudo, el prototipo es suficientemente funcional y funciona lo suficientemente bien como para ser entregado como producto final, ahorrando un tiempo considerable de desarrollo. Otras veces, el prototipo se puede traducir en parte o en su totalidad a C ++ o Java; la naturaleza orientada a objetos de Python hace que la traducción sea un proceso sencillo.
¿Se ha evaluado adecuadamente este problema científicamente? Si no fuera por Python , ¿tal vez por los lenguajes de programación de hermanos como Ruby , Perl o PHP ?
No estoy buscando racionalizaciones, analogías o explicaciones de por qué podría ser difícil de responder, a menos que sea la opinión de investigadores o expertos la que se haya tomado el tiempo de analizar el problema.
Inicialmente hice esta pregunta a los escépticos . SE , y alguien sugirió que debería preguntarla aquí también.
fuente
Respuestas:
El artículo 1 de Ousterhout sobre lenguajes de script sugiere que cuanto más alto sea el nivel de programación, más productivo será el programador. Si consideramos que, como dice Boehm 2 , el número de líneas que un programador puede escribir en un momento dado es constante y no depende del lenguaje o su tipo (bajo nivel, programación del sistema, secuencias de comandos), uno puede creer fácilmente la afirmación. La proporción de instrucciones por línea de código fuente resultante puede ser un orden de magnitud (o varios) mejor con los lenguajes de scripting que con los lenguajes de programación del sistema.
Como los lenguajes de secuencias de comandos dependen en gran medida de utilidades listas para usar para tareas comunes (por ejemplo, estructuras de datos, manipulación de cadenas), su uso principal generalmente es mejorar la productividad con el costo de una velocidad de ejecución más lenta al proporcionar una sintaxis que es fácil de aprender y eficiente para mantener programas con. No se recurre a un lenguaje de script cuando se necesita una velocidad de ejecución máxima.
[1]: JK Ousterhout, Scripting: Programación de nivel superior para el siglo XXI , Computadora (IEEE), 1998
[2]: B. Boehm, Economía de ingeniería de software , Prentice Hall, 1981
fuente
Si mide la productividad como "tiempo para escribir un programa simple específico", entonces depende mucho más de la experiencia del programador y la mente rápida que el lenguaje que realmente está evaluando al programador, no el lenguaje.
Creo que los concursos de códigos cronometrados indican que el lenguaje no importa realmente para ese tipo de tareas. No hay un idioma que gane tales desafíos más fácilmente que otros (al menos no si permite la relativa popularidad de los idiomas).
Si mide el rendimiento como "la efectividad del mejor programa" escrito en un idioma determinado, entonces es aún menos dependiente del idioma. Vea, por ejemplo, los resultados del concurso Galcon AI . El ganador está escrito en Lisp. La siguiente entrada de Lisp, sin embargo, ocupa el puesto # 280. ¿Qué nos dice esto sobre la idoneidad del lenguaje para escribir una gran inteligencia artificial de manera eficiente? En mi opinión, nada. Simplemente nos dice que a "bocsimacko" se le ocurrió e implementó los algoritmos más efectivos. Para el registro, el tiempo no fue un factor importante en este concurso: las personas tenían más de dos meses para desarrollar su código.
Por último, si mides el rendimiento como "costo a largo plazo de mantener un proyecto", entonces creo que estás en algo. Especialmente si contrata solo a las mejores personas para el trabajo y cuenta el costo en horas hombre en lugar de dólares. Tengo una fuerte opinión sobre qué idiomas son mejores para esto, pero al no tener pruebas sólidas para vincularlo, dejaré esta opinión. Quizás alguien más tenga enlaces para este tipo de actuación.
fuente
http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf es uno de los pocos estudios que conozco que hizo una comparación directa real entre la productividad en varios idiomas. Es antiguo, pero vale la pena leerlo si encuentra interesante el tema. La comparación tiene varias deficiencias importantes sobre las cuales el artículo es muy honesto.
El resultado general es que los lenguajes de bajo nivel (por ejemplo, C, C ++) tardan más en escribir, pueden requerir mucha menos memoria y pueden ejecutarse mucho más rápido. Pero con muy alta variabilidad. Los lenguajes de secuencias de comandos de alto nivel tienden a tomar la mitad del tiempo de escritura y tienen menos variabilidad en el enfoque. En un grado inicialmente sorprendente, suele haber una forma obvia de hacer algo en un lenguaje de script.
Tenga en cuenta que todos los números de rendimiento para Java deben tomarse con un gran grano de sal: el papel se produjo en los años 90 antes de que las personas tuvieran mucha experiencia con Java y antes de que la JVM estuviera bien optimizada. Ambos factores deberían tener un impacto significativo.
fuente
Para decirlo en general, escribir un programa en Python generalmente será más rápido que escribir el mismo programa en C, C ++, Java.
También es probable que funcione más lento.
Hay, por supuesto, aplicaciones particulares para las cuales otros idiomas pueden ser más rápidos porque ciertas tareas involucradas son 'más nativas'.
Si bien no conozco ningún estudio para confirmar este aumento en la velocidad / productividad (como mencionó un comentarista, esto puede ser difícil de medir con precisión), ha habido una investigación directa sobre la expresividad del lenguaje.
Creo que hay algún mérito en la correlación entre la expresividad del lenguaje y la velocidad de programación. Simplemente imagine un patrón de iteración simple y cómo una comprensión de lista o de pitón forzada puede ser más sucinta. No solo se puede escribir inmediatamente más rápido, sino que también elimina las preocupaciones de errores fuera de uno, índices fuera de límites y otros problemas que pueden ralentizar significativamente el proceso de codificación.
Esto muestra una tabla de una estimación de las relaciones de expresividad de los idiomas. Si bien debe tomarse con un grano de sal, las notas a pie de página que menciona son muy valiosas.
http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness
fuente
La última vez que usé Java (hace un tiempo, lo admito) tomó una pantalla llena de código para abrir y escribir en un archivo. Compare eso con un par de líneas en Python o Perl, y puede adivinar cuál es más rápido.
Obviamente, todos los idiomas tienen sus propias fortalezas y debilidades, pero para la mayoría de las tareas, Python será más rápido de escribir.
fuente
write()
yread()
como en el resto de su acceso a archivos de proyecto Java será lo más conciso en Python. Creo que su ejemplo es demasiado restringido para comparar Python y Java (aunque estoy de acuerdo en que Java tiende a ser más detallado).