Enero
2010
Diferencias entre algo sencillo y algo enrevesado
Hoy me he puesto a intentar hacer una cutre aplicación para Android (que está tan de moda) y de paso a programar mis primeras líneas en JAVA. ¿Quén inventó ese lenguaje del diablo? Se merece las 7 plagas seguidas de una lapidación pública, y voy a ello con un ejemplo muy simple.
Vamos a intentar partir una cadena de texto por espacios, en Python:
>>> a="esto es una cadena de texto" >>> a.split() ['esto', 'es', 'una', 'cadena', 'de', 'texto']
Nótese que entre alguna de las palabras hay más de un espacio.
Ahora vamos a hacerlo en JAVA:
public class test {
public static void main(String args[]) {
String a;
String [] aArray;
int i;
a="esto es una cadena de texto";
aArray=a.split(" ");
for (i=0; i<aArray.length; i++) {
System.out.println("index=" + i + " aArray=" + aArray[i]);
}
}
}
Que como resultado da:
index=0 aArray=esto index=1 aArray= index=2 aArray= index=3 aArray=es index=4 aArray=una index=5 aArray=cadena index=6 aArray= index=7 aArray= index=8 aArray=de index=9 aArray=texto
No quiero ir de listillo, pero necesitar 6 veces más código para no hacerlo bien es como volver al esamblador. He intentado hacer aArray=a.trim().split(" ") pero ni con esas...seguro que hay una forma rebuscada de hacerlo, en python no hay que pensar tanto. Además es bastante más lento que python y eso que se ejecuta compilado en bytecode:
$ time python -c "a='esto es una cadena de texto'; print a.split()" >/dev/null real 0m0.026s user 0m0.020s sys 0m0.004s
$ time java test > /dev/null real 0m0.135s user 0m0.064s sys 0m0.016s
En realidad la cantidad de código que se escribe en java es entre 6 y 12 veces superior que la que se escribe en python, haciendo de este ultimo un excelente lenguaje para desarrollo ágil. Pero no hay que demeritar a java, por que gracias a su gigantesca comunidad existen infinidad de libreas, framewors, IDE's y demás utilitarios( incluido un interprete de python para la maquina virtual de java llamado jython) que ayudan a facilitar la tarea de desarrollo.
Por otro lado, hay buenas noticias si estas interesado en le desarrollo para Android, por que google recientemente ha habilitado un interprete de python para esta plataforma.
http://google-opensource.blogspot.com/2009/06/introducing-android-scripting.html
http://code.google.com/p/android-scripting/wiki/PythonAndroidAPI
Es tan sencillo como leerse el JavaDoc de la función split y ver que se pueden usar expresiones regulares.
aArray = a.split(" +");
Y ya está.
Hombre, no creo que haya que confundir churras con merinas. Cada lenguaje para lo que es, para cosas sencillas y scripts Python le tiene que dar mil vueltas a Java pero para desarrollos serios Java ha demostrado ser un lenguaje robusto y muy válido. Otra cosa es la velocidad/rendimiento pero es que Java no está hecho para ser rápido.
Prueba a integrar un sistema bancario desarrollado con 25 programadores en dos años, a ver si te resulta tan sencillo mantenerlo con python.
El mundo no se ha vuelto idiota, si las herramientas se usan es por algo.
Bueno, bueno, haya paz. MarioDebian no estaba criticando, ni constructiva ni destructivamente a Java. Leo, las cosas se pueden decir menos ofensivamente. Entiendo que Java es un lenguaje potente y robusto, quizá no tan rápido como Python, porque gana potencia a costa de la rapidez. Es versátil, y para proyectos de gran envergadura, es quizá el lenguaje de alto nivel apropiado para estos menesteres.
MarioDebian nunca ha dicho lo contrario. Sólo que quizá él esté más adpatado a Python, y le cuesta encontrar lógica a procedimientos, expresiones regulares, número de líneas de código, etc, que existen en Java.
No he leído que haya atacado a Java o que diga que es una basura o que no le guste. Ha descrito algo objetivo: en Java hay que escribir más líneas de código que en Python para hacer lo mismo. Pero quizá esto haga que Java esté en un nivel más bajo que Python (entendiendo como bajo nivel al nivel más cercano a la máquina, no a la calidad), ergo, más controlable.
Enhorabuena por el blog! Saludos!
Hombre, ni tanto ni tan poco. A mi me gusta más python que java, pero no por eso voy a desmerecer a ninguno... (es cuestión de gustos), y menos sin saber programar bien en el lenguaje que esté criticando. (alguien te puede dar una lección, como fran)
La eficiencia de ejecución de Python es mejor a la de Java:
http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=python&lang2=java
La eficiencia del programador Python es mayor a la de Java.
Bueno, yo la verdad es que creo que es el típico post criticando a Java escrito por alguien que no esta dentro de Java. He visto muuuuchos en ese sentido y aunque llega a ser cansado, reconozco que me divierte algo, introducirme en ellos.
Las líneas de código de Java no estan optimizadas, por ejemplo, así como la función Split admite expresiones regulares para el trabajo.
Creo que si es la primera vez que escribes código Java no te ha salido muy bien, y que la principal razón, de tener seis veces mas código Java que Python, es mas bien por que desconoces el lenguaje, la potencia o las funciones disponibles.
A lo mejor podías haber inicializado las variables en la misma línea en la que las creas, o crear el índice i dentro del for, o usar expresiones regulares en el split...
Incluso podrías haber introducido los datos en el String args[].
Yo creo que se puede resolver eso en unas cuatro lineas de código, No entiendo cuando le achacamos a Java lo que en realidad es nuestra falta de conocimiento.
En fin. Un saludo.
Esto no pretendía ser un flame A vs. B y reconozco que como novato total en Java no puedo hablar con cierta propiedad.
Programar en Java es bastante más difícil que en otros lenguajes, pero esto no significa que sea menos potente.
Wait, what?!