Your Favorite Tech / Eng. / CS Books? 517
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.)"
TCP/IP Illustrated, Vol 1 by W. Richard Stevens. (Score:5, Informative)
The classic IP networking book
Switching Power Supply Design, Abraham I. Pressman (Score:4, Interesting)
Awesome book.
http://www.amazon.com/Switching-Power-Supply-Design-3rd/dp/0071482725/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1230057542&sr=8-2 [amazon.com]
Re: (Score:2, Interesting)
I wouldn't call that computer science per se, but then I don't know anyone who designs computers who doesn't also have Howard Johnson:
http://www.amazon.com/High-Speed-Digital-Design-Semiconductor/dp/0133957241/ref=sr_1_1?ie=UTF8&s=books&qid=1230059485&sr=1-1 [amazon.com]
Re: (Score:3, Insightful)
Everything by Stevens rates the word "classic". Pity the dude didn't live long enough to write more.
Re:TCP/IP Illustrated, Vol 1 by W. Richard Stevens (Score:5, Informative)
Agreed.
"Unix Network Programming" was a godsend.
Re: (Score:3, Insightful)
Best books? (Score:5, Insightful)
Re:Best books? (Score:5, Interesting)
Introduction To Algorithms 2nd Edition was by far the most useful book I've ever delved into. Back in the olden days when I was stuck coding in a borrowed copy of QuickBASIC, I developed one helluva binary search routine that could search through about 50,000 records in tolerable time on an PC-XT, and that book saved my ass.
Re: (Score:3, Informative)
Then you might like "Algorithm Design" (2008). Its a superior, imno, but has slightly less coverage with better depth. My personal favorite algorithm book is "The Art of Multiprocessor Programming".
Re:Best books? (Score:4, Interesting)
Then let me reply directly (read: a poor excuse to top-post).
Michael Sipser's "Introduction to the Theory of Computation." It's easily the best textbook I've ever owned, and had me paging through it well ahead of the pace of the course. It of course doesn't serve nearly the same purpose as K&R and all those other books on practical topics, but for someone who's never been exposed to the theoretical side of CS, it's a wonderful eye-opener.
Apparently the same opinions are shared by most of the other CS students I've talked to.
Thinking Forth (Score:3, Informative)
Personally, for me is Thinking Forth [sourceforge.net] by Leo Brodie. I re-read it at least once a year.
A very lucid discussion of writing software and the philosophy that was often employed by very successful Forth Programmers. The hallmark of which was "elegance".
In a nutshell, you can remember 7 items plus or minus 2. So any programming construct that had less than 10 commands (as opposed to syntax "noise") could be read and comprehended. When it comes to hiding data, what needs to be hid, is what can change. Build a pro
Re:Best books? (Score:4, Informative)
Re: (Score:3, Informative)
This is my favorite and a must for anyone for interested in computers. Puts all the other excellent books recommended here in perspective.
Computer Science by Brookshear
http://www.amazon.com/Computer-Science-Overview-Glenn-Brookshear/dp/0321524039/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1230062205&sr=8-1 [amazon.com]
PC architecture, cpu design, programming paradigms, TCPIP, np complete, neural networks, etc. Excellent explanations. Brief but dense. Wonderful starting point.
You get to see all the beautiful for
Re: (Score:3, Informative)
The Computer and the Brain [borders.com].
There is no book that says more what computing is all about, from the historical perspective of appreciating how genius the founders of computer science were to the zen of how digital computers actually operate and to a different perspective on analog computing.
This book is only 110 pages and is 50 years old, but it is still worth more than any other book mentioned.
If you want to go by the list (Score:3, Informative)
You might want to take a look at Top 100 Best Software Engineering Books, Ever [google.com] (if you want to go by what is popular) or The Best Programming Books [programmingbooks.org] (which seems to be more diverse).
Personally I really liked the Mythical Man Month (one of the few library books I borrowed as an undergraduate and I've recently reread it and still like it) and Peopleware (very funny) but both of these are more about software engineering (and how it goes wrong) rather than practical hands on programming. However they are both sh
The Art of Computer Programming (Score:3, Interesting)
(personally, I think it's overrated, but I'm still proud to own the set).
The Art of Computer Programming by Donald Knuth (Score:5, Insightful)
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.
Re: (Score:3, Insightful)
Don't forget that by using bold it makes your text more important.
Re: (Score:2)
Right, not as good as its reputation, but still one of the most essential books in CS.
What I don't get is why Knuth still thinks that he can finish writing the series. He's even given up teaching and stopped reading his email to give himself more time to work on it. CS was already too big for a comprehensive intro text when the series first came out, and now it's far more so.
Re: (Score:2)
You can see the table of contents for the upcoming volumes on Knuths' site. Even if Knuth himself manages to finish them, they will never be as relevant as the original trilogy.
It's just too obscure, too arcane.
K&R2 (Score:5, Insightful)
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.
Speaking of C (Score:2)
Awesome C book: "Expert C Programming - Deep C Secrets" by Peter van der Linden.
Great general programming book: "The Practice of Programming" by Kernighan and Pike.
Re: (Score:3, Interesting)
Add a vote for K&R2, and one that may seem off the wall:
"Oh! Pascal", by Cooper and Clancy. It's probably out of print, but it had the most lucid, understandable explanation of pointers that I have ever seen in my life.
Modern C++ Design (Score:5, Informative)
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.
Re:Modern C++ Design (Score:5, Funny)
Minor correction to your post: It actually refers to parsing the leaf level (the lower ridge) of a B (binary) tree.
Or (to put it more concisely):
A parse-ridge in a pair tree.
Re: (Score:2)
Hats off to you, sir.
Re: (Score:3, Interesting)
I actually taught a class with "Modern C++ Design" as a primary text. Perhaps surprisingly, it turned out to be a great success. While the actual techniques in the book are not always suitable for use in most professional C++ programming shops, the revolutionary thinking and skills in it will serve you well whatever programming you do, even if it is in a different language, which is a hallmark of classic texts.
Most Excellent Book (Score:3, Funny)
Teach Yourself C++ Programming in 21 Days
What? No? Alright then...
The C++ Programming Language, 3rd Edition [amazon.com] is pretty excellent.
Re: (Score:2)
Re: (Score:3, Insightful)
The C++ Programming Language, 3rd Edition [amazon.com] is pretty excellent.
Ugh. He may have invented the language, but that book is as long as it is awful. There are *much* better (and more accessible) texts on C++.
The Camel Book (Score:2, Interesting)
Re: (Score:2)
Another vote for the camel book. If only for the chapter on regexes, which defines the standard used for this oh-so-useful-if-you-understand-it tool in so many other languages.
Applied Cryptography (Score:3, Insightful)
Applied Cryptography [amazon.com]
Re:Applied Cryptography (Score:4, Interesting)
Here's a criticism of that book from its own author: it supports the illusion that all you need to secure a system is the right technology.
Re: (Score:2)
Yes! One of my all-time favorites.
design of welded structures (Score:2)
It's a work of art.
Re: (Score:2)
Oh man, I use that at least 3 times a week. Best $15 I ever spent (well, technical bookwise that is). Although it's up to $25 now, it's still a bargain.
I'd also add Roark's Formulas for Stress and Strain and the Machine Design handbook.
come on (Score:2)
Re: (Score:3, Funny)
Effective Java by Josh Bloch (Score:5, Informative)
Mine (Score:2)
Calculus Made Easy [amazon.com] - First book on calculus that ever explained things in a way that made sense to me.
My very favorite (Score:5, Informative)
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.
Best Project Management Book Ever (Score:5, Insightful)
Re: (Score:3, Insightful)
While it's a classic, and has good things here and there, I wouldn't say it's the best book. Peopleware [wikipedia.org] is, IMHO, much better, and the book I'd recommend everyone reads at least once.
Digital Computer Analysis by James F. Turner (Score:2, Informative)
BUT, The rest of the information covering logic gates and binary math takes the reader down to the fundamentals of the fundamentals.
text processing in python (Score:3, Informative)
Nonlinear Dynamics and Chaos (Score:5, Informative)
Dragon Book (Score:5, Insightful)
"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.)
Design Patterns (Score:5, Informative)
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/ [amazon.com]
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.
Re:Design Patterns (Score:5, Informative)
Agreed. And I would add: Refactoring [amazon.ca] by Fowler and friends.
Re: (Score:2)
Even if people say that patterns are overused, [...]
In University, on all math related courses we were strongly prohibited using calculators or PC software to solve assignments.
Point is not that design patterns are overused, but that people do not learn to think for themselves and go on copy pasting examples.
To become decent developer, you have to be able to figure out solution to problems yourself without consulting books.
On flip side, the only effect of design pattern application I have seen is exponential growth of code base size: piles of crap
Re: (Score:3, Interesting)
Introduction to Computing Systems (Patt/Patel) (Score:3, Interesting)
"Introduction to Computing Systems: From Bits and Gates to C and Beyond"
http://highered.mcgraw-hill.com/sites/0072467509/ [mcgraw-hill.com]
This is where every programmer should start.
Jeffrey Friedl's regular expression book... (Score:2)
...Mastering Regular Expressions [oreilly.com]. Now in it's third edition and a great read for really understanding how regexes work. What I liked about it was the explanation of how various regex engines optimize the expressions... who knew that Tcl has a super-advanced regex processor?
Machinery's Handbook #24 (Score:2)
Machinery's Handbook #24
Design Patterns (Score:2)
Mechanical Engineering (Score:2)
For information regarding engines, Internal Combustion Engine Fundamentals [amazon.com] lives up to it's reputation, but is very dense reading.
For Mechanical Design (real hardware, nuts, bolts, gears, bearings, etc.) Shigley & Mischke [amazon.com] are the gold standard.
Unfortunately, I haven't read many other books on these topics, so it's difficult to compare. Overall, these books stand out as being good.
Code by Charles Petzold (Score:4, Interesting)
I've never read a book that taught me so much in so few words so fluidly. I picked it up in a Barnes and Noble for like $20 (Skeptical from the logo on the back) and have never been so pleasantly surprised with a dead tree.
The C programming lang, Kernighan & Ritchie, 2 (Score:2)
This book is one of the most concise and descriptive computer books I've read. The book gets right to the point and explains things in an understandable yet compact way. Every paragraph of this book contains real content, which is unusual; and which spares the reader the necessity of skipping over, filtering through, and disregarding superfluous material as is necessary with so many other books.
Despite being concise, the book is remarkably thorough. It explains things about the C language (like parsing co
Speech and Language Processing (Score:2)
I like Speech and Language Processing (2nd Edition) [amazon.com], which is kind of the Russell/Norvig [amazon.com] for NLP.
Oh, look at the price of that thing. I think I got it for $60 on pre-order back when the dollar was weak. Should have bought two! I guess if you look around a bit I'm sure you can find the pre-release/beta PDFs for the second edition which were made available on the book homepage prior to release.
There's pretty much everything in the C++ In Depth-series [pearsoned.co.uk] which is an absolute must for C++ practicioners. (and don't
How to Build a Microcomputer and... (Score:2)
The book was an 8.5x11 paper
A short list (Score:3, Informative)
The Art of Computer Programming, Design Patterns, Domain Driven Design, Refactoring, Modern C++ Design, C++ Gotchas, The Mythical Man Month, Applied Cryptography, Introduction to Algorithms, Intro to Personal Software Process.
Death March by Yourdon (Score:2)
The best damn book anyone in IT/CS can read...
Books I highly recommend (Score:2, Interesting)
Listreadygo. (Score:2)
My Personal Favorites (Score:2)
"Computer Ethics: A Cautionary Tale" by Forester and Morrison is pretty interesting, also; though, it's not really technical at all, just thoughtful.
Cryptonomicon and Best Software Writing (Score:2)
On the non-fiction side, Joel Spolsky's Best Software Writing Volume 1 [wordpress.com] is a winner, and not just for programmers, either; in that respect, it's similar to Frederick Brooks' The Mythical Man Month.
My favorites (Score:2)
- Object Oriented Design and Analysis by Booch/etc.
One of the best books on object oriented programming. Very hard to read and grok all the concepts. Covers many aspects on all phases of software development.
- Programming Perl by Larry Wall, Tom Christiansen & Randal L. Schwartz.
For a *nix guy, Perl is irreplaceable tool for solving randomly popping up problems. Easy read, but need to read Learning Perl first.
- UNIX Power Tools by Jerry Peek, Tim O'Reilly & Mike Loukides.
Great book o
Old skool (Score:2)
A Discipline of Programming by E.W. Dijkstra (1975)
Mastering Regular Expressions - O'Reilly (Score:2)
Obligatory xkcd post [xkcd.com]
Computer Architecture (Score:2)
Mathematics classic (Score:2)
And it really deserves the title: General Topology [amazon.com], by John L. Kelley.
Its notation is out of date in certain respects, but other than that, it's aged well.
Prices! (Score:3, Insightful)
I followed some of the links, and was appalled at the prices. $100 for a simple summary of OS technology? That's a blatant, immoral cashing-in on the fact that students are are a captive audience.
(What's really sad is that $100 for textbook is actually relatively cheap.)
Even $70 for SICP is ridiculous. Fortunately, the authors are kind enough to provide a free online copy [mit.edu].
Debugging (Score:2)
Debugging by David Agans
http://www.amazon.com/Debugging-David-J-Agans/dp/0814474578 [amazon.com]
Writing Solid Code (Score:3, Informative)
Following any of the advice in Writing Solid Code will guarantee that your code will become higher quality.
An Introduction to Database Systems (Score:2)
by C. J. Date. The rest of list is good, but this omission is glaring.
Why is this even a question? K&R2, hands down. (Score:2)
K&R2 is simply the finest book on programming, ever. I like Code Complete, the Camel, etc. just as much as any other Geek, but K&R2 is still the best.
SirWired
P.S. Why is a book that has been in print for a couple of decades, is only a quarter-inch thick, and badly typeset, STILL sold for $40+?
Yes, K&R2 is still the best. (Score:4, Informative)
Other CS books I like:
For math, my favorites are:
For physics, my favorites are:
Here are two suggestions (Score:2)
Types and Programming Languages by Pierce. This is a very accessible introduction to the theory of programming languages and types.
How's about for Economics / Business / Marketing? (Score:2)
Hey,
I like the above suggestions. However how about some economics / business / marketing books also? Perhaps there are specific Journal's or Magazines?
Don't just list what you read at Uni, but what books did you find stimulating to read, and really made you think?
What books "basically" covered everything? Or helped you make connections between different ideas?
I'd love to find some of these books, I've found Amazon reviews and similar, aren't that reliable.
Which is another question, how did you find out abo
Re: (Score:3, Funny)
Hey,
I like the above suggestions. However how about some economics / business / marketing books also?
Yes, because nothing appeals to CS/Eng geeks like reading books written for marketroids...
Re:How's about for Economics / Business / Marketin (Score:5, Funny)
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.
CTMCP (Score:2)
Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi. This is especially recommended if you love SICP. http://www.info.ucl.ac.be/~pvr/book.html [ucl.ac.be]
More Good books for any Programming/Comp Sci (Score:2, Informative)
Hacking : The Art of Exploitation is another great book that I would say you should have to bring more knowledge about how to prevent and write better code.
Outside of that I own a ton of Programming/Application design methodology books.
The Cuckoo's Egg (Score:4, Interesting)
Without doubt Clifford Stoll's The Cuckoo's Egg [wikipedia.org] It had me gripped in a way that no programming book could have :-)
For UI Design (Score:2)
I have a couple I'm working through to help with the other side of my brain (the stupid side).
Designing Interfaces, Jenifer Tidwell
Information Dashboard Design, Stephen Few
Both have been very helpful... mostly, I'm able to much better explain several design principles that I've known somewhat intuitively for a long time - I just couldn't talk the talk. Comes in handy when I'm justifying a UI design to the business folks, or trying to communicate what I need to an actual designer.
Re: (Score:2)
I should clarify - I meant that *MY* artsy side of the brain is stupid. Not that it's stupid in general. Sorry.
My Favorites (Score:3, Interesting)
How to Break Web Software
Functional and Security Testing of Web Applications and Web Services
Programming Pearls
The Art of Computer Programming (3 vols)
Donald E. Knuth
Norvig's Paradigms of AI Programming (Score:3, Informative)
"How to Think Like a Computer Scientist" (Score:3)
Dead tree version [greenteapress.com] available soon. GPL licensed, electronic versions available here [greenteapress.com] and here [openbookproject.net].
I read an older edition of the latter a couple of years ago and found it to be an excellent introductory text. I have no doubt that the new paper version will be well worth adding to your collection. :)
favorite books (Score:4, Insightful)
I'll start with the one I'm most qualified to know about, with many years of UNIX systems administration under my belt - the UNIX System Administration Handbook. It reads like a book written by a bunch of sysadmins who know what they're talking about, and then telling you what you need to know.
Operating Systems Design and Implementation by Andrew Tanenbaum and Albert S Woodhull. Walks you step-by-step through Minix, a "POSIX conformant" Unix system designed primarily to teach students how operating systems work. You should probably have a *little* UNIX experience before going through it, but it will spell out in detail how things like pipes work beyond that they're STDOUT to STDIN, or how semaphores work and why it was necessary for semaphores to be invented in the first place. And so on.
K&R - not only a classic, but a useful one to boot.
Code Complete. Lots of the common wisdom, and theory to praxis to practice tried and true advice on how to right good programs - a preference for short functions that do one thing and do them well, with a limited number of variables, and with even more efforts to be conservative with regards to global variables.
Richards TCP/IP book. I use it as a reference when I need to know how to do something.
Knuth's The Art of Computer Programming is a reference book FOR reference books. You often see comments in kernel and critical software which says "Knuth's TAOCP says this is the best way to do this". He states how math underlies Computer Science which is probably why I'm still stuck on the first few pages of Volume 1. Maybe I'll go back to after I take a course in discrete math and calculus.
These are the six I can think of. I can think of other books I have found useful as well - some books on assembly programming and how the processor and system works, lots of O'Reilly books like the PERL ones.
And if you're looking for some light reading, Accidental Empires is good, as well as Hackers. You might also enjoy Just For Fun (by Linus Torvalds) and Free as in Freedom (about Richard Stallman) as well.
Practical Common LISP (Score:3, Informative)
Dianetics (Score:3, Funny)
Oh, you meant computers... Sorry.
Some tech books I enjoyed a lot (Score:4, Informative)
My favorites list (Score:3, Informative)
These are the books I most often find myself using as references:
These ones are also good, but not as references:
I think other people have listed most of those already, but oh well.
Security Engineering by Ross Anderson (Score:4, Informative)
Security Engineering [cam.ac.uk]: A Guide to Building Dependable Distributed Systems by Ross Anderson [cam.ac.uk], professor at Cambridge University.
It replaces and expands upon Applied Cryptography by Bruce Schneier, and Practical Cryptography by Ferguson & Schneier to make a more holistic approach to security encompassing the entire system, not just using the latest (coolest) encryption techniques. Most real-life systems are broken by going around or ignoring the encrpytion.
Another classic is
TCP/IP Illustrated [kohala.com] by the late Richard Stevens [kohala.com]
Most people need/read only Volume I: The Protocols [kohala.com], but there is also Volume II: The Implementation [kohala.com] which is wonderful albeit with a smaller following, though Volume III which is considered a big disappointment to many (I've never read the vol 3) isn't worry buying unless you're specifically interested in its contents.
The only serious alternative to TCP/IP Illustrated is Douglas Comer's series Internetworking with TCP/IP [purdue.edu] which is the series I learnt about TCP/IP programming with. Still highly recommended.
For Software development, The Mythical Man-Month [wikipedia.org] by computing pioneer Frederick Brooks [unc.edu] should be required reading, and Peopleware: Productive Projects and Teams [dorsethouse.com] by Tom DeMarco and Timothy Lister should be handed to every new IT/IM or software manager with their promotion or hiring (if they haven't read it already). Computing would suck so much less if we all held ourselves accounting to the basic ideas in these two books.
For historic, 3 books + bonus item that would have to be included are:
Algorithms + Data Structures = Programs [inf.ethz.ch] by Niklaus Wirth [inf.ethz.ch]
Cybernetics: Or the Control and Communication in the Animal and the Machine in 1948 by Norbert Wiener
Computing Machinery and Intelligence [wikipedia.org], by Alan Turing and published in 1950 in Mind
Computer Lib/Dream Machines [wikipedia.org] by Ted Nelson in 1974, is most often pointed to as the "birth" of hypermedia.
The January 1975 issue of Popular Electronics [digibarn.com], which featured the Altair 8800 on its cover.
Software Engineering: A Practictioner's Approach (Score:3, Interesting)
Re:My Math Books (Score:4, Interesting)
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.
Re: (Score:3, Funny)
When I was about to write my first "Hello World" program, I thoroughly studied the theory of computability. The I had to give up the project, because I couldn't find a way to prove the consistency of such a program.
Re: (Score:2)