viernes, 14 de noviembre de 2008

Aprende Linux

Linux es otro conocimiento importante para agregar a tu Currículum Vitae, en el ámbito laboral te servirá para poder manejarte en un servidor, pero si en realidad te gusta sistemas, encontraras en el un juguete con el cual hacer lo que te plazca.


¿Que es Linux?

Linux es un sistema operativo (OS) creado por Linus Torvalds cerca del año 1991, que junto con los programas del proyecto GNU, nos permiten disfrutar de un UNIX totalmente gratuito y de código abierto.

Comenzó como un juguete para aficionados a la informática, y aun lo es, aunque de a poco fue desplazando a los demás UNIX comerciales de la época, las empresas lo utilizaban y utilizan como sistema operativo de sus servidores, los aficionados como su OS personal, algunas empresas incluso lo utilizan como OS de escritorio.

En un pasado la compatibilidad de las aplicaciones era lo importante, es decir que era importante que sistema operativo utilizaras, ya que la mayoría de los programas estaban escritos para Microsoft Windows y si usabas Linux, un UNIX o un OS de Apple, quedabas afuera.

Hoy en día ha cambiado, ya que todo es el mundo web, lo importante es el navegador (podemos usar el Firefox en Linux) y en cierta medida las aplicaciones de oficina (también podemos usar el Open Office en Linux, que permite leer y guardar archivos en el formato de Microsoft Office). Y los drivers del hardware que compremos, como así muchos otros programas ya soportan Linux.


¿Como Empiezo?

Lo principal es instalarlo, lo primero es elegir que distribución utilizar, una distribución (o distro) es simplemente un individuo o una empresa que tomo el Kernel de Linux (es decir la base del sistema operativo), aplicaciones GNU, otras aplicaciones open source, librerías y el sistema de ventanas X (la aplicación que se utiliza en UNIX para mostrar una interfaz gráfica de escritorio) y los grabo en un CD.

La ventaja de una distro es que alguien se ha tomado el trabajo de hacer eso por vos, trabajo que no es simple ya que juntar y compilar las diferentes versiones de cada aplicación es todo un desafío, la otra ventaja es que al ser la base de usuarios grande, cualquier problemas que tengas es seguro que alguien lo ha tenido y ya este solucionado.

Por eso, si sale una nueva versión de alguna aplicación GNU y quieres usarla en tu Linux, la mejor opción es bajarte una actualización de la distro que uses, ya que esa aplicación ya estará probada por mas gente y los problemas de compatibilidad (que siempre ocurren al cambiar una versión) ya resueltos.

En cuanto a cual elegir, hay muchas, cuando seas experto elegirás la mas conveniente a tus gustos, para un principiante conviene utilizar las mas usadas (a mayor base de usuarios, menos problemas, en teoría), entre ellas:

  • Debian: Distribución muy popular, aunque tal vez no la mejor para un principiante.
  • Red Hat: Otra también muy popular, pero es paga (Linux y GNU son gratis, pero también es valido, es decir legal según la licencia, empaquetarlos en una distribución y cobrar por ello, y eso es lo que hiso esta gente).
  • Fedora/CentOS: Estas dos distros (gratuitas) están basadas en Red Hat (que es comercial), la diferencia esta en que el soporte en estas lo da una comunidad de usuarios. CentOS es estable y 100% compatible (hablando de los binarios) con la versión comercial de Red Hat. El objetivo de Fedora es tener lo ultimo, por lo que puede no ser tan estable, lo que es ideal para aficionados, pero un problema para una empresa.
  • Ubuntu: Distro basada en Debian, relativamente nueva (el primer release fue en el 2004), y también popular. Esta distro de focaliza en la usabilidad y es muy usado para maquinas de escritorio, además de servidores.
  • Slackware: Una gran distro, de las viejas, simple y muy buena para aficionados, aunque creo que dificil para un novato.
Entonces para aprender pueden conseguirse un CD de CentOS (para evitar problemas con Fedora) o uno de Ubuntu.


¿Como lo instalo?

