1. Generalización. La escuela y la observación sólo llegan hasta allí. Puede ser que se enseñen los instrumentos que se necesitan para resolver un problema muy específico o cómo escribir una interfaz de usuario para una base de datos con SQL Server. Se necesita experiencia para generalizar esos procesos, para saber cuándo se aplican y cuándo lo hacen. Es necesario experimentarlo.
2. Evitar el riesgo. Hay una serie de errores que todo el mundo comete cuando está aprendiendo a programar en un dominio o lengua. Habrá un centenar de errores comunes, y es posible cometer una docena de ellos más. A veces, estos errores son de arquitectura, que cuestan cientos o miles de horas de trabajo para abordarlos. Una persona con experiencia ya ha cometido los errores anteriormente. Si buscas un software de calidad, encontrar a alguien con experiencia en el dominio y que pueda coordinar correctamente ese software evitará riesgos y peligros futuros.
3. Especialización. Las clases y la instrucción tienden a cubrir amplias extensiones de territorio. Alguien que ha estado trabajando en los compiladores de diez años tendrá veinte mil horas de experiencia en ese dominio . ¿Quién puede saber más acerca de los pros y contras de los compiladores?
La educación es útil como un punto de inicio y proporciona un marco para organizar la experiencia. Pero la experiencia es en última instancia, lo que hace que un buen ingeniero de software cree un trabajo inmejorable.