Hay cinco tipos muy diferentes de habilidades y conocimientos que se necesitan para tener éxito en la ingeniería de software:
- Dominio técnico de un rango suficiente de disciplinas centrales de CS: el espacio tecnológico de la ingeniería de software, que incluye lenguajes, herramientas, modelos y métricas, semántica y análisis, patrones y marcos, concurrencia, elementos de proceso, etc. Tener una verdadera profundidad en un conjunto representativo de tecnologías y prácticas actuales (en cada una de estas áreas) es más importante que las elecciones exactas de qué áreas en particular.
- Una apreciación y respeto por el proceso y sus elementos, particularmente los procesos ágiles de equipos pequeños y las personas que los promulgan. Una vez más, los modelos de procesos particulares (ágil, scrum, kanban, xp, etc.) importan menos que la comprensión de la infraestructura del desarrollador y del equipo, la voluntad de ser miembro del equipo, la comprensión de la dinámica de los equipos humanos y la capacidad de respetar las reglas aparentemente arbitrarias de participación en equipo. Para proyectos más grandes, también se trata de comprender los habilitadores arquitectónicos del modelo de equipo pequeño.
- Una comprensión de cómo emprender proyectos de diseño creativo. Esto significa apreciar las realidades gemelas del riesgo de ingeniería y la deuda técnica, cómo se evalúan y cómo se pueden mitigar de manera eficiente. En esencia, se trata de cómo innovar continuamente y lograr resultados exitosos.
- La capacidad de llegar al mundo y mantenerse actualizado e informado sobre el flujo y reflujo de los ecosistemas socio-técnicos que son la infraestructura de casi todos los proyectos de software. Raramente comienzas con una hoja de papel limpia, ni quieres hacerlo. Una vez más, la elección de sistemas particulares importa menos que tener una comprensión de cómo evaluar estos sistemas desde el punto de vista de las características técnicas y de mercado, y cómo participar, técnica y socialmente, para avanzar en la curva de aprendizaje de estos sistemas. Esto incluye la capacidad de leer el código y revisar el código. Al igual que la literatura, la capacidad de leer y criticar (y ser criticado) es un precursor esencial de la capacidad de escribir.
- Finalmente, la voluntad y la capacidad de trabajar continuamente para mantenerse al día con la tecnología. El ritmo de cambio es rápido, y las habilidades y el conocimiento pueden quedar obsoletos rápidamente sin una acción explícita para mantenerse al día. Al mantenerte actualizado y hacer de esto parte de tu rutina, ganas sabiduría de ingeniería y te conviertes en un jugador más valioso. Esto incluye la habilidad de aprender de otros expertos que estén dispuestos a revisar su trabajo, incluidos códigos, modelos y diseños, pruebas y análisis, planes de proceso, etc. Superar el miedo y comprometerse con el aprendizaje siempre son importantes, pero especialmente merecen atención explícita. elige ascender en los niveles gerenciales o ser un líder empresarial.