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 or are familiar enough with the topic to have a basic understanding of concepts such as processes, threads, file system implementation, and mutual exclusion.
You have taken an undergraduate course in networking or Internet Technology or are familiar enough with the topic to have a basic understanding of concepts such as local area networks, wide area networks, ethernet, routing, and packets.
You can program proficiently in the Java. 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 this 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 a Linux 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 difficulty programming then I recommend that you drop the course.