The goal of CSE 201 is to introduce students to the C++ programming language, and the object-based view of software design. C++ is one of the most widely-used programming languages in the world, especially for system-level programming. Much of its power derives from its use of objects, packets of data and functionality that model things and concepts in the real world.

The goal of CSE 201 is to introduce students to the C++ programming language, and the object-based view of software design. C++ is one of the most widely-used programming languages in the world, especially for system-level programming. Much of its power derives from its use of objects, packets of data and functionality that model things and concepts in the real world.

- Teaching coordinator: Jordan Delorme
- Teaching coordinator: Pierre Eustache
- Teaching coordinator: Mohammed Hawari
- Teaching coordinator: Sergio Mover
- Teaching coordinator: Stéphane Redon
- Teaching coordinator: Fabio Roda
- Teaching coordinator: Demian Wassermann

Algorithms are at the heart of all computation. Building on the algorithms the introduced in CS103, this course provides a solid foundation in modern algorithmics. Students develop a deeper knowledge of the fundamental algorithms, an understanding of how they work, and an appreciation of how to implement them efficiently. They also learn how to reduce other problems related to these fundamentals.

Algorithms are at the heart of all computation. Building on the algorithms the introduced in CS112, this course provides a solid foundation in modern algorithmics. Students develop a deeper knowledge of the fundamental algorithms, an understanding of how they work, and an appreciation of how to implement them efficiently. They also learn how to reduce other problems related to these fundamentals.

- Teaching coordinator: Eric Fusy
- Teaching coordinator: Amaury Pouly
- Teaching coordinator: Bruno Salvy

Logic and Proofs (CSE 203) is an introduction to logic, a science that deals with the principles of validity of demonstration. Its goal is to familiarize students with formal methods for representing arguments and reasoning about them. This encompasses propositional calculus, first-order logic, and deduction systems, as well as the related technologies (e.g. automated provers, proof assistants) for building mechanized proofs. No prior knowledge in logic is required

Logic and Proofs (CSE 203) is an introduction to logic, a science that deals with the principles of validity of demonstration. Its goal is to familiarize students with formal methods for representing arguments and reasoning about them. This encompasses propositional calculus, first-order logic, and deduction systems, as well as the related technologies (e.g. automated provers, proof assistants) for building mechanized proofs. No prior knowledge in logic is required

- Teaching coordinator: Benjamin Smith
- Teaching coordinator: Pierre-Yves Strub
- Teaching coordinator: Benjamin Werner

Machine learning is an increasingly important area, and it has provided

many of the recent advances behind applications of artificial intelligence.

It is relevant to a plethora of application domains in science and industry

- including in finance, health, transport, linguistics, media, and biology.

Lectures will cover the many of the main concepts and algorithms. We will

cover in some degree all the main paradigms of machine learning: supervised

learning (regression, classification), unsupervised learning, and

reinforcement learning. Among many learning algorithms we will look at:

least squares, logistic regression, k-nearest neighbors, neural networks

and deep learning, decision tree inducers, kernel methods, PCA, k-means

clustering, and Q-learning. In the labs, we will implement many of these,

and investigate their use in different applications. Programming will be

done in Python with scientific libraries such as numpy and scikit-learn.

The main grading component is a team project, as well as several in-class

tests.

- Teaching coordinator: Jérémie Decock
- Teaching coordinator: Adrien Ehrhardt
- Teaching coordinator: Pierre Eustache
- Teaching coordinator: Pawel Guzewicz
- Teaching coordinator: Jesse Read
- Teaching coordinator: James Brice Scoggins

This course investigates the design and organization of computers at their lowest level. This encompasses computer hardware, and also the operating systems that provide an interface between most programs we write and use with the underlying machine and its network.

This course investigates the design and organization of computers at their lowest level. This encompasses computer hardware, and also the operating systems that provide an interface between most programs we write and use with the underlying machine and its network.

