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.