domingo, diciembre 19, 2004

La Historia de un Programador VI

Parte 6.0 Java, Introduccion

Hubo un tiempo antes de empezar con PHP en el cual tuve que tomar una gran decision. Quería abordar en el mundo de la interfaz gráfica, la interfaz de texto ya me habia brindado mas de lo que habia esperado, y me sentia listo para entrar al mundo "visual".

Pero al investigar, noté varias tendencias. Entre ellas C, Visual C, Visual Basic, Java... entre otras, de hecho se que muchos mas lenguajes enfocados a la terminal (como PERL) tienen instrucciones para usar interfaces graficas, pero si era ya de hecho dificil en los lenguajes enfocados a la interfaz, usar esos lenguajes era en cierta forma algo masoquista.

El problema era escoger uno de estos lenguajes enfocados.

El lenguaje C, tenia la propiedad de ser portatil, de poder ser compilado en distintas plataformas. Pero al nivel de interfaz grafica, no era tan portatil, podia escribir el mismo programa pero al momento de querer enviar todo a la interfaz tenias que usar "plugins" para mostrarlo correctamente en cada uno (uno para gnome, uno para Qt, uno para windows, uno para la MAc y asi sucesivamente). De por si el sistema quedaba realmente extenso, y ahora tener que lidiar con esto me empezó a obligar a escoger otro lenguaje.

Visual Basic de plano quedó fuera del mapa, no es portatil, necesitabas pagar una licencia tan solo para usarlo, vaya tenia que tener windows para usarlo, y solo podia programar en su interfaz. VB era actualizado casi cada año, y finalmente con la llegada del .net, empece a notar que los cambios drasticos en el lenguaje eran sintomas de un lenguaje que no tenia las bases firmes, y era necesario estarlo cambiando para mantenerlo actualizado. Al diablo!

Java por su parte, aparentemente resuelve el problema desde la raiz. Ya que basta con que lo compiles una vez puedes correrlo en casi cualquier plataforma, pero aun asi, la naturaleza en la diferiencia entre sistemas operativos es muy notable (afortunadamente Windows se ha estado actualizando). Java era algo similar al C, un todologo diseñado para el trabajo en red. Que prometia tener un PORT de sus librerias en todas las plataformas usadas actualmente, asi los programadores solo nos preocupariamos por terminar el proyecto.

Parte 6.1, Java, El todologo al rescate

A Java lo veia como un C moderno, guardando la seriedad de un lenguaje con bases realmente firmes desde las cuales se puede crecer a donde uno quiera. Pero mi primer contacto con java fue algo confuso, ya que me mostraba el mundo de la programacion desde otra perspectiva, y era algo que no me esperaba.

El Paso de secuencial a estructurada fue un gran golpe. El paso de estructurada a orientada a objetos ha sido un golpe mayor!

Para empezar los programas en Java ya no son programas, NO mi pequeño saltamontes! ahora no son mas que objetos, objetos que tienen propiedades y procedimientos tambien heredadas de objetos mas generales. Ya no hay una sola linea secuencial de ejecucion, ahora todos son librerias y se ejecutan de manera distinta dependiendo de la circunstancia. Ya no te preocupes por el manejo del STDIN/STDOUT, nooo... ahora procupate por las acciones del usuario y de las señales que recivas de objetos ejecutandose de manera paralela, el STDIN/STDOUT ya no son lo que pensabas!

Y no solo eso!!!

Reconoces la diferencia de manejo de variables entre Basic y C? Algo similar ha ocurrido pero ahora con las funciones (o bueno, procedimientos), ahora no existen procedimientos globales accesibles por todo el sistema. NO!(ya no mas .h ni .inc), ahora los procedimientos existen solo dentro de los objetos!

Complejo no, Distinto, velo de esta manera, seguramente lo que quieres modificar u obtener es informacion relacionada a un algo, ahora ese algo tiene que ser identificado y encapsulado dentro de su propio mundo con sus propios procedimientos, variables, etc... etiquetandolo ahora como objeto.

Ya no mandas a llamar a librerias genericas que puedes usar en cualquier momento!!! NO ahora importas objetos para crear instancias de ellos, y de esta manera poder usar sus procedimientos!!! (siento que me estoy repitiendo demasiado)

Total, desde la perspectiva de un programador en C, Java es el caos mismo, hecho lenguaje!

Pero sorprendentemente dentro del Caos existe el orden!, ya que, si alguna vez has escrito un programa realmente extenso, te habras dado cuenta que es mas facil manejarlo por modulos, por plugins y cosas por el estilo. El programar por objetos no solo te ayuda a realmente separar la programacion (ya que cada objeto puede ser completamente ajeno a su ambiente), si no al organizar incluso los grupos de programadores, e incluso el reutilizar el codigo hecho ya antiguamente.

Un ejemplo sencillo, es un objeto que te permita verificar que un usuario sea quien dice ser, en todos los sistemas centralizados se usa!, porque no simplemente copiar el paquete "login.jar" a mis librerias y ya tener disponible este metodo estandarizado?

Desarrolla una vez, correlo donde quieras (realmente donde quieras).

Parte 6.2, Java, Proximamente en su refrigerador!

