Aprendiendo Java

Ya varias veces me preguntaron por Twitter sobre recursos de Java para estudiar. Sea este post un intento de respuesta a esta pregunta, ampliada: no sólo recursos, sino, qué estudiar de Java (lo que dependerá del trabajo a encarar), y estudiar algo más amplio: programar.

El mundo de Java se ha ido expandiendo desde la aparición pública en 1995 del lenguaje, Java Virtual Machine, y librería de clases, de la mano de Sun. Siguieron versiones del lenguaje y librería. El mayor cambio ha sido en las versiones 1.5 y 1.6, donde aparecieron nuevas “features” del lenguaje, y se esperan más para el 1.7. Sin embargo, para gran parte de lo que se necesita para COMENZAR a aprender Java, es suficiente con saber manejarse con lo común a cualquier versión. Como saben, hace un tiempo Oracle compró a Sun, y veremos qué pasa con el desarrollo de las nuevas versiones, y el futuro de Java en general.

Para estudiar Java, hay que recordar:

- Se implementa sobre una JVM (Java Virtual Machine) multiplataforma
- Tiene una extensa librería de clases
- Como lenguaje, es orientado a objetos
- No tiene un entorno “prefijado” o preferido de desarrollo (IDE, Integrated Development Environment)

Paso a enumerar algunos recursos. Primero, el burro por delante ;-)… Tienen un curso incompleto pero espero que interesante, en mis recursos en línea:

Curso: Introducción a Java

Ahí también tienen otros cursos en línea. Luego, pueden ver ejemplos en mi Skydrive, de los cursos de Java que fui dando: Ejemplos de Java.

Luego, lo más recomendable en línea debe ser lo que había armado Sun, ahora bajo la égida de Oracle:

The Java Tutorials

Comenzaría por Learning the Java Language, Essential Java Classes, Collections. Tienen en esa página temas más especializados.

Visitaría a la gente de Java Hispano: http://www.javahispano.org. En especial su documentación http://www.javahispano.org/documentacion/ que es variada (en nivel, calidad, algunos elementos también tienen sus años).

Pero ahora viene parte de mi respuesta a la pregunta extendida: ¿Qué estudiar de Java? Yo recomiendo:

- Estudiar el lenguaje, que es sencillo, concentrándose en los conceptos de objetos
- Comenzar a estudiar la librería, con algunas colecciones.
- Seguir con algo que todos manejamos en otros lenguajes: acceso a archivos, descubriendo que en Java tenemos streams en general. Ver algo de sockets para ir viendo que “leer/escribir” es algo que se puede abstraer desde java.io. Ver ejemplos en mi Skydrive ClaseIo.zip, ClaseClienteServidor.zip.
- Ver acceso a base de datos usando JDBC.

Luego, lo que venga después, depende de lo que quieran hacer y el trabajo que tengan que encarar. Si tienen que hacer aplicaciones de escritorio, seguramente tendrán que elegir estudiar: Swing (ver los tutoriales de Java, por ejemplo Swing, Creating a GUI with Swing) o SWT The Standard Widget Toolkit. Si tiene que hacer aplicaciones web (algo casi inescapable en estos días), recomiendo:

- Bajar, instalar y jugar con el Tomcat de la fundación Apache
- Sólo si es necesario, ver JBoss (en mi opinión: “too much”, un Application Server que ha ido creciendo a partir de las especificaciones de Sun. Tiene una arquitectura microkernel, y eso es interesante. Pero para desarrollo web, aprendan con Tomcat.

Y comiencen a estudiar JavaServer Pages: sé que no es la “última tecnología web” pero si no entienden JSP no van a poder entender todo los modelos web de Java. Estudien en ese momento el modelo de Servlets, que es la base de todos los modelos. Luego, estudien Javascript en el cliente, y Ajax. Les debo enlaces sobre ese tema. Ver por ahora http://delicious.com/ajlopez/javascript+tutorial y http://delicious.com/ajlopez/ajax+tutorial.

Otro ámbito sería la programación para dispositivos móviles. Ahí les debo recomendaciones y enlaces, porque nunca me ha tocado aún ese tipo de programación.

Algo más, antes que me olvide: NO ESTUDIEN Enterprise JavaBeans, a no ser que su vida esté en peligro. Esa especificación de Sun,  a pesar de las mejores de 3.x, debería ser borrada de la historia humana. Tengo una teoría: los extraterrestres existen, nos vienen observando desde hace décadas. Vieron que manejamos armas nucleares, tuvieron gran debate, pero decidieron: “Démosle una oportunidad a los terráqueos”. Vieron que seguimos con guerras. Debatieron de nuevo: “Veamos de seguir dándoles una oportunidad”. Sus científicos de computación vieron que desarrollamos EJB (Enterprise JavaBeans) y Web Services sobre WCF (Windows Communication Foundation) y decretaron inmediatamente: “No tienen cura, están completamente perdidos en la irracionalidad, declaremos cuarentena” ;-).

Había planteado que en Java no hay una IDE prederminada. Pueden hacer todo desde la línea de comando, si quieren, y configurar su editor preferido para compilar y lanzar las aplicaciones que construyan. Pero recomiendo bajarse y estudiar el Eclipse. Van a encontrar diferentes versiones, ya preparadas, algunas orientadas a desarrollo web. Lo bueno de Eclipse: es sencillo, multiplataforma, maneja sus propios widgets gráficos basados en SWT (con lo que se adapta al sistema gráfico nativo), tiene una comunidad activa, es muy usado en los ambientes de desarrollo, está al nivel de cualquier IDE comercial. Es fácil de instalar y desinstalar (prácticamente copiar archivos). Sólo tendrán que tener paciencia en la elección de los plugins que quieran usar: Eclipse es totalmente extensible por plugins, y de ahí que uno extrañe un poco lo que se tiene en .NET: una IDE (el Visual Studio) que tiene prácticamente todo lo necesario para programar sistemas “out-of-the-box”. Pero Eclipse “out-of-the-box” es totalmente adecuado para estudiar Java. El tema es configurarlo para el trabajo que encaren: he ido a consultoras donde cada máquina y proyecto tienen un Eclipse distinto ;-)

