Your Favorite Tech / Eng. / CS Books?
chris_eineke writes "I like to read and to collect good books related to computer science. I'm talking about stuff like the classic textbooks (Introduction to Algorithms 2nd ed., Tanenbaum's Operating Systems series) and practitioners' books (The Practice of Programming, Code Complete) and all-around excellent books (Structure and Interpretation of Computer Programs, Practical Common Lisp). What's your stocking-stuffer book this Christmas? What books have been sitting on your shelves that you think are the best ones of their kind? Which ones do you think are -1 Overrated? (All links are referral-free.)"
The classic IP networking book
As I'm a librarian I'm extremely interested in what people will suggest. The opinion of practitioners is a lot more relevent than that of book reviewers.
Still the standard for programming language books, IMHO. I tell people to work all the way through it, from start to finish, and do every exercise until it works exactly as it should.
C isn't a perfect programming language, by any means -- no language is -- but writing lots of programs in it gives you a feel for the low-level things a computer has to do.
Possibly the most mind-expanding "C++" book ever written, and certainly the most poorly-named. It's all about template programming and will really change how you think about generic programming.
There's also Schneier's "Applied Cryptography" and Norvig's "Paradigms of Artificial Intelligence Programming" and "Artificial Intelligence: A Modern Approach" to satisfy the urge one sometimes gets to skip syntax and write software directly as a parse tree.
I love this book. Many times I run into developers that program the exact same way they learned in school, without ever really knowing why they do things a certain way or question if something can be done better. Effective Java is basically the knowledge that a mid-level and higher developer should have learned codified into book form. The organization is great (broken into topics - you do not need to read from front to back), and has clear and easy to understand examples. It is a great book to move a junior Java developer up to a mid-level Java developer very quickly. It is now available in a second edition that is even better and with more content than the first edition. It is also a Jolt award winner.
My very favorite technical book is Programming Perl, a.k.a. The Camel Book, by Larry Wall et al. It is indeed a rare gem to find a book with such complex technical concepts, that is so much fun to read, you can take it with you on the train commute, or on holiday, and read it from cover to cover.
-dZ.
Carol vs. Ghost
Mythical Man Month. A classic. There are no silver bullets! As true now as then.
Sometimes it's best to just let stupid people be stupid.
Nonlinear Dynamics and Chaos by Strogatz. The one and only book about math that I ever read without ever being bored nor puzzled, and I actually learned something at the end of it.
Victims of 9/11: <3000. Traffic in the US: >30,000/y
"Compilers: Principles, Techniques, and Tools" by Avo, Sethi, and Ullman.
To be fair, I'd like to point out that the 2nd Edition just came out when I picked it up and that's what I'm basing my opinion on. I've never read the 1st Ed (though it has a much cooler cover).
Honorable mentions:
The C Programming Language
Any of Tannenbaum's OS books (I'm kind of partial to the Design and Implementation one that uses Minix as a case study)
Deitel & Deitel's Java book (To be fair, it is good but overpriced if you don't already have to buy it as a textbook.)
It's good. I'm going to have to disagree with you on it being overrated. It's dense and long but it has lots of good things. I've learned a lot, despite only having started reading it recently.
http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1230057946&sr=8-1/
If you're doing oject oriented, there's no better place to start looking when you you're trying to learn good software design. I know, some people say patterns are overused, but they are essential to understanding and designing complex software.
I agree completely. Aside from language reference books (a dime-a-dozen) and the web, I primarily use Mathematics texts books as my primary reference works. Lattice and Category theory are very helpful for understanding database design and algorithms -- an inner join on database tables is join of "sub-tables" in the Dedekind-MacLane completion of the lattice of "sub-tables", for example.
Combinatorics are helpful when analyzing algorithms in general. Category theory and some first order logic (quantifying over categories) gives you a sound and rich theory of types (or you can develop an equivalent one in about a million different ways). Never mind the domain specific problems I've worked on, including statistical analyses of large amounts of data.
For most computing domains, a CS degree is overrated. A Mathematics degree gets you 90% of the way there, and gives you so much more.
After all, I am strangely colored.
Agreed.
"Unix Network Programming" was a godsend.
Other CS books I like:
For math, my favorites are:
For physics, my favorites are:
Yes, because the only people who read Slashdot are CS/Eng geeks, and I wasn't trying to get some information about other popular areas of study.
Geez. There's not even an FA to Read, but you skipped not only the summary but the HEADLINE?!
Where in "Tech / Eng. / CS" would you put "advertising wankery and asskissing?"
Oh also, your use of the word "marketdroids" shows me that you could really benefit from reading some of these sorts of books.
Fortunately, I don't have to. I actually possess a skill.