- Teaching coordinator: Timothy Bourke
- Teaching coordinator: Sergio Mover
- Teaching coordinator: Francesco Zappa Nardelli

This course introduces different concepts in automata theory and formal languages, including formal proofs, deterministic and non-deterministic automata, regular expressions, regular languages, context-free grammars and languages, and Turing machines.

This course introduces different concepts in automata theory and formal languages, including formal proofs, deterministic and non-deterministic automata, regular expressions, regular languages, context-free grammars and languages, and Turing machines.

- Teaching coordinator: Quentin Guilmant
- Teaching coordinator: Emmanuel Haucourt
- Teaching coordinator: Sergio Mover

During this course, your teaching staff will be accompanying you in discovering how to conceive, and construct, “networked systems”.

That implies, of course, discovering how the net works (pun intended), what a protocol is, what a system is, and what the different acronyms that you might encounter really means: TCP/IP, SMTP, NAT, NATP, etc. It also implies writing programs which communicate over the Internet — who knows, maybe you will be getting the impulse to starting the next Google or FaceBook during this course?

This course will consist of 2 parallel activities, through which your teaching staff (which you can see to the right) will accompany you:

- Basic lectures, which introduce key technological concepts for conceiving network systems
- Lab Exercises, which will take you "from neophyte" to a competent networker, and which will teach you how to write communicating programs, and have them talk to each other across the Internet.

Lectures and lab exercises will (typically) alternate ; homework will be an ongoing activity for you during the course - and, unsurprisingly, the final exam will be the final activity at the very end of the course.

- Lectures serve to provide an abstract "programmers overview of computer network principles and architectures", and will cover topics such as:
- How does the Net Work?
- Network Programming
- Network Configuration
- Components of a Computer Network
- The Domain Name System
- NAT, NAPT, ...
- ...
- Lab Exercise Sessionsserves to give you practical experiences in computer networking - in particular, but not exclusively, in how to write programs that communicate over the network. Each lab exercise session will happen in a computer room, and will be structured as follows:
- Quizzes are (graded) events, during the first 15 min of each lab exercise session, and will cover the material covered in lectures(s) since the previous lab exercise session. These quizzes serve to give you both a motivation for revising the material from previous lectures, as well as to allow you to gauge your level of understanding well in advance of the final exam.
- Hands-on networking, which will have you either work on a tutorial, or an assignment.
- Tutorials serve to help you acquire a certain set of skills, in a very guided step-by-step fashion. This may be, for example, how to write a program that communicates over the network, or how to set up a small computer network.
- Assignments are (graded) more independent and less guided activities, where you will be told what the end-result of your work should be, but not be given a step-by-step tutorial to follow. While you will be working independently, of course your teachers will be present to help you in your design, and implementation, of a communicating system. Assignments will be graded.
- Homework is what you do between lab exercise sessions - and what we expect you to do is to study the material from the lectures and to finish the assignments, that have been given as part of the lab exercise sessions. This serves to ensure that you get a chance to encounter all possible "difficulties" in a setting, where you will have a chance to (at the next lab exercise session) discuss them with your teachers, and resolve them with their help, before handing in your assignment for grading.
- The Final Examis, in part, a way to evaluate what you have retained from the course, and to give you a final grade. However more significantly, it is also there to aid your revising of the course material, and thus to reinforce your learning process. The final exam will be a multiple-choice questionnaire, and will - in a nutshell - be a longer version of the quizzes that you have seen during the lab exercise sessions. Thus, if you've prepared continuously for the weekly quizzes, if you've done well in those, and you review the course material diligently, then you should be well prepared also for the final exam.

__Evaluation:__

Your final grade for this course will be made up from three components:

- Final exam (50% of your final grade)
- 20 multiple-choice questionnaire "on computer"
- Covering the entire course syllabus
- Graded /20
- Weekly quizzes (25% of your final grade)
- Max 15 min (timed) at the very start of each lab exercise session
- On the subjects treated in the lectures since the last lab exercise session.
- Combined grade /20
- Graded Assignments (25% of your final grade)
- Homework == Extended versions of your work done during the lab exercise sessions
- For each assignment, you will demonstrate your code to a teacher + submit
- Combined grade /20

