
Books that will Substitute for a Computer Science Degree - fogus
http://www.techoozie.com/10-books-that-will-substitute-a-computer-science-degree/
======
scott_s
Consider that the best athletes in the world have coaches. Even if it's a
cooperative endeavor, it helps an athlete to have someone else to design
training programs, objectively point out weaknesses, push them when the still
have more to give, and pull them back when they've gone too hard.

In theory, the athletes can do this by themselves. In practice, they rely on
their coaches.

In theory, you can read books on your own and hold yourself accountable so
that you grind through difficult problems and projects so that you _actually_
learn the material you read about. In practice, having a teacher to help you
through this process makes you much more likely to succeed.

~~~
jey
This kind of coaching/mentorship is probably found a lot more in a grad
program than undergrad, where it's pretty much nonexistent.

~~~
tokenadult
I get the impression that some undergraduates at some colleges do get good
coaching and mentorship, and I would like to hear from other HN participants
if they know of examples of that.

~~~
kd0amg
_I would like to hear from other HN participants if they know of examples of
that._

/me raises hand

It helps to be in a small department. A friend of mine at another (larger)
school once asked me for advice on how to seek out letters of recommendation.
The problem was that none of the professors knew who he was, since he'd only
been in large lectures and never had the same professor twice. On the other
hand, there were a few professors (2 in math, 2 in CS) who had taught multiple
smaller classes I was in. When I was looking for recommendations, I had a lot
less trouble finding professors who knew my background (including both other
classes I'd taken and areas where I'd gone wandering beyond the scope of the
courses they'd taught) well enough to write them.

Most of the complaints I hear about professors/instructors being unreachable
come from people who never make any serious attempt to reach them (i.e. so few
try and so many complain that those who don't try must be a majority of those
who complain). Beyond that, those who do contact the professor/instructor for
additional mentoring typically aren't the ones who need it most.

------
limist
No mention of SICP - the CS classic that's not only decently rigorous, but
actually inspires the fun and joy of programming, as it promises in its
Preface:

<http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html>

~~~
silentbicycle
There are tons of other books that could be there, too. Any "top X books for
field Y" list is going to be a bit arbitrary, probably telling you as much
about the people who wrote the list as the field itself.

That said, I'd also suggest:

* Concepts, Techniques, and Models of Computer Programming by Peter Van-Roy and Seif Haridi ("CTM"), which covers several different programming approaches. Not about different languages, but their underlying models, and ways in which they can be combined.

* The Art of Prolog, by Sterling & Shapiro - An excellent book on logic programming, using Prolog for exercises. (CTM also touches on Prolog, but this book goes quite a bit deeper.)

* The Lambda papers - <http://library.readscheme.org/page1.html>

* _Lisp in Small Pieces_ by Christian Queinnec ("LiSP"). On implementing Lisp, strongly skewed towards Scheme.

* Paradigms of Artificial Intelligence Programming by Peter Norvig ("PAIP"). AI, problem solving techniques, Lisp practicalities and implementation, Prolog, tons more. Extremely lucid. (I wish it was a hardcover, though.)

* C Interfaces & Implementations by David Hanson - an _excellent_ book on how to design C library APIs, including quite a few useful libraries.

~~~
J_McQuade
Upvoted for the PAIP mention - Any book that can totally shift your conception
of what programs can _do_ within the first three chapters has to be up there.
I know plenty of CS students from university that currently work writing
software (I did Maths) who _still_ look at me like some sort of he-witch
whenever I do or suggest something data-driven as a solution to a problem, but
it's that book that did it for me - it's almost a shame that the only people
of my age likely to have read it are the lone "I code out of interest" types
that are always on the look-out for a good mind-bending.

(the greater shame, of course, is that these people are less likely to find a
satisfying job in the area than their seemingly uninterested CS-grad friends
(grumble grumble))

~~~
silentbicycle
I know what you mean...I did _history_. :) (I've been programming since I was
5 or 6, though.)

If PAIP doesn't get you into data-driven programming, _The Art of Prolog_
definitely will.

------
baddspellar
This is nonsense.

A CS degree includes math, science, a range of CS electives (e.g. database
theory, networking, algorithms) and non-CS electives (e.g. writing,
philosophy).

Plus, you have graded assignments, lab exercises, supplemental papers, and
interaction with teachers and fellow students.

~~~
dustrider
Good point, Formal logic I studied in the phil dept far outstripped the AI
courses at a similar level in CS. The same goes for Linear Algebra and data
mining/IR.

