lunes, 22 de octubre de 2007

Por qué tan tarde?

Hace poco uno de mis blogueros favoritos, Yakov Fain escribió un artículo muy interesante acerca del porqué trabajamos más tiempo del debido. Yakov llegó a varias conclusiones pero las que más me llamaron la atención fueron:
  1. Falta de Capacidad Técnica o quedarse tiempo extra para compensar el atraso durante el día
  2. Un bono prometido por trabajar extra
  3. Ser un trabajo-adicto
También podría agregar en lo personal, el hecho de una mala organización donde las tareas no estén bien distribuidas y te toque hacer las de Soyla...
En lo personal, definitivamente no lo hago para recibir un bono, primero porqué es muy factible que el tal no ocurra, segundo porque comparto el sentir de Yakov que al hacer la division del total del bono recibido entre las horas extras me va a dar un monto muuuuuy bajo por cada hora extra laborada.
Trabajo-adicto... que dificil, la verdad en un tiempo de mi vida pude haber sido uno de estos... no se si eso se quita o si con el tiempo uno aprende a valorar cosas más importantes como Dios, la familia y otras tantas cosas lindas que esta vida tiene y deja de lado un poco el querer quedarse como ratón de biblioteca todas las noches tratando hacer más y mejores cosas.
Sin embargo... pensar en un informático que no tenga cierto necesidad de quedarse unas horas más en las noches estudiando, leyendo, "alimentandose" en el área tecnica es bastante dificil, a no ser que el mismo no tenga pasión por su trabajo o no le importe quedarse atrás en las distintas áreas de este mundo tan cambiante. Si uno se descuida unos meses, sin actualizarce, sin ir esa milla extra para aprender nuevas cosas, para leer códigos, artículos y opiniones de otras personas, va a llegar un momento donde lamentablemente vas a tener pocas posibilidades de avanzar en el mercado y ahí no solo está en juego tu nombre, sino el alimento de tu familia.
Es debido a esta importancia de estar actualizados que he estado pensando, aunado con la primera razón expuesta arriba y debido también a un proyecto en el que estoy trabajando en este momento que puedo decir en estos días que mi razón para trabajar hasta tarde en estos días es una combinación de "deseo de aprender más" con "falta de capacidad técnica" que tienen que tratarse para poder cumplir con lo establecido con el proyecto. En parte me alegra que no sea por el simple motivo de quedarme "lampareando" o simplemente navegando... ni que no tenga otras cosas que hacer... sino que exista en mí la necesidad de reconocer mis faltas técnicas y tratar de llenarlas para que en este caso el proyecto actual o alguno futuro salgan de la mejor manera y mi conciencia pueda descansar tranquila (además de la experiencia recibida), de todas formas el primer paso para vencer los problemas es reconociendolos cierto?
Estoy actualmente trabajando en un proyecto con Spring, Hibernate y Struts. Spring y Hibernate ya los había usado antes con muy buenos resultados. Eso del ORM es una gran ventaja para el programador, aunque a veces me pone a pensar que se gasta más tiempo configurando y comprobando que todo este bien que lo que se necesitaría para crear un simple query. Y el Spring y su inyección de dependencia es totalmente delicioso. La reducción de acoplamiento y dependencia que se logra es maravillosa. También con Struts había trabajado. No fue una mala experiencia la verdad, sin embargo como framework para MVC nunca fue de mi total agrado (y hablando con otros mucho más bichos que yo, tienen el mismo sentir).
Sin embargo, lo extra que traía este proyecto es la utilización del framework MVC de Spring. Mismo principios pero distintas formas de implementarse y ahí es donde me ha tomado más tiempo últimamente. He tenido que leer, investigar, practicar, probar, arreglar, etc. La verdad ha sido por vagabundería mía, ya que hace un año o más habia comprado un libro donde trataba de este tema y siempre me decía que lo leería luego... y ese luego fue hasta el momento en que me pusieron una fecha de entrega. Talvez si lo hubiere hecho antes hubiese estado preparado para aplicar los conceptos necesarios.
Sin embargo, la experiencia con Spring MVC ha sido muy grata, mucho más que con el Struts definitivamente. Me encanta el hecho de poder inyectar los beans definidos en el Application Context de Spring dentro de mis controladores (mvC). También poder tener varios tipos de controladores e inyectarles validadores, vistas, etc. todo desde un archivo externo y sin tener nada ligado en código. Puedo utilizar varios tipos de vistas, hacer uso de los recursos ya implementados previamente en Spring sin hacer nada extraordinario. Esto hace más factible cumplir con algunos principios de la POO como: Programar a una Interfaz (o superclase) y Favorecer la Composición en lugar de la herencia.
Definitivamente en esto de la informática, el que se queda dormido o el que dice "luego" se va a quedar atrasado y cada día van a salir mejores programadores con más ganas de hacer y aprender más. Muchachos que no les importa no tener novia ni esposa, porque su computadora llena ese vacio. Personas con más ambición y ganas de triunfar y que no les va a importar dejar sin trabajo a cualquiera, con tal de superarse. En uno queda el deseo de superarse, no solo por el orgullo propio, que admito influye un poco de motivación en mi y estoy seguro que en la mayoría, sino por el sustento propio y el de su familia en un futuro.
Ahora preguntese, porque te quedás tan tarde trabajando?

