martes, febrero 15, 2011

Aprendiendo Java

¿Han visto el mercado laboral últimamente? De ayer y hoy OCC me devuelve 47 ofertas para PHP, 98 ofertas para Unix (aunque la mayoría son spam), 140 para .NET, 52 para ASP, 48 para Ajax y 221 para Java — 79 para Java 2 Enterprise (J2EE). Muchas de ellas se sobreponen, así que no podría determinar fácilmente cuántas hay. Pero es evidente que Java es una plataforma bastante demandada en estos días.

Yo nunca estudié formalmente Java en la escuela. Bueno, propiamente nunca aprendí mucho de programación en la escuela, pero es obvio que voy a necesitar aprender Java.

Java es orientado a objetos. Nunca pude aprender OOP en C++, pero aprendí en JavaScript — un lenguaje que es más relacionado con Lisp que con Java. La implementación de OOP en JavaScript es tan flexible que me preparó para usar OOP en Java, en C++ y en básicamente cualquier cosa. Recomiendo ampliamente aprender bien JavaScript, y/o aprender Lua — otro lenguaje increíblemente flexible.

Gracias a esa experiencia tengo bases muy sólidas de OOP. Y gracias a innumerables experiencias en C (contra Win32, GLibC, SDL, Allegro, DirectX, COM y sabe qué tanto), entiendo que el dominio del lenguaje es imprescindible pero el conocimiento de las librerías es indispensable.

En otras palabras: en Java (y en cualquier lenguaje) tienes que saber qué librerías tienes a tu disposición. Y debes tener la documentación técnica, desde luego.

Ahora aquí les dejo caer el descubrimiento mágico que me abrió las puertas de Java. Yo pensé que iba a ser una tarea inmensa aprender J2EE… pero la verdad es que la mayor parte de J2EE es Java Server Pages, encriptación y XML. JSP es una jalada, XML también, y las funciones de encriptación nadie las sabe usar — ni Sony, por eso les crackearon la PS3.

Así pues, decidí usar los documentos del RataWiki para hacer algunos experimentos con Java. Esto implica uso de XML, sistema de archivos, entrada y salida de datos, y otras cosas que no imaginé.

Tomé un ejemplo de 'Hola mundo' para comenzar. Hice una clase Wiki que toma el archivo de configuración (sea por nombre o una instancia de java.io.File) y lee el archivo (que es XML). Otra clase Wikidoc lee un documento del wiki (igual, por File o por nombre) y extrae datos de ahí.

Esas clases existen en la implementación PHP del RataWiki, pero en Java fue bastante más limpio de lo que imaginé — influye que no sabía tanto de OOP cuando hice la versión actual del RataWiki, pero con Java y mis conocimientos podría reducir el código a la mitad y ganando claridad en el proceso.

Sólo como paréntesis, el RataWiki está constituido por aproximadamente 2215 líneas de código — ya restando comentarios y líneas en blanco. Se ha mantenido más o menos constante pero ha aumentado su funcionalidad. Lo he reescrito desde cero por lo menos cuatro veces.´

Para filtrar los documentos del wiki tuve que crear un FileFilter. Entonces encontré java.util.regexp — las expresiones regulares son tan importantes como saber precedencia de operadores y álgebra de Boole.

Como parte de mi aprendizaje hice también unas páginas básicas en JSP — bajé el Tomcat, se instaló en minutos, Eclipse se configura automágicamente para usarlo. Debe ser relativamente sencillo crear un JavaBean que encapsule las clases Wiki y Wikidoc, y entonces estaría implementando una parte importante del RataWiki en Java. El tiempo que me tardé en hacer las clases estas fue de 30 minutos, contando el tiempo que estuve leyendo documentación y ejemplos. Cuando las hice por primera vez me tardé unas dos semanas — aunque en ese momento tuve que resolver la estructura del archivo XML y aprender a usar SimpleXML para evitar usar DOM, y DOM para superar las limitaciones de SimpleXML. No hay SimpleXML en Java: sólo DOM. Es parte de J2EE. Creo que es la parte más importante de J2EE.

Veo que sólo me falta aplicar algunos experimentos con bases de datos. No veo gran complicación en usar las librerías nativas, pero la gente pide Hibernate. También piden Struts y DWR, que son esencialmente lo mismo que Ratax. Creo que será otro experimento de media hora. Creo que me tardé más escribiendo esto.

Aprendan Java. Y J2EE, XML, DOM y JavaScript.

jueves, febrero 03, 2011

Eclipse vs Dreamweaver

Al principio desconfiaba de Eclipse — ¿y cómo no?, si en los viejos tiempos un applet Java podía doblegar un K6@300MHz corriendo Windows 98SE, y si tenías un winmodem entonces seguro te botaba de la red. La idea de tener algo tan importante como el IDE en algo que no fuera código nativo era impensable. Pero en estos tiempos ya no vale esa objeción.

En el trabajo ocupan Dreamweaver por su capacidad de sincronizar sitios. A mí me gustó mucho su capacidad de colapsar bloques aleatorios de código, es genial. Y trabaja sin problemas con ASP clásico, que es lo que ocupan. Ni siquiera el Visual Studio trabaja lindo con ASP clásico.

No tenemos un sistema de control de versiones, así que yo uso Subversion (SVN) en mi copia local — así puedo saber qué hice y cuándo lo hice, y si es necesario puedo regresar las cosas a como estaban antes de meterles mano. Gracias a los poderes de TortoiseSVN también puedo aplicar parches a los mismos archivos de otros sitios sin romper nada.

Un día, mientras trabajaba con un ASP particularmente complejo, mi Dreamweaver se estrelló. A partir de entonces algunos archivos hacen que se estrelle con errores de "No memory left". Esto me obligó a considerar actualizar, así que descargué Dreamweaver CS4. Estaba muy contento porque este nuevo Dw incluía soporte para SVN, pero al instalarlo descubrí que su cliente SVN estaba obsoleto.

Unas semanas después aparece el Dreamweaver CS5. Esta vez sí funcionó el cliente SVN, pero mi experiencia con él fue bastante pobre. Se acabó el trial y regresé a buscar una alternativa. Entre una cosa y otra decidí usar el Dreamweaver 8, aunque su soporte para Javascript no es el mejor.

Y bueno, por hacer experimentos con Android fue que descargué Eclipse. Y decidí probar su desempeño como substituto de Dreamweaver.

Eclipse por defecto sólo soporta CVS, fue necesario descargar plug-ins para Git y SVN. También una tal Colorer Library para tener colores en los ASP. Y luego de algunas dificultades también bajé un File Synchronization Plugin que permite, finalmente, sincronizar los sitios.

Salvo por el colapso de bloques aleatorios, puedo decir que ya tengo toda la funcionalidad de Dreamweaver en Eclipse, y un tanto más. Y gratis.

Y como beneficio adicional también lo adopté para mis demás desarrollos en Java, PHP y Javascript. Probaré qué tal la arma con las bases de datos, quizás también pueda substituir el SQL Server Management Studio Express y/o el HeidiSQL.