Advanced Programming and AI Coding

Academic Year 2026/2027 - Teacher: VINCENZA CARCHIOLO

Expected Learning Outcomes

Expected Learning Outcomes

The Advanced Programming and AI Coding course provides integrated training in three areas: algorithms, advanced C++ programming, and AI-Assisted Coding. It equips students with the theoretical knowledge and practical skills required to address complex computational problems and develop modern, efficient software solutions.

With regard to algorithms, the course provides the knowledge needed to design, analyse, and evaluate efficient algorithms using techniques such as recursion, divide and conquer, dynamic programming, and greedy approaches. The main advanced data structures and methodologies for computational complexity analysis will also be explored, enabling students to identify the most appropriate solutions for different classes of problems.

In advanced C++ programming, students will acquire skills in developing robust and efficient software applications, with emphasis on memory management, generic programming, error handling, concurrency, and communication between processes and threads. Particular attention will be devoted to techniques for designing and implementing high-quality software in accordance with modern development practices.

With regard to AI Coding, the course will introduce the main Artificial Intelligence tools and techniques that support software development. Students will learn to use AI systems for automatic code generation, debugging, testing, and application optimisation, while developing the ability to critically assess their outputs, reliability, security, and limitations of use.

By the end of the course, students will therefore be able to design and analyse algorithms, implement advanced software solutions in C++, and effectively integrate Artificial Intelligence tools into the development process, adopting an informed and professional approach to software engineering.

Knowledge and Understanding

·   knowledge of the main programming paradigms and the related software development methodologies;

·   understanding of the criteria and techniques used to analyse algorithm efficiency and evaluate execution times;

·   knowledge of the main algorithm design techniques, including divide-and-conquer, recursive, dynamic programming, and greedy approaches;

·   knowledge of the main sorting algorithms and their performance characteristics;

·   knowledge of fundamental and advanced data structures and their use in solving computational problems;

·   knowledge of memory management techniques and the related models for resource allocation and deallocation;

·   knowledge of program translation and compilation techniques;

·   knowledge of methodologies and tools for error and exception handling;

·   knowledge of Artificial Intelligence techniques and tools for code generation, debugging, testing, and optimisation;

·   understanding of the principles, opportunities, and limitations of AI-Assisted Coding in the modern software development process.

Applying Knowledge and Understanding

·   analyse and evaluate the computational complexity of algorithms, identifying their time and space efficiency;

·   select and apply the most appropriate algorithmic techniques to solve specific computational problems;

·   identify and use the most suitable data structures according to application requirements and required performance;

·   design, implement, and verify algorithms using the methodologies learned during the course;

·   develop software applications in C++, applying principles of modularity, reuse, and code quality;

·   effectively use mechanisms for memory management, concurrency, and communication between processes and threads;

·   apply error-handling techniques to create robust and reliable software;

·   use Artificial Intelligence tools for automatic code generation, debugging, testing, and software optimisation;

·   integrate AI-Assisted Coding tools into the software development process, critically evaluating their benefits, limitations, and impact on productivity and code quality.

Making Judgements

·   critically assess the suitability of an algorithm and/or data structure in relation to the characteristics of a specific computational problem;

·   compare alternative algorithmic solutions, identifying trade-offs among efficiency, scalability, memory consumption, and implementation simplicity;

·   independently select the most appropriate programming techniques and data structures according to application requirements;

·   evaluate the quality, correctness, and maintainability of programs developed in C++, adopting good software design and development practices;

·   critically analyse different strategies for memory management, concurrency, and error handling, identifying the most effective solutions in different application contexts;

·   evaluate the performance and reliability of a software application through appropriate testing and debugging activities;

·   consciously select and use Artificial Intelligence tools to support software development, assessing their advantages, limitations, and areas of application;

·   critically analyse code generated by AI-Assisted Coding tools, verifying its correctness, security, efficiency, and compliance with design requirements;

·   form independent judgements on whether Artificial Intelligence tools should be integrated into the development process, taking into account technical, ethical, quality, and software security aspects.

Communication Skills

By the end of the course, students will be able to:

·   use accurately and appropriately the technical language relating to algorithms, data structures, advanced C++ programming, and AI-Assisted Coding techniques;

·   describe and discuss the characteristics, performance, and limitations of algorithms, data structures, and software solutions using appropriate scientific terminology;

