Complexité essentielle
# Complexité essentielle

La complexité essentielle relative à un problème, généralement dans le cadre d'un projet informatique, désigne le degré de complexité minimal d'un programme pour résoudre un problème ou appliquer une solution.

Le terme a été introduit par Frederick Brooks dans son article No Silver Bullet.

## Étymologie

Le terme complexité n'est pas utilisé dans son sens informatique courant (ressources nécessaires pour traiter un problème) mais en relation avec l'idée plus générique de complexité propre d'un programme (grandeur qu'on a pu chercher à caractériser par des mesures telles que le nombre de lignes du code, ou le nombre cyclomatique).

Le terme essentiel est utilisé dans son sens étymologique renvoyant à la notion d'essence en philosophie ou en didactique. L'opposition que Brooks formule entre complexité essentielle et complexité accidentelle renvoie au débat classique entre essence et accident.

## Complexité essentielle et complexité accidentelle

Brooks argue que, la complexité essentielle étant minimale, et la complexité étant dans le domaine informatique source de coût, toute complexité supplémentaire doit être évitée. Cette complexité supplémentaire si elle existe est donc fortuite et conséquence du caractère imparfait de l'implémentation informatique. Brooks l'appelle complexité accidentelle. Il oppose complexité essentielle et accidentelle, la première est inévitable car liée au problème à résoudre tandis que la seconde n'est due qu'à un mauvais choix d'outils.