Those two areas, possibly along with linguistics (data mining again), were
much more useful to me than the programming 101 type courses.

~~~
sireat
Strange, Linear Algebra and Formal Logic were part of my CS curriculum.

------
showerst
No mention of CLRS? For shame.

[http://www.amazon.com/gp/product/0262033844/ref=pd_lpo_k2_dp...](http://www.amazon.com/gp/product/0262033844/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=486539851&pf_rd_s=lpo-
top-
stripe-1&pf_rd_t=201&pf_rd_i=0262032937&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=13QJQ1B8HKMKAZFH15ZV)

~~~
jey
Agreed. CLRS > TAOCP.

~~~
weaksauce
yeah for a cs degree equivalent CLRS >> TAOCP as TAOCP is more of a reference
manual on algorithms whereas CLRS is a new way to think about writing
programs. Both have their place in your bookshelf though.

~~~
silentbicycle
Yes, and apparently CLRS's place on your bookshelf is shifted to the right of
TAOCP. :)

Don't forget Okasaki's _Purely Functional Data Structures_, though. CLRS's
coverage of persistent data structures is pretty weak.

~~~
weaksauce
Interesting. I hadn't heard of that one. Is the book much better than the
thesis that he did?

~~~
silentbicycle
The book expands on his thesis. I'd highly recommend it, especially if you
found his thesis interesting.

------
furtivefelon
By the time I hit the second entry, TAOCP, i realized this list is a joke and
save for some really smart people, no one else will gain much from pursing
that book in it's entirety. Much better off with CLRS or even the first part
of Algorithm Design Manual. The list is a classic list of books-i-wish-i-read-
but-never-had-time-to.

------
jmg
G.E.B.? Fun book, yes, but to make a list of 10 books to substitute a
Bachelor's degree in CS? nonsense.

~~~
kd0amg
I'm only about halfway through it, but it does seem like a decent intro to the
math and CS concepts that will be needed for more advanced material. A CS
degree program isn't all senior-level coursework.

------
akshayubhat
The biggest problem with such lists is that unlike novels, academic Books are
rarely read cover to cover.

If you try to read the book cover to cover you will most likely start
forgetting it after few weeks. However when you learn things slowly over few
years and interact with material in multiple ways, such as lectures, reading,
test, internships, labs, group/individual project you are more likely to have
some hint about the material, may be you will remember a lecture or some
project or some lab experience, however in case of just reading a book its
harder to recall.

A good process of learning involves not just you alone but also people around
you who motivate you to stay on the course and offer assessment of your
capabilities. Thus formal classroom education tends to be more useful than an
online one. Though it depends a lot on your school and quality of your peers/
friend circle.

------
pgbovine
what a linkbait article title ... sadly, if a company has a degree requirement
for hiring, then no amount of self-learning can substitute for a lack of an
accredited diploma.

i doubt that a hospital will hire you just because you read all the "books
that will substitute for an M.D."

yes, i know that programming skills can be more easily self-taught than, say,
brain surgery, but as long as companies hire based on degrees, there isn't
really a 'substitute'

~~~
amackera
There are many examples of fantastic hackers with no paper to back it up.
There are also many examples of awful hackers with good marks to back it up.
The truth is in the code.

~~~
dustrider
Absolutely! I once hired a MSc CS grad on a project and he produced some of
the worst code I've ever seen, not even just a code perspective, which to some
degree is understandable, but from a conceptual point of view as well. Some
seriously bad stuff.

That said I still greatly value a CS degree (even a self-study one) simply
because of the fundamentals it teaches. It's not an automatic indicator of
ability, but having that level of understanding makes the difference between
someone that can think conceptually about and around a problem and someone
that has a set number of tools to solve problems with.

I don't think that getting a CS degree is the only way to get that kind of
understanding, but I do think it's one of the easier ways. If you're a hacker
on your own and you've got to trawl through the glut of bad coding books out
there, it's tough to get a good education.

Though I firmly believe that if you're the kind of guy that has gotten that
education without any help then you're probably better than the guy that got
it with help.

I'm firmly in the camp that holds that an education is to educate you and
provide you with skills and tools to operate effectively, not to obtain a
certificate. Holding the certificate is not an indication that you have
actually received an education, the only indication is your ability, ambition
and results.

