Un reciente artículo presentado en la 37th International Conference on Software Engineering por Paul Luo Li, Andrew J. Ko y Jiamin Zhu, titulado What Makes A Great Software Engineer?, analiza los resultados de entrevistas semi-estructuradas, de una hora de duración, realizadas a 59 ingenieros de software experimentados de las principales divisiones de Microsoft (13 en total) sobre las cualidades que debe tener alguien para ser un gran ingeniero.

El artículo las presenta dentro de cuatro categorías: sus características personales, su capacidad de toma de decisiones, como afectan a los equipos donde trabajan y como afectan a los productos software que desarrollan. Muchas de estas cualidades se aplican a múltiples profesiones, y algunas incluso se pueden aplicar a la vida en general. Podéis leer el artículo para ver sus descripciones y tener un contexto, aquí me voy a limitar a enumerarlas:

  • Personales: interés en mejorar, pasión, mente abierta, basarse en datos, sistemática, productividad, perseverancia, trabajo duro, curiosidad, capacidad de asumir riesgos, adaptabilidad, auto-confianza, auto-conocimiento, estar alineado con el producto y la organización, resolutivo, orgulloso de lo que hace, creatividad y foco.

  • Toma de decisiones: conoce la gente y la organización donde trabaja, distingue el bosque de los árboles (ve las situaciones en múltiples niveles), actualiza los modelos mentales de su entorno, domina la complejidad, conoce el dominio técnico, conoce a los clientes y el negocio, conoce las herramientas, conoce los procesos de ingeniería, capacidad de modelizar el estado actual, las acciones posibles y los resultados previsibles.

  • Equipo: crea un contexto compartido, crea éxito compartido, crea un entorno de trabajo seguro, honestidad, integra contextos, educación y respeto para los demás, adquiere contexto, no se toma las cosas de manera personal, capaz de mentorizar a otros, propone desafíos a los demás, da ejemplo, tiene una buena reputación, es capaz de defender sus posturas, devuelve los favores, es agradable como persona, pide ayuda cuando la necesita.

  • Producto software: elegante (simple, intuitivo), creativo, anticipa necesidades futuras, capaz de encontrar términos medios (p.ej. entre calidad y plazos), atención a los detalles, capacidad de tener el contexto del software en consideración, diseñado para evolucionar, diseñado a largo plazo, construido con cuidado.

El artículo propone algunas ideas para considerar estos puntos, tanto en la educación como en las empresas, y también para que los estudiantes de ingeniería informática reflexionen sobre sus propias características y tomen las mejores decisiones sobre su aprendizaje.