Books to Read for Prospective Computer Science Students
My exams are over so now I’m looking towards next year. If you’re a prospective Computer Science student doing the same thing, you may be looking for ways to prepare. My general advice would be that you’ll have plenty of time to study all the detailed aspects of the field while doing the course, so until you start, you can look at things on a more abstract level.
University reading lists (some of which are publicly accessible) are good places to start, although the ‘list’ I received from Warwick had only one very gentle suggestion, accompanied (as I recall) with a reassurance that we were not required or expected to do any prior reading. At Warwick, Computer Science is taught without assuming prior knowledge, but the course moves quickly, so having it may give you a head start for a term or so at best.
With that said, I have some suggestions of books I read (or wish I read) before starting my course.
The New Turing Omnibus: 66 Excursions In Computer Science
This was definitely on another university’s reading list, and with good reason. It acts as a cross-sectional overview of a lot of important Computer Science topics, ranging from Huffman codes to the Mandelbrot set, and finite automata. The content can be a little hard to penetrate, and is not meant to be even slightly comprehensive in any of the fields it touches, but it does cover a lot of ground in one tight package.
I strongly suggest completing the exercises for any chapters you find especially interesting. It keeps things abstract, so you have to make a small leap to take the algorithms to actual implementations. I implemented a Huffman coding scheme and a Mandelbrot fractal visualiser based on the relevant chapters, which is why they stood out enough in my mind for me to mention them above!
I’m intending to give this one another look, since there was a lot I didn’t really understand the first time.
The C Programming Language
Programming language-focused books will generally come in one of two varieties: Technical reference manuals and introductory tutorials. The version of C that existed when this book came out was so small and simple that it is able to act as both (with the language reference at the back creating an early, informal, standard for the language), within a reasonably compact package.
The main body of the book takes you through a hands-on introduction to using the language to solve problems. This is the best way to learning a programming language, as opposed to trawling through a list of features with meaninglessly abstract examples.
Learning C is highly useful for all programmers; on a trivial level, its syntax directly inspired contemporary languages such as Java and C#. Explicit pointer and memory management is hard, but makes it easier to understand the behaviour and design decisions of later languages, notably including the distinction between copying by value and by reference. I would strongly recommend The C Programming Language as the way to learn C (possibly after a 30-minute online tutorial).
How to Think Like a Mathematician
The maths you need to know for Computer Science at university includes a lot of concepts which my A-Level course didn’t address. This book (which is, as of writing, the third item on the Cambridge Mathematical Reading List) covers significant portions of this, including predicate logic and set theory. It also has plenty of exercises, which may be useful to keep yourself in practice over the summer holidays.
Gödel, Escher Bach: an Eternal Golden Braid (GEB)
This was the only book recommendation I received from Warwick that was specifically related to Computer Science. It isn’t strictly a Computer Science book (the author being a physicist by background) but it covers concepts that are deeply fundamental to computing, including formal systems, recursion, and the relationship between notation and meaning.
I’m only a little way through it now, but if you have any interest in more theoretical aspects of computing, especially programming languages, I would strongly suggest giving it a look.