Resources
All kinds of resources useful for the course, from physical books to virtual websites. If you find something good out there, please tell us about it so we can add it here.
Books
There are lots of useful books for this course, but none are required. You're all grown up and you can take a look at some books in a store or online and make your own choice. Here are a few suggestions:
- G. Michael Schneider, Judith L. Gersting: Invitation to Computer Science, 3rd edition, Course Technology, 2006. [Buy] (This is the Java version, there's also a C++ version.)
- Behrouz A. Forouzan: Foundations of Computer Science, Course Technology, 2002. [Buy] (I used this as a text book in 2005 but it's not perfect.)
- J. Glenn Brookshear: Computer Science: An Overview, 10th edition (!), Addison Wesley, 2008. [Buy] (Looks pretty decent and has a long history of improvements, decent Amazon reviews too.)
Note that many of these books are available in earlier editions from online resellers, often much cheaper than the current edition and with very little loss in terms of content. I will use some material from the following book, but it's probably not the best choice for a first CS book:
- A. K. Dewdney: The New Turing Omnibus: Sixty-Six Excursions in Computer Science, Holt Paperbacks, 1993. [Buy]
Since we'll do some Python programming in the second half of the course, I wanted to point out this useful (and concise!) reference for the language:
- Mark Lutz: Python Pocket Reference, 3rd edition, O'Reilly Media, 2005. [Buy]
There are also much longer Python books, but I can't recommend one since I have not ever read one so far. :-) There are some further Python links below.
Notes
Here are some links to the more theoretical side of computer science:
- Miguel A. Lerma: Mathematical Foundations of Computer Science, Northwestern University, 2005. (Excellent notes as far as I can tell, and much more than we need.)
- Raul Rojas: A Tutorial Introduction to the Lambda Calulus [PDF], 1997. (Wonderful tutorial, covers everything we need and a little more.)
Here are some links to MIPS/SPIM information:
- Bradley Kjell: Programmed Introduction to MIPS Assembly Language (Very detailed, lots of general computer architecture background as well.)
- Jan Wätzig: MIPS Reference Card [PDF] (Useful to have everything about MIPS on one page.)
- James Larus: Assemblers, Linkers, and the SPIM Simulator [PDF] (Very complete reference to all things MIPS and SPIM, including how assemblers and linkers work. Excerpted from Computer Organization and Design: The Hardware/Software Interface.)
Here are some links to Python information, roughly in the order in which they should be read:
- Magnus Lie Hetland: Instant Hacking (Python for complete programming noobs.)
- Magnus Lie Hetland: Instant Python (Python for people with some programming experience.)
- Guido van Rossum: Python Tutorial (The official tutorial from the language designer, aka the "benevolent dictator for life".)
Exams
Here are some old exams for practice. On average I like my questions quite a bit, so I tend to ask them again and again. But every now and then I add a new twist, so be prepared!