En SO me encontré con una pregunta sobre qué plataforma, Java o Python es mejor para desarrollar en Google AppEngine. Muchas personas se jactaban del aumento de la productividad obtenida del uso de Python sobre Java. Una cosa que diría sobre el argumento de productividad Python vs Java, es que Java tiene excelentes IDE para acelerar el desarrollo, ya que Python realmente carece en esta área debido a su naturaleza dinámica.
Entonces, aunque prefiero usar Python como lenguaje, no creo que brinde un gran impulso de productividad en comparación con Java, especialmente cuando se usa un nuevo marco. Obviamente, si fuera Java vs Python y el único editor que pudiera usar fuera VIM, Python le daría un gran impulso de productividad, pero cuando los IDE se incorporan a la ecuación no es tan claro.
Creo que los méritos de Java a menudo se evalúan únicamente a nivel de lenguaje y, a menudo, en supuestos obsoletos, pero Java tiene muchos beneficios externos al lenguaje en sí, por ejemplo, la JVM (a menudo criticada pero ofrece un gran potencial), excelentes IDE y herramientas, un gran número de terceros bibliotecas de fiestas, plataformas, etc.
Pregunta, ¿Python / lenguajes dinámicos relacionados realmente dan los enormes aumentos de productividad de los que se habla a menudo? (considerando el uso de nuevos marcos y el trabajo con aplicaciones medianas a grandes).
Respuestas:
Una de las principales ventajas de Python es su filosofía de "baterías incluidas": una biblioteca estándar extensa y fácil de usar. En Java, solo leer un archivo de texto requiere varias líneas de código, lectores anidados y demás. En Python es
f.read()
. Esto definitivamente será un gran aumento de la productividad, especialmente en la creación rápida de prototipos. Python el lenguaje también es generalmente menos detallado, lo que no es malo (aunque creo que la importancia de la verbosidad frente a la concisión a menudo se enfatiza demasiado).Sin embargo, si ya está trabajando en algún marco, como GAE, entonces esperaría que las diferencias sean mucho más pequeñas, y principalmente hasta la fluidez personal del idioma. En su mayoría, solo conectará el marco junto con la sintaxis de su elección, y allí la gran biblioteca estándar de Python ayuda poco.
fuente
List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));
. ¡No está mal! (Esto es Java 7, que aún no se lanzó el 11 de marzo).Aquí están mis 2 centavos. En mi experiencia, Python es bueno para proyectos pequeños a medianos, mientras que para proyectos más grandes soy más productivo con Java.
En general, puedo usar un lenguaje de tipo dinámico como Python (o PHP) para proyectos más pequeños: no es demasiado complejo, desea hacerlo rápido y no hay demasiado que pueda salir mal. En este caso, encuentro que Python puede ser más práctico de usar.
Sin embargo, cuando tengo que desarrollar un software más grande, prefiero un lenguaje de tipo estático como Java porque prefiero que el compilador realice tantas comprobaciones como sea posible. Mi experiencia es que en proyectos más grandes tengo que pasar más tiempo reparando errores con Python que con Java, así que no me molesto si toma un poco más de tiempo escribir el código en Java porque esto ahorrará tiempo más adelante.
fuente
Soy mucho más productivo en lenguajes más potentes como Python o Ruby. No importa si un IDE puede generar parte del código Java. Hay más código para leer y mantener. Se necesita más tiempo para leer el código repetitivo y encontrar las partes importantes, y más tiempo para cambiarlo. Está bien que Eclipse pueda convertir
a:
pero cada vez que abro la clase veré esa basura y tendré que pasar rápidamente para encontrar las partes interesantes. Además, durante el mantenimiento, se pueden introducir errores en el código generado.
Prefiero ver:
Para mí, la necesidad de un IDE para trabajar efectivamente con Java es una buena razón para elegir otro idioma.
Quizás más poderosamente, compare este código Ruby:
contra código Java similar:
El código Ruby es una traducción directa de la especificación: el peso promedio de las personas más altas que 200 (cm). Un comentario sería completamente redundante.
El código Java requiere un trabajo considerable tanto para escribir como para leer.
Paul Graham hace un argumento convincente de brevedad en los lenguajes de programación en este ensayo . Después de haber hecho algunas matemáticas a nivel de posgrado, encuentro su argumento convincente y los argumentos contra la brevedad son débiles. Ciertamente, una sola línea en un lenguaje de alto nivel puede ser más difícil de entender que una sola línea en un lenguaje de bajo nivel, así como una ecuación diferencial parcial es más difícil de comprender que una simple suma. Pero una sola línea en un lenguaje poderoso es más fácil de comprender que las cinco o diez líneas que reemplaza. Imagine leer un texto matemático que se escribió usando palabras en lugar de símbolos.
fuente
dateOfBirth
públicos. Si es necesario agregarle lógica más adelante en get o set, agregue a_dateOfBirth
para almacenar los datos, luego cree unproperty
nombredateOfBirth
con los métodos get y set. El código de llamada no necesita cambiar en absoluto en Python. Java solo usa accesores porque no tiene el concepto de "propiedad".people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
Me mudé de Java a Python hace unos años y personalmente siento que soy más productivo. Como señala @Joonas, gran parte de la productividad proviene de la biblioteca empaquetada. Pero algo de eso es del lenguaje mismo. No puedo imaginar no tener diccionarios, listas de comprensión, funciones de orden superior y un shell.
Tenga en cuenta que si ya conocía Java, tomará un tiempo adquirir fluidez en Python.
fuente
Esta es una pregunta un poco antigua, pero me gustaría agregar mi $ .03. Creo que también depende mucho de tu forma de pensar. Por mi parte, realmente no soporto lenguajes dinámicos e interpretados. Soy, por otro lado, un gran fanático de los lenguajes de tipo estático. Claro, usar Java puede ser más detallado, pero me resulta más fácil de leer y mantener una vez que todo está dicho y hecho. Creo que Python, Ruby y Perl son extremadamente difíciles de leer (para mí). Simplemente no puedo entenderlo a pesar de que lo he intentado. Dicho esto, puedo escribir código en Scala bien y no es gran cosa. Creo que depende de con qué te sientas cómodo. Al final del día, Java será mucho más poderoso; más que Ruby, Python o Perl. El JVM es una tecnología atractiva y aprender a aprovechar su poder podría resultar muy beneficioso para usted.
fuente
Me parece que Python, Ruby, Javascript y SQL son mucho más productivos que los lenguajes compilados como Java porque esos lenguajes tienen un ciclo de retroalimentación muy rápido. Puede ejecutar algunas líneas de código en una línea de comando e inmediatamente saber si el código es correcto o no. Si arroja excepciones, lo sabes de inmediato. Con Java, tiene que compilar, empaquetar e implementar, lo que a menudo puede llevar minutos para sistemas grandes, y esto resulta en un ciclo de retroalimentación muy lento.
El rápido ciclo de retroalimentación le permite iterar rápidamente hacia una buena solución, y eso es lo que hace que los lenguajes dinámicos sean más productivos.
fuente
feedback loop
He estado haciendo mucho más Python recientemente y he sido programador de Java durante mucho tiempo, y para un desarrollo completamente nuevo, creo que soy bastante más productivo en Python. Muchas cosas bastante simples en Java pueden ser un poco tediosas, como el procesamiento de archivos / secuencias, leer cosas de una URL, serializar XML, etc. por "tedioso", quiero decir, lo que te lleva 5 líneas de código en Java a menudo parece tomar solo uno en python. Sin embargo, usar las herramientas adecuadas, como la guayaba u otra API de colecciones, realmente puede ayudar con esto.
Supongo que estoy diciendo que una ventaja de python es que viene con muchas características que necesitas para usar una biblioteca de terceros en Java.
Dicho todo esto, para ciertas cosas sería mucho más productivo en Java que en Python, especialmente cuando se trata de refactorizar y trabajar con grandes bases de código, etc.
fuente