8.15

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. Do not use AI summaries offered by search engines, and beware of AI-generated pages, which often dominate the first page or two of search. Use your judgment, and check facts across multiple sources, preferably textbooks and monographs, academic Web sites, reputable journals and conference proceedings, and professional societies (ACM, IEEE). Wikipedia pages on most technical subjects are at least correct, but the quality of the writing varies considerably, and they can be unbalanced (paying too much attention to something that is a particular favourite of the person editing the entry). 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.