Ya saben que distro usar, el problema ahora es, ¿Como los instalo?, hay varias opciones:

  • En una maquina nueva: Esta puede no ser buena opción, no todo el mundo tiene dinero y espacio para una nueva maquina donde probar este sistema operativo. Si no tienes problema con esto, la instalación es simple, pones el CD en la lectora y sigues los pasos.
  • En una partición: Para alguien nuevo en esto, especialmente si también es nuevo en sistemas, esto puede ser traumático, ya que a veces ni se sabe que es una partición. Una partición es una división lógica de tu disco rígido, probablemente tengas solo una, y esta contiene tu Windows. Es la manera que yo instale el Linux por primera vez, fue divertido, el método consistía en utilizar un programa llamado FIPS.EXE con el cual achicaba una partición de MS-DOS y así podía crear una o mas particiones nuevas para mi Linux. Luego, al igual que con una maquina nueva, podía bootear (arrancar) con el CD y seguir los pasos de instalación, o creabas (lo mas común) dos diskettes de booteo para poder comenzar.
  • Usar VMWare: Esto es lo mas fácil para un principiante, y también muy útil no solo para aprender. El método consiste en instalar el VMWare Player, que es un programa que corre una imagen de disco como si fuera una nueva PC, es decir una PC virtual dentro de tu PC real. Con las computadoras actuales esta emulación casi no se nota (es decir no se ve una perdida de performance), y en cuanto a la estabilidad hoy en día también es casi un 100% estable., además el VMWare Player es gratuito. De la misma pagina de VMWare puedes bajarte imagenes de disco hechas por otras personas, allí tienes cientos de distros de las versiones que quieras. ¡Utilizar Linux con esta opción es tan simple como instalar el player, la imagen y ejecutarla!

Si eliges una de las opciones que requiere instalación (algo que también recomiendo ya que ayuda a que aprendas), hoy en día no tendrás mayores problemas ya que Linux se instala fácilmente, en el pasado, cada paso requería haber leído documentación y entender mucho mas.



X Windows

Al finalizar la instalación estarás en un entorno gráfico parecido al Windows, como ya dijimos es el X Windows System, un programa de ventanas que es estándar en los UNIX, para interfaces gráficas.

Sobre X existen innumerables sistemas de manejo de ventanas (o Gestor de Ventanas). En Windows por lo general minimizamos o maximizamos las ventanas, las movemos, tenemos una barra de tareas, etc, en UNIX solo tenemos el protocolo para comunicarnos con el servidor X, todo el trabajos de maximizar, mover, etc es hecho por otro programa, el gestor de ventanas.

En Linux tenemos varios gestores, como GNOME o KDE entre los mas usados y conocidos, sobre cual usar, eso si lo dejo a su elección.


El Shell

Si utilizaran el Linux solo como un sistema de escritorio, como Windows, entonces, tal vez no es necesario continuar aprendiendo. Pero el verdadero corazón esta en utilizar el shell (en Linux el mas usado es el Bash) y escribir comandos, ya que esto es lo que vale, nadie te contratara por saber GNOME, pero si por saberte manejar en un shell.

Los servidores se acceden generalmente por SSH y todo se maneja con un shell, hay programas en varios UNIX y Linux (como en GNOME y KDE) para la administración de servidores a través de herramientas gráficas en X, actualmente la tendencia sigue siendo o usar el shell o una interfaz web, sea lo que fuere, el shell se seguirá utilizando.


Documentación

El siguiente paso es leer la documentación para aprender. En Linux existen tres fuentes de información tradicionalmente usadas (todo aficionado que aprendió sobre Linux las han utilizado):

  • Linux Guides: Son libros o guias sobre diferentes programas o temas relacionados a Linux.
  • HOWTOs: Los famosos HOWTOs (del ingles "how to"= "como"), también son guias para aprender.
  • Man pages: En Linux (como en cualquier UNIX), en el shell pueden escribir "man" (por "manual") seguido por el nombre del comando del cual quieren saber, y tendrán allí la pagina de ayuda o "manual". No es una pagina amigable (para los acostumbrados a los entornos gráficos y web), pero es lo tradicional en UNIX.

Comandos

A continuación una breve reseña de comandos de Linux (también de UNIX) para que un principiante pueda aprender y manejarse rápidamente en este sistema operativo:

