- Docente: Enrico Giampieri
- Credits: 6
- SSD: FIS/07
- Language: English
- Moduli: Enrico Giampieri (Modulo 1) Nico Curti (Modulo 2) Alessandra Merlotti (Modulo 3)
- Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2) Traditional lectures (Modulo 3)
- Campus: Bologna
- Corso: Second cycle degree programme (LM) in Physics (cod. 9245)
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)
Computational infrastructures and resources. Relational Databases. Data management: formats, duplication, manipulation and reduction. File systems. General concepts of: Big data, data analytics, machine learning, deep learning, artificial intelligence, computational algebra systems and applications to deep learning.
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
Reading material available in a public repository, and free online resources to focus on speficic topics among those presented in class.
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 evaluated on a programming project.
This project needs to be hosted on a public repository.
The student is free to choose the programming language of the project.
Accepted control version systems are git and fossil.
The evalaution method is the following:
clarity of the repository commit history (6 point)
clarity and completeness of the documentation and source code (12 point)
presence and executability of test routines (12 point)
Optionally, the evaluation will be improved on the basis of the following topics:
Contribution to open source projects (up to 6 points)
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