martes, 28 de abril de 2009

10 proverbios para programadores.

Keving Pang comenta 10 proverbios que todo programador debería conocer. Aquí la lista y una línea sobre cada uno, como para tentarlos a que lean el post completo, que es excelente.

  1. There is no smoke without fire: nos recuerda que problemas tales como código duplicado o complejo son señales de fallas de diseño subyacentes.

  2. An ounce of prevention is worth a pound of cure: nos alienta a buscar y prevenir problemas a futuro.

  3. Don't put all your eggs in one basket: se refiere a la creación de “dominios de experticia”, porciones claves de un sistema sobre las que un (y sólo un) integrante del equipo tiene suficiente conocimiento como para mantenerlas, convirtiéndolo en la canasta que sostiene a todo el proyecto…

  4. As you sow, so shall you reap: “Cosecharás tu siembra”, diríamos por aquí. Si sembramos buen código cosecharemos buen código, y si sembramos código pobre…

  5. Great haste makes great waste: grandes pérdidas de tiempo suelen tener origen en el apuro por terminar lo antes posible.

  6. Look before you leap: la exageración de los principios ágiles puede llevarnos a saltar al vacío, comenzar sin tener una idea clara de los objetivos (para comenzar no es necesario un objetivo preciso, pero sí uno claro).

  7. When the only tool you have is a hammer, everything looks like a nail: es tentador apegarse a lo que uno conoce, pero es mejor elegir y aprender las herramientas apropiadas para cada situación.

  8. Silence is construed as approval: si vemos problemas en el código o en el diseño de nuestros compañeros de equipo y no decimos nada lo estamos aprobando.

  9. A bird in the hand is worth two in the bush: donde se comenta el balance entre la refactorización y la entrega de valor.

  10. With great power comes great responsibility: mucho del software que desarrollamos es vital para el desenvolvimiento de un negocio o para la vida cotidiana de muchos usuarios, y debemos sentir la responsabilidad derivada de ello. Los principios ágiles dan poder al equipo, y este poder tiene su precio.

El post completo, aquí.

lunes, 27 de abril de 2009

Hitler de líder técnico.

“Si no hacés funcionar esa VM para mañana a las 12…

…vas a programar COBOL para bancos en Alaska”.

Visto en {codesqueeze}.

jueves, 23 de abril de 2009

Frases: Comentarios (en el código).

// sometimes I believe compiler ignores all my comments

Visto en Incognitosis… no se pierdan la fuente original: ¿Cuál es el mejor comentario en código fuente que has encontrado? en stackoverflow.

viernes, 17 de abril de 2009

Jueguitos de viernes: Mk5

En MK5 representamos a una cruza entre robot y helicóptero que tiene por misión recoger… no sé, algo verde, con pinta de radioactivo. Los niveles están muy bien logrados, con elementos simples pero lo suficientemente abundantes como para hacernos la vida imposible.

mk5Es  100% adictivo, tengan cuidado si es que tienen algo importante para esta tarde.

miércoles, 15 de abril de 2009

Jugando con PhotoFace.

PhotoFace es una aplicación online que nos permite subir una foto y juguetear un poco con ella, con varios efectos que nos permiten llevarla desde lo…

normal

¿normal? Bueno, por lo menos para mí. Hasta…

honeyimhome

“Hi, honey, I’m home”, o…

deathproyect

“¿Qué hice yo para recibir este código?”.

También podemos agregarle audio para enviárselo a alguien junto con la imagen. Es… extrañamente adictivo. Vale la pena pegarle un vistazo.

Visto en Código Geek.

martes, 14 de abril de 2009

Sistemas administrativos, software, avances, cambios, revoluciones.

 problemassolucion

Encontré la imagen que ilustra este post en Acceso Directo (que a su vez lo vio en Abadía Digital, que lo sacó de Digg… ¿es que nadie dice nada nuevo ya?). Viene muy a cuento de lo que estaba escribiendo, que es lo que sigue:

Es un camino posible para los proyectos de desarrollo de sistemas (de soporte a la gestión en las organizaciones) el que se inicia con trabajadores de las distintas áreas (futuros usuarios) comentando con un analista funcional el recorrido de la información en los diferentes procesos en que participan. Es un camino que continúa con el analista transformando esa información en especificaciones (tal vez haciendo algunas recomendaciones de cambio al cliente), alguien modelando una base de datos, programadores codificándolo en forma de formularios, validaciones, autorizaciones, un sinfín de ajustes, problemas menores y mayores, retrasos… Sigue luego de la instalación con caídas y recuperaciones varias, más ajustes y un final feliz para todos… algunas veces. Es el camino del desarrollo a medida.

