Programar, desarrollar y jugar al ajedrez

Algo está roto en el mercado de los servicios profesionales relacionados con el desarrollo de software. En algunos posts ya he hecho referencia a que aparentemente faltan profesionales del desarrollo de software, o a como el mercado se ha pervertido en la paradoja entre proyectos estimados en horas y los proyectos cerrados.

Seguro que la explicación es muy compleja e influyen muchas cosas en que el mercado esté como está, con contradicciones en precios y acceso al mercado verdaderamente asimétricas muy propias de mercados con poca transparencia.

Tengo intención de ir escribiendo más posts sobre este tema, espero poder hacerlo, pero creo que una razón más es que el mercado confunde programación con desarrollo de software.

Una amiga utiliza un muy buen símil, comparando el desarrollo de software con la programación. Aprender a jugar al ajedrez es muy sencillo, las reglas no son muy difíciles y puede que en media hora estés jugando al ajedrez, ahora bien otra cosa es ser capaz de jugar al ajedrez con un mínimo de puntos ELO, es decir para ganar una partida a alguien que haya jugado un poquito no te va servir media hora.

Aprender a programar se puede hacer con relativa facilidad, al fin y al cabo yo creo que basta con entender lo que es el contador de programa,  una variable, A=A+1, y una estructura if then else. El resto son solo sofisticaciones sobre estas 4 cosas básicas 🙂

Quizás parte del problema es que confundimos a alguien que sabe programar con alguien que sabe desarrollar software. En ASPgems tuvimos una discusión interna intentando entender qué hace a alguien un buen desarrollador y aunque pueda parecer sorprendente  pocas de  esas características son muy informáticas.  Algunas de esas son:

  • Capacidad de abstracción.
  • Capacidad de proponer y evaluar alternativas
  • Gestión del riesgo
  • Conocimiento del entorno de trabajo y las herramientas
  • Selección de mejor solución teniendo en cuenta los recursos limitados de los que se dispone.
  • Generar código que permita la escalabilidad
  • Generar código que facilite el mantenimiento
  • Generar código modular
  • Conocimiento de estructuras de datos y su aplicación
  • Conocimiento del estado del arte en cuanto a herramientas y librerías
  • Habilidades de gestión de código y planificación de despliegue de aplicaciones
  • Habilidades de gestión de proyectos
  • Capacidad de comunicación
  • Liderazgo
  • Asertividad
  • Capacidad de adaptación a un entorno cambiante con novedades de todo tipo

Muchas de estas capacidades no se adquieren en un curso de programación, y quizás por eso muchas veces  no basta con hacer un curso de programación para encontrar un trabajo. En ASPgems pensamos que hace falta algo más que aprender a programar para trabajar como desarrollador. Por eso estamos pensando alguna iniciativa al respecto, apunta el nombre: ASPcamp.