I am preparing to graduate high school. Although I do not intend to study computer science in college, I feel like it might be useful to familiarize myself with the theoretical CS concepts taught in academia (eg. algorithms, structures, compilers). Can you recommend books that are either frequently used in current CS curricula or equate what one would learn in a CS curriculum?

Right now, I am planning on buying The C Programming Language, The Algorithm Design Manual, Algorithms + Data Structures = Programs, and Compilers: Principles, Techniques, and Tools.

  • $\begingroup$ re close votes because opinion based-- think its worthwhile (reference) question in that there are only a handful of leading books that are widely used & the voting can also help determine their popularity... $\endgroup$ – vzn Feb 28 '14 at 4:31
  • 2
    $\begingroup$ CS is like dancing. You are unlikely to learn it only by reading books. $\endgroup$ – babou Feb 28 '14 at 8:01
  • 1
    $\begingroup$ There are good books nobody knows and mediocre books with wide use. Also, tastes and needs differ. Best way to find good books is go to a library and peek into many. $\endgroup$ – Raphael Feb 28 '14 at 8:41
  • 1
    $\begingroup$ I don't see why this question is primarily opinion-based! Can you recommend books that are either frequently used in current CS curricula or equate what one would learn in a CS curriculum? Although the background might be. $\endgroup$ – usul Feb 28 '14 at 15:09
  • $\begingroup$ There are many, many resources available on the 'net. Also, which books are useful for you depends quite a lot on exactly what you try to do. To understand the inards of an operating system requires a different set than networking, compilers have their own extensive theory, for numerical methods yet another set is essential. $\endgroup$ – vonbrand Mar 1 '14 at 17:38

For Computer Science, I would recommend you

Computer Science: An Overview 11th J. G. Brookshear.

If you are more interested, you can attend one of the online courses, you can register for free and finish these courses online with exercises. I recommend you one of these:

  • An Introduction to Computer Science from Harvard, more informations you can find here EDX
  • Computer Science from Stanford, more info here

Algorithms, you can find relevant online courses following these books on EDX and Coursera as well. Depends on how much time you have and want to spend on these subjecs, and how deep you want to go.

Algorithms (4th Edition) by Robert Sedgewick and Kevin Wayne


Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein

| cite | improve this answer | |

The theoretical "core" of a CS degree would consist of (1) basic data structures and algorithms, (2) formal languages, automata, complexity, computability.

For the first, "CLRS" is the most-used textbook: http://mitpress.mit.edu/books/introduction-algorithms

For the second, Sipser: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X

On the more "applied" side there is systems, programming languages, and of course experience with coding. Systems includes for instance operating systems and compilers. The dragon book might be a classic but I would guess overkill for what you're looking for. The best way to learn OS or compilers might be to just take a class in it; I'm not sure if there are "canonical" textbooks. For a textbook that hits lots of these basics, though, SICP comes highly recommended and is free online: http://mitpress.mit.edu/sicp/ . If you are interested in learning more programming languages and seeing variety, I would look up "Learn You a Haskell For Great Good" and SICP as mentioned above. For the theoretical side, maybe something like Pierce's "Types and Programming Languages"?

I would not spend time and money on language-definition or tutorial books like "The C programming language". I'd learn and practice programming online instead. Sites like topcoder's algorithms contests, SPOJ, and projecteuler provide good practice and you can find tutorials to get you going.

There is also some mathematics background, but you can go far on very little: linear algebra, calculus, hopefully some practice with probability and combinatorics.

| cite | improve this answer | |
  • $\begingroup$ I'd recommend against SICP. It is an outstanding book, written for/in an outstanding language. But sadly far from mainstream. And "The C Programming Language" isn't "just" a "learn to code in language X" book, it goes far beyond. If you are interested at least a bit in C, it is a must. No other book on C comes close, IMVHO. For the "big picture", Jon Bentley's "Programming Pearls" is an eye opener in more than one area. $\endgroup$ – vonbrand Mar 1 '14 at 17:42
  • $\begingroup$ @vonbrand SICP ... far from mainstream. That is actually a good reason to use it. It teaches fundamentals unencumbered by specific design or theories, and can be adapted to any style. Student have a tendency to believe that whatever they learn is god-given truth. Scheme is agnostic, and that is good for looking at the rest with an open mind. $\endgroup$ – babou Oct 16 '14 at 15:58

Not the answer you're looking for? Browse other questions tagged or ask your own question.