jueves, 13 de noviembre de 2008

¿Como aprendo Java?

Trabajar en sistemas a menudo significa tener un mejor sueldo que en otras profesiones (aunque el estrés te puede dejar pelado), dentro de sistemas, programar en Java (o ser un profesional en SAP) puede también significar tener un sueldo aun mayor.

Por eso, muchos profesionales que programan en PHP, .NET u otro lenguaje, a menudo preguntan ¿Como aprendo Java?

A la hora de aprender, no se sabe por donde empezar, y libros hay muchos, en mi opinión lo primero es leer el tutorial de Java de Sun (Sun es la empresa que creo Java):

http://java.sun.com/docs/books/tutorial/

Este tutorial es un libro online gratis, que existe desde la época donde se creo el lenguaje (cerca del 95/96). Pueden aprender el lenguaje rápidamente, no hace falta leerse todo el libro, lean a continuación de que se trata cada sección y cuales deben leer:

  • Getting Started: Es una introducción a Java, mas o menos cortita, leanla con detenimiento.
  • Learning the Java Language: Esta sección explica el lenguaje mas a fondo, también deben leerla completa, es importante ya que explica conceptos básicos, como la programación orientada a objetos (POO o OOP en ingles, y Java es orientado a objetos) y la sintaxis del lenguaje.
  • Essential Java Classes: Explica las clases base del lenguaje (algo así como el API básico), esto pueden leerlo todo, o prestarle mas atención solo a la parte de Excepciones e I/O básico. La parte de concurrencia y expresiones regulares (aunque es muy usado) no es tan necesario para un principiante. Finalmente lean con detenimiento la parte final que explica las variables de entorno (PATH y CLASSPATH) ya que es donde un novato se encuentra con mayores problemas.
  • Collections: Explica las clases y conceptos sobre como manejar en Java, estructuras de datos, si tienen tiempo leanla con detenimiento, mas adelante necesitaran tener a lado la referencia (explicare mas de esto adelante), ya que es algo que siempre se utiliza al programar.
  • Swing: Swing es para programar interfaces de usuario para aplicaciones de escritorio, la mayoría de los trabajos en Java es para aplicaciones web, así que pueden saltearse por completo esta sección.
  • Deployment: De esta sección, lo importante es que aprendan el concepto de JAR (Java ARchive) que es un archivo ZIP que contiene el programa que hicieron en Java, compilado.
  • Preparation for Java Programming Language Certification: Las certificaciones son examenes en los cuales se prueba que ustedes conocen el lenguaje, básicamente sirven para certificar que saben y así obtener un empleo, o cobrar mas, si están interesados, lean esta sección.
  • Custom Networking: Pueden saltearse esta sección.
  • The Extension Mechanism: También salteense esta sección.
  • Full-Screen Exclusive Mode API: Esto también salteenlo, es algo de bajo nivel, que sirve para hacer juegos de escritorio.
  • Generics: Esto es muy utilizado, aunque este capitulo es mas avanzado, leanlo.
  • Internationalization: Aunque no es una sección muy importante, leanla, ya que como vivimos en Argentina, probablemente tengamos que modificar aplicaciones Java para que utilicen el formato de fecha y monedas local.
  • JavaBeans: Todo lo que es Java Beans es muy importante, leanlo, ya que es bueno saber de esto cuando aprendan sobre J2EE (mas sobre J2EE adelante).
  • JDBC Database Access: Este es el API para acceder a la base de datos, es necesario aprenderlo.
  • JMX: Pueden leerlo o no, se utiliza en algunos servidores de aplicación (mas sobre esto abajo).
  • JNDI: También conviene saber sobre JNDI para cuando utilicen J2EE.
  • RMI: API para invocar funcionalidad remotamente, también utilizado en J2EE, así que leanlo.
  • Reflection: Es una sección un tanto avanzada, pueden saltearla (aunque es bueno que la lean en un futuro).
  • Security: Pueden saltearla.
  • Sound: Salteenla.
  • 2D Graphics: Otra mas a saltear.
Como he dicho mas arriba, la mayoría de los trabajos en Java son para la web, así que todo lo que es sonido, imagenes y todo lo que sea para aplicaciones de escritorio, pueden saltearselo.


¡Ya aprendí todo rapidísimo! ¿Y ahora como sigo?

Una vez que tengan todo en su cabeza, sigue hacer sus primeros programas, para ello, lo esencial es tener instalado el JDK, que es la maquina virtual donde sus programas Java correrán, y además contiene el API.

El JDK también esta en la pagina de Sun:

http://java.sun.com/javase/downloads/index.jsp

Hoy en día bajense la versión 6, allí tendrán el JDK y el JRE. El JRE es un interprete, sirve solo para ejecutar programas Java, si ustedes serán programadores conviene que se bajen el JDK (que contiene el compilador y el runtime, es decir, también trae el JRE).