En el otro extremo de un amplio espectro de relaciones posibles entre el cliente y el equipo de desarrollo, otro camino comienza más o menos igual, en esa famosa charla entre analista y usuario. Pero luego es el analista el que indica las adaptaciones al recorrido de la información necesarias para la implantación del software. Sigue con la capacitación a los usuarios, la implantación del software, migración de datos… y termina más o menos igual que el anterior, con caídas y recuperaciones varias, más ajustes y un final feliz para todos… algunas veces. Es el camino de la adopción de un sistema de software “enlatado” (ya sé, no es enlatado exactamente pero para el caso está bien, no seamos muy estrictos con los términos).

Esos son dos extremos, obviamente teóricos (o por lo menos muy poco frecuentes), de una escala absolutamente arbitraria creada al sólo efecto de poner en tema al lector de este artículo.

Lo que ubica a todo desarrollo de la vida real en algún punto intermedio de esa escala es una negociación entre cliente y proveedor que tiene lugar en algún punto o a lo largo de todo el proceso previo al desarrollo propiamente dicho. En ella se establece en qué aspectos se adaptará el recorrido de la información en la organización a las necesidades específicas del proveedor del sistema y en qué otros aspectos se adaptará el proveedor del sistema a las necesidades o caprichos del cliente.

Lo que es seguro es que el resultado final -en términos de circuitos administrativos- no se apartará demasiado del original del cliente (en un extremo) o del implementado anterior y repetidamente por el proveedor (en el otro). Tampoco será sustancialmente diferente al que gente de sistemas como yo, analistas, programadores, administradores, contadores, ingenieros y demás profesionales hemos aprendido en la facultad o a través de la experiencia.

Finalmente, y para resumir, la organización termina haciendo más rápido (mucho más rápido) más o menos lo mismo de antes o pareciéndose (usualmente para mejor) a todas las demás en el mercado.

Con lo que volvemos a la imagen que ilustra todo esto. Hemos resuelto efectivamente el “problema”. Hemos reducido costos y personal, acelerado los procesos administrativos, optimizado tiempos y recursos… todo mejor y más rápido y sin embargo, por debajo de todo eso, persisten los mismos problemas que enfrenta la administración… porque nada ha cambiado realmente todavía.

Que no se entienda lo anterior como una queja, que no lo es. A lo que apunto es a esto: la tecnología ha revolucionado nuestra vida y sociedad en muchos aspectos. Hoy la mayoría de las organizaciones cosechan el fruto de esta revolución en forma de un aumento en la velocidad, alcance y menores costos de funcionamiento de sus circuitos administrativos. Este aumento no ha sido lineal sino exponencial, por lo que los cambios han sido profundos. Pero en este aspecto (el de los circuitos administrativos en las organizaciones) no podemos hablar de revolución, por lo dicho anteriormente: las organizaciones siguen funcionando más o menos como antes.

Creo que en el transcurso de nuestras vidas este “cambio” se transformará en una “revolución”. Comienzan a surgir nuevas formas de organización. Formas de organización que no “aprovechan”, sino que tienen origen en las posibilidades inherentes a la tecnología de la que disponemos ahora y de la que no disponíamos antes, marcando una diferencia cualitativa.

Proyectos de software colaborativos, Wikipedia y demás wikis de todo tipo, comunidades creadas alrededor y a través de determinados servicios o soportes como Facebook, Twitter, Digg… toda esa (aunque no solamente esa) cosa “2.0”.

Es un comienzo. En definitiva todos esos proyectos, empresas o comunidades/servicios que mencioné se apoyan o son en alguna medida organizaciones “comunes” con un lado “tradicional”. Pero creo que tienen el potencial de generar algo diferente. Diferente y seguramente también ajeno a ellos mismos. Algo revolucionario.

¿Nuevos recorridos para la información? ¿Ningún recorrido en absoluto, un especie de caos acotado y dirigido hacia determinado objetivo? ¿Organizaciones sin objetivos concretos propios? ¿Organizaciones con un objetivo amplio (beneficio económico, por ejemplo) y sin reglas formales establecidas? ¿Con wiki-reglas que pueden hacerse y deshacerse, que “todo el mundo puede editar”? ¿Que un sistema implementa automáticamente en forma de circuitos cambiantes? ¿Organizaciones que se generan espontáneamente y que desaparecen tan rápido como se crearon, también espontáneamente? Quién sabe.