martes, 21 de julio de 2009

Depurar código es el mejor y más intensivo método de aprendizaje.

chica-microsoft-pantalla-de-error-azul En esta última semana estuve librando mis primeras verdaderas batallas con jQuery, un framework de javascript que, al igual que mooTools, me parece sencillamente fabuloso.  La verdad es que me encantaría utilizar los dos al mismo tiempo, tan difícil resulta decidirme por uno u otro.

Me sorprendo ingenuamente de su efectividad porque vengo de la época en que javascript era apenas una herramienta para hacer validaciones del lado del cliente y ahorrarle un poco de tiempo y transiciones al usuario (con 56K apretar “submit” y esperar 20 segundos –con suerte- para recibir un par de mensajes de error era toda una frustración). Una época en la que cada uno armaba su propio “framework” y se conformaba con que fuera funcional para IE -y tal vez para Netscape-, le permitiera cargar dinámicamente una lista, armar una grilla básica y –para los más intrépidos- hacer unas ventanas de diálogo más elegantes que el básico alert() de javascript.

Con mucho sudor y lágrimas esos frameworks fueron creciendo y haciéndose más complejos… para luego descubrir (que frase tan típica de viejo la experiencia) que “estos mocosos de ahora la tienen regalada”, y que logran en 10 minutos lo que a uno le ha costado años.

En fin, todo eso fue ñañería y digresión. La cuestión es por primera vez en un largo rato estoy aplicando profesionalmente, a gran escala y en un sistema complejo, una tecnología totalmente nueva para mí.

¿Y cuál es la mejor manera de aprender? A esto iba: haciéndose desde abajo, revolviéndose en el fango, peleando entre la mugre… depurando código.

No me voy a hacer el humilde, lo hago porque no tengo alternativa, lo hago porque soy el nuevo y el más inútil de todos, porque me toca ocuparme de lo que me tiren y que, lógicamente, es aquello en lo que nadie quiere meterse. Porque no puedo esquivar el bulto, para resumir. Hay que pagar el derecho de piso, y el camino es resolver problemas. Simples, complejos, triviales… todos… y tratar de hacerlo bien (y ni hablar si se da el caso extremo que comentaba en Guía para perplejos: primera vista al código en un nuevo trabajo y... ¡ups!).

Sí, lo hago refunfuñando por lo bajo… hubo varias ocasiones en las que por suerte no tenía un objeto contundente cerca mío, pero tengo que reconocer que he aprendido más de jQuery en dos días que con todas las pruebas y pequeños proyectos inútiles que hice anteriormente.

Esto es porque lo que hay que hacer se aprende con los tutoriales, con los manuales, con los proyectos de prueba. Pero lo que no hay que hacer sólo se aprende corrigiendo errores o cometiéndolos.

¿Y para qué transitar el tortuoso camino de cometer todos los errores posibles para hacerlo un poco mejor la próxima vez? Es mucho mejor depurar, sacarle las pulgas a un sistema ya casi terminado y aprender no sólo de los errores que encontramos sino también de los muchos aciertos que los rodean. Es un curso intensivo, demanda el doble de paciencia y esfuerzo pero sólo una cuarta parte del tiempo que implicaría “aprender por la positiva”.

Dice el adagio que “el que se quema con leche ve una vaca y llora”. Pasarse un par de horas fracasando estrepitosamente en la búsqueda de algún lugar para validar si la sesión ha caducado para luego resignarse a implementar una solución particular en cada lugar donde se presente el problema (¡muchos lugares!) nos fijará en la memoria las bondades del encapsulamiento y la separación en capas a través de interfaces que podamos controlar (por cierto, esto último es lo que suele olvidarse).

Así que la próxima vez que se enfrenten a un mar de código al que –en principio- no le encuentren ningún sentido… no piensen que están depurando sino que están aprendiendo, aprendiendo tan rápido que en breve llegará ese “click” en donde nuestro cerebro, ya acostumbrado a la sintaxis propia del nuevo lenguaje o herramienta, deje de mirar y empiece a ver.

Ah, por cierto… todo muy lindo, he aprendido mucho en dos días y descubierto varios errores, pero todavía no he logrado corregir elegantemente ni uno de ellos. Ya lo dije, paciencia.

9 comentarios:

Cerebrado dijo...

Ahhh, que lindo saber que otros andan por los mismos caminos que yo.
Pero... que pasa cuando lo que lees es realmente codigo basura? Aprendes cuando ya sabes que eso no sirve?
Cuando para agregar un dropdownlist a una pagina tardas una semana, y terminas modificando el framework ya existente, porque cada uno que agrego uno anteriormente lo hizo a su manera?
No te frustra?


Aprendo... siempre aprendo que la mejor manera de hacer las cosas sigue siendo la mia :P

AcP dijo...

Y... si ves errores y problemas que ya habías visto y corregido antes o no estás con una herramienta nueva aprendés menos, o nada, es verdad.

Y sí, supongo que frustra. En los proyectos más desprolijos que tuve que meter los dedos por lo menos el código era tipo comando (ver Antipatrones de diseño) y las cosas salían rápido... encontrar el error era difícil pero luego para corregirlo se podía hacer cualquier cosa (una mancha más al tigre...)

La mejor manera siempre es la de "uno"... no la de "uno mismo" sino la de "una sola persona" (y si además es "uno mismo" mejor). Los verdaderos problemas siempre vienen cuando se meten muchas manos en el mismo plato.

Unknown dijo...

«Esto es porque lo que hay que hacer se aprende con los tutoriales, con los manuales, con los proyectos de prueba. Pero lo que no hay que hacer sólo se aprende corrigiendo errores o cometiéndolos.»
Contundente.
Te cito en el wiki del proyecto.

AcP dijo...

Un honor, gracias! (poné un link para acá, ya que estás).

Cerebrado dijo...

Este blog solia tener onda en los comentarios... pero cuando te pones en profesor.. uffff.

Era verdad nomas que este blog va a tu CV?

AcP dijo...

Para ponerlo en mi CV es para lo único que escribo. Tiene toda la onda decir que tenés un blog y aparte sirve para que las fotos que me sacaron borracho bailando desnudo en cocodrilo no aparezcan en la primera página de google.

AcP dijo...

@Cerebrado: quejate menos y dedicate a venerarme como corresponde, que tengo un blog.

Cerebrado dijo...

Te iba a contestar el comentario de una manera filosófica, pero chatear por blog (nuevo concepto? atentos, eh?) no me cabe.

Ok, te venero de 7:15 a 7:30, que es la hora aproximada en que defeco diariamente :P

Anónimo dijo...

Oye Andrés, que digo yo que todo es que andas descubriendo, nos puede interesar mucho a todos... Compartir, compartir ¿no?