CS 416 Prerequisites

Throughout the course, I will make certain assumptions about your knowledge. In particular, I will assume the following:

  • You have taken an undergraduate course in operating systems and understand basic operating system concepts such as processes, threads, file system implementation, mutual exclusion, process synchronization, and process scheduling.

  • You can program proficiently in the C or C++ programming language. A tutorial that seems pretty good (on casual inspection) on C can be found at http://www.eskimo.com/~scs/cclass/cclass.html

    I learned C eons ago via Kernighan and Ritchie's text. It is still one of my favorites because of its concise nature. It is particularly good if you already know how to program in some language: Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Second Edition , Prentice-Hall, 1988, ISBN 0-13-110362-8, 0-13-110370-9. . For more info on C, take a look at http://www.lysator.liu.se/c/index.html.

    I expect you to have both a command of the language and a clear and concise programming style. My opinions on style can be found in C Programming Style. Rob Pike has useful comments in his Notes on Programming in C document.

  • You can compile and run programs. If you are intimidated by anything longer than a three-page program and have not developed techniques in debugging or functional decomposition, I strongly recommend dropping the class and getting a copy of: Brian W. Kernighan and Rob Pike, The Practice of Programming, Prentice-Hall, 1999, ISBN 0-20-161586-X.

  • You have a rudimentary knowledge of using the UNIX System.

If you are unfamiliar with any of these items, it should not necessarily deter you from taking the course (most are easy to learn) but you may wish to speak with me. If, on the other hand, you feel that you have extreme difficulty programming then I recommend that you drop the course.