The course is organized around the following themes:
In this course, there will be three types of class periods, one each week, in the following order:
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
earlier that week. You will be given a series of ungraded
practice exercises that you will solve in class using a combination of
paper and computer. The instructor and TA will be there to provide
assistance. If you are done early you can
either leave, or ask for additional exercises. Lab attendance is mandatory.