Computer Science
Master course (2 years)

Recommended background knowledge

The background knowledge required to proficiently attend our Master depends on the curriculum you will choose.

Choose your curriculum

These are the mandatory requirements common to all students of this curriculum

Please check the additional, track dependent, requirements below.

Choose your track

In addition, we assume you are familiar with:

  • Fundamentals of theory of probability
  • Fundamentals of multivariate calculus
  • Client-side web programming (HTML5, CSS, Javascript)

If you are not acquainted with these additional topics, we may require you to fill the gap by either choosing Topics in Computer Science as elective unit or a specific activity in the Additional Useful Knowledge unit.

Further mandatory requirement:

  • Data modeling and query languages

In addition, we assume you are familiar with:

  • Programming
    Experience with functional and distributed programming paradigms
  • Operating Systems
    Practice with different operating systems and network protocols
  • Distributed Systems
    • Basics knowledge of network protocols (i.e., TCP/IP, stack)
    • Concepts of distributed file systems and databases
  • Client-side web programming (HTML5, CSS, Javascript)

If you are not acquainted with these additional topics, we may require you to fill the gap by either choosing Topics in Computer Science as elective unit or a specific activity in the Additional Useful Knowledge unit.

Further mandatory requirement:

  • Programming
    • Experience with different programming paradigms (functional, concurrent, event-driven, and distributed)
    • Fundamentals of software development: tools and best practice

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 not acquainted with these additional topics, we may require you to fill the gap by either choosing Topics in Computer Science as elective unit or a specific activity in the Additional Useful Knowledge unit.

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 not acquainted with these additional topics, we may require you to fill the gap by either choosing Topics in Computer Science as elective unit or a specific activity in the Additional Useful Knowledge unit.

During interviews, we will ask candidates technical questions to check that they have the needed background knowledge and skills, and a formal verification of prospective students will take place at their arrival in Italy.

Mandatory prerequisites

  • Good familiarity with programming in C and in an object-oriented programming language (e.g. C++, C#, Java). We strongly suggest you to 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
  • 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
  • Familiarity with a POSIX environment (e.g. bash shell and GNU/Linux)
  • File system from the user viewpoint: 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]

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 not acquainted with these additional topics, we may require you to fill the gap by either choosing Topics in Computer Science as elective unit or a specific activity in the Additional Useful Knowledge unit.

Additional prerequisites

  • 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, distinction between session/presentation/application levels, sockets, routing

Suggested material

  • 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

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

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)]

Students 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.