# Intro

28/07/2022 was an important day for me because that day I completed the first step in my higher education career, I obtained a degree in Computer Science at Università degli Studi di Genova.

During these years I faced huge challenges (including a pandemic). It's been a mentally demanding period, with a lot of ups and downs, insomnia, anxiety and sadness, but eventually I met a bunch of cool people all unique in their own way, I am sorry we only had two semesters to see each other IRL, but I feel grateful for the opportunity of meeting them. Thanks Federico, we are very different in many ways and similar in many other. I am not entirely sure I would be here today without you, and thanks Marti, Fabio (F), Lorenzo (Lax), Lorenzo (Andrew), Davide (Scarro), Giorgio (Jojo), Milo, Samuele, Ali, Giacomo (Pede). I hope we may see again in the future,I wish you all the best for your life and more specifically I hope you may have the wisdom necessary to perform the right choices in your life. Sometimes I have been an asshole, sorry for that, I hope you learned something from me (not necessarily what I wanted to share).

And now let me speak some spaghetti 🇮🇹🍝🍕🤌:

Grazie **Eleonora**, per esserci stata anche se ci siamo conosciuti a caso, grazie **Pavo** per avermi dato un letto quando il mio istinto randagio mi portava a scappare da GE per venire a MI. Grazie **Ciacche** per esserci sempre stato, ci siamo sentiti poco, ma so che ci sei sempre. Grazie **Lalla** per avermi sopportato. Grazie **Caro** per essere la zia che mi considera e mi da' forza quando tutto va storto, sei un esempio. Grazie **Davide**, sei il mio amicio preferito, anche se gli orsi sono meglio, grazie per avere sempre messo in dubbio tutto quello che ho detto, le poche volte che mi hai dato ragione ero certo di avere ragione, sei affilato come un cazzo di global. Grazie **Lallo** per essere il fratello boomer con cui memare e per essere l' unico in famiglia con cui parlo davvero, se avessimo instaurato questo rapporto quando vivevi ancora a casa tante cose sarebbero andate in modo diverso, ma non piangiamo sul latte versato. Grazie **Mich**, **G**, **Paolo**, **Marghe**, **Marti**, **Matti** e **Mirko** per esserci stati sempre, barsport 4 ever. Grazie **Kiki** ed **Amedeo**, siete accomunati dal fatto che non piacete alle donne della mia vita (ex e mamma rispettivamente), ma avete dimostrato che avevo ragione io, siete due persone di cuore (Amedeo anche di chiavi inglesi e cattive intenzioni), Kiki anche tu hai avuto la fortuna di farmi da piscologa in momenti particolarmente delicati, grazie.

# Grades Transcript:

## 1° anno

esame | CFU | voto |
---|---|---|

ALGEBRA E LOGICA PER INFORMATICA | 12 | 20 |

ALGORITMI E STRUTTURE DATI | 12 | 29 |

ARCHITETTURA DEI CALCOLATORI | 12 | 30 |

CALCULUS 1 | 9 | 29 |

INTRODUZIONE ALLA PROGRAMMAZIONE | 12 | 30L |

## 2° anno

esame | CFU | voto |
---|---|---|

ALGEBRA LINEARE E ANALISI NUMERICA | 9 | 25 |

ANALISI E PROGETTAZIONE DI ALGORITMI | 6 | 27 |

BASI DI DATI | 12 | 26 |

LINGUAGGI E PROGRAMMAZIONE ORIENTATA AGLI OGGETTI | 12 | 29 |

SISTEMI DI ELABORAZIONE E TRASMISSIONE DELL'INFORMAZIONE | 12 | 30 |

TEORIA DELL'INFORMAZIONE E INFERENZA | 6 | 30L |

## 3° anno

esame | CFU | voto |
---|---|---|

CALCULUS 2 | 6 | 27 |

COMPUTER SECURITY | 6 | 28 |

FONDAMENTI DELL'ELABORAZIONE DI SEGNALI E IMMAGINI | 6 | 28 |

FONDAMENTI DI COMPUTAZIONE QUANTISTICA | 6 | 30 |

FONDAMENTI DI INGEGNERIA DEL SOFTWARE | 6 | 30L |

INTRODUZIONE ALLA DATA SCIENCE | 6 | 27 |

PROGRAMMAZIONE CONCORRENTE E ALGORITMI DISTRIBUITI | 6 | 26 |

SVILUPPO DI APPLICAZIONI WEB | 6 | 30L |

TEORIA DEGLI AUTOMI E CALCOLABILITÀ | 6 | 28 |

Here you can find a course catalog. Have fun, and use this to finally understand the difference between Computer Engineering and Computer Science :)