(muchos de los comandos son de dos o tres letras, esto es así ya que en la época del primer UNIX, en vez de pantallas, se utilizaban teletipos, que eran rollos de papel, por lo que escribir muchos caracteres significaba mas gasto de tiempo, papel, tinta, etc).

  • ls: Tal vez el comando mas utilizado, lo que hace es listar el contenido de una carpeta (como cuando en Windows haces clic en una carpeta y vez que archivos contiene).
  • cp: Copia archivos.
  • mv: Mueve archivos (entre carpetas) o los renombra.
  • rm: Elimina un archivo.
  • cat: Muestra el contenido de un archivo
  • man: Muestra el manual o página de ayuda de un comando, por ejemplo: man ls
  • chmod: Cambia los permisos de acceso a un archivo.
  • chown: Cambia el "owner" (dueño) de un archivo.
  • more: Muestra un archivo por paginas, también en Linux se utiliza el comando less (obvia referencia al more) que hace lo mismo, pero permite volver a una pagina anterior.
  • mkdir: Crea un nuevo directorio (carpeta).
  • cd: Cambia de directorio.
  • pwd: Muestra el directorio actual.
  • vi: El vi es uno de los editores de texto de UNIX mas utilizados (también lo es el emacs).
  • grep: Busca un patrón de texto en el o los archivos especificados.
  • bash: Ejecuta un nuevo shell, el bash (Bourne Again Shell).
  • gcc: El compilador de lenguaje C (originalmente cc es el compilador C de un UNIX, gcc es por GNU C Compiler).
  • clear: Limpia la pantalla.
  • ps: Muestra la lista de procesos.
  • date: Muestra la fecha.
  • time: Muestra la hora.

Recuerda también que Linux (y UNIX) es case sensitive, es decir tanto en los comandos como en los nombres de archivos hay distinción entre mayúsculas y minúsculas, escribir "LS" no es lo mismo que "ls".

La lista de comandos, obviamente es mucho mas amplia, y depende de que paquetes de software estén instalados, algunos comandos son del shell (como el echo, set, history, exit, cd, etc), es decir no son binarios ejecutables sino que forman parte del interprete del shell que utilicemos. Y los comandos básicos están en los paquetes Fileutils, Shellutils, Textutils (ahora unidos en un paquete llamado Coreutils).


Jerarquía de directorios


También es útil conocer la estructura de directorios de un Linux (para saber donde esta cada cosa). En Linux hay un estándar que se respeta entre las diferentes distros. A continuación, una breve reseña:

/: El directorio raíz.
/bin: Binarios ejecutables esenciales, como ls, cp, cat, etc.
/boot: Archivos de arranque.
/dev: Dispositivos (en Linux puedes acceder por ejemplo a la memoria o a un disco rígido, como si fuera un archivo).
/etc: Archivos de configuración.
/home: Directorio home de cada usuario del sistema.
/lib: Librerías.
/mnt: Directorio donde montar sistemas de archivos.
/opt: Aquí se instalan paquetes opcionales.
/proc: Es un directorio virtual, provisto por el kernel de Linux, que provee como archivos de texto datos internos sobre el estado de procesos, sobre la red, u otro tipo de información del sistema.
/root: Archivo home del usuario root (root es el usuario con privilegios de administrador en un Linux o UNIX).
/sbin: Binarios esenciales, generalemente utilizados por un administrador.
/tmp: Archivos temporales.
/usr: Este directorio provee una segunda jerarquía de directorios.
/usr/bin: Binarios ejecutables para todos los usuarios (como el compilador de C).
/usr/include: Archivos "headers" del lenguaje C.
/usr/lib: Librerías.
/usr/sbin: Mas binarios ejecutables, generalmente servicios, como el servidor de FTP.
/usr/src: Código fuente.
/usr/X11R6: Todos los archivos del sistema de ventanas X (aquí se repite también una jerarquía /usr/X11R6/bin, /lib, etc).
/usr/local: Una tercera jerarquía, contiene datos y programas específicos a la maquina donde uno se encuentre.
/var: Archivos variables, como archivos de log, email, y demás archivos temporales.




Otra opción interesante y útil

Instalar Linux en una nueva partición puede no ser sencillo para un novato, y utilizar el VMWare puede no ser tan práctico para el uso diario. Pero no aun hay otra opción, utilizar Cygwin.

Cygwin es, en simples palabras, una serie de DLLs (unas librerías de Windows) que emulan los llamados a sistema de Linux, esto significa que provee para cada función de Linux su equivalente en Windows. Además de estas librerías, contiene casi todos los programas que existen en Linux, pero compilados de nuevo en Windows (es decir, son los mismos fuentes que Linux, con algunas modificaciones).

Lo bueno de usar Cygwin es que contiene casi exactamente lo mismo que utilizas en Linux, pero en Windows, hasta tiene un ¡Servidor X! Puedes abrir un shell en Windows, y ejecutar cualquier comando que ejecutas en Linux! Además es gratuito.

Obviamente al estar corriendo bajo Windows, lo que no tienes es acceso a un kernel de Linux (por ejemplo no puedes programar módulos de kernel o LKMs), además de otras diferencias mínimas.


Conclusión

En conclusión Linux es un gran sistema operativo, gratis e ideal para aficionados, ya que lo que provee a un Nerd es:


¡Diversión!


Tienen feedback? Escribanlos en los comentarios.

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!