Voici les principaux apprentissages que j’ai pu maîtriser au cours de ce projet :
Compréhension et analyse de la complexité algorithmique
J’ai appris à identifier les fonctions critiques de notre programme en mesurant leur temps d'exécution, puis à analyser leur complexité (notamment dans notre implémentation récursive initiale). Cette capacité d’analyse est essentielle pour juger si une solution est viable à grande échelle.
Application de techniques d’optimisation
En mettant en œuvre la programmation dynamique, j’ai acquis une méthode concrète pour transformer un algorithme inefficace en une solution performante. J’ai également pu expérimenter différentes structures de données (ArrayList) pour améliorer l’accès et le stockage.
Évaluation et validation des performances
J’ai compris l’importance de mesurer objectivement les performances d’un programme à chaque étape du développement. L’utilisation de tests m’a permis d’appuyer mes choix techniques avec des preuves mesurables.
Ce projet m’a aussi permis de travailler sur plusieurs composantes transversales essentielles pour progresser dans le domaine du développement logiciel :
Esprit critique et remise en question
Optimiser un programme, c’est avant tout remettre en question une solution qui fonctionne, mais qui n’est pas optimale. Ce projet m’a entraîné à ne pas m’arrêter au fonctionnement correct du code, mais à viser une qualité supérieure, notamment en matière de performances.
Curiosité technique et autonomie d’apprentissage
J’ai été amené à chercher des ressources en dehors du cours (tutoriels, articles, documentation Java) pour comprendre certaines techniques d’optimisation. Cette démarche m’a permis de gagner en autonomie et de compléter ma formation de manière active.
Collaboration et communication technique
Travailler en binôme a nécessité de bien communiquer nos idées d’optimisation, de débattre de nos choix, et de maintenir un code clair et compréhensible par les deux membres de l’équipe. Cette expérience m’a permis de renforcer ma capacité à travailler efficacement en équipe, même sur des sujets complexes.