__Language:__

English

During this course, your teaching staff will be accompanying you in discovering how to conceive, and construct, “networked systems”.

That implies, of course, discovering how the net works (pun intended), what a protocol is, what a system is, and what the different acronyms that you might encounter really means: TCP/IP, SMTP, NAT, NATP, etc. It also implies writing programs which communicate over the Internet — who knows, maybe you will be getting the impulse to starting the next Google or FaceBook during this course?

This course will consist of 2 parallel activities, through which your teaching staff (which you can see to the right) will accompany you:

- Basic lectures, which introduce key technological concepts for conceiving network systems
- Lab Exercises, which will take you "from neophyte" to a competent networker, and which will teach you how to write communicating programs, and have them talk to each other across the Internet.

Lectures and lab exercises will (typically) alternate ; homework will be an ongoing activity for you during the course - and, unsurprisingly, the final exam will be the final activity at the very end of the course.

- Lectures serve to provide an abstract "programmers overview of computer network principles and architectures", and will cover topics such as:
- How does the Net Work?
- Network Programming
- Network Configuration
- Components of a Computer Network
- The Domain Name System
- NAT, NAPT, ...
- ...
- Lab Exercise Sessionsserves to give you practical experiences in computer networking - in particular, but not exclusively, in how to write programs that communicate over the network. Each lab exercise session will happen in a computer room, and will be structured as follows:
- Quizzes are (graded) events, during the first 15 min of each lab exercise session, and will cover the material covered in lectures(s) since the previous lab exercise session. These quizzes serve to give you both a motivation for revising the material from previous lectures, as well as to allow you to gauge your level of understanding well in advance of the final exam.
- Hands-on networking, which will have you either work on a tutorial, or an assignment.
- Tutorials serve to help you acquire a certain set of skills, in a very guided step-by-step fashion. This may be, for example, how to write a program that communicates over the network, or how to set up a small computer network.
- Assignments are (graded) more independent and less guided activities, where you will be told what the end-result of your work should be, but not be given a step-by-step tutorial to follow. While you will be working independently, of course your teachers will be present to help you in your design, and implementation, of a communicating system. Assignments will be graded.
- Homework is what you do between lab exercise sessions - and what we expect you to do is to study the material from the lectures and to finish the assignments, that have been given as part of the lab exercise sessions. This serves to ensure that you get a chance to encounter all possible "difficulties" in a setting, where you will have a chance to (at the next lab exercise session) discuss them with your teachers, and resolve them with their help, before handing in your assignment for grading.
- The Final Examis, in part, a way to evaluate what you have retained from the course, and to give you a final grade. However more significantly, it is also there to aid your revising of the course material, and thus to reinforce your learning process. The final exam will be a multiple-choice questionnaire, and will - in a nutshell - be a longer version of the quizzes that you have seen during the lab exercise sessions. Thus, if you've prepared continuously for the weekly quizzes, if you've done well in those, and you review the course material diligently, then you should be well prepared also for the final exam.

__Evaluation:__

Your final grade for this course will be made up from three components:

- Final exam (50% of your final grade)
- 20 multiple-choice questionnaire "on computer"
- Covering the entire course syllabus
- Graded /20
- Weekly quizzes (25% of your final grade)
- Max 15 min (timed) at the very start of each lab exercise session
- On the subjects treated in the lectures since the last lab exercise session.
- Combined grade /20
- Graded Assignments (25% of your final grade)
- Homework == Extended versions of your work done during the lab exercise sessions
- For each assignment, you will demonstrate your code to a teacher + submit
- Combined grade /20

__Language:__

English

- Teaching coordinator: Philippe Chassignet
- Teaching coordinator: Thomas Clausen
- Teaching coordinator: Juan-Antonio Cordero-Fuertes