Sélectionner les algorithmes adéquats pour répondre à un problème donné
Cette compétence consiste à proposer des applications informatiques optimisées selon des critères précis : temps d'exécution, consommation de ressources, précision ou adéquation au contexte technique. Elle ne se limite pas à mesurer des performances, elle exige de comprendre pourquoi une solution convient mieux qu'une autre.
En BUT2, le niveau 2 demande de ne plus se contenter d'un programme qui fonctionne, mais d'être capable de comparer plusieurs approches, de sélectionner la plus adaptée et d'améliorer une application existante de façon argumentée.
La compétence C2 est travaillée à travers des ressources qui abordent l'optimisation sous plusieurs angles : algorithmes, structures de données, probabilités, sécurité et performances.
Ressource centrale pour C2 : formaliser un problème sous contraintes, choisir une méthode de résolution (programmation linéaire, recherche opérationnelle), comparer les résultats et justifier la solution retenue.
Cadre pour raisonner sur l'incertitude et les comportements moyens. Permet d'évaluer des scénarios, de modéliser des événements aléatoires et de comparer des stratégies sous hypothèse d'incertitude.
Revoir la façon de programmer : complexité algorithmique, lisibilité, factorisation, gestion des cas limites. Comprendre pourquoi une solution est plus adaptée qu'une autre dans un contexte donné.
L'optimisation ne concerne pas que le code : la façon dont les services communiquent et dont les données circulent sur le réseau impacte directement la performance globale d'une application.
Les algorithmes cryptographiques introduisent des contraintes fortes (confidentialité, intégrité, authentification). Optimiser signifie ici trouver un compromis raisonné entre sécurité, performance et contraintes métier.
Chaque algorithme sur image doit être réfléchi : filtrage, détection de contours, transformations. L'optimisation porte sur la qualité du résultat, le temps de calcul et la capacité à traiter des données de taille réaliste.
Permet d'appliquer les notions de performance dans un projet global : on y mesure l'impact réel de choix algorithmiques ou architecturaux sur une application complète, pas seulement sur un algorithme isolé.
Modéliser des comportements à l'aide d'automates finis, minimiser des représentations par tables de Nerode, raisonner sur l'équivalence de systèmes. Contribue à la formalisation de problèmes et à la sélection de méthodes adaptées.
Quatre projets illustrent ma progression sur C2 de l'optimisation mathématique formelle à l'amélioration de performances dans des contextes applicatifs concrets.
Ce projet m'a conduit à modéliser des comportements à l'aide d'automates finis : décrire des états et des transitions, vérifier des propriétés logiques (acceptation, complétude, équivalence) et appliquer la minimisation par tables de Nerode.
La compétence C2 se traduit ici par la capacité à représenter un même système sous plusieurs formes automate non déterministe, déterministe, minimal et à raisonner sur les propriétés de chaque représentation pour choisir la plus adaptée au problème.
Ces applications ont d'abord été développées pour être fonctionnelles, puis retravaillées pour améliorer leurs performances et leur robustesse : éviter des requêtes inutiles, clarifier les traitements, mieux gérer les erreurs et sécuriser les entrées utilisateur.
Cette démarche illustre bien C2 : l'optimisation s'est faite à partir d'une base existante, en identifiant les points faibles, en proposant des améliorations ciblées et en vérifiant leur effet sur le comportement global de l'application.
Ce projet m'a confronté à l'impact direct des choix techniques sur la fluidité et la réactivité de l'application. Une scène trop lourde, des calculs mal placés ou une mauvaise gestion des événements dégradent immédiatement l'expérience de rendu.
J'ai dû ajuster la structure du code, limiter les traitements redondants et organiser la logique de rendu pour obtenir un affichage satisfaisant sans sacrifier la qualité visuelle un arbitrage constant entre performance et résultat.
Cette SAÉ m'a conduit à analyser le code PHP d'une application sous l'angle de la sécurité : identification des vulnérabilités, évaluation de leur impact et proposition de corrections argumentées selon le cadre RGPD.
La compétence C2 apparaît dans la capacité à évaluer les enjeux de sécurisation du code et des données (AC3) : choisir les bons algorithmes de hachage, limiter la surface d'attaque et justifier chaque mesure par rapport au risque qu'elle couvre.
C2 m'a appris à sortir de la logique du code qui fonctionne pour entrer dans celle du code qui convient.
Le projet d'optimisation mathématique a rendu concrète une idée souvent abstraite : la même solution peut être correcte et pourtant inadaptée, selon qu'elle consomme trop de temps, trop de mémoire, ou qu'elle ne passe pas à l'échelle. Formaliser un problème avant d'écrire la moindre ligne de code est devenu un réflexe que j'applique maintenant systématiquement.
Les automates m'ont quant à eux appris à raisonner sur des représentations à voir qu'un même système peut s'exprimer sous plusieurs formes, et que choisir la bonne forme est déjà en soi un acte d'optimisation. Cette façon de penser par équivalence et par minimisation a influencé ma manière de concevoir des structures de données dans mes projets Symfony.
Point fort
Analyse et formalisation de problèmes avant l'implémentation je suis à l'aise pour modéliser un problème, comparer des approches et justifier mes choix de façon argumentée.
Point de progression
L'évaluation de l'impact environnemental et sociétal (AC4) : je mesure encore peu les coûts énergétiques de mes solutions et je n'ai pas formalisé de démarche éco-conception dans mes projets.