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
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.
Effective Java by Josh Bloch (Score:5, Informative)
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.
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)
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:1, Informative)
While working on my Master of Science degree, this book was probably the most useful book that I had to read. I applied the concepts instantly to my work, which allowed us to take on much larger projects and increase profit margins.
I should also state that it is very easy to read and has great examples to show the concept. This is really a must read for any individual who is writing software.
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.
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 program from small modules. Some are private, which are designed to deal with stuff that changes. Then there are more public modules that are the interface to those private modules that can change. A good program is built from lexicons of these private/public modules.
The reason it is important to design lexicons of code around modules of "stuff that can change" is for correctness, elegantness and code-reuse. Control structures are superficial. Elegant designs can withstand change because they are not built around control structures, they are built around data and event transformations.
There was plenty of stuff in the specific to how Forth really made this method of rapid prototyping software development work. Such as the implicit method of passing data and calling functions.
If I had my way. No matter what language you end up working with. You should program in Forth for a few months first. Having to deal with a 64x16 character, 1024 byte blocks and a block file editor. The discipline in learning to factor code to fit in a standard screen is a good thing. Once you can start writing code that is small and elegant like that, you will be a better programmer in whatever language you eventually use. In addition you learn to use a simple IDE, program in both low level and high level functions. You get to work with a virtual machine that is simple enough to learn in an afternoon. You also get to learn such advanced techniques as building compilers, interpreters, and text parsers. Working with data structures such as threads, hashes, dictionaries, and vectored execution.
Writing Solid Code (Score:3, Informative)
Following any of the advice in Writing Solid Code will guarantee that your code will become higher quality.
Re:Design Patterns (Score:5, Informative)
Agreed. And I would add: Refactoring [amazon.ca] by Fowler and friends.
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.
Re:Best books? (Score:4, Informative)
Re:TCP/IP Illustrated, Vol 1 by W. Richard Stevens (Score:5, Informative)
Agreed.
"Unix Network Programming" was a godsend.
My Own list of Favorite Books (Score:1, Informative)
Practical Books:
Modern Compiler Implementation in C (I prefer this to the Dragon book, I own both)
The Data Compression Book
Operating Systems: Design and Implementation (Minix Book, read all editions)
Computer Oriented Numerical Methods
Computer Science: A Programmer's Persective
Advanced Programming in the Unix Environment
Unix Network Programming
Action Arcade Adventure Set
Books that pay off if you have the patience:
Elements of the Theory of Computation
TAOCP (Vol 1, 2, 3)
Programming Challenges (By Skiena)
In IT security field (Score:2, Informative)
The best book ever, truly enlightening.
If you're young enough it will change your life.
Re:Dragon Book (Score:1, Informative)
Iteration is not essential to all programming languages.
Norvig's Paradigms of AI Programming (Score:3, Informative)
Re:Best books? (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 forests instead of getting lost in a few groves...
Re:Best books? (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.
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:
Practical Common LISP (Score:3, Informative)
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.
Re:Best books? (Score:2, Informative)
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.
Re:Best books? (Score:1, Informative)
Meyer's C++ books are good, but I would characterize them as overrated since they are not necessarily better than many other intermediate C++ books out there (especially those pub. by Addison Wesley, B. Kernighan series editor). He has an attention-hogging personality and that comes through in his books - I will admit he pulls off the "This is my book, so I make the rules here" schtick better than others I've seen.
Meyer was very late to catch on to the template meta-programming wave that swept the C++ community throughout the 1990's. IIRC the first couple editions of "Effective C++" scarcely mentioned them, while "More Effective C++" discussed some elementary topics such as smart pointers.
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 short and entertaining. Code Complete is very authoritative (but big). These aren't books you are going to gravitate towards if you are just starting to program for the first time though so I'll just mention I found Java in Nutshell useful (but others are not so keen on it [livejournal.com]).
Your borrowers are probably going to want those "Learn in 24 hours..." or "...for Dummies" though. It would be nice to know what the most loaned books turned out to be in year's time (might make a good Slashdot article : )
Re:Best books? (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".