Java Obsoleto???
Wednesday, 1 September 2010
Java o Python
He sido programador profesional durante más de 2 años. He trabajado en proyectos grandes y pequeños, que van desde Java Web Services para Perl-CGI, sitios web y J2EE JavaScript prototypes. Puedo decir que tengo experiencia suficiente para saber cómo acercarse a la mayoría de los aspectos de la programación en la industria y las cuestiones relacionadas con el trabajo. Dicho esto, voy a explicar por qué creo que el lenguaje de programación Java se estáquedando obsoleto en una industria madura con lenguajes nuevos y viejos.
Trasfondo Personal
Antes de empezar, quiero explicar mi experiencia de programación con Java y otros lenguajes para que este post no sea considerado como otro “Flamer”.
Estoy Certificado como Sun Java Certified Programer, y he programado profesionalmente durante 2 años. He trabajado para dos empresas de gran tamaño (sin nombres) que me han dado una excelente experiencia con el lenguaje de programación Java y su uso a nivel EE. Además de Java, se me ha requerido desarrollar en SQL (Oracle y MySQL, así como MS-SQL), Perl (CGI y secuencias de comandos), Bash y el diseño web habitual / lenguajes de desarrollo PHP, HTML, ActionScript, Javascript y CSS. Recientemente he tenido que aprender Python, y su programación orientada a objetos dinámicos de alto nivel , y al hacerlo me ha llevado a publicar este artículo. Actualmente trabajo para una empresa de gran tamaño en la que tengo que desarrollar utilizando Java EE, pero actualmente estamos mudando parte de nuestros servicios a Python.
Falsas Ideas y paradigmas
Muchos de los que dudan de Java por ahí tienden a soplar la misma trompeta, cantar la misma melodía; es decir, todos dicen ‘ Java Sux!! 11′. El problema con esto, es que Java esta compuesto de tres partes: un lenguaje de programación, un compilador, y la máquina virtual / intérprete. Esto significa que aquellos blabberings acerca de cómo el ‘Java sux’ no inducen sus observaciones lo particular, la parte que les desagrada, es decir, si odian la sintaxisa, el compilador o intérprete. No sólo es este “Flaming” una cosa inexacta, pero por lo general me enojo por aquellos que tienen muy poca o ninguna experiencia con el lenguaje de programación o de sus usos. A lo sumo, que han tratado de ejecutar un programa en Java y debido a su propia falta de comprensión o una mala configuración, noles compila. Muchas veces algunas personas que “flamean” ni conocen el idioma ni sus componentes y por lo tanto solamente tienen una opinión inducida o educada.
Otra de las cosas que es odiada de Java es que es lento. Bueno, están en lo correcto. Bien, pero hay mas que velocidad. Los primeros lanzamientos de Java eran muy lentos. Realidad. Sin embargo, las últimas versiones (Java 5 y 6) han añadido características del lenguaje que aceleran la ejecución en ‘run-time’ como son parametrización de tipos, autoboxing / unboxing de los primitivos, – chequeos en ‘compile-time’. Si bien estas características aceleran un poco las cosas, Java sigue siendo relativamente lento.
Ahora, a Flamear!! … errr, la crítica constructiva. x)
Java es demasiado estricto
Java se ha enorgullecido de dos características – Estricto diseño orientado a objetos (OO) y ‘Write Once, Run Anywhere’ la disponibilidad en multiplataformas, – las cuales han sido a la vez aceptadas y rechazadas, en cuanto al los pros y contras de estas características. Realmente no veo nada malo en el diseño orientado a objetos. De hecho, es mi método preferido de desarrollo de software. El problema con el estricto diseño OO de Java, es que es muy difícil de programar de otra manera. Estás obligado a adherirte a prácticas OO ya sea haciendo un pequeño programa de pruebas, o una aplicación Entrerprise. Esto no es el caso de Python. Es tan dinámico y productivo al escribir, que puede ser utilizado para escribir un script de copia de seguridad rápido o grandes servicios de back-end.
Java es también un ‘strict-typed language’. Esto significa que en creación de instancias, los objetos se le da un tipo (o “class”) y el compilador hace cumplir esto. Si un objeto tiene que cambiar el tipo, debe hacerlo a través del “polimorfismo” enfoque de diseño orientado a objetos. Esto lo aplica Java en tiempo de ejecución. Es otra característica de Java no permitir tomar la decisión sobre qué enfoque de software de diseño que se va a tomar – procediral u orientado a objetos – por lo que uno queda atrapado desde el primer día.
Lenguajes como Python y Ruby no son estrictamente typeados. Esto significa que el programador tiene más flexibilidad (pero tiene la responsabilidad de garantizar determinados tipos en tiempo de ejecución) sobre la forma específica los aspectos de un programa de tratamiento de la información.
Java tiene mucha “palabrería” – a.k.a Sintaxis
La naturaleza del diseño orientado a objetos significa que el código está escrito más para definir los objetos y sus conexiones relativas. Java lo hace muy bien, con una jerarquía de objetos agradables, pero es una víctima de su propio diseño y convenciones – los accesors / mutatorsdores (‘gets’ y ‘sets’), principalmente -, mientras que en lenguas como el pitón, la convención no es utilizar este enfoque, pero para exponer las propiedades de un objeto directo, ya sea por la notación de punto, o lo definen como un diccionario. Esto también puede hacerce en Java, pero obj[‘val’]’ es mucho más fácil escribir que ‘obj.getValue () ‘. Es posible que muchos vean esto como un punto discutible, algo que es puramente específico a la aplicación , pero en la realidad todo aquel que sabe cómo escribir Java, se adherirá a la convención estricta de que los objetos deben ocultar su implementación. Esto es definitivamente un buen enfoque para el diseño de software, pero en la práctica se convierte en una carga que pesa sobre un programador para escribir y usar estos aspectos de diseño. Sin mencionar que no ayuda mucho a la regla de los 80 caracteres por línea …
Otro ejemplo de la “mucha palabrería de la sintaxis de Java ‘ es la API de colecciones. Una vez fué conocida como su logro glorioso, el API de colecciones de Java fue un excepcional conjunto de objetos destinados proporcionar objetos – una extensión al array típico – que proporcionan acceso fácil, OO y rápido a una colección de objetos.
Sin embargo, con la aparición de otros lenguajes, el API de colecciones de Java se ha quedado bastante estancado debido a la falta de de la sintaxis dinámica. A continuación se presentan dos ejemplos, uno de la definición y la iteración de una lista en Java 1.5 y el otro sobre la iteración de una lista en Python 2.5:
List<String> list = new List<String>();// define a List that contains only String objects
list.add("Herro");
list.add("Moo");
list.addAll(myOtherList);
for (String str : list)
System.out.printf("Item: %s\n",str);
Y exactamente lo mismo en Python 2.5:
list = ['herro','moo']
list.extend(my_other_list)
for item in list:
print "Item: %s\n" % item
4 líneas de código, o 6? Imaginense eso con una aplicación grande (que aplicación en estos días no usa listas o mapas?) en la probablemente tendremos 4000 lineas de código en Python contra 6000 en Java. Se puede ver que el código escrito en Java se vuelve muy grandes, simplemente por el hecho de la sintaxis del lenguaje. A los programadores les gusta programar, no les gusta tener que escribir más de lo necesario. Python permite escribir exactamente lo que se necesita, y sin tener que escribir 100 palabras para hacerlo.
‘Write once, debug anywhere’
La capacidad de ejecutar una aplicación en cualquier sistema operativo sin necesidad de recompilar es una buena idea. Es punto de venta principal de Java es que tiene esta capacidad. Inicialmente se trataba de una característica útil y deseada del lenguaje porque no sólo por que si funcionaba, sino por que fue en una época en que la Web estaba en auge (tecnologías pre-2000) y nuevas tecnologías estaban naciendo. Hoy en día, la plataforma es la Web. Esto significa que no son necesarias las habilidades multi-plataforma de un lenguaje y un compilador / intérprete. Sólo necesitas un navegador web que funcione y una conexión a Internet. De hecho, con la rápida adopción de AJAX (Asynchronous Javascript and XML), los sitios web estarán sustituyendo a las aplicaciones de escritorio. Software de servicio (SAAS) es ahora la vanguardia del desarrollo de software y los objetivos de negocio, y la necesidad de aplicaciones de escritorio se hace cada vez menor a medida que más y más sitios web ofrecen abundantes características del navegador web – solo hay que mencionar GMail, Google Maps o EyeOS – y cualquiera experimentará el funcionamiento de aplicaciones ricas, todo en la comodidad de tu navegador web.
¿Y ahora qué?
Sin duda Java seguirá siendo una parte importante de la industria dentro de los próximos años. Sun es una empresa grande y potente, son buenos manteniendo las cosas vivas. No sólo eso, sino que se lanzó Java bajo la GPL, así que le queda de un rato todavía. Algunos podrían decir que esto era parte de una campaña de marketing inteligente para que la gente vuelva a usar Java. De cualquier manera, realmente yo sólo puedo ver su desaparición como algo más dinámico, cuando tecnologías confiables de código abierto tomen las riendas.
Java sigue teniendo un lugar importante en el mercado empresarial. Según este sitio, es el primer lugar (en términos de oportunidades de empleo, third party vendors y cursos), pero como con todas las estadísticas, eso ha de tener su pizca de sal por parte de Sun.
En Conclusión
Yo no soy un enemigo en Java, ha pagado mis facturas de los últimos años, así que le debo algo de crédito, de hecho me gusta mucho Java, su syntaxis, su portabilidad, no mucho su velocidad, es solo que debido a mis recientes aventuras con Python, enseguida vi las fallas en Java. Python hace que las cosas sean rápidas de escribir. Es potente, maduro y más concreto, es de código abierto. Java se quedará un buen rato, pero sus méritos originales no son lo que lo mantendrán con vida.
No. 1 — September 1st, 2010 at 8:11 pm
Plausible el post, me gusta, dice lo que debe de decir, al menos veo que te convenciste por hacer uso de python. Me da gusto que un colega más haga uso de este. Y si bien lo dices, el uso de las WebApp va mas para arriba que las de escritorio y definitivamente todo esto esta grandemente impulsado por la Google. Ahora que si te vez con ganas de testear algo mas bonito de python, te invito a testear un rato Plone como CMS que sin duda Worpress es superior a pesar del desarrollo PHPero que se carga. Plone tiene la caracteristica de la facilidad como CMS de usuario, sin embargo con clustering definitivamente esta failure. Que bueno y feliz viaje por el mundo pythonero. Por cierto, si quieres libros yo te puedo pasar algunos CHMs que tengo. =D . saludos @hazneliel.
No. 2 — September 5th, 2010 at 7:09 pm
Pues mira yo creo que incluso de las universidades salen con Java o bueno es mi caso, y si java es bueno y muchos lo odian xD.
A mi me agrada y tambn me gustaria aprender phyton siempre es bueno conocer otro lenguaje y saber cual es el bueno, cual te sirve y conviene mas.
PEro tambien depende de la empresa que te pide algo :).
Saludos!