Palabras sobre código

Abril 25, 2009

Trabajos en hilos separados con BackgroundWorker (parte 2, reusabilidad)

Archivado en: Uncategorized — Etiquetas:, , , , — David Lay @ 3:03 am

En la parte 1 mostré como crear una barra de progreso que realizaba un trabajo de manera asíncrona mientras mantenía a el usuario informado de que se estaba realizando un trabajo. Todo eso fue hecho en forma de prototipo, y con varias cosas pendientes que mejorar.

En esta segunda parte me voy a enfocar en la reusabilidad del código,  explicando una mejor forma utilizar esta ventana, y voy a explicar el manejo de exepciones. Todo esto acompañado de pequeñas modificaciones al código del post anterior.

(más…)

Febrero 19, 2009

Aprendiendo WPF

Archivado en: Uncategorized — Etiquetas:, — David Lay @ 3:27 pm

Si el blog no ha sido actualizado recientemente, es culpa de WPF.
Cada momento libre que he tenido he estado dedicándolo ya sea a descansar o a aprender WPF.

Es desagradablemente complicado todo el esquema de trabajo que presenta, pero a la vez, en esa complejidad hay una riqueza enorme.
Sinceramente creo que es un diamante en bruto (muy en bruto) y con el tiempo van a llegar mejores herramientas.

Me recuerda mucho cuando daba mis primeros pasos en HTML, y luego de varios años aparecieron las técnicas AJAX junto a los mejorados browsers.

Cuando salga VS 11 (no el 10, el 11) estoy seguro que ya estaremos en camino de una consolidación de la plataforma.

Por ahora sólo lo veo como una herramienta rústica pero poderosa, que todavía exige una cantidad demasiado grande de conceptos y técnicas nuevas.

A continuación, les dejo un par de links a recursos que me han servido infinitamente en cuanto al aprendisaje de esta nueva tecnología (en inglés):

Conceptos básicos de WPF (inglés)

Patrón M-V-VM Explicado (inglés)

Actualización: De hecho he encontrado una discusión bien interesante en el sitio StackOverflow  #534205 (inglés) en donde tratan el tema de la migración de aplicaciones y desarrollo de aplicaciones de producción con WPF en el mundo real. Coincide bastante con lo que es mi punto de vista: Excelente momento para aprender, pero hay que esperar un tiempo prudente hasta que la tecnología madure.

Diciembre 20, 2008

Trabajos en hilos separados con BackgroundWorker (parte 1, prototipo)

Archivado en: Uncategorized — Etiquetas:, , , , — David Lay @ 5:25 pm

Para ciertos sistemas, es necesario realizar trabajos que toman un tiempo considerable, como por ejemplo la lectura de archivos grandes, la generación de archivos, la comunicación con sistemas en la web.

Para estos casos, es necesario que la aplicación permanezca activa e informe al usuario que se está realizando el trabajo, ya que de otra manera el usuario puede confundir la demora con una falla.

Una forma que he descubierto funciona bastante bien, es cada vez que se generan estos procesos, levantar un pequeño dialogo, con una barra de progreso infinita, que lo único que hace es dar esa información al usuario de que se está trabajando.

Veremos como implementar esta solución en C# 3.5 , utilizando hilos de ejecución paralela. (más…)

Diciembre 18, 2008

Bug Driven Development

Archivado en: Uncategorized — Etiquetas: — David Lay @ 12:42 pm

No tengo que explicar que los bugs son una realidad y que dado el estado de nuestra profesión, son imposibles de evitar por completo.

Pero una cosa completamente aparte es entrar en una lógica de desarrollar características en los sistemas de manera mediocre y sabiendo que se dejan errores y posibles puntos de falla sin revisar.

Veo esto cada día,  y en lo que termina en en un desarrollo guiado por los bugs, en donde tarde  o temprano el proceso de programación deja de ser un contante progreso en características y se vuelve un 70% resolución de bugs y un 30% introducción de nuevas características, que a su vez se desarrollan de la misma mediocre manera.

Basta de esto, tomemos esta profesión en serio.

Octubre 7, 2008

TDD (Desarrollo guiado por pruebas): Impresiones

Archivado en: Uncategorized — Etiquetas: — David Lay @ 1:46 pm

Durante los últimos meses he aprendido mucho sobre TDD y todo lo que lo rodea  y he tratado de evangelizar en mi organización sobre sus beneficios y virtudes.

