1. controllo di versione e fossil
    - Installazione python e matlab, ambiente di sviluppo spyder e matlab
    - Altri linguaggi ad alto livello: R, Mathematica/Sage, Scala, Julia
    - Version control, Git and Fossil
    - Documentazione, help, metadati, bug tracking
    - Code correctness, replicability and reproducibility (fixing the random seed)
2. introduzione a python
    - Introduzione a python
    - Interfacce di esecuzione: script, MATLAB-like, notebook
    - Strutture dati dai base: liste, set, dizionari, queue, deque
3. testing e hypothesys
    - test: classical test, property test, regression testing
    -
    -
    - The pain of testing random processes
    - debugging?
4. vettorizzazione e numpy
    - programmazione vettoriale (numpy e matlab)
    - Problemi del calcolo numerico? Overflow, underflow, precision loss, testing per uguaglianza/similitudine
5. Scipy
    - Librerie pre-esistenti (scipy, etc...), non reinventare la ruota
    - Visualizzazione grafica
6. Dataframe e Pandas
    - IO di dati, caricare CSV, excel, scaricare da internet e simili
    - dataframes, tidy data, split-apply-combine (grouping), join, pivot e melt
7. data pipeline e snakemake
    - life cycle of data (raw, source, usage, temporary)
    - file formats: hdf5, csv, json, xml, yaml, ini, etc..
    - Data testing: hashing functions, sanity controls
    - DRY KISS (Don’t Repeat Yourself, Keep It Simple Stupid), remove redundancy from code and data
    - pipeline e make, idempotenza, DAG (directed acyclic graphs)
8. profiling
    - line_profile
    - memory_profile
9. intro ai big data
    - intro to big data: out-of-core algorithm (chunking), sparse matrices, memmapping
    - Semafori, Resource locks (lock files), operazioni atomiche, concurrency and parallel execution

## Argomenti da inserire?

* regex
* comandi di bash
* debugging
* iteratori e generatori
* programmazione funzionale (iteratori, map-filter-reduce)

## Argomenti che non tratteremo
* Interfacciamento con database (SQL)
* Interfaccia con linguaggi di basso livello (Cython)
* Interfaccia con altri linguaggi di alto livello ( R )
* Algebra simbolica (sympy)
* Pacchetti statistici/machine learning
* Design GUI interface
* Esplorazione dati, glueviz
* Generazione automatica di report (docutils, reportlab) e literate programming
* Bash e librerie per interfacciarcisi
* Micro web framework per il reporting (flask, bottle, etc...)