Curriculum “Foundations of Software”

06 java eclipse

Objectives/Vision

This track is designed to train students in the rigorous design and analysis of complex software systems, with a focus on abstract modeling, formal verification, and the systematic development of correct, secure, and efficient software. At its core, the track treats software engineering as both a scientific and practical discipline—balancing foundational theory with hands-on implementation.

Students will explore formal methods for specifying, modeling, and verifying software artifacts, learning to ensure functional correctness, reliability, and security within modern ecosystems. The track reflects the growing industrial adoption of automated proof assistants and verification tools, echoing past shifts toward type systems and interface contracts in software development.

Through a carefully structured sequence of core and elective courses, the track addresses the scientific and engineering challenges of software construction over advanced digital infrastructures, including multiprocessors, embedded systems, distributed platforms, and emerging computational paradigms. Core topics such as advanced programming, compilation, static analysis, software verification, and programming logics are complemented by elective courses in areas ranging from distributed algorithms to quantum computing and machine learning.

Laboratory-based learning is a key aspect of the track. Students will engage in real-world projects and gain practical experience with advanced and evolutionary tools and methodologies used in both academia and industry. This blend of theory and application prepares graduates to lead innovation in software development and tackle complex challenges in diverse technological domains.

Graduates of the Foundations of Software track acquire advanced skills for designing, analyzing, and verifying complex software systems. Their strong grounding in formal methods, program analysis, and system-level development makes them ideal candidates for roles in high-assurance software development, secure systems engineering, and performance-critical applications.

Career opportunities

Career opportunities span major ICT companies—such as Google, Microsoft, IBM, and others—where rigorous software engineering practices are essential. Graduates are also well prepared for roles in public organizations, research labs, and companies developing software for distributed systems, embedded platforms, or emerging computing technologies.

Graduates are well prepared for careers in top-tier tech companies (both national and international) or to pursue Ph.D. programs in Computer Science or related fields.

Study plan

The current structure of the Software track has been redesigned to specifically focus on formal methods, program correctness, and abstract modeling. Core courses emphasize the theoretical foundations—such as program semantics, logical reasoning, and static analysis—through subjects like Models for Programming Paradigms, Program Analysis, and Software Verification. These skills are increasingly essential in a context where code is often generated or assisted by generative AI and must be validated for reliability, safety, and intent alignment—by human beings.
The track aims to develop the ability to reason about and understand complex programming patterns. The foundational component is not separated from practice: dedicated courses are designed to experimentally apply the principles taught in the theory-oriented classes. Foundational knowledge in algorithmics remains part of the cultural background of the track, but has been moved to the elective pool to allow for a more focused exploration of formal reasoning and software verification.

First year

Semester 1

CFU

Semester 2

CFU

Models for programming paradigms (*) 9 Compilation Techniques (*) 9
Advanced Programming 9 Program Analysis 6
Group: SW elective 9 cfu 9 Group: SW elective 9 cfu 9
Group: Free choice 9
27 33

(*) Note that:

  • Models for programming paradigms replaces Principles for software composition
  • Compilation Techniques replaces Languages, compilers and interpreters

Second year

Semester 3

CFU

Semester 4

CFU

Software Verification: Principles and Techniques 9 Software Verification Laboratory 9
Group: SW elective 6 cfu 6
Group: SW elective 6 cfu 6
Group: SW elective 6 cfu 6 Thesis 24
27 33

(*) Note that:

  • Software Verification: Principles and Techniques: this course will not be offered in the academic year 2025/26. It will replace Software validation and verification that is instead active in the academic year 2025/26.
  • Software Verification Laboratory: this course will not be offered in the academic year 2025/26. It will replace Laboratory for innovative software that is instead active in the academic year 2025/26

Group: SW electives (9 CFU)

Advanced Databases (Sem. 2)
Advanced Software Engineering (Sem. 1)
Algorithm Engineering (Sem. 1)
Algorithm Design (Sem. 2)
Computational Mathematics for Learning and Data Analysis (Sem. 1)
Data Mining (Sem. 1)
Machine Learning (Sem. 1)
Mobile and Cyber-Physical Systems (Sem. 2)
Parallel and Distributed Systems: Paradigms and Models (Sem. 2)
Peer to Peer Systems and Blockchains (Sem. 2)

Group: SW electives (6 CFU)

3D Geometric Modeling & Processing (Sem. 1 )
Accelerated Computing (Sem. 1)
Algorithmic Game Theory (Sem. 2)
Artificial Intelligence Fundamentals (Sem. 1)
Bioinformatics (Sem. 2)
Business Process Modelling (Sem. 1)
Competitive Programming and Contests (Sem. 1)
Computational Models for Complex Systems (Sem. 2)
Distributed Algorithms (Sem. 1)
Foundations of Computing (Sem. 2) (not offered in a.y. 2025/26)
Information Retrieval (Sem. 1)
Introduction to Quantum Computing (Sem. 2)
Scalable Distributed Computing (Sem. 1)
Social and Ethical Issues in Computer Technology (Sem. 2)

Students enrolled before the academic year 2025/2026 can refer to the previous study plan (see the following linked document)

Curriculum description and syllabi for download (PDF)