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
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
Some of the "technology" discussion is VERY dated (the book was published in 1968), covering things like magnetic drums and punchcards.
BUT, The rest of the information covering logic gates and binary math takes the reader down to the fundamentals of the fundamentals.
An internal system operation returned the error "The operation completed successfully.".
David Mertz
Nullius in verba
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
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.
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.
StoneCypher is Full of BS
Personally, for me is Thinking Forth 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.
vi +
Following any of the advice in Writing Solid Code will guarantee that your code will become higher quality.
Don't underestimate the power of The Source
The 19 Deadly Sins of Software Security is a book that I would say is almost a necessity for any collection. It helps to show some of the issues that the different programming languages have and how to fix the problem.
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.
Pew Pew
Effective C++, Scott Meyers -- I own the 2nd Edition, but there may be a newer one. This is the best book I've seen for really making sense out of C++. It is well-organized, covers its chosen topics thoroughly, and is fun to read.
/...
Agreed.
"Unix Network Programming" was a godsend.
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)
"Security Engineering" by Ross Anderson http://www.cl.cam.ac.uk/~rja14/book.html/.
The best book ever, truly enlightening.
If you're young enough it will change your life.
Iteration is not essential to all programming languages.
Peter Norvig's Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
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
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...
The Computer and the Brain.
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.
Other CS books I like:
For math, my favorites are:
For physics, my favorites are:
I would flag this as among the second-tier. Paul Graham's books, especially "On Lisp" are better.
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.
Maybe not
When the two overlap (which they mostly do), I prefer "Introduction to Automata Theory, Languages, And Computation" by Hopcroft, Motwani, and Ullman* over Sipser's "Intro to Theory of Computation". http://books.google.com/books?id=pvPeAwAACAAJ
Security Engineering: A Guide to Building Dependable Distributed Systems by Ross Anderson, 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 by the late Richard Stevens
Most people need/read only Volume I: The Protocols, but there is also Volume II: The Implementation 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 which is the series I learnt about TCP/IP programming with. Still highly recommended.
For Software development, The Mythical Man-Month by computing pioneer Frederick Brooks should be required reading, and Peopleware: Productive Projects and Teams 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 by Niklaus Wirth
Cybernetics: Or the Control and Communication in the Animal and the Machine in 1948 by Norbert Wiener
Computing Machinery and Intelligence, by Alan Turing and published in 1950 in Mind
Computer Lib/Dream Machines by Ted Nelson in 1974, is most often pointed to as the "birth" of hypermedia.
The January 1975 issue of Popular Electronics, which featured the Altair 8800 on its cover.
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.
You might want to take a look at Top 100 Best Software Engineering Books, Ever (if you want to go by what is popular) or The Best Programming Books (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).
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 : )
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".
"Open Source?" - Press any key to continue