Sin embargo, en mi organización soy el único desarrollador con OO (Orientación a objetos) en la sangre, todos vienen de VFox o VB6, por lo que ya tengo ocupado mucho tiempo y recursos en evangelizar sobre OO y en resguardar que todas las cosas dentro de mis proyectos se realicen de acuerdo a los principios de la OO.

Y es aquí mi donde entra mi primera impresión. TDD es una arquitectura para sistemas contruidos en la base de OO. Para desarrollar una aplicación susceptible a pruebas unitarias e integración, se requiere utilizar grandes cantidades de conceptos de OO que muchos VB6 tradicionales considerarían completamente fuera de sus conocimientos e intereses.

Yo mismo he tenido que aprender una o dos cosas sobre OO, y reforzar otro par de conceptos antes de poder hacerme una idea global de lo que es TDD, de cómo diseñar para probar y de todos estos conceptos asociados, como el DIP (Patrón de inyección de dependencias por sus siglas en inglés).

Moraleja: Partir por la base siempre. Primero introducir OO, Luego introducir TDD, luego introducir esquemas de desarrollo ágiles.

Octubre 6, 2008

La importancia de las listas de tareas

Archivado en: Uncategorized — David Lay @ 4:20 pm

TODO List, como le llaman los grigos angloparlantes, son las listas de tareas.

En mi experiencia personal, toma un tiempo acostumbrarse a llevarlas, y a encontrar la herramienta precisa que se ajuste a las necesidades.

Para algunos outlook es suficiente, otros prefieran herramientas web como Remember the Milk , mientras otros como yo, preferimos las herramientas de escritorio tipo post-it, como ATNotes o Stickies.

Pero independiente de la herramienta, las listas de tareas bien hechas, estructuran tu trabajo y te ayudan a no desperdiciar tiempo recordando que era lo que estabas haciendo antes de ir a prepararte el café, o el viernes antes de salir apurado  de la oficina, o antes de almuerzo, o antes de esa distracción …

Además te permite planificar en el corto plazo y dimensionar la real carga de trabajo.

Sistemas organización serios, como GTD (Getting things done), usan las listas de tareas en distintos niveles para distintos horizontes de planificación y dan guías de cómo crear listas eficientes que realmente te ayuden.

Este post fue simplemente un arrebato de agradecimiento a estas listas, que realmente me han ahorrado mucho tiempo y lo van a seguir ahorrando!

Octubre 4, 2008

Lean, escuchen, escriban, hablen.

Archivado en: Uncategorized — David Lay @ 6:00 am

Estimados colegas desarrolladores de software:

La informática, y como parte de ella, el desarrollo de software, son disciplinas muy nuevas. Esta última viene madurando como una práctica industrial solo a partir de mediado de los 80, cuando se abrió el mercado de aplicaciones para empresas a un rango más amplio que sólo computadoras militares, universitarias o de grandes empresas.
En estos  años, (25, 30 siendo generosos) han ocurrido tantos cambios y se han logrado tantos avances que ningún individuo solitario podría tener todos los detalles de lo ocurrido. La explosión ha sido infinita.

Y sigue creciendo y cambiando. Cada 4 años todo es nuevo y es lo que me emociona de esta área y lo que me apasiona.

Por eso hay que estar informado. Hay que aprender lo que la generación pasada nos está diciendo, hay que absorber conocimiento y al mismo tiempo seguir construyendo esta máquina imparable de información y datos.

Pero también hay que discutir, aprovechar las mismas herramientas que construimos o que ayudamos a construir para hacernos crecer a nosotros mismos. Esta es una escalera que construimos peldaño a peldaño, pero que llegada una altura, tenemos que subirnos a ella para seguir construyéndola.

En la práctica significa aprender inglés. El 90% de la información técnica y académica relevante está en inglés, y para generar contenido en nuestra lengua, primero debemos llegar al nivel necesario para poder producir el contenido, y para eso debemos aprender de lo que está en inglés. No queda otra, porque los seminarios son caros y no son substitutos de la propia iniciativa de aprender.

