Cette UE apporte des compétences à la fois formelles et pratiques liées à la compréhension, la conception et la mise en œuvre d'algorithmes. Du point de vue de la compréhension et conception, elle apporte des compétences pour :
- Analyser et décomposer une tâche pour concevoir un algorithme
- Concevoir des algorithmes répondant à un cahier des charges, en choisissant les structures de données adéquates
- Concevoir un algorithme itératif ou récursif adapté à une structure de données
- Dérouler un algorithme ou un code écrit dans un langage quelconque à la main
- Traduire un algorithme décrit formellement dans un langage de programmation
- Identifier et manipuler les représentations des données en machine
- Utiliser les algorithmes classiques, les combiner pour résoudre des problèmes complexes
- Évaluer la complexité algorithmique d’une solution ou d’un algorithme proposé
- Expliquer le modèle d’exécution mémoire d’un programme C et la pile logicielle
- Modéliser des problèmes concrets en des instances de problèmes plus abstraits (codage, logique, graphes)
En ce qui concerne la mise en œuvre pratique via la traduction dans un langage de programmation et son exécution sur une machine, cette UE aspire à permettre de :
- Reproduire, décrire la chaîne d’interprétation ou de compilation et savoir interpréter/compiler une application avec les systèmes de build standards des langages standards
- Résoudre un problème logiciel (erreur à la compilation, à l’exécution)
- Illustrer la bonne exécution d’un programme en programmant les bonnes sorties issues de bons jeux de tests
- Évaluer en pratique les performances d’une solution
Enfin plus généralement, elle apporte des compétences relative au développement d'applications robustes, durables et maintenables, dans le cadre d'un travail en groupe :
- Architecturer un logiciel complexe en définissant le modèle des données et la structure des composants à concevoir ou à utiliser
- Distinguer, comparer, choisir certaines architectures logicielles ou certains design patterns
- Utiliser des composants logiciels existants et les intégrer dans un développement
- Programmer un logiciel implémentant une spécification fonctionnelle et technique
- Assurer la pertinence, la fiabilité et la qualité d’une solution algorithmique ou logicielle
- Lire et analyser une spécification, en tirer une réalisation