Credit Hours: 4 for undergraduates (CS410), 3 for graduates (CS510)
Professors: Mark P. Jones <mpj> & Andrew P. Black <black>
Black's office hours: Monday 16:0017:30, Thursday 10:3011:50
Jones' office hours: Monday 13:0015:00, or by appointment
Teaching assistant: Juncao Li <cs410aph>
TA office hours: Wednesday 16:00–17:00, Thursday 14:00–15:00 at office FAB115-07
This course exposes students to the depth and breadth of modern programming practice, with the goal of making students better programmers. This course is not a "package tour" of programming languages, but an in-depth programming course that teaches students how to use functional and object-oriented programming techniques effectively.
Many of the same concepts and principles apply to both the object-oriented and the functional paradigms, and are indeed fundamental to the activity of programming. These include parametrization, the use of Closures, Polymorphism, Overloading (viewed as implicit parameterization), Types, Recursion in Data Structures, Inheritance, and Compositionality. Underlying all of these concepts is the recognition that the programmer's chief task is to master complexity, and to use their chosen programming language to communicate to the programmers who come after them how they have done so.
Students should have some experience programming in both the functional style, in a language like LISP, ML, or Haskell, and in the Object-oriented style, in a language like C++, Java or Smalltalk. It is not necessary to be a Smalltalk or Haskell expert (although experts are welcome, and will still learn a lot from this course).
After completion of the couse, students will be able to:
The following books are recommended
A programming assignment will be given each week. Students will be expected to complete the assignments and discuss and defend their code in class.
Assignments will described on the course website.