Instructor: Adam Dingle
Programming 2 will build on our knowledge from Programming 1 and Introduction to Algorithms. The course has several goals:
We will learn the C# language and expand our knowledge of object-oriented programming. We’ll study features shared by C# and other modern languages, such as static typing, classes, inheritance, interfaces, generics and exceptions. We will also study the C# collection class hierarchy and will learn to build our own collection classes. (We will not attempt to cover every feature of C# 10 or go deeply into its class library; for that, you can take NPRG035 Programming in C# Language, offered in the winter term.)
We’ll study various algorithms and programming techniques including combinatorial recursion, dynamic programming and game-playing algorithms.
We’ll learn about event-driven programming and graphical interfaces, and will discuss how to build larger programs using object-oriented design.
If time permits, we may also discuss other topics such as regular expressions, recursive-descent parsing, multithreaded programming, and/or writing interpreters.
The weekly lecture takes place every Monday from 9:00 – 10:30 in room S5.
There are three tutorial sessions:
every Monday from 10:40 – 12:10 in room SW2 (teacher: Jiří Šejnoha)
every Monday from 14:00 – 15:30 in room SU2 (teacher: Jiří Šejnoha)
every Tuesday from 14:00 – 15:30 in room SW2 (teacher: Nese Günes)
Martin Koutecký teaches a mentoring session every Wednesday from 15:40 – 17:10 in room S11.
Adam Dingle holds office hours every Friday from 13:00 – 14:00 in room S510.
To successfully complete this class, you must:
Complete a number of programming exercises through the semester, which your tutorial teacher will assign weekly. You can submit your solutions to ReCodEx. You will need to earn at least 70% of the possible points for ReCodEx exercises. Any points that you earn over 85% (up to a maximum of 15%) will be applied as bonus points to your exam score. For example, if your ReCodEx score is 90%, then you will have a 5% exam bonus.
Write a program in C# as a semester project. Your program should accomplish something that is interesting, and should be more substantial than your semester project for Programming 1. It should be written in an object-oriented way, making good use of classes and other features we have learned in this course. A typical project for Programming 2 might be 300-500 lines long. Here are some project ideas. Please send your tutorial teacher a project proposal by Monday, May 15th. A first working version of your project (in Nese Günes's tutorial only) is due by Tuesday, August 15th. A final version of your project is due by Sunday, September 10th.
Take an exam at the end of the semester.
Regularly attend the lectures and tutorials.
Michaelis and Lippert, Essential C# 8.0 (Addison-Wesley, 2020)
Joseph Albahari, C# 10 in a Nutshell (O'Reilly, 2022) (also at ebooks.com)
Cormen et al, Introduction to Algorithms, Third Edition (MIT Press, 2001)
C# Language Reference (Microsoft)
.NET API Reference (Microsoft)
This is a rough plan for this class; it will probably evolve as the semester goes on.