Cuando tengan el compilador y el interprete, necesitaran un IDE, que le hará el desarrollo mucho mas fácil (hay gente que utiliza su editor de texto favorito, aunque esto no es recomendable para un principiante).

Hay muchos IDEs de Java, en mi opinión los mas utilizados son el NetBeans (de Sun, que también se pueden bajar de la pagina de downloads que puse arriba) y el Eclipse (muy utilizado para crear IDEs para también otros lenguajes y entornos). ¿Cual elegir? quizá no es bueno influir en ello, cada uno tiene sus gustos y existen varios IDEs, yo prefiero el Eclipse, aunque si son principiantes, les recomiendo el NetBeans, ya que tienen todo integrado y solucionado.


J2EE

Ya saben programar en Java e hicieron lindos programas, ahora para conseguir trabajo, les piden saber J2EE, termino el cual he nombrado anteriormente.

J2EE significa Java Enterprise Edition, es una plataforma para desarrollar aplicaciones que correrán en un servidor. En simples palabras, es un conjunto de APIs para crear aplicaciones web que accederán a una base de datos, de manera segura, multi-capa, distribuida, tolerante a fallos, etc.

Lo primero es aprender, por eso, a leerse el tutorial de J2EE de Sun:

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/

Aquí también hay varias secciones que se podrían saltear, como la del XML y APIs para manejo de XML, DOM, XSLT, aunque es necesario saber esos conceptos, ya que hoy en día se utiliza esto se utiliza para la comunicación entre servidores por medio de Web Services.

Luego es esencial leer la parte de servlets (aplicaciones web hechas en Java) y JSP (paginas HTML con código java incrustado).

Las secciones sobre EJB (Enterprise Java Beans) son esenciales, ya que junto con la parte web, es el corazón de J2EE.


El servidor de aplicaciones

Además del JDK, para correr aplicaciones web hechas en Java, es necesario utilizar un servidor de aplicaciones. Aquí las opciones son varias, paso a detallar:

  • Tomcat: Es un servidor muy utilizado para aplicaciones web Java, es relativamente rápido, y utiliza pocos recursos. Pero es solo para aplicaciones web, no contiene la parte Enterprise JavaBeans de J2EE.
  • GlassFish: Es un nuevo (desde el 2005) servidor de aplicaciones de Sun para J2EE que esta ganando popularidad.
  • JBoss: Otro servidor J2EE muy popular.
  • OC4J: U Oracle Application Server 10g, es el servidor J2EE de Oracle, como esta compro a BEA Systems, es mejor utilizar el WebLogic.
  • WebLogic: U Oracle WebLogic Server, otro servidor J2EE de BEA Systems, que fue adquirida por Oracle. Servidor robusto, muy utilizado y comercial.
  • WAS: O WebSphere Application Server, es el servidor J2EE de IBM, también robusto y comercial.
Y hay otros, la elección dependerá de varios factores (como dinero para servidores, ya que algunos necesitan muchos recursos, como dinero para licencias, algunos son muy caros, otros gratuitos).

Para aprender, si utilizan Netbeans, tendrán Tomcat y GlassFish para todo lo que es desarrollo J2EE, solo fijense de bajarse la versión correcta de http://www.netbeans.org/downloads/index.html.


¿Que mas necesito saber?

J2EE es muy lindo, pero necesita muchos recursos y no es tan rápido, especialmente para la parte de Entity Beans (Beans de Entidad), por lo que algunos arquitectos de sistemas han tenido que implementar otras soluciones (muchas veces al ver la realidad). Entre ellas tenemos:

  • Acceso directo a la base de datos: Es decir, hacer aplicaciones web que solo utilizan Tomcat (el contenedor web) y utilizan el API JDBC para ejecutar SQL para acceder a la base de datos. Es simple, rápido, y se utilizan pocos recursos.
  • Hibernate: Es una herramienta para mapear objetos java con tablas en la base de datos, siempre fue una alternativa a los beans de entidad, aunque no mas fácil de utilizar.
  • Spring: Otra herramienta que es una alternativa a los EJBs.

Personalmente, utilizar Tomcat con JDBC ha solucionado todos mis problemas, aunque esto es tema de debate, lo dejo al criterio de cada uno.


Jakarta

No solo para la programacion J2EE, sino para todo en general, el proyecto Jakarta (otro proyecto de Apache) es un conjunto de librerias y herramientas para Java para solucionar todo tipo de problemas.

De las librerías, la mas utilizada es el Commons, que es incluida en casi todos los proyectos.

Luego el Maven, que es una herramienta de manejo de proyectos, que se puede utilizar para compilar y desplegar aplicaciones en un servidor, entre otros usos.

Dentro de Jakarta, también tenemos a Tomcat, y a Struts, una herramienta para el desarrollo de aplicaciones web, muy utilizado, que ayuda a implementar el patrón MVC (que separa el modelo de datos de la parte de presentación y control de una aplicación web). Una nueva alternativa a Struts es el JSF (Java Server Faces) de Sun.