For what it's worth, I think the majority of the books on the list are must-
reads for anyone in programming, there may be a few better ones (I'm a
Tannenbaum fan when it comes to OS's as an example) and there may be areas
that aren't covered, e.g. usability and CHI (Design of everyday things would
be my suggestion there) and there is suspicious lack of anything web, mobile
or distributed, but if someone internalises these, they'll definitely be
better for it.

------
d4nt
I'd add "Code" by Charles Petzold. It's a sublime step by step guide to
building a computer.

~~~
sanderjd
In my opinion, this book is practically a must-read for _anyone_ living in our
increasingly computing intensive world, not just for aspiring computer
scientists. It has both depth and accessibility, starting with something
familiar in concept to many people (Morse code), and slowly building more and
more ideas toward the final realization of a workable computing machine. Great
book.

------
ja27
I'd add a few that might be a bit dated, but I still think they're still great
today:

Introduction to Algorithms - CLR(S) - other people already suggested this.

The Soul of a New Machine - feels old now, but it's still a fairly well-
written glimpse into real-world (hardware) projects, or at least where we came
from. Ahh, maybe it really is too old now to be that educational, but it's a
good read.

Programming Pearls - I think this book still teaches as much practical
knowledge about the field than you could get in 5-10 years. If you really
"get" everything in here, you should be well on your way to being a super-star
code hacker, if that's what you want to be.

------
Kaizyn
Most of these books are from the ACM Classic Book Series:
[http://portal.acm.org/toc.cfm?id=SERIES11430&type=series...](http://portal.acm.org/toc.cfm?id=SERIES11430&type=series&coll=ACM&dl=ACM)

------
lazyjeff
seems to be lacking a number of cs topics, notably: databases, data
structures, algorithms, machine learning, data mining, and security

~~~
aidenn0
No Discrete math book either. I wouldn't call anybody a "computer scientist"
that didn't have a good grasp of discrete math. Though I suppose you can't
make it through TAOCP without picking up some discrete math.

Also, does anyone else think listing TAOCP as one book is a cop-out?

~~~
Locke1689
It's not even a cop-out, it's just ridiculous. TAOCP is basically a reference
book -- no one actually reads through the entire thing like a textbook. TAOCP
can be a good companion to other things but I wouldn't attempt to read it 1)
in exclusion and 2) as a substitute for a CS degree.

Also, no K&R?? How will you make it through OS design without K&R?

------
namin
It seems that this 'article' is lots of copy-pasting of most of the reviews
from this Amazon user: <http://www.amazon.com/gp/cdp/member-
reviews/A3CC0TO2YD3P5A/>

------
signa11
hmm, nothing on networking or computer architecture, so sad. or would they be
considered a part of a "computer engineering" degree ?

~~~
tmcw
The latter. In my experience, the fundamentals that this list covers are 'the
hard parts' in terms of a certain kind of understanding and sort of
intellectual challenge: most things more 'applied' beyond this point are
taught poorly if at all in CS, and learned more readily in the 'real world.'

~~~
Locke1689
I don't know, at Northwestern you can't pass the Intro to Networking class
without writing TCP, software implementations of link state and vector
routing, and sockets implementation.

Those are just the project sections, there are of course formal exams for the
other fundamentals of networking.

~~~
Retric
Why? That sounds like a complete waste of time to me.

PS: I have a CS degree and I have written a fair amount of low level
networking code, but I have no idea how that helps someone understand
networking on either a practical or theoretical level. But, if you feel it was
in anyway useful I am all ears.

~~~
scott_s
If you can implement it yourself, you understand it at a much deeper level
than if you just read about it. This is why CS students still implement their
own basic data structures (linked lists, hash tables, trees) in the freshmen
and sophomore level classes.

~~~
Retric
In CS how something behaves is far more important than how it's built.

For example one of the most surprising things to me was the fact that all
programs built on top of TCP/IP still need their own messaging format because
a packet can be split in transport. The header information says almost nothing
about the original message sent, just enough information to send a reply up
the chain and rebuild the message.

As to linked lists, the speed that fragment virtual/physical memory is in no
way obvious from their source code. Build one in C vs Java and they behave
vary differently even if the code looks similar.

PS: I really prefer CS projects that require some thought. Quickly sort this
50GB file requires a different mindset than simply, build a linked list
library. IMO, build a linked list library is really a lesson in using pointers
and tells you vary little about data structures.

~~~
scott_s
I don't disagree with anything you said, but most people need the "implement
this data structure" project first so they can understand what they're doing.
Then you can give them a more open-ended project.