Mis recomendaciones puntuales son:

  1. Si no saben Inglés, pierdanle el miedo (y el respeto). Aprendan que es muy útil y sencillo.
  2. Lean RSS tecnológicos en general y específicos software todos los días. Aquí hay buen contenido en español, aunque los realmente importantes son en inglés.
  3. Escuchen Podcasts. Los que valen la pena están en inglés, así que de paso practican un poco del idioma en forma conversacional. Hay muchos buenos sobre desarrollo de software. Software engeneering radio es uno de mis favoritos de desarrollo de software en general, pero Herding code y Dot Net Rocks los más importantes en desarrollo de tecnologias microsoft (Mi campo específico)
  4. Hagan un blog o participen en foros (o ambos)
  5. Compren y lean libros (de verdad, esos de cadaver de árbol) sobre software. Coding Horror tiene una excelente lista de lectura recomendada que personalmente estoy empezando a seguir. Lo importante de leer en papel y tinta es que es una experiencia análoga, como pocas que nos quedan. Además, leer un libro en la pantalla? nah.
  6. Comenten con gente sobre sus teorias locas sobre software, o sobre lo que leyeron, o sobre lo que nunca han leido, o sobre lo que sea que logre un intercambio de experiencias. Cada vez va a ser más sencillo.

Amar la profesión, hace que todo sea más sencillo. Si eres solamente un programador de 9 a 18, entonces estas destinado al estancamiento.

En nuestra profesion, la única constante es el cambio, y para moverse a la velocidad necesaria, hay que armarse de curiosidad y entusiasmo por replantearse lo que existe como fundamentos. La informatica no está ni cerca de ser una disciplina madura, por lo que nos toca contribuir para madurarla.

Despues de todo, nuestro trabajo no es programar en cierto lenguaje o diseñar sistemas o tomar requerimientos. Nuestro trabajo es entregar soluciones a nuestros clientes, y para hacerlo de manera eficiente, cada vez debemos madurar nuestras técnicas y prácticas. De eso se trata todo!. Ahora, si te puedes divertir en el proceso, cuanto mejor!

Septiembre 26, 2008

Liberación Digital

Archivado en: Uncategorized — David Lay @ 11:39 am

Liberación Digital [LD] es:

Liberación Digital es un eje coordinado de acción entre redes ciudadanas que busca llevar la voz civil ante el Gobierno en materia de tecnología, en pos de la defensa de los derechos ciudadanos y del desarrollo sustentable de la economía nacional.

LD Estaba en riesgo de disolverse debido a un cese de movimientos. Sólo habia un puñado de gente trabajando en nombre del grupo y la masa que alguna vez lo conformó permanecía expectante viendo qué es lo que podía hacer.
Luego de una productiva reunión presencial (transmitida por webcast hacia todo el mundo) se acordó continuar con el movimiento y darle una segunda vida, ya que hay muchas cosas por hacer.

Lo principal que puedo rescatar de la reunión, como gran concepto, es que en Internet, la iniciativa debe comenzar de manera individual, y luego que está en marcha, es posible que otros adhieran y complementen tus ideas y se construya algo potente. Lo bueno es que esto, si es una buena idea, no tarda mucho… casi nada.

Así que tengo varias ideas para comenzar. Primero que nada motivar a todo el que quiera, a participar de este movimiento (si eres de Chile) o adherir o crear otros movimientos a nivel internacional con este perfil, aportar con ideas, pedir consejo o aprender de lo que hacemos: Organización de iniciativas con objetivos comunes (para el resto del mundo).

Hago la distinción, porque LD se define como un movimiento de acción-país, pero sus ámbitos de conocimiento abarcan todo lo que es la informática (entendida como Información Automática) y las repercusiones sobre las libertades individuales y colectivas que genera el uso y manipulación de ésta por parte del estado.

Pueden esperar más comentarios y seguimientos de este tema, ya que estaré participando constantemente.

Septiembre 17, 2008

Viejos trucos que no mueren

Archivado en: Uncategorized — Etiquetas:, — David Lay @ 4:08 am

Resulta que estoy trabajando en un sistema bastante moderno, .NET 2005, SQL2005, winforms, y está a la mitad de su tiempo de desarrollo.

Durante un refactoring, me dí cuenta de todo el desperdicio que estabamos haciendo con funciones con mil parámetros para búsquedas. Parámetros sobre como usar los otros parámetros, etc, pero estaba confiado que no había un camino fácil de escape para este particular problema, así que intenté un nuevo truco viejo.

(más…)

Septiembre 11, 2008

En construcción

Archivado en: Uncategorized — David Lay @ 8:01 pm

Er.. estoy buscando tiempo para armar esto.

Blog de WordPress.com.