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. 

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.

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

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 most important concepts and algorithms. We will look at the main paradigms of machine learning: supervised learning (regression, classification), unsupervised learning (clustering, dimensionality reduction, ...), and reinforcement learning. Among many learning algorithms we will look at:

  • least squares regression,
  • logistic regression,
  • k-nearest neighbors,
  • neural networks and deep learning,
  • decision tree inducers and ensemble methods,
  • principal components analysis and auto-encoders,
  • k-means clustering
  • kernel methods
  • Q-learning.

In the lab tutorials, we will implement many of these and investigate their use in different applications, using Python and its scientific libraries such as numpy, scikit-learn, and pytorch.

However the main outcome of the course is to go beyond simple implementation and testing of algorithms, and also study the main mechanisms behind their behaviour and performance. This goal is thus set the student up for  further advanced study in machine learning, and/or a confident development of machine learning solutions in other domains.

This course presents 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.

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.

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