Existen varias versiones de Java, y estas cubren casi cualquier tecnologia existente (o por existir). Puedes tener programas en tu PC, en Linux, en windows, en UNIX, en OSX, en tu XBOX, en tu PS2, en tu Palm, en tu celular, en tu telescopio, en tu conmutador... casi en cualquier lado! Y sigue siendo el mismo Java!

En el Web no se queda tan mal, Java tiene sus JSP (Java Server Pages/Java Servlets) que pueden hacer casi cualquier cosas que PHP hace, e incluso mas! Su nueva perspectiva de sesiones, la facilidad de manejo de paginas con sus sistemas empaquetados,su velocidad de ejecucion, son algo que lo hacen la vale la pena checar!

Ademas de que no tienes que pagar por programar o descargar los Kits de programacion (almenos no el J2SE), y puedes distribuir tu software usando la licencia de GNU.

Que mas puedes pedir!

Es este el lenguaje de programacion que necesitabamos? Consideremos que la curva de aprendizaje es algo larga... espero que la programacion orientada a objetos se enseñe pronto en las escuelas.

Tambien espero que a SUN no se le salga lo avaro y destruya todo lo que ha logrado al mantener un lenguaje como este. Creo que seria el segundo punto en contra.


Bueno, este es el ultimo capitulo de estas series. Quizas en algun futuro, cuando conosca algun lenguaje que valga la pena comentar, y que me muestre una nueva perspectiva que hasta la fecha no haya sido tomada en cuenta... volvere a postear una continuacion :)

Asi que por lo pronto, hasta entonces!!!

PD. No trabajo ni tengo nada que ver con Microsoft, ni con Borlan, ni con SUN, ni ninguna otra empresa cuyo nombre o nombres de productos han sido mencionados en esta serie. Este blog es solo para dar mis puntos de vista como programador.

3 comentarios:

Requiem dijo...

Ese ultimo comentario no disipa las dudas de nadie que sospeche que estas comprado (al contrario las alimenta), y a quien no se le habia ocurrido ya le diste la idea.

a mi me interesa mucho php... y con GTK+binding suena genial... java es lento y sobre todo feo, se debe de obedecer cierto estandar de intefáz gráfica, por eso creo que que utilizar gtk+ o qt es importante o si no todo termina viendose diferente a todo lo demás...

Por otro lado hay algo que siempre me pone a pensar... si las computadoras siempre hubieran sido super rápidas, y siempre hubieran existido los runtime enviroment (es más! que fueran parte del OS) haría mercado para el software compilado? Es más! Habría cultura de consumo de sowa? er software?

Kenrro dijo...

Luego de programar en Perl y en PHP, me doy cuenta que lo compilado no es siempre la mejor opcion. Admito que Java es lento y su ejecucion consume relmente demasiados recursos que otro sistema hecho en otro lenguaje.

Pero las propiedades del lenguaje te ayudan en muchas maneras a tener una mejor experiencia en el desarrollo de una aplicacion. Me doy cuenta que aca afuera a tus clientes no les importa tanto la velocidad sino la funcionalidad, y sobre todo los tiempos de entrega :D

Java aun siendo compilado, tiene que seguir siendo interpretado por su maquina virtual. Al menos al momento de ejecutarse un jsp no tiene que ser compilado nuevamente antes de cada ejecucion (como PHP y PERL).

No me da mucha confianza el hecho de que el lenguaje le pertenesca a una empresa, como SUN. Y que tengamos que usar una licencia especual de SUN, con el temor de que algun dia la cambie y nos borre del mapa.

Recuerdo hace años la historia de Borland en la que regalaban licencias a estudiantes, para que aprendieran el lenguaje y necesitaran la interfaz una vez saliendo al mercado laboral (y ahora si con licencias pagadas). Tengo miedo que SUN solo nos regale el lenguaje para que despues lo necesitemos y este nos lo negue, cobrandonos una cuota.

Mi paranoia llega a tal grado que tengo un historial del jre y jde para en caso de que la ultima se necesario pagar, regreso a la anterior -_-.

Veremos que pasa en el futuro.

Con respecto a tu pensamiento ^^ Si, siempre habra empresas con suficiente dinero y tiempo como para desarrollar un sistema que sea compilado. O deplano habra usuarios que querran que su aplicacion no se la pase asesinando computadoras, y tiene el tiempo y la paciencia suficiente como para hacerlo, y si contamos a una gran comunidad haciendolo... mes probable aun!

Los sistemas de calculo pesado, siempre tendran en mente el mercado de sistemas compilados, ya que la optimizacion para ellos es casi siempre lo numero 1. Pero quien sabe, es igual, mi opinion :D

Saludos Ricardo

Requiem dijo...

Yo lo que quiero decir es, si el codigo compilado no ofreciera ninguna ventaja, estariamos donde estamos? o las universidades habrian tomado todo el desarrollo en sus laboratorios y como practicas para sus estudiantes, etc... es un caso hipotético.

Por otro lado, php jala perfecto sin compilarse ya que, desde cierto punto de vista no hay mucho que compilar, casi todo se parsea como html despues de todo... en fin.