You must understand the basics of files, directories, creating and editing files, printing, compiling and loading programs, and using make . Kernighan and Pike cover these topics at the appropriate level. You must be able to send electronic mail and browse course materials using a World-Wide Web browser. Your programming experience should include work with dynamically allocated data structures and with recursive functions. You should be very comfortable writing recursive functions in the language of your choice, as well as proving that such functions terminate .
Some students spend many, many hours thrashing out homework assignments.
This course uses unusual programming paradigms, and the techniques you are accustomed to may not be much help. Loop invariants and termination conditions as they apply to imperative programs. Preconditions and postconditions for functions. Termination conditions for recursive functions. Representation invariants and abstraction functions for abstract data types.