domingo, 14 de octubre de 2007

Qué tan bueno es el Ajax...?

Como dijo Carlos Zumbado en la última reunión del Grupo de Usuarios de Flash en Costa Rica: "Ajax funciona excelentemente para limpiar baños y lavatorios... :-)"
Ya en lo serio, AJAX ha ganado mucha fama ultimamente y en lo personal pienso que debido a la gran cantidad de desarrolladores o diseñadores que por ver un nombre en una revista piensan que será la Panacea para todos sus proyectos.
Si bien es cierto se han desarrollado cosas muy interesantes como los mapas de Google, Google Suggest y mi favorito: Gmail que tienen sus interfaces completamente basadas en la funcionalidad que provee AJAX, no funcionan completamente bien con todos los browsers. Ejemplo de eso es la funcionalidad de Gmail en Safari, que es completamente reducida para los usuarios del browser de la Mac (o por lo menos en la mia...aunque usando Safari en Win tampoco funciona)
Veamos un poco del transfondo de AJAX: su nombre viene de Asynchronous JavaScript and XML y su mayor fortaleza es la de poder intercambiar informacion con un servidor desde un codigo en Javascript sin tener que refrescar la pagina y sin que el cliente se de cuenta, haciendo que la experiencia que viva el cliente sea en tiempo real. Todo esto por medio del objeto XMLHttpRequest que es el encargado de realizar el intercambio de informacion entre la aplicacion y el servidor y como dije anteriormente sin refrescar la página completamente.
El Ajax en sí no es ningún lenguaje de programación definido, sino una serie de tecnicas (como el llamado de XML dinamico, DHTML, etc) y que utiliza el "lenguaje" Javascript, que en lo personal no me agrada mucho por varias razones entre las que puedo citar que no es compilado sino interpretado, no es fuerte con los tipos de datos, no hay un estándar de definición como con otros lenguajes, etc.
Como programador en ambiente web he escuchado y he experimentado que muchas veces como cierto código de Javascript funciona bien para X browser, pero no funcione igual para Y browser. Y eso - que a mi gusto es la mayor debilidad de esta tecnología- es debido a que los distintos fabricantes de browsers no han podido ponerse de acuerdo y formalizar un API de objetos y funciones accesibles al programador, que esté estandarizado e implementado en todos los browsers y que faciliten al programador el desarrollo de codigos sin tener que preocuparse si funcionara en cada uno de los browsers o no.
Este mismo problema se presenta a la hora de trabajar con AJAX. Siempre se presentaran problemas de funcionamiento entre las distintas plataformas que obligan al programador
escribir mas lineas de codigo para validar el tipo de browser y revisar si un metodo existe o no existe para un browser especifico.
Parece que el equipo de trabajo de Google pasó por este problema y decidió hacerle la vida más facil, sobre todo a los programadores de JAVA. Lanzó hace unos varios meses un Toolkit con un API con métodos y controles o widgets, que ofrece a los desarrolladores familiarizados con Java, la escritura de algún codigo en java y posteriormente su traducción al javascript y la correcta validación para que corra en la mayoría de browsers. Desde clases de java, se hara la creación de los distintos widgets o controles y su respectiva interacción con el cliente. Tambien se harán el llamado a recursos del servidor, que en un principio serán logrados por RCP y que posteriormente serán traducidos por el mismo toolkit al javascript listo para ser usado.
Su integracion con los IDEs mas usados como Eclipse es sencilla y permite probar las aplicaciones de dos formas, desde el IDE o en desde un browser con un mecanismo que levanta la aplicacion como si fuera una verdadera aplicación web hosteada en un servidor web.
Lo mas interesante de todo, es que el Toolkit al final generará codigo javascript que podrá ser utilizado (según dicen) en cualquier browser, sin necesidad de que el desarrollador meta mano en ello ni se reviente la cabeza en buscar metodos que sean utilizables y aceptados por todos los browsers porque el toolkit lo hara automaticamente.
Para los no "javeros", existen muchos otras herramientas que facilitan el uso del Ajax sin necesidad de usar el Toolkit de Google y sin saber Java, entre ellos Backbase que por cierto ya he usado y ofrece algunas cosas interesantes.
Sin embargo queda en mi la duda de que tan bueno será todo esto... Las aplicaciones desarrolladas, especialmente por Google son fantásticas pero aún queda algo en mí que no me permite aceptar esta tendencia al 100%, porque aunque es muy útil (porque verdaderamente lo es...) no es tan fácil de desarrollar como se quisiera.
En cambio, hace unos meses ingrese al mundo del Flex de Adobe, y aunque no soy un experto como algunos que hay por aquí (y Dios sabe que quisiera llegar al nivel de ellos) lo poco que he visto y que he aprendido y utilizado ha hecho que me entren de nuevo las ganas de programar...
Ya estaba cansado de aplicaciones WEB planas, cansado de añadir y añadir capas y capas entre las aplicaciones, cansado de crear aplicaciones en el server o herramientas de desktop en el super rígido Swing y mucho más de las aplicaciones de líneas de comando.
Flex vino a traerme buenos recuerdos de mi época con Visual Basic 6.0, el manejo de eventos, añadir botones, imagenes a un formulario, integrar eventos con objetos, dibujar una pantalla en un papel y que la gente te diga si le gusta o no... Además cuenta con un gran lenguaje para programar en el, como lo es el Actionscript 3.0 que ya es un lenguaje robusto, bien orientado a objetos, con excelente manejo del XML, expresiones regulares y cuanta cosa uno se pueda imaginar en un lenguaje de verdad, este lo tiene. Además se integra excelente con el MXML (para diseño más fácil de la parte gráfica) y el Flex es open source, lo cual permite meterse hasta lo mas profundo del lenguaje, ver definiciones y hasta si se es muy bicho modificarlo...
Otras cosas que me gustan son: el IDE para desarrollo está basado en Eclipse, lo cual es un plus si se es un desarrollador en Java que ha utilizado el IDE ya que estas completamente familiarizado. También el llamado de procedimientos remotos, por medio de Remote Objects, Data Services, Web Services o Servicios tipo Rest. Esto último es demasiado útil, sobretodo si se desarrolla un backend en el lenguaje favorito (en mi caso Java, pero sirve con PHP, Cold Fusion y hasta .Net) y el front-end es una aplicación fresa y dinámica en Flex y sobre todo eso y para rematar, las aplicaciones corren sobre el Flash player, algo estandarizado, no andan varias versiones del player hechas por distintas empresas por ahi y que implementen ciertos métodos en unas y otros en otras. Es algo más estable y serio, además que la penetración del Flash Player es demasiado alta, casi en un 93% de las computadoras del mundo...
Pero a pesar de todo lo que el Flex pueda proveer o lo que AJAX pueda ofrecer, lo más importante para el desarrollo de un buen sitio web, no será el lenguaje en que se implemente (aunque definitivamente ayudará), sino el diseño(y no me refiero solo al diseño gráfico) que se haga previamente. Como dice Alan Cooper en su libro About Face 3.0, "diseñar un producto que vaya a cumplir con las metas del usuario final, ni más cosas ni menos cosas..." (palabras más, palabras menos)