Qué debe saber un Ingeniero en Informática

La ingeniería en informática es una disciplina tremendamente extensa, con multitud de campos de aplicación. Es muy difícil ser experto en varios de estos campos a la vez. Resultaría complicado encontrar, por poner un ejemplo, un profesional que conociese los secretos de la Inteligencia Artificial y al mismo tiempo fuese un gurú del modelado de sistemas en UML dominando a la par los arcanos de los Autómatas Programables: se dice que quien mucho abarca poco aprieta y eso es perfectamente aplicable a nuestra profesión.

Sin embargo la especialización, siendo importante, no lo es todo. La tendencia actual en el desarrollo de software a la formación de equipos multidisciplinares para el soporte de las metodologías ágiles y la reducción de costes en las organizaciones obliga a que los Ingenieros en Informática, si quieren mantenerse competitivos, sean capaces de manejarse al menos de forma aceptable en los siguientes campos:

  • Programación de aplicaciones de escritorio: conocer al menos .NET bajo Visual Studio y Java en Eclipse, siendo bastante competente en al menos uno de ellos.
  • Programación web: HTML es obligatorio y por lo menos se deben tener unas nociones básicas de CSS y JavaScript. Además, tienes que ser capaz de hacer aplicaciones simples en ASP.NET, Java EE y PHP, siendo bastante competente en al menos una de ellas. Aquí cobra además especial importancia la seguridad.
  • Ingeniería de Requisitos: Recogida y gestión de los requisitos. Normas básicas de elaboración de una buena especificación.
  • Análisis y Diseño de sistemas de software: Hay varios lenguajes de modelado importantes, pero el dominio de UML es obligatorio, al menos en un grado avanzado. Hoy en día hay que tener nociones además de Desarrollo Dirigido por Modelos. Conocimientos de algoritmia y estructuras de datos son igualmente básicos tanto para el diseño como para la programación.
  • Pruebas: unitarias, de integración, funcionales y de aceptación.
  • Bases de Datos: el diseño de bases de datos es esencial, la normalización bastante deseable. El conocimiento de al menos un lenguaje de acceso a bases de datos (SQL principalmente) es obligatorio. No se pueden olvidar los servicios web para el encapsulamiento del acceso y modificación de los datos.
  • Gestión de Proyectos:
    • Definición, Descomposición y Planificación de Proyectos. Técnicas de estimación de tareas.
    • Seguimiento de proyectos.
    • Control de versiones.
    • Gestión de riesgos, cambios e incidencias.
    • Gestión de expectativas de los implicados y de la comunicación entre ellos.
    • Nociones al menos básicas sobre presupuestos y contratos.
    • Dominio de herramientas como Microsoft Project.
  • Estándares, metodologías y modelos de calidad: CMMI, ISO 9001, RUP, 6 Sigma, Scrum, XP, etc. Algunos son metodologías de desarrollo, otros modelos de mejora de procesos, pero en cualquier caso haber oído hablar de ellos nunca está de más.

No creo que éstos que he mencionado tengan que ser campos que un junior deba conocer a fondo desde un principio para ejercer su profesión, pero sí creo que todo ingeniero debería trazar su propio plan de formación a corto y medio plazo de manera que se garantizase a sí mismo conocimientos en éstas y otras áreas de las que probablemente me haya olvidado y que resulten igualmente importantes. La Universidad pone las bases, pero el desarrollo formativo posterior es responsabilidad exclusiva de cada uno.

PD: Una primera crítica que se me ocurre a mi propia lista es que está posiblemente muy enfocada al desarrollo de software y deja de lado campos en los que ejercen gran número de ingenieros como son las Redes, la Optimización y el Control industrial o la electrónica de circuitos, entre otras.

¿Por qué los jefes de proyecto ganan más que los programadores?

Estaba preparando un artículo sobre gestión básica de requisitos en los proyectos de software, pero he preferido dar un volantazo y exponer mi punto de vista sobre un asunto que se discute estos días en la red sobre por qué los jefes de proyecto cobran más que los programadores.

Según he podido ver en artículos como éste (bien es cierto que tan solo se trata de una traducción al español de la respuesta dada por un internauta en stackexchange), culpan de este supuestamente injusto hecho ni más ni menos que a nuestra sociedad [sic], aduciendo una visión de la remuneración orientada a la jerarquía y un modelo de gestión poco menos que represor. Como prueba de ello, completan su análisis exponiendo el vocabulario habitual entre los jefes de proyecto: recursos, procesos, eficiencia, control, etc. En contraposición expone el caso de las compañías de software que funcionan de forma análoga a como lo hacen los estudios cinematográficos, en los que cada miembro es remunerado en función del valor que aporta al producto final independientemente de su posición en la jerarquía.

En mi opinión en esta manera de explicar por qué los jefes de proyecto ganan más que los programadores radica un profundo desconocimiento de las leyes del mercado. El hecho de que el trabajo de los programadores sea más complicado o no que el de los jefes de proyecto es aquí completamente irrelevante. El problema radica en la escasez, o lo que es lo mismo, en la ley de la oferta y la demanda. Un jefe de proyecto debe tener una serie de habilidades que, independientemente del valor que aporten al producto final (muy difícil de medir ya que se trata en su mayoría de un trabajo de gestión) y de la complejidad que implica el desarrollo de dichas habilidades, lo cierto es que escasean más que las habilidades aportadas por los programadores.

Con esto no quiero decir que cualquiera pueda programar o que los buenos programadores abunden, nada más lejos de mi intención. Lo que quiero decir es que si cualquiera no puede programar, menos aún puede ser jefe de proyecto. Y si los buenos programadores escasean, más aún escasean los buenos gestores.