Creo que va siendo hora de que explique los pros, los contras y todos los aspectos relevantes sobre Java, una vez hemos probado el Holamundo y como compilarlo ( y que, OMG, funciona!;si no ha ocurrido eso, deverias volver a revisarlo todo)
para empezar, aclarar que java es un lenguaje orientado a objetos. ¿que significa esto? que si no has programado nunca, y vas poco a poco, no tendrás problema, pero si eres programador acostumbrado al paradigma de la programacion imperativa o funcional, te recomiendo que te armes de paciencia para entenderlo todo.(mi proximo post hablará especificamente sobre las diferencias entre la programacion orientada a objetos o POO y la programacion imperativa)
además, la ventaja de java, la que hace que sea en lenguaje muy atractivo, es simple: es multiplataforma. expliquemos esto: normalmente un programa viene definido por un codigo fuente; dicho codigo fuente, al compilarlo, se transforma en una serie de sentencias escritas en lenguaje maquina. ¿cual es el problema? que todo depende del sistema operativo en el que se haya compilado, pues cada codigo se traducirá a las sentencias maquina especificas ( e incompatibles) de cada SO. expresado con una metafora sería como traducir un texto ( codigo fuente) al inglés, al chino o al francés. logicamente, un inglés no podría leer un texto en chino ( en esta metafora nadie sabe idiomas
) y así sucesivamente. y ¿cómo soluciona esto java? facil, cuando compilamos en java lo hacemos a un lenguaje más o menos unificado ( siguiendo con la metafora de los idiomas, que sea el esperanto), que se traduce en tiempo real por una maquina virtual, que no es más que un interprete, desde el bitecode de java a las sentencias maquina de cada ordenador ( traductor en tiempo real de esperanto-chino, por ejemplo). ¿la ventaja? como dije anteriormente, un mismo codigo YA COMPILADO ( esto es muy importante) puede utilizarse en GNU/linux, en Windows, en MacOS… parece que no, pero para usuarios multiplataforma ( vease mi caso, que tengo que usar windows aunque no me guste mucho) es una enorme ventaja.
pero esta portabilidad no se limita a ordenadores, ya que Sun ( la empresa que lo creó) pensó en java como una especie de lenguaje universal, y para ello creó una version más pequeña y minimalista de su API pensada exclusivamente para dispositivos pequeños y moviles. exacto, ese hola mundo, con los paquetes adecuados, podría funcionar en tu terminal movil. sinceramente, me parece una idea bastante atractiva que, solo cambiando unas pocas sentencias, podamos llevarnos nuestro programa a cualquier lado ( teniendo en cuenta, claro está, las limitaciones tecnicas del movil).
es probable que en un futuro investigue como utilizar el java en moviles, pero de momento, intentemos usarlo en ordenadores, que no es moco de pavo.
sin embargo, como no todo el monte es oregano, hay que recalcar como desventajas que al ser un lenguaje que se traduce en tiempo real, requiere un porcentaje más elevado de recursos que un programa nativo ( cosa que, para aplicaciones pequeñas como las que vamos a crear aqui, y en ordenadores potentes como los que se comercializan ahora, no es un gran problema). además, tambien hay que tener instalada la maquina virtual, con el consiguiente marron de tener que buscarla, instalarla, etc… por que, amigos mios, NUNCA viene instalada.
hablando de su sintaxis, prefiero hacer una comparacion con el lenguaje que parece ser el estandar de la programacion: C ( o su equivalente en POO, C++); como ventaja destacar que, pese a que java ha sido escrito en C/C++ , su sintaxis es infinitamente más clara e intuitiva; además, desaparecen tanto los punteros ( con los problemas asociados que causan) como la basura que generan los objetos y que hay que recojer a mano en C++ ( de ello se encarga un recolector de basura especifico que se encuentra en la maquina virtual); no os preocupeis si no entendeis esto bien ahora, en el proximo post lo explicaré más a fondo. como desvenmtajas, el java tiene limitada la herencia a una sola clase, es decir, no existe la multiherencia ( que, bien mirado, con los problemas que puede generar, casi es una ventaja).
en conclusion: si quereis un lenguaje que sirva para todas las plataformas, que sea facil y potente al mismo tiempo, y con el que podais aprender POO de una forma bastante intuitiva, java es la mejor eleccion.
no obstante, voy a recomendar algun otro lenguaje más especifico, pues mucha gente lo que realmente busca es que la aplicacion funcione al pulsar un boton en una ventana y ya está, escribiendo el menos codigo posible: para ello visual basic ( VB en windows, y gambas en linux) es la mejor opcion: programaicon grafica del tipo arrastrar y listo, con una sintaxis minimalista y bastante eficaz ( pero, como siempre, no es portable). y para los que busquen una programacion profunda, casi a nivel de bit, ya sea para programas grandes y complejos que necesiten ser muy optimizados o para plataformas que no admitan una maquina virtual, la mejor opcion es C/C++, que pese a su complejidad a niveles avanzados, es el estandar de la programacion actual ( y te deja hacer unas barrabasadas que no veas, creedme)
espero que con este post haya dejado un poco más claro por qué he elegido java, per no obstante hay una razon más, esta muy personal:
escribir la interfaz grafica de java es tremendamente facil si sabes como, y no hay que buscar tampoco una interfaz para cada plataforma ( a direfencia de directx para windows, o qt o GTK para GNU/llinux, por citar ejemplos) con sus bibliotecas y sus funciones. en java solo existen el AWT y el Swing, y una es casi una pequeña ampliacion de la otra ( ya explicaré la diferencia más adelante); es decir, a efectos practicos, no necesitas má que un bloc de notas para empezar a programar, nada de paquetes graficos que hay que instalar aparte, solo programar y listo ( pues ya viene todo instalado en el JDK); personalmente, lo veo una ventaja: cuanto más sencillo sea todo, mucho mejor.
por hoy me despido, y espero haber aclarado algunas cosas; proximo post, diferencias entre la programacion imperativa y la programacion orientada a objetos.
Etiquetas: java