8.8

5 Resources

This page will list resources that might be useful for those students wishing to learn more about the topics covered in CS 600. These resources tend to be books or longform developments online. There are a great many shorter Web tutorials, blog posts, and videos online, with a considerable variation in quality. Be careful about relying on these. Use your judgment, and check facts across multiple sources. Wikipedia pages on most technical subjects are likely to do more damage than good; they are probably best used by looking for high-quality links in their reference sections. Some CS courses have online materials, which you can access with a URL of this form: http://www.student.cs.uwaterloo.ca/~cs251 (changing the last three digits as appropriate). But some courses have their materials hidden inside the LEARN learning management system, accessible only to registered students.

The textbook "Computer Organization and Design", by David Patterson and John Hennessy, has been used in our course of the same name for CS majors (CS 251) since I chose it for this purpose nearly twenty years ago. It goes into more detail about the design of processors and their instruction sets. The main architecture discussed is an older and simpler one, which has the advantage of improving clarity, but the disadvantage of less immediate applicability.

A more up-to-date and detailed textbook (with broader coverage) is "Computer Systems: A Programmer’s Perspective", by Randal Bryant and David O’Hallaron, developed for the undergraduate CS programme at Carnegie-Mellon University. This book focusses on the characteristics of contemporary systems. If I were to redesign CS 251 today, this book would be at the top of my list, but it can be overwhelming, especially for those new to the subject, and it contains far more material than needed for the courses that follow CS 600.

The two textbooks commonly used in our algorithms and data structures courses for CS majors (CS 240 and CS 341) are "Algorithms" by Robert Sedgewick and "Introduction To Algorithms" by Cormen, Leiserson, Rivest, and Stein. I did not choose to use them when I recently taught CS 240, and I would not choose them for CS 341 either, but they are widely known as standard references. The series of data structures and algorithms textbooks by Mark Allen Weiss are a reasonable choice as well.

Our operating course for CS majors (CS 350) uses the free online textbook "Operating Systems: Three Easy Pieces", by Remzi and Andrea Arpaci-Dusseau, available here. (The three pieces are virtualization, concurrency, and persistence.) Our networks course for CS majors (CS 456), uses the textbook Computer Networking: A Top-Down Approach, by James Kurose and Keith Ross. Once again, these are likely overkill for CS 600 students, but have more than enough detail if you want or need more depth.

The current offering of CS 631, one of the courses that CS 600 is preparing you for, has materials available here. Be warned that the slides do not capture the full lecture experience, that the lectures and materials may be revised to some extent for upcoming offerings, and that the instructors may be different. But this will give you some sense of what you are headed for.

CS 680, the other course that CS 600 is preparing you for, varies somewhat with the instructor, but one set of materials is available here. The same warnings given above for CS 631 apply here also.