" No Silver Bullet—Essence and Accident in Software Engineering " es un artículo ampliamente discutido sobre ingeniería de software escrito por el ganador del Premio Turing Fred Brooks en 1986. [1] Brooks sostiene que "no existe un desarrollo único, ni en tecnología ni en técnica de gestión, lo que por sí solo promete incluso una mejora de un orden de magnitud [diez veces] dentro de una década en productividad, confiabilidad y simplicidad". También afirma que "no podemos esperar ver ganancias dobles cada dos años" en el desarrollo de software, como ocurre en el desarrollo de hardware ( ley de Moore ).
Brooks distingue entre dos tipos diferentes de complejidad: complejidad accidental y complejidad esencial. Esto está relacionado con la clasificación de Aristóteles . La complejidad accidental se relaciona con problemas que los ingenieros crean y pueden solucionar. Por ejemplo, los lenguajes de programación modernos han abstraído los detalles de escribir y optimizar el código ensamblador y han eliminado los retrasos causados por el procesamiento por lotes , aunque persisten otras fuentes de complejidad accidental. La complejidad esencial es causada por el problema a resolver y nada puede eliminarlo; Si los usuarios quieren que un programa haga 30 cosas diferentes, entonces esas 30 cosas son esenciales y el programa debe hacer esas 30 cosas diferentes.
Brooks afirma que la complejidad accidental ha disminuido sustancialmente y que los programadores actuales dedican la mayor parte de su tiempo a abordar la complejidad esencial. Brooks sostiene que esto significa reducir todas las actividades accidentales a cero no proporcionará la misma mejora de orden de magnitud que intentar disminuir la complejidad esencial. Si bien Brooks insiste en que no existe una solución mágica , cree que una serie de innovaciones que ataquen la complejidad esencial podrían conducir a mejoras significativas. Una tecnología que había logrado mejoras significativas en el área de la complejidad accidental fue la invención de lenguajes de programación de alto nivel , como Ada . [1]
Brooks aboga por el "crecimiento" del software de forma orgánica mediante un desarrollo incremental. Sugiere diseñar e implementar los programas principales y subprogramas desde el principio y completar las subsecciones de trabajo más adelante. Él cree que programar de esta manera entusiasma a los ingenieros y proporciona un sistema que funciona en cada etapa del desarrollo.
Brooks continúa argumentando que existe una diferencia entre "buenos" diseñadores y "grandes" diseñadores. Postula que como la programación es un proceso creativo, algunos diseñadores son intrínsecamente mejores que otros. Sugiere que existe una diferencia hasta diez veces mayor entre un diseñador corriente y uno excelente. Luego aboga por tratar a los diseñadores estrella igual de bien que a los directivos estrella, proporcionándoles no sólo la misma remuneración , sino también todas las ventajas de un estatus superior: oficina grande, personal, fondos para viajes, etc.
El artículo y las reflexiones posteriores de Brooks al respecto, "'No Silver Bullet' Refired", se pueden encontrar en la edición de aniversario de The Mythical Man-Month . [2]
El artículo de Brooks ha sido citado en ocasiones en relación con la ley de Wirth , para argumentar que "los sistemas de software crecen más rápido en tamaño y complejidad de lo que se inventan métodos para manejar la complejidad". [3]