Salta al contenuto principale della pagina

Conoscenze consigliate

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

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.

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

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

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