- Docente: Enrico Giampieri
- Credits: 6
- SSD: PHYS-06/A
- Language: English
- Moduli: Enrico Giampieri (Modulo 1) Nico Curti (Modulo 2) Alessandra Merlotti (Modulo 3)
- Teaching Mode: In-person learning (entirely or partially) (Modulo 1); In-person learning (entirely or partially) (Modulo 2); In-person learning (entirely or partially) (Modulo 3)
- Campus: Bologna
- Corso: Second cycle degree programme (LM) in Physics (cod. 6695)
-
from Sep 18, 2026 to Dec 21, 2026
Learning outcomes
At the end of the course the student will learn the basic concepts of programming and modern scientific computation, as they are currently used in the Applied Physics field. He/she will have an understanding of the major software development techniques and strategies and an understanding of the various computational frameworks, database, data maintenance and collection. The student will be able to solve advanced problems in scientific software design that will be developed as small group projects addressing real word problems in the Applied Physics field.
Course contents
MODULE 1:
Styles and standards of programming. Software development and design. Techniques and paradigms of programming. Programming languages. Interpreted and compiled languages. Object Oriented Programming. Functional Programming. Strenght, weaknesses, domains of application and metodologies of variuos programming languages (commonly used in modern physics). The example of python, applications to multi-language environments. How to write, debug, document, share and maintain a software project (software versioning, testing, life-cycle modeling, software maintenance, selected software engineering methods and tools)
Introduction to the use of generative AI in programming: objective, approaches, and ethics of their use.MODULE 2:
Advanced training on code optimization techniques, focusing on three key areas: code vectorization, parallel computing, and integration of multiple programming languages. Students will learn how to improve the performance of their programs through vectorization, maximizing CPU efficiency to execute operations on multiple data simultaneously. The module will also explore parallel computing techniques, introducing concepts and tools for distributing the workload across multiple cores or machines, increasing efficiency and reducing execution times. Finally, the integration of different programming languages will be covered, showing how to combine the features of various languages to optimize specific parts of the code. By the end of the module, students will be able to apply these techniques to create high-performance software suitable for intensive computing contexts.
MODULE 3:
Data pipelines and snakemake, random number generators, ordinary differential equation integration and sensitivity analysis, stochastic process simulation, Markov chains for text generation, DNA assembly using De Bruijn graphs.
At the end of the module the student will learn random-based and graph-based algorithms to simulate physical systems and address real word problems in the Applied Physics field. Moreover, the student will learn how to handle different types of data and automate their analysis using workflow management tools such as snakemake.
Readings/Bibliography
Suggested Boo (non compulsory): Effective Computation in Python, O’Reilly
Reading material available in a public repository, and free online resources to focus on speficic topics among those presented in class.
All the reading material is indexed (and available as download were possible) in the course website: https://unibodifabiophysics.github.io/programmingCourseDIFA/
Teaching methods
The course will use frontal lessons, with active partecipation from the students.
During classes the students will be guided in the implementation and practice of the discussed concepts.
Optional seminars will be organized to focus on specific topics of interest.
Assessment methods
Students will be assessed in an oral examination based on a programming project.
The topic of the project is open, provided that it complies with the guidelines discussed in class and described in the examination syllabus.
The project must be submitted the day before the exam and must be provided in a public Git-based repository, such as GitHub or GitLab.
The repository must be used consistently throughout the entire development of the project.
The project will be assessed on the basis of:
-
clarity of the repository structure and quality of the code;
-
clarity and completeness of the documentation and organization of the source code;
-
presence, completeness, correctness, and executability of a test routine.
The complexity of the code is not an assessment criterion, but the user-created code must have a minimum level of complexity in order to allow the student’s competence to be evaluated.
Data analysis pipelines are an acceptable project, provided that they can be set up in a way that is compatible with the requirements of the exam, particularly with regard to the completeness of the tests.
Graphical components, such as plotting and user interfaces, do not need to be tested, but they must not contain computational logic.
The exam will consist of a 10-minute presentation of the project, in which the student will explain the approach used for the three topics listed above, followed by a 10-minute discussion of the project itself.
An exam awarded a grade of 30 is considered to involve:
-
a complete, well-organized, and well-structured project;
-
clear competence in the tools used for implementation;
-
the ability to discuss and justify the design choices made.
Students with specific learning disorders (DSA), temporary disabilities, or permanent disabilities are advised to contact the relevant University office in good time (https://site.unibo.it/studenti-con-disabilita-e-dsa/it ). The office will be responsible for proposing any accommodations to the students concerned. These accommodations must in any case be submitted, at least 15 days in advance, for approval by the instructor, who will assess their appropriateness also in relation to the learning objectives of the course.
Use of generative Artificial Intelligence (AI)
With regard to the assessment of learning, the exam consists of one part that involves substantial use of AI, such as problem solving and content generation, and a compulsory critical analysis component.
Teaching tools
Course notes, available on public repositories, and open source projects used as teaching examples.
Links to further information
https://unibodifabiophysics.github.io/programmingCourseDIFA/
Office hours
See the website of Enrico Giampieri
See the website of Nico Curti
See the website of Alessandra Merlotti