Pero no es sólo visitar la librería de clases, y ver el Eclipse. Hay que aprender a programar, a pensar en objetos, y sobre técnicas de programación que hoy tenemos disponibles. Para el tema de pensar en Java con objetos, no sólo programar, pueden bajarse el libro Thinking in Java de Bruce Eckel, la tercera edición:

http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip (hay que hacer un curso para encontrar este enlace desde http://www.mindview.net/Books/TIJ/ ;-) Tiene otros libros para bajar de Bruce Eckel desde http://www.mindviewinc.com/downloads/

Otra cosa, una opinión sobre la certificación: pienso que no hace falta, sólo para el currículum y búsqueda de trabajo. La mejor certificación es la experiencia en el desarrollo. Vean que Java es más que un lenguaje, es una tecnología con amplia librería de clases, utilitarios, librerías adicionales, servidores, etc. Es un mundo muy amplio. Vayan de a poco, aprendiendo las partes que recomendé y luego viendo las partes que necesitan para cada trabajo en particular. También van a encontrar que muchas veces tiene sus “bordes ásperos”, y hay que armarse de paciencia para conseguir algún resultado.

Un ejemplo de algo que se necesita en Java, pero no he visto que sea necesario en .NET, es el utilitario Maven. Van a tener que aprenderlo. Pero es un ejemplo de algo que a muchos en el ambiente Java les fascina, pero yo lo veo de otra manera: es una gran herramienta para solucionar un problema, que no DEBERIA ser un problema tan grande. A mucha gente le gusta, porque soluciona la complejidad de tantas librerías con tants versiones: pero es un remedio que oculta el problema inicial, la complejidad de esa tarea. Si tienen que estudiar Maven, recomiendo antes estudiar algo más simple, ubicuo, entendible y poderoso: el Apache Ant.

Cuando dominen JDBC para acceder a base de datos, pueden comenzar a estudiar y usar Hibernate. Parece que no terminan nunca los temas ;-). Bueno, uno más: para tener un panorama de los problemas y soluciones al desarrollo de Java, recomiendo estudiar (lo simple primero, luego sólo los temas que necesitan) el Spring Framework, donde encontrarán también nuevos utilitarios que se montaron para facilitar el desarrollo en Java. Al estudiar Spring, verán distintas implementaciones de interfaz web, como usar MVC (Model-View-Controller), sus distintas implementaciones, y otras tecnologías como JavaServer Faces.

El mejor libro para ir entendiendo cómo todo eso se usa en conjunto, lo comento en mi post:

Agile Java Development With Spring, Hibernate And Eclipse

Quiero aprovechar este post para agregar algunos puntos que van más allá de la programación en Java. Primero, Uds. no tienen que ser “programadores Java”. Sólo al principio. Uds. tienen que, diría, luchar, esforzarse por ser “desarrolladores de software”, es más, “desarrolladores de software profesionales”: gente que se toma en serio el trabajo que realiza, y trata cada mes, semana, día, de aprender algo nuevo y mejorar en las prácticas que realiza. Tiene que pensar más allá de “programar en Java”. Tienen que pensar en “desarrollar software”. Ya no hay programadores de un lenguaje. Para ver algunos temas casi imprescindibles en nuestra profesión, les recomiendo el libro de @karlseguin: Foundations of Programming. Para los que estudian Java, encontrarán que tiene más orientación a .NET, pero no se engañen: todo lo de ese libro se puede aplicar a otras tecnologías. Traten también de ser polyglot programmers, cosa que si aprenden Java, conseguirán estudiando los lenguajes y tecnologías montadas sobre la JVM, como Scala, Groovy, Clojure, JRuby, y más.

Me recomiendo a mí mismo ;-) leer:

Aprendiendo de Jason Bourne
Programmer Competency Matrix
What is your strategy for become a better developer

Si son seguidores de esto blog (es decir, yo y mi Tía Carlota ;-) ya saben lo que viene ahora:

- Estudien y apliquen Test-Driven Development (TDD, leer mis posts sobre el tema)

- Trabajen en équipos ágiles (leer mis posts sobre Scrum)

Van a aprender que la complejidad de Java (todos lo que hay que tener en cuenta para armar una aplicación profesional) fue en gran parte madre de mi iniciativa sobre generación de código.

Si están en Buenos Aires, o en Argentina, hay varias actividades ágiles, ver actividades en Latinoamérica en:

http://www.agiles.org/

TDD es prácticamente un “must be done”. Pueden estudiar TDD en curso presencial, acá en Buenos Aires, con el bueno de @hernanwilkinson:

http://www.10pines.com/content/construcci%C3%B3n-de-software-robusto-con-tdd

Finalmente, les recuerdo que voy coleccionando enlaces sobre Java en:

http://delicious.com/ajlopez/java+tutorial
http://delicious.com/ajlopez/java+example

Vean que de cada tema del universo, tengo enlaces en delicious ;-) ;-)

Bueno, ya es tiempo de cerrar este post, e irme a luchar contra el Efecto Coto. Cualquier duda, recomendación, les pido colaboren con comentarios. Pero más allá de todo esto, de Java y demás, siempre recuerden, parafraseando a Rambo II: “La mejor herramienta es una mente despierta” ;-)

Bueno, eso es todo por hoy, salud, mis queridos chichipíos, vermú con papa fritas, y gud shou!!

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 12081, 1390, 3463. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>