## Calculus 1

- Definition of derivative as a limit and the rules of differentiation to differentiate functions.
- The graph of a function using asymptotes, critical points, and the derivative test for increasing/decreasing and concavity properties.
- Max/min problems and the use of differentiation to solve them
- Integrals by using the Fundamental Theorem of Calculus.
- Techniques of integration, such as substitution, inverse substitution, partial fractions and integration by parts.

## Architetture dei Calcolatori (Computer Architecture and Organization)

- Main elements of a computer, performances and computer languages, high level language, assembler and assembly language (MIPS architecture)
- A simple ALU model, boolean logic, CPU and control unit
- Memory hierarchies, mass storage memories and circuits
- Interrupts, traps and System Calls

## Algoritmi e Strutture Dati (Algorithms and Data Structures)

- Methods for algorithm analysis: cost criteria, asymptotic notation, complexity analysis of recursive algorithms. Examples of development and analysis of algorithms.
- Sorting algorithms: insertion sort, selection sort, bubble sort, mergesort, quicksort
- Basic data structures: arrays and lists; stacks and queues; dictionaries implemented with lists.
- Dictionaries: implementation with binary search trees and hash tables.
- Trees: indexed and linked representations for binary trees and general trees; depth-first search and breadth-first search of trees.
- Search Trees: Binary search trees, search trees as a data structure for implementing dictionaries, balanced trees.
- Hash tables: collision lists and open addressing.
- Priority queues: implementation with lists and heaps.
- Graphs: definitions, data structures, primitives for querying and updating graphs; graph visits in depth and in width; examples of application of a graph visit algorithms.
- Laboratory: C++ laboratories related to course topics

## Introduzione alla Programmazione (Introduction to Computer Programming)

- Introduction to the course, computational thinking, and programming.
- Programming environments and formal languages.
- Imperative programming: variables and instructions; assignment; input / output; if-then-else; loops; types; arrays; strings; functions; struct; dynamical y al ocating memory (heap); dynamic vectors; linked lists ; recursion and iteration.
- Simple algorithms on sequential data: ordering and search
- Introduction to problem analysis and solution design, with examples.

## Algebra e Logica per Informatica (Algebra and Logics for Computer Science)

- Sets, functions, complex numbers, cardinality, combinatorics
- Algebraic structures, monoids, groups, rings, vectorial spaces,k-algebras, strings
- Heterogeneous algebras
- Introduction to logic
- Syntax of propositional logic
- Semantics of propositional logic: truth tables
- Syntax of first order logic
- Semantics of first order logic: models theory
- Formalization of problems

## Linguaggi e Programmazione Orientata agli Oggetti (Programming Languages and Object Oriented Programming)

- Principles of programming languages: overview, programming paradigms; syntax, static and dynamic semantics, development of a semantics-driven interpreter.
- Object-oriented paradigm (the Java programming language): objects, classes, inheritance and dynamic binding, casting, overloading, exceptions. Advanced features: generic classes and methods, outline on nested classes and lambda-expressions. Practical uses of the standard API, iterator and visitor design pattern.
- Functional paradigm (the OCaml programming language): higher-order and polymorphic functions, polymorphic type inference, currying, functions on lists, user-defined types.

## Sistemi di Elaborazione e Trasmissione dell' Elaborazione (Computer and Communication Systems)

- Introduction to modern operating systems
- Processes and threads; scheduling
- Memory management and virtualization
- File systems
- Computer Security
- Introduction to synchronization, deadlock
- Network technologies and 'internetworking
- Protocol Layers
- Internet stack (from application level to local network)
- Web and HTTP protocol
- File transfer
- Electronic Mail
- DNS protocol
- UDP and TCP protocols

## Algebra Lineare e Analisi Numerica (Numerical Analysis and Linear Algebra)

- Error analysis
- Floating-point numbers and machine precision.
- Inherent error. Estimate for rational functions.
- Algorithmic error.
- Total error.
- Solution of nonsingular linear systems
- Numerical solution of linear systems (direct method of Gaussian elimination).
- Conditioning of matrices.
- Complexity and algorithmic error for the solution of linear systems.
- Other topics in linear algebra: geometric interpretation of vectors and matrices
- Scalar product and orthonormal bases.
- Matrices as geometric linear transformations.
- Null space, range and rank.
- Orthogonal matrices: rotations, reflections, QR factorization.
- Approximated solution of linear systems in the least-squares sense
- Geometric formulation of the problem.
- Normal equations.
- Solution through orthogonalization.
- Interpolation by spline functions
- Definition of interpolating spline.
- Computational procedure.
- Survey of mathematical and numerical properties.
- Other topics in linear algebra: eigenvalues
- Eigenvalues, eigenvectors, eigenspaces.
- Characteristic polynomial.
- Similarity relations and diagonalization.
- Applications.
- SVD and applications to least-squares
- Singular values decomposition (SVD) and relations with eigenvalues.
- Geometric properties of SVD and numerical rank.
- Generalized inverse and conditioning.
- Solution of the least-squares problem via SVD.
- Application to discrete data approximation (smoothing).
- Numerical treatment of eigenvalues
- Numerical properties: conditioning and localization.
- Iterative power method and variants.
- Other numerical methods: similarity reduction to a simplified form, QR method.

