Recommended background knowledge
You should already have most of the background knowledge and skills listed in this section before enrolling, at least to some degree.
Missing parts can, and should, be acquired after enrollment, by filling the elective course slots by those covering the missing knowledge, and/or by working harder.
We expect you to have basic knowledge of
- functional and distributed programming paradigm
- different operating systems and network protocols
- distributed file systems and databases
- client-side web programming
- data modeling and query languages
Read carefully the additional background knowledge below which depends on the curriculum you choose.
Choose your curriculum
-
These are the mandatory requirements common to all students of this curriculum
- Basic knowledge of
- Calculus as in
M. Oberguggenberger, A. Ostermann, Analysis for Computer Scientists: Foundations, Methods, and Algorithms, Springer-Verlag - Linear Algebra as in
https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/ - Algorithms and Data Structures as in
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-spring-2008/
- Calculus as in
- Software development with one (preferably two) mainstream languages
- Fundamentals of
- Data Bases
- Computer Organization and Architectures
Please check the additional, track dependent, requirements below.
Artificial Intelligence
In addition, we assume you are familiar with:
- fundamentals of the theory of probability
- fundamentals of multivariate calculus
- client-side web programming (HTML5, CSS, Javascript)
If you are unfamiliar with these additional topics, we may ask you to dedicate your elective units to bridge the gap.
Data-centric computing
Further mandatory requirement:
- experience with different programming paradigms (functional, concurrent, event-driven, and distributed)
- fundamentals of software development: tools and best practic
- principles of data modeling and query languages
In addition, we assume you are familiar with:
- operating Systems
Practice with different operating systems (i.e., scripting, configuration, and installation) - distributed Systems
- basics knowledge of network protocols (i.e., TCP/IP, stack)
- concepts of distributed file systems and databases
- basics of server-side programming
- client-side web programming (HTML5, CSS, Javascript)
If you are unfamiliar with these additional topics, we may ask you to dedicate your elective units to bridge the gap.
Visual computing
In addition, we assume you are familiar with:
- affine geometry in 2D and 3D
- fundamentals of multivariate calculus
- client-side web programming (HTML5, CSS, Javascript)
If you are unfamiliar with these additional topics, we may ask you to dedicate your elective units to bridge the gap.
- Basic knowledge of
-
During interviews, we will ask candidates technical questions to check that they have the needed background knowledge and skills, and formal verification of prospective students will take place at their arrival in Italy.
Programming
- good familiarity with programming in C and in an object-oriented programming language (e.g. C++, C#, Java). We strongly suggest you grade your skills on https://www.codewars.com/. You should be able to consistently solve challenges of level 6 (and 7 and 8, which are easier)
- knowledge of main data structures (arrays, queues, lists, trees, graphs, hash tables) and their operations
- designing and implementing (coding, debugging, and fixing) small systems of about ten user-defined data types and some hundreds of LOC
Suggested material:
- The C programming language, 2nd Edition
B. W. Kernighan, and D. M. Ritchie.
Prentice-Hall - Programming principles and practice using C++
B. Stroustrup. Addison-Wesley Professional, 2008 [Parts I, II, and III]
Addison-Wesley Professional, 2008 [Parts I, II, and III] - Introduction to algorithms,
T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein;
MIT Press [Chapters 3 (asymptotic notations), 7 (sorting), 10 (elementary data structures), 11 (hash table), 12 (binary search trees), 22 (elementary graph algorithms)] - Data structures and algorithms
Alfred V. Aho, John E. Hopcroft, and Jeffrey Ullman
Prentice-Hall
Database management systems
- data models and Entity-Relationship diagrams
- data definition, data manipulation and queries in SQL
- programmatically querying databases
Suggested material
- Database Management Systems, Raghu Ramakrishnan and Johannes Gehrke. McGraw Hill Higher Education, 2003, Third Edition. ISBN: 0-07-246563-8
[Chapters 1, 2, 3, 4, 5, 8, 12, 16,19] - Minicourses@Stanford
Networking and operating systems
- familiarity with a POSIX environment (e.g. bash shell and GNU/Linux)
- file system from the user viewpoint: the ability to use the shell to browse a file system and perform basic operations on files and directories
- basic understanding of TCP, UDP, IP, structure of the internet
Suggested material
The Linux Command Line William Shotts [Part I]
Computer Networking: A Top-Down Approach, James Kurose and Keith Ross. Pearson [First chapters]
Computer architectures
Basic understanding of functionality, organization, and implementation of computer systems (CPUs, buses, memory hierarchies, machine and assembler code).
Suggested material
- Computer Organization and Design: The Hardware/Software Interface
David A. Patterson and John L. Hennessy
Elsevier
If you are unfamiliar with these additional topics, we may ask you to dedicate your elective units to bridge the gap.
Networking and operating systems
- OS fundamentals: separation between user level and OS kernel, resource virtualization (virtual memory, hypervisors), file system implementation basics, access control
- concurrency, race conditions, synchronization primitives, deadlock
- ISO/OSI networking stack: TCP, UDP, IP, the distinction between session/presentation/application levels, sockets, routing
Suggested material
Computer Networking: A Top-Down Approach
James Kurose and Keith Ross
Pearson
Basics of web development
- basics of website structure, web applications and hosting, HTTP protocol
- hands-on with the following technologies:
- HTML5 and CSS
- client-side and server-side programming to develop dynamic websites
- interaction with a remote back-end database
Suggested material
- https://www.coursera.org/learn/web-development (HTML, CSS, JavaScript)
- https://www.coursera.org/learn/web-applications-php (HTML, CSS, PHP and SQL)
- Robin Nixon, Learning PHP, MySQL, JavaScript, CSS & HTML5. O’Reilly Media
Fundamentals of computer security
Principles of modern cryptography: perfect secrecy, computational security, block ciphers, stream ciphers, message authentication codes, hash functions, public-key encryption, digital signatures and certificates
Suggested material
- Introduction to Modern Cryptography,
Jonathan Katz and Yehuda Lindell
CRC Press
Fundamentals of software engineering
Basic principles of Software Engineering, such as, software processes, requirements, principles of software design, software architectures, UML basics, design patterns, basic aspects of software quality assurance (e.g., categories of software testing)
Suggested material
- Object-Oriented Software Engineering: Practical Software Development Using UML and Java (2nd edition).
- Timothy Lethbridge and Robert Laganiere [First 11 chapters (11 restricted to 11.1 and 11.2)]