The course is organized around the following themes:
In this course, there will be three types of class periods:
Problem solving lectures are listed below with a blue
background. They will look at Computer Science problems from a
mathematical perspective, emphasizing an abstract, logical,
understanding of problems and solutions. You will rarely see a
line of code in these lectures.
Programming techniques lectures are listed with a green
background. They serve two purposes: first they introduce some
advanced, but language-independent, programming concepts (e.g.,
polymorphism and modularity); second they expose you to a
functional programming language, Standard ML. Here, we will use
the abstract problem solving techniques you have learned in the blue
lectures and the advanced programming concepts to solve real problems.
Lab sessions are listed with a gray background. Labs
have the purpose of reinforcing the notions introduced in
lecture. You will be given a series of practice exercises that you
will solve in class. Most will be programming exercises, but there
will occasionally be paper-based exercises. The instructor and TA
will be there to provide assistance. Each lab has a threshold: you
get 1 point if you reach this threshold, and 0 points otherwise. If
you are done early you can either leave, or ask for additional
exercises. Lab attendance is mandatory.