## Basi di Dati (Database Management Systems)

- Introduction to DBMS concepts.
- Traditional data models; the relational model and languages.
- SQL language: querying and manipulation of relational datai.
- Entity-Relationship model.
- Logic database design.
- Quality control: normalization.
- Data management inside applications: stored procedures; SQL usage from a programming language, triggers.
- DBMS internals; indexes and query tuning, transactions and access control.
- Physical database design
- Lab: usage of a DBMS.

## Teoria dell' Informazione e Inferenza (Information Theory and Inference)

- Elements of probability theory. Probability of an event, conditional probability, Bayes theorem, discrete random variables, probability distributions, expected values and variance, marginal probability, asymptotic laws..
- Elements of Information Theory. Information and entropy (Shannon). Kraft Mc Millian inequality. Information encoding without noise, Huffman Coding, Arithmetic Coding, Convolutional Encoding
- Elements of inference. Maximum likelihood estimation.
- Bayesian learning. Monte Carlo and Markov chains.

## Analisi e Progettazione di Algoritmi (Algorithm analysis and design)

- Design and analysis techniques, asymptotic notations, correctness and complexity of recursive and iterative algorithms, divide-et-impera, dynamic programming, greedy algorithms.
- Sorting: simple sorts, mergesort, quicksort, heapsort, lower bound for comparison-based sorting algorithms, linear sorts.
- Advanced data structures: heaps, union-find structures.
- Graphs: definitions, representations, visits, topological sorting, strongly-connected components, single-source shortest paths (Dijkstra algorithm), minimum spanning tree (Prim and Kruskal algorithms).
- Theory of NP-completeness: complexity classes, NP-complete problems, approximation algorithms

## Teoria degli Automi e Calcolabilita' (Automata Theory and Computability)

- Alphabets, strings, languages
- Deterministic (DFA) and non deterministic (NFA) finite state automata
- DFA minimization, regular expressions
- Closure properties of regular languages, pumping lemma
- Context-free grammars, derivation trees, ambiguity
- Deterministic and non deterministic push down automata (PDA)
- Closure properties of context-free languages, pumping lemma
- Turing machines, accepted languages
- Undecidability, recursive and recursively enumerable languages, universal language and machine, undecidability of the universal language
- Halting problem
- Undecidable problems on Turing machines, Rice theorem, Church thesis

## Calculus 2

- Improper integrals.
- Sequences and series of functions.
- Functions of several variables, continuity, differentiability, derivative.
- Multiple integrals, change of variables
- Systems of differential equations
- Fourier series

## Computazione Quantistica (Quantum Computing)

- Introduction
- Alternative systems and techniques of computation
- Universal logic gates
- Using 'snooker' as a computation system DNA computation
- Mathematical foundations: complex number, tensor product, unary operators
- Introduction to quantum phenomena
- 1900: experimental results: state superposition, measurements, entangled states
- Qubits as quantum states with two levels. Qubit superposition, qubit state representations on the 'Bloch sphere'
- Applications of unary operators to qubits. Classical logic gates, quantum logic gates, 2-qubits logic gates ("entangling gates"), usage of Pauli matrices to describe logic gates and unary operators
- Quantum information
- Quantum paral elism
- "No-cloning" Theorem
- "Dense coding"
- Quantum teleportation
- Simple quantum algorithms
- Deutch, Deutch-Josa and Simon algorithms
- Quantum cryptography: BB protocol, cryptographic protocols implementations
- Quantum algorithms: "Black Box" algorithm, Grover algorithm

## Computer Security