·   effectively communicate the design and implementation choices made in the development of algorithms and software applications, both in writing and orally;

·   interact with computer science specialists using the technical vocabulary of software engineering and Artificial Intelligence applied to programming.

Learning Skills

By the end of the course, students will have developed:

·   the ability to independently learn and explore new algorithmic techniques and programming paradigms;

·   the ability to continuously update their skills in response to developments in software technologies, programming languages, and Artificial Intelligence-based tools;

·   the ability to locate, understand, and use technical and scientific documentation relating to algorithms, data structures, advanced programming, and AI-Assisted Coding;

·   the skills required to pursue further studies in computer science and software engineering with a high degree of autonomy, as well as professional activities requiring the analysis, design, and development of complex software systems.

Course Structure

The course is delivered through lectures, complemented by practical examples, exercises, and discussion sessions designed to promote understanding and further exploration of the topics covered.

Teaching activities include the analysis of algorithmic problems, the design and implementation of software solutions in C++, and the use of Artificial Intelligence tools to support code generation, debugging, testing, and optimisation.

If the course is delivered in blended or distance-learning mode, the necessary organisational and methodological changes may be introduced, while preserving the learning objectives and content set out in this syllabus.

The principal teaching method consists of lectures aimed at providing the fundamental theoretical knowledge and all relevant syntactic elements, together with exercises proposed by the lecturer to develop students’ ability to solve problems, apply knowledge, and use development environments and methodologies.

The lecturer also assigns individual exercises consisting of problems that students must solve independently and that are subsequently reviewed or discussed in class.

Required Prerequisites

  • • concept of an algorithm; definition and characteristics of a programming language; basic data structures;
  • • knowledge of basic computer architectures and related issues;
  • • basic knowledge of software engineering;
  • • knowledge of procedural and object-oriented programming paradigms;
  • • knowledge of the C and Java programming languages;
  • .  elements of discrete mathematics and mathematical analysis.


Detailed Course Content

Part 1: Algorithms

·   Fundamentals: introduction to algorithms and their representation; execution times; algorithmic techniques; sorting and order statistics; linear-time sorting.

·   Data structures: elementary data structures; hashing; binary search trees and red-black trees.

·   Advanced design and analysis techniques: dynamic programming and greedy algorithms.

·   Advanced data structures: augmenting data structures; B-trees.

Part 2: The C++ Language

·   Fundamentals of C++: classes, objects, pointers, references, and memory management.

·   Object-oriented programming: encapsulation, inheritance, polymorphism, and code reuse.

·   Function and operator overloading, dynamic object creation, and the design of extensible software.

·   Templates, container classes, and use of the Standard Template Library (STL).

·   Exception handling, parameter passing, return values, and the development of robust and efficient applications.

Part 3: AI Coding

·   Introduction to AI-Assisted Coding and language models for programming.

·   Tools for generating code from natural-language specifications and prompt engineering techniques.

·   Use of Artificial Intelligence for debugging, testing, and automatic documentation generation.

·   AI-assisted code refactoring and optimisation techniques.

·   Critical evaluation of AI-generated code: quality, security, reliability, and integration into the software development process.

Textbook Information

[T1] Introduction to Algorithms. Fourth Edition. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. McGraw-Hill, 2022.

[T2]  Thinking in C++, Vol 1 Thinking in C++, Bruce Eckel

[T3] Dispensa fornita dal docente

Learning Assessment

Learning Assessment Procedures

Students are required to develop a project assigned by the lecturer and to take an oral examination following the discussion of the project.

Students must complete a project-assignment request form containing information on the basis of which the lecturer will assign the project.

The request must be submitted during the teaching period, and the assigned project may be presented within the academic year.

The project deliverables, consisting of the source code and report, must be submitted through the Microsoft Teams portal by the deadline agreed when the project is assigned.

The project must be developed by groups of two students. Individual projects will be permitted only in duly justified cases.

The examination consists of two parts, both held on the same day.

The first part concerns the discussion of the completed project; the second consists of a discussion covering the entire course syllabus.

If the project is not presented, the examination will cover only the theoretical part of the syllabus. In this case, the final grade may not exceed 28/30

Examples of frequently asked questions and / or exercises

Examples of Frequently Asked Questions and/or Exercises

Available on Microsoft Teams.