------
mark_l_watson
My choices would have been different, with general topics: data structures,
automata theory, programming languages survey, systems programming,
algorithms, network programming, database/datastores, and AI ("Artificial
Intelligence, a Modern Approach").

I have mixed feeling about compiler theory, and left it off of my list. Some
may question including systems programming.

------
forgotAgain
As others have mentioned the affects of a coach cannot be overlooked.

Add in also the benefit of exploring with one's peers in a free environment.

The idea that reading a selection of books is an effective substitute for an
undergraduate education is a damning comment about the state of CS programs.
As an actual effective substitute, no.

------
techbio
This compelled me to take my copy of "Programming Pearls" (by Jon Bentley,
2000, 2nd ed.) from the bookshelf.

Another one that has spent time on my night table is "The Turing Omnibus: 61
excursions in computer science" by A.K. Dewdney. Varied, clever problems in
dazzlingly plain language.

~~~
csl
The Turing Omnibus leisurely covers a broad range of important and often
forgotten topics. It's a great book. It will give you a good overview of CS,
and then you can go deep at your choosing with other books.

I loved the first chapters in Bentley, but then I thought the novelty wore
down. Maybe I'll take a new look at it too.

------
zeteo
The list is at the same time too little and too much. Too little, because it
misses on fundamental subjects like computer architecture and algorithms
(modern algorithms, which are heavily graph-based). Too much because those
books contain lots of in-depth information that is not required, unless you're
really, really passionate about the field. And some parts are simply not very
relevant - e.g., Knuth tells you at length how to implement (in assembly!)
algorithms that are very specialized and you normally draw from a library
(plus the fundamentals of assembly are not exactly the same on today's multi-
core, speculative execution machines).

------
kksm19820117
I wholeheartedly disagree with the recommendation of "Artificial Intelligence,
by Elaine Rich". The book was unreadable in a way that made me want to detest
the subject.

I found the Patrick Winston text a lot nicer.

------
plainOldText
I've always wondered how do you choose the right books to read when you want
to pursue a career on your own. Tough job I guess.

~~~
silentbicycle
You might like this thread on ask.metafilter:
[http://ask.metafilter.com/71101/What-single-book-is-the-
best...](http://ask.metafilter.com/71101/What-single-book-is-the-best-
introduction-to-your-field-or-specialization-within-your-field-for-laypeople)

------
MarkBook
Extending the premise to the ultimate, if you have time to study just one book
and one in which not a single word is wasted it's got to be :

The Elements of Computing Systems: Building a Modern Computer from First
Principles by Nisan and Schocken

------
gexla
Substitute in what way? Can I list all the computer books I have read on my
resume?

------
Confusion
Even if it substitutes for a CS degree, it won't make you a remotely decent
programmer. Without books like Code Complete, The Pragmatic Programmer, The
Mythical Man Month, etc., your code will suck.

------
elai
A typical CS-undergrad set of topics: -How to Program

-Algorithms & Data Structures

-Functional Programming

-State Machines & Computation Classes (NP-Complete, Turing Machines, Regular Languages, etc)

-Complier Construction

-Physical Computer Architecture / ASM

-Operating Systems

-Computer Networking

-Parallel Programming

And then some other recommened topics:

-Database Systems

-2D & 3D graphics

-AI

-Crypto

------
jrockway
Yeah, just do all the exercises in TAOCP and you'll be fine!

------
dminor
The article confuses "degree" with "education".

------
pavs
<http://en.wikipedia.org/wiki/Autodidacticism>

Higher education is over-rated. If you can read and write, there is no reason
why you can't pick up a book and learn something new yourself. Yes, your
mileage may vary in performance, but how is it any different from IRL
education?

~~~
snikolov
The problem is that a lot of people don't learn how to learn until fairly late
in their education. Whatever clarity of thought and healthy skepticism I have
developed, I give most of the credit to the great teachers who challenged me.
It is misguided to tell most high school students to go and learn completely
by themselves. Disregarding the motivation that school brings, someone that
opts instead to study alone in their room runs the risk of fooling themselves
-- the risk of not really getting the point, or not asking the right
questions, or being just plain wrong (for long periods of time) without even
realizing it.

------
joshfraser
I haven't read a single one of those books.

If you're going to substitute anything for a CS degree, just get out there and
build something.

~~~
absconditus
Computer science and software development are not the same thing. This is part
of the problem.

~~~
count
Architecture is not carpentry/masonry/tradecraft. I don't know why so many
people confuse it with computing...