- Introduction Computer Security
- The concepts of resource, vulnerability, threat, countermeasure, and risk
- Security goals: confidentiality, integrity, availability, ...
- Introduction to Cryptography
- Fundamental concepts (cryptography, cryptanalysis, general cryptographic schema)
- Monoalphabetic substitution ciphers (Caesar cipher)
- Polyalphabetic substitution ciphers (Vigen�re cipher)
- One-time pads (Vernam cipher)
- Transposition ciphers
- Composite ciphers
- Symmetric Cryptography
- Block and stream ciphers
- Feistel cipher structure
- DES and 3DES
- Modes of operation (Electronic Code Book, Cipher-Block Chaining, Stream Ciphers)
- Link vs end-to-end encryption
- The key distribution problem
- Public-Key Cryptography
- Introduction to public-key cryptography
- Introduction to Number Theory
- The RSA algorithm
- Diffie-Hellman key exchange
- Message Authentication and Digital Signatures
- Message integrity and authentication functions (message encryption, message authentication code,cryptographic hash functions)
- Digital signature
- Public Key Infrastructure (PKI)
- PKI components
- Digital Certificates Trust models
- Security Protocols
- Basic notions (protocol execution, assumptions and goals, attacker model)
- Examples of protocols (NSPK, Otway-Rees, Andrew Secure RPC, Denning & Sacco)
- Prudent engineering of security protocols
- Kerberos (architecture, protocol, inter-realm communication, limitations)
- Secure mail (PGP)
- Network Security
- Link Layer: WiFi Security
- Network Layer: IP-Sec
- Transport Layer: SSL/TLS
- Introduction to Firewalls
- Web Security
- Security on the client side (cookies and privacy, HTTP authentication mechanisms)
- Security on the server side (unvalidated input, broken authentication and session management, cross-site scripting, injection flaws, denial of service, ...)
- Secure Programming
- Buffer overflows
- Format string vulnerabilities
- Access Control
- Discretionary vs Mandatory Access Control
- Access control matrix model
- Role-Based Access Control (RBAC)
- Administrative Role-Based Access Control (ARBAC)
- Bell-LaPadula, Harrison-Ruzzo-Ullman, Chinese Wall models
- Cyber Exercise [12h hands on]

## Fondamenti di Ingegneria del Software (Elements of Software Engineering)

- Introduction to the course and to software engineering
- Software development process models, agile methods (eg. Extreme programming)
- Requirements Engineering. Scenarios and use cases
- Design principles and design methods, coupling and cohesion, software architecture, design patterns, refactoring
- The UML: Class diagram, Sequence diagram, State Machine diagram, Activity diagram
- Software Testing: Testing functional / structural and coverage.
- Unit tests, integration, system, acceptance tests and regression tests
- Software evolution and Maintenance

## Fondamenti di Elaborazione dei Segnali e Immagini (Elements of signal and image processing)

- Discrete Fourier Transformation
- Representation and processing of signals through DFT (Discrete Fourier Transform) and FFT (Fast Fourier Transform)
- Representation and processing of images through DFT (Discrete Fourier Transform) and FFT (Fast Fourier Transform)
- Sampling Noise treatment Filters and applications

## Introduzione alla data science (Elements of data science)

- Introduction to Python
- Data collection and management, including pre-processing for typical real-world datasets
- Data analysis: statistical analysis, (foundations of) predictive analysis
- Visualization: GeoPandas, Plotly, NetworkX
- Distributed systems foundations: HPC and Big Data

## Programmazione Concorrente e Algoritmi Distribuiti (Concurrent Programming and distributed algorithms)

- OS-level concurrency & multi-threading
- Concurrent development techniques
- Lock-free synchronization (focus on 'relaxed memory' architectures)
- Standard synchronization techniques: mutexes and barriers
- Memory models and Sequential consistencies
- Pthread, semaphores, monitors and synchronization barriers
- Concurrency in Java
- Threads as objects, fundamental synchronization primitives
- Libraries for High Level Concurrency
- Eclipse and debugging multithreaded code on Eclipse Threads, monitors, semaphores
- Producer-consumer pattern
- GUI, Events and Concurrency
- Swing, Javafx and Concurrency
- Async Tasks in Android (Java and Kotlin)
- Introduction to Distributed Algorithms
- Distributed Programming in Java
- Connection Pool (Connection Caching)
- Client-Server with Java Sockets

## Sviluppo di Applicazioni Web (Web Application Development)

- Static Web pages creation with HTML5 and CSS.
- Server side programming: Dynamic Web page creation using PHP, syntax, data and control structures, objects. Cookies management, access control, session control. Interacting with databases via PHP scripts. Accessing databases with PDO.
- Introduction to XML and JSON.
- Client side programming: Javascript and the Document Object Model specification. Introduction to AJAX and JavaScript libraries.
- The REST (REpresentational State Transfer) architectural paradigm.
- Security, usability and accessibility in Web applications.
- Practical and final project covering al the subjects seen during the semester.