A non-CS colleague asked me to recommend readings that would help non-CS people understand CS/SE/Coding people. In addressing her question I realized that "CS books" are not a good place to start, that the shared culture of CS/SE/Coding includes many other signifiers.
There really isn't any single book that every computer scientist would be familiar with, and this list overlaps significantly with other "geeky" subcultures.
In bold are my top choices for things to read if you are a non-CS person looking to understand how CS people see themselves.
These are all very readable for non-CS folks.
- "The Hitchhiker's Guide to the Galaxy," Douglas Adams. Almost everyone I spoke to, and almost every list I read online, included this.
- Either "Snow Crash" or "Cryptonomicon," both by Neal Stephenson. Both of these novels make computer science the core of the dramatic action.
- The online comic strip XKCD.com
- "Godel, Escher, Bach," by Douglas Hofstadter. Hofstadter makes the link between computability, art, and music in a way that seems to please computer scientists.
- "Alan Turing: The Enigma," by Andrew Hodges. Turing is considered the father of modern computer science, and until recently this book was the only reasonable biography. He was a war hero and a genius, but persecution (due to homosexuality) drove him to suicide.
- "Jabberwocky," by Lewis Carroll.
(Thanks to Mike Nahas for this idea)
- M.C. Escher prints
- The number "42"
- Small programming language jokes (usually in BASIC). e.g. http://img437.imageshack.us/img437/7439/bscap0001gc.jpg
Probably readable by any educated person.
- "The Mythical Man-Month," Fred Brooks. A classic text of software engineering. The essays should be comprehensible to anyone that has worked in a corporate environment.
- "Code," by Petzold.
- "Hackers: Heroes of the Computer Revolution," by Levy.
- "The Pragmatic Programmer," by Hunt and Thomas. Might be a bit hard for non-programmers.
- "The Cathedral and the Bazaar," by Eric S. Raymond.
- "Agile Software Development," by Robert C. Martin.
- "Introduction to Algorithms," by Cormen, Leiserson, Rivest and Stein. Almost every computer scientist learns algorithms from this book. Usually referred to as "CLR," "CLRS" or "the Big White Book."
- "The Art of Computer Programming," by Knuth. This is a 4-volume set, and it was one of the most influential works on computer science for late boomers, and early gen X. Usually referred to as "Knuth."
- "Principles of Compiler Design," by Ullman. Usually called the "dragon book" by those in the know, because it has a dragon on the cover.
- Either "Introduction to the Theory of Computing" by Sipser, or "Introduction to Automata Theory, Languages, and Computation" by Hopcroft and Ullman. Both of these books cover the same ground, and explain Alan Turing's important work on uncomputability (Turing proved that there are some easily described computational problems that computers CANNOT solve).
- "The C Programming Language" by Kernighan and Ritchie. Usually called "Kernighan and Ritchie" or just "K&R."
- "Design Patterns," by Gamma, Helm, Johnson and Vissides.
- "The Little Schemer," by Friedman.
I don't know quite what to make of this one. Current computer scientists wouldn't have read it, but those in the Ruby community seem to love it.