Patrones de diseño

Mas arriba leímos sobre MVC, en Java (como también en otras tecnologías) además de J2EE, se utilizan mucho los patrones de diseño, que son soluciones a problemas comunes de diseño.

Una aplicación contiene muchos problemas a resolver, y por lo general un arquitecto de software utiliza los patrones en el diseño de cada solución, por ello, conviene tener el concepto de los patrones mas utilizados.

Para J2EE, se utilizan los patrones de Sun:

http://java.sun.com/blueprints/patterns/
http://java.sun.com/blueprints/corej2eepatterns/Patterns/

La mayoría de ellos son muy utilizados, paso a detallar algunos:

  • Transfer Object: Comúnmente también llamado VO (Value Object), se trata de un objeto java que encapsula los atributos de una entidad, por ejemplo, si tenemos una entidad Cliente con atributos: nombre, dirección, teléfono, edad, etc, entonces el value object representara a ese objeto. Los VO generalmente se llenan con datos en el código que accede a la base de datos y después se transfiere a la capa de presentación para mostrarlo por ejemplo en una pagina web.
  • DAO: Data Access Object, desde la capa de presentación, podríamos necesitar los datos de los clientes, si accedemos a la base de datos directamente tendríamos código de base de datos en la capa de presentación, lo que dificulta hacer cambios, entonces al utilizar un DAO, lo que hacemos es encapsular en este todo el acceso a base de datos, por ejemplo, un DAO puede tener un método llamado getClientes() que revolvería una lista de clientes encapsulados en Value Objects de Clientes.
  • Front Controller: Se trata de una clase Java que centraliza todos los llamados web a una aplicación.
  • Service Locator: Mas atrás en este articulo dije que había que leer la sección JNDI, ya que para las aplicaciones J2EE, es lo que se utiliza para localizar un servicio dentro de una aplicación distribuida. Un service locator, centraliza el código necesario para localizar por ejemplo a un Session Bean u otro tipo de EJB o recurso.

Sun provee de una aplicación ejemplo, llamada Petstore (viene con el código fuente), que implementa todos los patrones de diseño J2EE y es un muy buen ejemplo para aprender.


Base de datos


Obviamente, también necesitaran una base de datos para probar los ejemplos, MySQL es una buena opción (empresa que también fue adquirida por Sun), pueden bajársela del sitio de MySQL o también junto al NetBeans.


UML

El UML o Lenguaje Unificado de Modelado (Unified Modeling Language en ingles) es un lenguaje gráfico de modelado para sistemas, que utilizan algunos analistas para diseñar un sistema. Los programadores toman ese diseño y lo vuelcan en un sistema real (es decir escriben el código, por ejemplo en Java).

Algunas empresas no lo utilizan, algunos artículos por la red dicen que lleva a problemas (por experiencia se que es así), aunque generalmente se piden conocimientos de este lenguaje para los trabajos, por lo que conviene aprenderlo (aunque solo se dediquen a programar).

Para aprenderlo hay infinidad de tutoriales, yo prefiero leer directamente la referencia oficial del lenguaje.

En cuanto al software, pueden utilizar el Rational Rose de IBM (pago, pero uno de los mas usados), el Enterprise Architect (también pago), el modulo UML que viene con el NetBeans o muchos otros mas.


Documentación y Javadoc

El Javadoc es una de las herramientas del JDK para generar documentación en base a los comentarios del código fuente. Pero esto seguramente lo leyeron en el tutorial, lo importante es que en Java la documentación se ve en HTML y es generada por Javadoc.

Nadie puede tener toda la documentación del API en la cabeza, por lo que es bueno tener en la sección de Favoritos de su navegador el link al Javadoc del API, para ser usado a diario.


Sitios de utilidad

Frecuentemente utilizaran Google para buscar cualquier problema, y frecuentemente caerán en sitios de Sun, o en el Java Glossary (Es un sitio de la A hasta la Z de Java, muy recomendado para leer).


Conclusión

Creo que he cubierto todas las bases para que usted como programador PHP u de otro lenguaje, aprenda Java rápidamente y tenga "punteros" rápidos a todo lo que maneja un programador Java.

Tienen algún feedback, preguntas frecuentes? dejen todo en los comentarios, son bienvenidos!

1 comentario:

Unknown dijo...

estoy haciendo un curso java basico e intermedio en la facultad y como es usual siempre surgen dudas "reales" del tipo ¿que necesito saber para que esto me sirva laboralmente?,¿por donde empiezo sin perder tiempo buscando por donde empezar?-(esto ultimo generalmente ocupa desperdicia mucho tiempo valioso)-, y esta nota me ayudo muchisimo en este tema ;gracias por tomarte el tiempo de hacer un articulo tan bien estructurado,claro y completo como este.