L’obiettivo principale del corso è quello di fornire agli studenti le capacità di gestire e analizzare dati sperimentali con linguaggi di programmazione ad oggetti.
Il corso fornirà le seguenti conoscenze: principi di base dei linguaggi orientati agli oggetti; Tecniche di programmazione a oggetti; Linguaggio C++; Linguaggio Python; Tecniche di scripting su shell linux (bash); Strumenti per la gestione delle versioni del codice con Git.
Il corso fornirà le seguenti capacità: trasformazione di dataset(s) mediante script Python e/o Bash per successive elaborazioni; Elementi di sviluppo in collaborazione con Git; Analisi e soluzione di problemi di gestione dei dati e analisi con codice orientato agli oggetti; Utilizzo di framework di analisi dati.
Prerequisiti
Sono necessarie le seguenti conoscenze pregresse, fornite dal corso “Laboratorio di Fisica con elementi di statistica e informatica” al primo anno della laurea triennale: principi di programmazione strutturata; Linguaggio C; Elementi di programmazione per l’analisi dati.
Metodi didattici
Lezioni frontali sugli argomenti del programma del corso. Lezioni pratiche in laboratorio, con calcolatore, su C++, Python, Bash e Git.
Verifica Apprendimento
L’esame finale consiste di tre parti: prova scritta con 3-6 domande sugli argomenti del corso per verificare le conoscenze acquisite; Discussione di un progetto di laboratorio assegnato durante il corso e sviluppato dallo studente con il fine di verificare il raggiungimento delle abilità acquisite nello sviluppo di software di analisi dati; Prova orale (eventualmente opzionale) per verificare sia le conoscenze sia le abilità acquisite. Il punteggio massimo per ciascuna parte è 30/30. Il punteggio finale è dato dalla media aritmetica dei tre punteggi parziali.
Testi
Dispense fornite dal docente su argomenti selezionati. Testo di riferimento sul C++ Testo di riferimento su Python; L. Barone, E. Marinari, G. Organtini, F. Ricci-Tesenghi PROGRAMMAZIONE SCIENTIFICA ed Pearson Education; P. R. Bevington, D. K. Robinson DATA REDUCTION AND ERROR ANALYSIS FOR PHYSICAL SCIENCES, 3 ed., Mc Graw Hill; Eventuali altri libri di riferimento suggeriti o da concordare con il docente
Contenuti
Il corso si svolge per 51 ore (6 crediti), suddivisi in 24 ore di lezioni frontali e 27 ore di lezioni pratiche in laboratorio. Il programma svolto è il seguente: Introduzione alla programmazione orientata agli oggetti (OOP) e utilizzo di IDE (Eclipse, XCode, etc…), 3h Linguaggio C++ (12h): Core syntax and types, Arrays and Pointers, Operators, Compound data types, Functions, Control instructions, Headers and interfaces; Objects and Classes, Inheritance, Constructors/destructors, Static members, Allocating objects, Exceptions; Object orientation, Operators, Value, pointers and references, Constness, Functors, Templates, The STL, Useful tools; [C++11 and C++14 opzionale] Generalized Constant Expressions, Range based loops, auto keyword, override and final keywords, non-member begin/end, Initializers, Constructors, Exceptions, Lambdas, Move semantic, pointers and RAII, Concurrency and asynchronicity, Mutexes. Linguaggio Python (6h): Sintassi e utilizzo di Python e iPython; Objects and operators, Numbers, Strings, Lists and looping, Dictionaries, Conditions, Methods, Scripting, Modules. Strumenti utili per la gestione e l’analisi dei dati: script di shell Bash e controllo delle versioni con Git (3h): Navigating and working with Files and Directories, Pipes and Filters, Loops, Shell Scripts, Finding Things, Environmental variables; Setting Up Git, Creating a Repository, Tracking Changes, Exploring History, Ignoring Things, Sharing a repository with others, Collaborating with Pull Requests, Conflicts. Esercitazioni in laboratorio su C++ (10h) Esercitazioni in laboratorio su Pyhton (10h) Esercitazioni in laboratorio su Bash e Git (4h) Esercitazioni in laboratorio sull’utilizzo di framework di analisi dati con C++, Python e Bash (3h)