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.
so far i can only find the ones that put me to sleep :( so i only use computer books for refs
Do good computer books exist?
(personally, I think it's overrated, but I'm still proud to own the set).
Do you even lift?
These aren't the 'roids you're looking for.
Best text book title ever.
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
You can't legislate goodness. Let each to his own destiny, by will of his freely made choices.
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.
Teach Yourself C++ Programming in 21 Days
What? No? Alright then...
The C++ Programming Language, 3rd Edition is pretty excellent.
Programming Perl (by O'Reilly) is a classic, imo. I know it's language specific, but it's also very funny and really defined the iconic symbol of the camel and Perl, and at least for me made O'Reilly a publisher worth its salt... --Ray
http://www.beanleafpress.com
Applied Cryptography
By Omer W Blodgett
It's a work of art.
Nullius in verba
I thought the stock answer was Alice in Wonderland.
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.
With little formal CS education, I rely a lot on my supply of books such as PERL in a nutshell. Although my favorite reference books are my various Math books from college, they have been extra helpful out side of classes.
Yeah, I've got nothing...
Calculus Made Easy - First book on calculus that ever explained things in a way that made sense to me.
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.
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
Some of the college courses I learned the most from didn't even have text books, but rather I created a "book" from the pages and pages of notes I took from the professor's lectures. I still have most of these compilations of notes -- my favorite being on Theory of Programming Languages featuring OCaml.
The Art of Computer Programming all volumes
"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.
"Introduction to Computing Systems: From Bits and Gates to C and Beyond"
http://highered.mcgraw-hill.com/sites/0072467509/
This is where every programmer should start.
Go green: turn off your refrigerator.
Playboy, Penthouse, Hustler
Often wrong but never in doubt.
I am Jack9.
Everyone knows me.
http://www.amazon.com/Who-Fourier-Mathematical-Transnational-College/dp/0964350408/ref=sr_1_1?ie=UTF8&qid=1230058191&sr=8-1 This is an amazing intro to calculus and fourier transforms. All with nice comic strip goodness
...Mastering Regular Expressions. 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?
The Army reading list
Machinery's Handbook #24
The Calculus with Analytical Geometry by Leithold is by far the best calc text ever. Detailed derivations, but very easy to understand.
Felder & Rousseau's Elementary Principles of Chemical Processes is a great intro ChemE text. Worth keeping because it's the only text I've gotten that includes a psychrometric chart.
Never have I read a more well-balanced book than the third book of Stein and Shakarchi's series "Princeton Lectures in Analysis", Real Analysis: Measure Theory, Integration, and Hilbert Spaces. The book is thorough in its style, yet not too long and boring, and it gets to the point without leaving too much to the reader.
Design patterns, by the "Big Four" has pretty much been the bible of software design thus far for me. It pretty much covers the methodology of all the popular patterns with examples. It has been the book I reference most, after language and API specific books. http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1230057965&sr=8-1
Bork Bork Bork!!
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.
Tsunami -- You can't bring a good wave down!
by Jon Bentley. It's easy to be fast.
For general information the Fundamentals of Engineering Supplied-Reference Handbook is a nice cheap reference.
For information regarding engines, Internal Combustion Engine Fundamentals lives up to it's reputation, but is very dense reading.
For Mechanical Design (real hardware, nuts, bolts, gears, bearings, etc.) Shigley & Mischke 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.
One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
The first few chapters of Code will turn you from a know-nothing cubscout into a 2nd-year electrical engineering major within an afternoon. The book scales from understanding morse code to binary to logic gates to flipflops to RAM to assembler to constructing your own bios and operating systems with nothing but a hearty supply of semiconductors, batteries, plywood, wire, and solder, if you wanted to. The jumps between one level and another are made so they appear completely contiguous. It helps a CS student understand how software can truly run on hardware (instead of just looking at the magic boxes and saying "DO AS I SAY, PATHETIC PROCESSOR!")
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.
I am the richest astronaut ever to win the superbowl.
Structure and Interpretation of Computer Programs (-1 Overrated)
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 complex type declarations) which most books on the C language do not explain.
In addition to being concise, it was written with an admirable prose style which is rare among computer books. Apparently, its author (Kernighan) could write in the English language.
I like Speech and Language Processing (2nd Edition), which is kind of the Russell/Norvig 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 which is an absolute must for C++ practicioners. (and don't forget Lakos).
I'm sure Gamma et.al was mentioned ten times while I put this post together...
If I may veer out of CS, I must mention Kahn's Code Breakers, an absolute joy to read.
Belief is the currency of delusion.
Everything by Stevens rates the word "classic". Pity the dude didn't live long enough to write more.
I used to have a book called How to Build a Microcomputer and Really Understand It (or something along those lines). It taught you to build a 6502 based microcomputer. It had circuit diagrams, PCB layout masks, etc. You would make up a bunch of small circuit boards with diodes or pull-up resistors on them. Each of these small boards would make a nybble. These nybble boards fit into some sort of card edge socket. It taught you what all the control lines were used for, etc.
The book was an 8.5x11 paperback, and I don't recall it being all that thick. I think it may have been from TAB press, but I don't know for sure. I loaned it out years ago, and never got it back. I've never been able to find another copy.
When our name is on the back of your car, we're behind you all the way!
Transactions & triggers & a whole lot more....
I want to be alone with the sandwich
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 +
You're too late, I already have all the books I want, but you can still send me a Christmas donation. I prefer Western Union.
BTW, does Amazon offer a "slip a $100 bill inside book" gift option? If it does, you can also buy me a book of your choice. Something on Ruby or something, I'll act surprised when I get it, I promise.
The best damn book anyone in IT/CS can read...
/\/\icro/\/\uncher
My all time favourite It related book is "Old New Thing" by Raymond Chen, author of the blog that goes by the same name.
Going through all my CS courses back at the university this was my favorite book: http://mitpress.mit.edu/sicp/ I had the original text but since this book was so awesome it is now available on the website.
http://www.anthonyw.net
Colin Dean Go a year without DRM
Probabilistic Robotics: A great book published by MIT Press. A must read for anyone who ever deals with sensors or real-world data.
Potty Humor!
"Programming Pearls" by Jon Bentley has long been one of my favorites. The first two chapters or so are especially interesting because every other page hits you with an "AHA!" solution to some seemingly complex problem.
"Computer Ethics: A Cautionary Tale" by Forester and Morrison is pretty interesting, also; though, it's not really technical at all, just thoughtful.
Eek!
On the non-fiction side, Joel Spolsky's Best Software Writing Volume 1 is a winner, and not just for programmers, either; in that respect, it's similar to Frederick Brooks' The Mythical Man Month.
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
Cue the Linus fan backlash.
Anyway: Jon Bentley's "Programming Pearls" pair of books. Yum.
- 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 on learning stupid tricks one can do in *nix. Most tips are outdated, yet many ideas are quite relevant even in Linux today. Took some time to read it, but was very rewarding.
- Art of Unix Programming by ESR.
Delves into many things. Great help to get an overview on how people do things and most importantly why. Read in one gulp in less than two days.
All hope abandon ye who enter here.
I am surprised no one has mentioned yet, Book by Cormen Rivest and Leiserson.
This is one of the best algorithms book I ever used.
Python script to convert photos into "artsy" portraits: http://p2pbridge.sf.net/pyPortrait/
A Discipline of Programming by E.W. Dijkstra (1975)
ISBN: 1-56592-257-3
Obligatory xkcd post
When I have a kid, I want to put him in one of those strollers for twins and then run around the mall looking frantic.
For computer architecture, can anyone beat Hennessy and Patterson? I mean other than Patterson and Hennessy?
What a fool believes, he sees, no wise man has the power to reason away.
I'm currently working my way through "The Pragmatic Programmer" by Andrew Hunt and David Thomas. It contains much generic wisdom and considerable scope.
And it really deserves the title: General Topology, by John L. Kelley.
Its notation is out of date in certain respects, but other than that, it's aged well.
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.
Debugging by David Agans
http://www.amazon.com/Debugging-David-J-Agans/dp/0814474578
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
by Douglas Comer. Got me started in networking and I learned as much from this series of books as any other.
Artificial Intelligence - A Modern Approach by Russell and Norvig
The best book for catching up with the trends in AI systems over the past couple of decades.
by C. J. Date. The rest of list is good, but this omission is glaring.
putting the 'B' in LGBTQ+
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+?
Introduction to the Theory of Computation by Sipser. This is my favorite computer science textbook together with SICP. It deals with theoretical computer science, mainly automata, computability and complexity theory. It's just 400 pages or so, but covers lots of ground.
Types and Programming Languages by Pierce. This is a very accessible introduction to the theory of programming languages and types.
C/C++ Programmer's Reference is a handy little book.
struction.
Best book I've read on the topic, and I've read quite a few.
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 about these books? How would you find out about more?
This is my footer. There are many like it, but this one is mine.
In the end, it's your code that does the job, not "methodology" or "framebraries" or whatever. And this book is bible on the subject of writing working code.
Undocumented DOS by Andrew Schulman and Ralph Brown
echo -e 'global _start\n _start:\n mov eax, 2\n int 80h\n jmp _start' > a.asm; nasm a.asm -f elf; ld a.o -o a;
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
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
the little schemer, simply teriffic.
ISBN: 9780805358353 Pascal : Programming with Style, A Brief Introduction Lamb, Richard Although written with Pascal it's good info for any programming language.
Without doubt Clifford Stoll's The Cuckoo's Egg It had me gripped in a way that no programming book could have :-)
Agreed.
"Unix Network Programming" was a godsend.
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.
My sig sucks.
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)
It depends what I need specifically. If I had to pick a general cover all I'd say O'Reilly books. Especially for programming. There are other individual books I use but more O'Reilly books than any other type.
by M.A. Padlipsky. Even though the IP vs. OSI war is over, it's very instructive when observing other protocol wars.
Bob
The fundamental book of the relationship between people and technology.
Blondie24: Playing at the Edge of AI
The first few chapters are very basic and introductory. It gets quite interesting after that though.
If you want the book that most influenced my IT career (and life in general), you've got to go way back to the 80's.
Mapping the Commodore 64
http://www.scribd.com/doc/40444/MAPPING-THE-Commodore-64
It blew my mind, revealing every little inner part of the machine. Ah, the glory days of writing machine code with a software monitor. None of this assember luxury - we figured jump offsets by counting the bytes as we wrote the code!
Dijkstra's "A Discipline of Programming" is high on my list, as well as "Programing Pearls" and "Perceptions".
Oh, and "Smalltalk-80: The Language and It's Implementation"
--MarkusQ
Martin Fowler "Refactoring", Bob Martin "Agile Software Development", Larman "Applying UML and Patterns", Evans "Domain Driven Design", Beck "Test Driven Development", Gamma et al "Design Patterns", Seibel "Practical Common Lisp"
C++ FOR YOU++ ?!?!?!
Big Java
I would recommend the other 'practice' and management book. The mythical man month, Composite/Structured programing.
And, of course, for cryptography, Applied Cryptography. Like TCP/IP illustrated, I have never read the entire book but chapters of it have proved invaluable.
"She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
A metaphorical fugue on minds and machines ...
Some may not consider this in the realm of a Tech/Eng./CS Book but no other book has affected my understanding and appreciation of computer hardware and software systems design as greatly as this masterpiece.
Pocket Ref
My favorite CS books are the Chronicles of Narnia followed by Mere Christianity.
I learn best by adapting example code.
"Even if you're on the right track, you'll get run over if you just sit there" - Will Rogers
Computer Graphics: Principles and Practice in C, 2nd Edition. Foley, James; A. van Dam, S. Feiner, J. Hughes. OISBN 0-201-12110-7
If you really want to know how computer graphics works, this is THE BOOK. All the fundamentals and how they are used, which is why it is 1200 pages.
This was the first book on cryptography I read and it is very good for someone interested in the field. Very enjoyable read, not a text book.
The Code Book: The Evolution of Secrecy from Mary, Queen of Scots to Quantum Cryptography
http://en.wikipedia.org/wiki/The_Code_Book
"Lions' Commentary on Unix" by John Lions and Peter H. Salus
"Godel, Escher, Bach: An Eternal Golden Braid" by Douglas R. Hofstadter
"Linux Administration Handbook" by Evi Nemeth, Garth Snyder, and Trent R. Hein
Any of the Feynman physics lecture series ... or "Surely You're Joking, Mr. Feynman" and other such titles
Any of Raymond Smullyan's puzzle books
It always takes longer than you expect, even when you take into account Hofstadter's Law. --Hofstadter's Law
by W. Richard Stevens (1st) edition and added to by Stephen Rago (2nd edition).
If you need to program in *nix this is a must have reference.
To follow along with the "Any title containing..." I often find it frustrating that there are very rarely Juniper books on the shelf. My two well used books are the "ScreenOS Cookbook" and the "JUNOS Cookbook".
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
Efficient data structures and algorithms (K. Mehlhorn, 1984) (out of print unfortunately)
Thinking in C++ (B. Eckel)
Modern C++ design (A. Alexandrescu)
"Pocket Ref", by Glover
"Engineering Formulas", by Gieck & Gieck
"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.
Introduction to Algorithms was a textbook in one of my college classes. I never use it.
The book I always use instead is one I got before college, Algorithms by Robert Sedgewick. Sedgewick presents algorithms with straightforward English, diagrams, and code examples. It also manages to pack many more algorithms, including more advanced topics, into fewer, smaller pages than Intro to Algorithms. My edition has examples in Pascal, a language I never use; but it's still clearer than Intro to Algorithms. There are newer editions for C, C++, and Java.
I don't believe there is a single proof in Algorithms, which I think is good. When looking up an algorithm, I don't want to prove why it works; I just want to know how it works, and how to implement it.
By the way, do not confuse Algorithms with An Introduction to the Analysis of Algorithms by Sedgewick and Flajolet. Another of my college textbooks, this one has more proofs, not less!
(T>t && O(n)--) == sqrt(666)
But programming book lists crop up all over the place. In this Stifflog interview with Yegge, Torvalds, Hansson, Norvig, Thomas, Van Rossum, Gosling, Stroustrup and Bray the interviewees mention their favourite books (of the most popular I think only K&R and Programming Pearls weren't on your list).
Many people have Knuth's Art of Programming on their shelves (but it's harder to find people who have read all of it).
One of the Kernel Hacker Bookshelf series on LWN recommends Unix Internals.
One of the consultants who taught at my University said that the Mythical Man Month and Peopleware were good. I've read these too and can also recommended them (although they are more about managing programmers rather than programming per se). The consultant also recommended Design Patterns (although he said not to read the book cover to cover but rather to just be aware of them so you could refer to them later).
Reddit has a Must Read Programming books thread.
I've heard the "Dragon Book" (Compilers: Principles, Techniques, and Tools I think is the 2nd edition) being talked of favourably.
What is the single most influential book every programmer should read? thread on Stackoverflow.
Many people seem to recommend reading Godel, Escher, Bach...
Joel Spoolsky's list of books every programmer should read.
Maybe someone will collect the 20 most popular books into one easy to read post rather than the scattershot of links I've given you here...
The flying circus of physics with answers
The elegant universe
Also, the 1936 Chemical Dictionary had some neat syntheses.
"Reality is that which, when you stop believing in it, it doesn't go away." - Philip K. Dick
Best quality: concise.
"Peopleware: Productive projects and teams", by DeMarco and Lister. Required reading for you and your boss. A nice quick read that starts out, "Somewhere today, a project is failing."
It's all about project management from that qualitative side, not the Gantt-chart quantitative side. What makes a team jell and work well together? How does the environment kill a team (hint: cubicles). How do the PHBs do it?
Honorable mention: "Quality is Free" by Crosby.
Elements of Programming Style by Brian W. Kernighan and P. J. Plauger
Structured Design: Fundamentals of a Discipline of Computer Program and System Design by Edward Yourdon and Larry L. Constantine.
Guide to FORTRAN IV Programming by Daniel D. McCracken
Dave Barnes 9 breweries within walking distance of my house
Peter Norvig's Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
"Efficient data structures and algorithms" (K. Mehlhorn) out of print unfortunately
"Thinking in C++" (B. Eckel)
"Modern C++ design" (A. Alexandrescu)
"Lisp in small pieces" (C. Queinnec)
"UNIX network programming" (R. Stevens)
"UNIX internals: the new frontiers" (U. Vahalia)
Personally, "Object-Oriented Software Construction, Second Edition" opened my eyes. It is not a computer language, even if it is basically also presents a strong rationale for Eiffel, but it presents the concepts of OO in a clear and understandable way.
The Art of Unix Programming by ESR
http://catb.org/esr/writings/taoup/
ISBN: 978-0131429017
I like this one a lot:
Beginning Portable Shell Scripting: From Novice to Professional
My favorite feature is the way that, if enough people buy it, I get about a buck per copy!
Seriously, though, it's a book that exists in no small part to be the book I wished someone had written about shell programming. While I'm the only listed author, the tech reviewer (Gary V. Vaughan) made a HUGE difference, and caught a ton of stuff. What interests me is that we both ended up learning a huge amount about shell programming that we didn't previously know -- even though he was certainly an expert in the field before we started, and I had done enough shell programming to at least think myself competent.
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
Is it a University library or a public library? What your public will want will vary dramatically depending on who your primary audience is.
Back (not so long ago) when I was a kid I spent ages reading reading a book about programming in BASIC on the BBC and it was packed full illustrations (I can't remember much more about it other than it hard a part talking about how you needed to type """ if you wanted to get a quote).
When I look at the stuff being returned to the library at the University I am at it seems to mostly be course texts and fellow students are always complaining about how they can't get hold of XYZ course texts because there aren't enough copies of it in the library.
When I look at local book stores the stuff that always seems to have taken are the "Learn XYZ in 24 hours" or the Dummies series books.
I know what I like to read (books that have a good reputation and are under 300 pages long) but goodness knows whether this is anything like your borrowers...
I'm a huge fan of Douglas Comer's classic, "Internetworking with TCP/IP." I have the second edition from 1991. I remember that when this book came out, everyone was talking about at Reiter's Scientific Bookstore here in DC, a place where lots of geeks hung out. It really changed my outlook on networks -- no longer did I see them as a proprietary means of connecting one vendor's stuff. Comer showed how TCP/IP could seamlessly bring it all together.
This could end up being a long list. There really are a lot of good books out there, but 3 off the top of my head:
1) Applied Numerical Methods by Chapra
2) Signals and Systems or Discrete Time Signal Processing by Oppenheim
3) Digital Design by Wakerly
The above have proven to be great references time and again.
Oh, and Nonlinear Dynamics and Chaos is an absolutely must have for those interested in such things.
Probably the best statistics book is "Applied Linear Statistical Models" by Neter, Kutner, Nachtshiem, Wasserman.
It covers just about everything you need to know about typical "regression" models and it's basic theory, estimation, and many applications.
Nearly every graduate applied regression class uses this book. But it could also be used to teach Design of Experiments and serves as a starting point for non-linear models.
C Programming: A Modern Approach
This is a seriously excellent book on C. How excellent? Excellent enough that I actually recommend it before I recommend K&R. Seriously, it's that good.
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
As with all recommended books- make sure you read critically:
System and Practice of Network Administration by Limoncelli and Hogan. Not a how to book a why to book. It should be required reading for everyone in IT.
How to Win Friends and Influence People by Dale Carnegie. Also should be required reading for everyone in IT.
If you are a router jockey:
Routing TCP/IP vol 1, by Doyle, covers the IGPs.
Internet Routing Architectures by Sam Halabi
And the new world:
MPLS and VPN Architectures (probably vol. 1 and 2 if you have to do Service Provider or VRF) by Pepelnjak
If you are a sysadmin- you should read every shred of manufacturer's documentation on their website especially the login required. But if you can't always read the installation and configuration guides.
If you are a software dev guy:
Mythical Man Month- Fred Brooks
Peopleware- DeMarco and Lister
It will teach you about the why and how of managing the development cycle. Of course the algorithms and tools, and languages books are important, but so is understanding the development cycle and how the rest of the business sees it.
I wish I had a good intro to business text for the slot to recommend to all the types.
There is Out of Crisis by Deming for managers. I could probably come up with more...
In my estimation, the most useful statistics text ever written is Draper and Smith's "Applied Regression Analysis" (ISBN 0-471-17082-8). I know that that book caused me to write more computer algorithms than any other book I've ever read.
Give a man a match: warm him for an instant. Douse him in petrol and set him aflame: warm him for the rest of his life.
OMG~ WHERE's K & R!!!! Should have been in the first OP!
The Art of Electronics, Paul Horowitz.
Ultimate source of practical electronics information. A lot of humor in it.
Computer Lib / Dream Machines by Ted Nelson is a classic by a computer visionary. Well worth it, if you can get it.
Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein. Anyone who wishes to call him or herself a computer scientist must have a copy of this.
This was a pretty awesome book showing some of the cool things that you can do with set-based programming and SQL databases: medians, efficient tree-storage, and even string parsing!
The edition I read had a lot of typos, but they are generally pretty obvious. The author is also rather active in newsgroups, so there is a lot of supplemental information and the ability to ask questions.
It's not computer science but it is engineering/design related. Cradle to Cradle by William McConough & Michael Braungart because besides writing a good book about sustainable design, they also put their publishing where their mouth is by printing the book on a recyclable plastic composite material instead of paper.
Next to the Mythical Man Month, this is a must read for anyone working on software with more than one person. It covers all aspects the human side of software development and includes a wealth of information not only how how to manage software projects but also what environments work best for software development.
It's based mostly on research from the 1970s, but is still surprisingly relevant. The latest edition updates some of the core lessons for the internet age (e.g., substitute phone calls for email messages, and you get a similar break in 'flow').
-Chris
Other CS books I like:
For math, my favorites are:
For physics, my favorites are:
Here are my two personal favorites: 1) Programming Python, and 2) Advanced Windows Debugging. The Programming Python is a classic in my opinion - now on 3rd Ed. Adv Windows Debugging is a newcomer, but I have learned more from this book than any single book I can remember in quite some time. Enjoy!
It may not rank among some of the heavyweights mentioned here, but I liked "Computer Networks" by Andrew Tanenbaum.
I realize the majority of readers are SW or Comp Sci, but for anyone wondering about the basics of microwave engineering, I highly recommend this text. IMHO, it's the best textbook I've ever read. Terrific diagrams, tons of practical examples and he doesn't shy away from the mathematics but introduces it intelligently.
The requirements for reading the text is the standard Science/Engineering Calculus background.
There's no doubt about it... the most influential book in my career was "Software Tools" by Kernighan and Plauger. With examples in Ratfor (which I actually used in the golden days!), it taught good, reusable design practices by two big names in the Bell Labs/Unix arena. Especially in this day when many programmers can barely cut and paste toolkit code together, this book can still teach a thing or two about software.
My other favorite was more a lesson in good teaching practices which I continually use years afterward: A Fortran Coloring Book by Richard Kaufman is a great example of teaching to the masses.
The Mythical Man Month is probably the most important SW Engineering book ever.
Second on my list is The Art of Computer Programming. Very dense, nothing to read on a leisurely Sunday afternoon. But very important to get the background on CS. Without having read that, you are not a software developer, you are a coder.
Third, Tanenbaum's Operating Systems book. It is impossible to understand a program's interaction with the OS without it.
The author even made the online version free. http://poignantguide.net/
This book seems so obvious to so many of us that it would seem that it's not worth mentioning, yet there are still so many math/engineering/tech/CS types who haven't read it (perhaps for that very reason). So for those of you who haven't read it, it is a must-read for math- and tech-oriented people. http://www.amazon.com/Godel-Escher-Bach-Eternal-Golden/dp/0465026567
-proidiot
Why is this guy modded down?
Dead tree version available soon. GPL licensed, electronic versions available here and here.
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. :)
VAX FORTRAN Language Reference Manual.
Brett
I have been meaning to read it, but I can't find it. Without Me You're Nothing by Frank Herbert
"Don't meddle in the affairs of a patent dragon, for thou art tasty and good with ketchup." ~ohcrapitssteve
Yup. *UNIX Network Programming* and *Advanced Programming in the UNIX environment* (and everything else by Stevens) is absolutely brilliant.
So many books ... not enough time.
*Design Patterns* is a classic.
*Unix Power Tools* is extremely useful.
Tanenbaum's *Computer Networks* should be read by all programmers.
Bach's *The Design of the UNIX operating system*.
Great Windows SFTP Server!
The title says it all.
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...
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.
Let's not forget the cousins, Effective C++, More Effective C++, and Effective STL. Some of the design patterns and techniques covered in those books apply to other programming languages as well. Also, it is old, but C++ Unleashed, which covers projects that deal with both C++ and Java, CORBA (like I said, a bit old), and other topics of interest for large project developers; and to be fair, Java Unleashed.
Palm trees and 8
In whichever language you choose (the C version is good).
This book is so well written that its fun to read even if you don't have an computational mathematics to perform. Seriously. A fun book on mathematical programming.
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.
Oh also, your use of the word "marketdroids" shows me that you could really benefit from reading some of these sorts of books.
But hey, thanks for playing.
This is my footer. There are many like it, but this one is mine.
Use Case Driven Object Modeling with UMLTheory and Practice:
http://www.amazon.com/Driven-Object-Modeling-UMLTheory-Practice/dp/1590597745/ref=sr_1_3?ie=UTF8&s=books&qid=1230065870&sr=1-3
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.
I wouldn't call that computer science
It's electrical engineering. The title of the article asked for Tech/engineering/CS books.
www.purevolume.com/martyd
A couple of books go without mentioning for Unix Admins: sed & awk, O'Riley, Solaris Internals, Unix Internals, sendmail, Perl Core Language and Java. Also enjoy PANIC!, Sun Performance and Tuning, Blueprints for High Availability - These are outdated but still come in handy.
I would flag this as among the second-tier. Paul Graham's books, especially "On Lisp" are better.
"Internet Routing Architectures" from Cisco Press. It's an older book, but I have yet to find a better book on the BGP routing protocol.
of the FreeBSD Operating System. The current edition was published in 2004, so it's getting a bit dated, but I still think it's one of the best books about operating systems that I've read.
The Soul of a New Machine. I'm not the only one who liked it - he won a Pulitzer prize for it.
Computability, Complexity, and Languages, Second Edition: Fundamentals of Theoretical Computer Science by Martin Davis, Ron Sigal, Elaine J. Weyuker
The densest and yet clearest CS book I've ever seen.
"If anything can go wrong, it will." - Murphy
Agreed. That is the book that tought me C. I tried for weeks to get my head around C, reading through numerous books, articles, etc. Nothing made any sense until I bought my copy of K&R v2. That book blasted through the clutter and confusion in my mind so fast I was practically left stunned. I really can't emphasize enough how excellent this book it.
"linux is just DOS with a UNIX like syntax" -- Galactic Dominator (944134)
I run into very few textbooks that I actually like, so hopefully the fact that I like these two actually means something.
First, "Probability and Computing" by Mitzenmacher/Upfal is an excellent and very readable intro to probability theory and randomized algorithms.
Second, "Online Computation and Competitive Analysis" by Borodin/El-Yaniv is pretty much the de-facto standard for online algorithms. Decently readable.
The snow doesn't give a soft white damn whom it touches. -- ee cummings
Wow, I expanded the topic to include other areas of study. Heavens forbid that a topic goes beyond the strict limitations imposed by the headline/topic.
Interesting, how valuable is your skill without the other disciplines creating a need for it? How valuable are you if you can't allow your skills to help the most amount of people possible? How valuable are your skills if it requires only you and not a team/business?
I'd suggest, not very.
But hey, maybe you're the 1 man who could produce Linux by himself? Or perhaps the 1 man who could invent a product which fixes our global warming problems, without ever needing to bring it to market?
You'd be the first.
(There's a good chance you don't understand what I've just said, however you would if you had studied these topics.)
This is my footer. There are many like it, but this one is mine.
Only released recently, it addresses many common problems in everyday software development.
Visit http://ringbreak.dnd.utwente.nl/~mrjb/growingbettersoftware to download your free copy of the book
Dianetics is one hell of a programming book.
Oh, you meant computers... Sorry.
Dedicated Cthulhu Cultist since 4523 BC.
The collections of essays called Programming On Purpose, by PJ Plauger is well worth overlooking the poor choice of typeface on the covers.
There are three volumes, all well worth internalizing.
Sorry, I don't loan mine.
if it interests you:
The Soul of a New Machine, Tracy Kidder
The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal, M. Mitchell Waldrop
by Geoffrey James: http://www.canonical.org/~kragen/tao-of-programming.html
I wish more programming books were as beautiful, entertaining, insightful and concise as this one.
... with 100,000 Normal Deviates
http://www.amazon.com/Million-Random-Digits-Normal-Deviates/dp/0833030477/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1230067178&sr=8-2
Kept me excited 'till the very last page.
Toast to John Von Neumann!
"Horrowitz & Hill: The Art of Electronics" is a classic. It should be on every geek's desk. It covers many basic concepts without overbearing math.
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
The Corman et al Algorithms Text is *very* overrated as a primary algorithms text. A superior approach would be to use Skiena's Algorithms Handbook and have Corman used as a reference.
Any clue as to why the Corman doorstop is so widely used? I figure it is little more than name recognition. The authors are quite well known and justifiably so. Too bad they can't find graduate students to write them a decent textbook.
Interesting, how valuable is your skill without the other disciplines creating a need for it?
"The" other disciplines? As in, some finite subset? If you mean just "other disciplines", there are plenty. Medical, Law, education (I've worked on apps for all three).
If by "the other disciplines" you mean just the faux-talent of professional bullshitting, then the answer is just "plenty"
How valuable are you if you can't allow your skills to help the most amount of people possible?
Quite valuable because, contrary to what your marketing books may impress upon you, it's not all about the BIGNUMS. My interest is in helping a specific subset of people (i.e. those who pay me for professional work, or those who might get some help from my free-time stuff).
How valuable are your skills if it requires only you and not a team/business?
That's an inane non-sequitur. Not everything worthwhile requires a business or team, and it certainly doesn't require everything to be quantified, monetized, and rubberstamped with managerial marketing approval.
That's the problem with marketing. A mass of soulless ghouls chasing little bits of paper and completely incapable of imagining a universe where every tangible object and intangible concept isn't stamped with a little yellow price tag.
I'd suggest, not very.
Thanks for pointing that out, mate. Could never have guessed that from the context.
Gödel, Escher, Bach: An Eternal Golden Braid
By Douglas R. Hofstadter
Pulitzer winner
The Art of Electronics
By Paul Horowitz & Winfield Hill
The Soul of a New Machine
By Tracy Kidder
another Pulitzer winner
SIGLOST && SIGUNUSED && SIGQUIT
Programming Perl
By Larry Wall, Tom Christiansen, Jon Orwant
On line I remember went something like this:
"I works exactly the way you think it should work, we just have a hard time writing the way you think"
Grady Booch's excellent text on OOA&D is certainly a classic: Object-Oriented Analysis and Design with Applications (3rd Edition) http://www.amazon.com/Object-Oriented-Analysis-Applications-Addison-Wesley-Technology/dp/020189551X/ref=sr_1_2/189-9216128-5749116?ie=UTF8&s=books&qid=1230068582&sr=1-2
This little (and long-out-of-print) book is an amazing description of the actual engineering associated with building an optimizing compiler for the Bliss-11 language. It's also interesting in that many of the co-authors (Wulf's PhD students) have gone on to develop significant software products.
It got me started in compilers over 30 years ago, and I've been doing language design and code generation for most of the time since.
Another suggestion is to check the ACM website. A couple of years ago they ran a contest to find out-of-print classics and arrange to get the top N of them reprinted.
The two best books I have bought in the last few years and which I recommend my undergrad students in engineering on a regular basis are:
- The March of Unreason (ISBN 0199205620) by Dick Traverne:
A discussion on new fundamentalism in science, politics and other areas. It advocates objective analysis of topics, rather than a fundamental view.
- The Visual Display of Quantitative Information (ISBN 0961392142) by Edward R. Tufte:
An introduction on displaying data in an undistorted and objective manner.
In my opinion 2 books every engineer and scientist should at least have skimmed through once in their life.
last printed about 30 years ago and tends to scare many that don't understand its true value - Henley's Twentieth Century Book of Ten Thousand Formulas, Processes & Trade Secrets. Aside from electronics, this one willget one started back on the path of rebuilding the evil civilization after the Apocalypse.
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.
As far as Clive Staples is concerned, though, most people are not aware that he wrote a sci-fi series ("space trilogy"). They have the usual Christian bent, of course. Another poster mentioned The Abolition of Man; this series ultimately presents similar issues in the form of fiction. The middle book (Perelandra) isn't all that great, but That Hideous Strength is rather interesting (though ultimately less action-packed than one might expect.
The World Wide Web is dying. Soon, we shall have only the Internet.
I've read this book cover-to-cover several times, and recommend it to everybody.
http://www.dreamingincode.com/
Computer Networks by Andrew S. Tanenbaum (Author)
http://www.amazon.com/Computer-Networks-Andrew-S-Tanenbaum/dp/0133499456
Numerical Recipes 3rd Edition: The Art of Scientific Computing (Hardcover)
http://www.amazon.com/Numerical-Recipes-3rd-Scientific-Computing/dp/0521880688/ref=sr_1_1?ie=UTF8&s=books&qid=1230069172&sr=1-1
Others that have been mentioned: Mythical Man Month, Art of Computer Programming, Code Complete, Design Patterns, etc...
AKA the Platypus book. Still the best introduction to OOP in my opinion. I reference it regularly.
Take a look at ProgrammingBooks.org. It even has a handy Books Every Programmer Should Read section.
Alternative best book lists are linked to in one of my other posts in this question.
I love going through the latest annual ARRL handbook. (ham radio)
I sig, therefore I am.
Computer Science is not just algorithms and programming :). So a list of other important books:
* Introduction to Graph Theory - Douglas B West
* Computer Architecture - John L. Hennessy and David A. Patterson
* Switching and Finite Automata Theory - Zvi Kohavi
* Compilers - Aho Ullman and Sethi (the dragon book)
* An Engineering Approach to Computer Networking - Keshav
And if you are going to be writing papers, don't forget to read "The Elements of Style" by William Strunk.
While not strictly CS, I use Jim Krause's Design Basics Index all the time when I'm creating UIs for my apps. Gives lots of pragmatic info about color theory and layout do's and don'ts with great examples. My old boss (definitely a Renaissance man - as comfortable going through a stack dump as he is in the art world) insisted we all use it before coding anything to do with UI. It's definitely helped make my apps more usable and not as offensive to the eyes, especially when we're doing a small gig where they can't afford both a programming team and a graphics team.
The Joel on Software series is my favorite read. First book and second book.
Check out Pandora by Music Genome Project
See prev. post.
The lyf so short, the craft so long to lerne
I'm surprised that no has yet mentioned Robert Sedgewick's "Algorithms in %s" % lang series (where lang in ['c', 'c++', 'java']). It's truly the best algorithms/data structures book I've come across. (Though personally, I wish he had a Python version)
Tack on 'The mythical Man Month' - it should be required reading for anyone planning to make software for money.
"We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
Pragmatic Thinking and Learning: Refactor your Wetware is another excellent book from Andy Hunt (co-author of Pragmatic Programmers). It is a good book for anyone seeking to learn how to learn, but is especially geared towards programmers.
Practices of an Agile Developer (another co-authorship of Andy Hunt, I like his writing, and no, I am not him). If you liked Pragmatic Programmer, you'll like this one too. It provides practical advice for development, coding, learning and working in teams.
Extreme Programming Pocket Guide is short, concise, and stuffed full of the extreme programming methodology. Easily the best gram for gram book I ever bought.
I'm surprised no one has yet mentioned
Refactoring: Improving the Design of Existing Code, the seminal work on making code smell better. Provides patterns for making your code easier to maintain and modify without changing it's behavior.
Effective C++ and More Effective C++. I haven't read Effective STL, but I'm guessing it's good as well.
Also remember: The Art of Unix Programming and of course Joel Spolsky is a favorite, too.
I guess everyone should read The Fifth Disciple, as well.
And then there's of course Crucial conversations
The lyf so short, the craft so long to lerne
1. Using Unix (Special Edition 1999) By Steve Moritsugu, Julia Kelly, Steve Moritsugu, without this book I never would have gotten out of the quagmire I first immersed myself in.
2. Linux Shells by Example By Ellie Quigley. Not much missing in this tome. Sed Grep Awk(gawk) bash csh and more.
3. nearly any pocket book by O'Reilly. This is AFAIK all I'll need to keep me going. All the rest are for fun.
I'm sorry, I'm to tired to be witty at the moment so this message will have to do.
Digital Signal Processing: A Practical Guide for Engineers and Scientists
by Steven Smith
Best technical book I have ever read. I rate this book up there with Tannenbaum's stuff.
http://www.amazon.com/Digital-Signal-Processing-Practical-Scientists/dp/075067444X/ref=sr_1_1?ie=UTF8&s=books&qid=1230071040&sr=8-1
Older (mostly identical) edition available online at dspguide.com.
For Civil Engineers it has to be Timoshenko's Strength of Materials... :D
I've got a copy of one of the first English versions at home.
Everyone thinks of changing the world, but no one thinks of changing himself. -- Leo Tolstoy
Instead of yet another great book, this Christmas I asked to Santa to bless me with an external hard disk with all those poor trees I already own, but in digital format. Yes, it is a lot of fun to read the hardcopy, but I actually can't cope with the allocated space nor the cloth moths.
I have it right here in my desk as I am implementing a TCP Reno simulator in MATLAB (for learning purposes). I agree, it reads like a classic: concise and thorough.
With this one in the shelf I can even pretend to be a true network researcher :)
First avoid the stuff found on magazine racks. It is designed to sell products advertised by the magazine. Publishing empires have been based on the nonsense in magazines and most of the supposed tech work is junk.
College texts or textbook like books are another kettle of fish. Although some textbooks are written with some fools hope of earning big bucks there are other authors who are almost priest like in their dedication both to a technology and getting it into the hands of the public. Simply research the author and see if the work is peer reviewed. You will find great information that way.
I distinctly recall a book titled "VooDoo Dos" that was hands down better than a thousand other DOS manuals including all the tips stuffed in the magazines. One fellow, in slight rebellion, who actually knew DOS took the time to really write one heck of a DOS manual. That's the kind of information we all need and should expect when we buy a book.
Written by Roger Pressman and has gone through 6 editions (that I'm aware of). It was first introduced in 1982, and I used it as a Senior during my undergrad - I have since used it repeatedly over the years as I've taught software engineering classes. 25yrs after graduating it is one of the books that I keep in my office.
"Software is the difference between hardware and reality"
For my money, I'd recommend (as many others have) Design Patterns by the Gang of Four. The Mythical Man-Month is also good reading. However, for a general essay on User Interfaces, I recommend The Inmates are Running the Asylum by Alan Cooper. Just for a kick-ass read (required reading in my university's Ethics and Computing course) check out The Cuckoo's Egg by Cliff Stoll.
Stevens' Advanced Programming in the UNIX(R) Environment is gospel. Horstmans's Mastering Object-Oriented Design in C++ is an excellent study of OO concepts. The fact that it illustrates its concepts in C++ is irrelevant, although it does make me wonder if it's been updated to Java or something else in wider use these days.
Build Your Own Laser, Phaser, Ion Ray Gun and Other Working Space Age Projects
Poor means hoping the toothache goes away.
By Kenn Amdahl
Good introduction to electronics.
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 : )
The Art of Electronics by Paul Horowitz and Winfield Hill will give you a tremendous insight into how the underlying silicon in your computer (and radio) function. Every time I read a snippet, I want to build something electronic. Link to Amazon.
I'd endorse almost all of the books people have suggested so far, of course.
Less well known, but it really should be:
Mechanizing Proof, by Donald MacKenzie
(maybe the best single book written about the history and culture of proving programs correct - all the more remarkable as it's written by a sociologist, not a computer scientist)
TeX: The Program, by Donald Knuth
The actual program, in literate programming form
DOS Power Tools by Paul Somerson. This beautifully written book was full of history and practical tips, encouraged tinkering, taught simple assembly language, was generally a delight to read and use. After reading it, I felt like I actually understood the operating system top to bottom, and I was its master. I've never found its equivalent for any other OS.
Here are some graphics books on my shelf:
General Graphics:
Real-time Rendering: Tomas Akenine-Moller
Any OpenGL Red Book
Physically Based Rendering: Humphreys and Pharr
GPU Gems: Published by nVidia
Intro to Graphics: Shirley
Visualization
Real-time Volume Graphics: Engel et al.
Computational Geometry
Computational Geometry: de Berg et al.
Introduction to Algorithms: CLRS
Physical Animation
Fluid Simulation for Computer Graphics: Bridson (I haven't read it but I have read his '06 and '07 SIGGRAPH course notes)
Numerical Recipes: Press et al. (In general, a must have book for Computer Science)
Image Processing/Vision
Digital Image Processing: Gonzalez et al.
Computer Vision: Forsynth and Ponce (not a huge fan, but apparently lots of people use it)
Shape from Shading: Horn and Brooks (kind of old)
I'm sure there are plenty others as well that are still packed away in boxes. These are the ones on my shelf atm.
If you are into eclipse RCP I would recommend Eclipse: Building Commercial-Quality Plug-Ins
And then there is this superb newsgroup.
For algorithms I found "Algorithms in C" by Robert Sedgewick very useful.
I hope I'm not being to obscure with this one.
If you ever wanted to figure out just how a virtual memory manager can work (or how you can do more with data structures and interrupts than you can with algorithms) the ancient and technically out of date "VMS Internals and Data Structures" has a lot of operating system explanation that is largely still relevant today. You may not need to ever tune a Vax/VMS system again in your entire life, but knowing the sorts of hoops OS' need to go through -- even in one example -- gives you a better appreciation of what's computable and what ain't.
It's deep background. Remember this is the book about the operating system designed by the guy who later went on to develop Windows NT. Among other things, it shows you just how omitting one of the KESU rings in a hardware architecture can give you bonus security problems for years. The deep understanding of how you orchestrate multiple process threads asynchronously with IO devices you can get from this study gives you man-behind-the-curtain cred when you're trying to dissect a truly thorny problem, or understand just why your system may have hung at that point.
And I love the little chapter heading quotes.
Do not mock my vision of impractical footwear
Statistics for Experimenters: An Introduction to Design, Data Analysis, and Model Building
by George E. P. Box, J. Stuart Hunter, William G. Hunter
Dave Barnes 9 breweries within walking distance of my house
Discrete Mathematics with Applications by Suzanna Epp. This book was a godsend in my discrete math class, which was taught by a Chinese prof who had recently acquired English, and who chose what must be the most god-awful textbook I've ever read. It's a favorite casual-reading book of mine.
And in the "useful" category, Friedl's Mastering Regular Expressions is my #1 most referred-to book. Totally dog-eared. And I think I've only mastered about a 1/3 of the book.
As I would expect on /.
Doug Jensen
Problem Solving in C++ Including Breadth and Laboratories is, without a doubt, the world's best book on C++. Over the years I have spent hundreds of dollars trying to teach myself C++. It was maddening! I was considering for the longest time taking out a loan and paying for classes. Then I discovered this book (ironically given to me for free by a community college during a technology expo they were hosting), and I could finally understand the concepts. Where these books which came so highly recommended to me failed, this simple somewhat obscure book succeeded with ease. It's a great book because it's extremely well organized (one of the first books with an index which didn't require 70 different look ups to find out what you need to know), written in plain language, defines everything (EVERYTHING!), gives you simple exercises to implement what you've learned, and even teaches you some interesting trivia about computing. These resources make it the best source for anyone who is not familiar with C-like languages, or maybe even people who are not familiar with computers at all.
Without a doubt the best book to learn how real computers work. http://publibz.boulder.ibm.com/epubs/pdf/dz9zr006.pdf Putting on asbestos under ware now.
If I'm not mistaken a book like Code Complete is mostly about programming... Besides there are still some CS degrees that have a programming component so the suggestions aren't actually offtopic :)
(In reality I'd say each side helps to inform the other - there are some abstract data types in the Practice of Programming for example and pseudo code in Introduction to Algorithms)
That's the problem with marketing. A mass of soulless ghouls chasing little bits of paper and completely incapable of imagining a universe where every tangible object and intangible concept isn't stamped with a little yellow price tag.
Hold on right there mister!
We are not just talking about bean-counting here, we are talking about the workings of society. The fact that you mistake the study of enterprise and economy for advertising and accounting only speaks of you.
The very fact that you produce stuff independently that serves other people's needs makes you an entrepreneur by definition, even if you don't seek to maximize profits, or profits at all.
Perhaps you should look a bit more into it before flamin' away in teh intertubes, for right now you are in the unenviable position of being corrected by a lame CS undergrad.
A Discipline of Programming , E. Dijkstra
It's not very sexy, but it's fascinating and readable. I remember coming across it in Dillons bookshop, not knowing the name, and flicking through. Half an hour later, when I realised the time, I knew I had to buy it! Other books go into more exhausting detail (Knuth in particular), or cover a wider range (Knuth again!), or more modern ideas or languages. But Sedgewick is a great read, and I've been through it several times.
It covers all the basics (maths, searching, sorting, strings, graphs, and touches on FFTs and hardware and optimisation), and gives enough detail that you could go off and write some programs yourself. But more importantly, it explains them: how each algorithm works, what it's trying to achieve, how it behaves, and why. And it's because it explains the ideas so well that I'd recommend it. After every section I felt I'd learned something -- not because I had to, but for the sheer pleasure of understanding something new and interesting.
Other recommendations: Effective Java (a staggering amount of insight into the language), Thinking in Java (by someone who understands that language is more than just syntax), Deep C Secrets (again a pile of insight, interspersed with anecdotes and some rather off-the-wall diversions), Programming Pearls and More Programming Pearls (problem-solving in bite-sized chunks -- a little dated but still interesting). Plus I've already mentioned Knuth. K&R is well done, though narrow in scope. I find Design Patterns useful, but more for clarifying things I've already seen than for learning new things. I've never actually read The Mythical Man-Month, but people I respect mention it, so I'm sure it's well worth reading too!
Of course, times being what they are, especially in this field, a lot of interesting stuff is on-line. Some hat should go without saying hereabouts include the latest Jargon File, some of Eric Raymond's books, and more online documentation and archives than anyone but Google can cope with.
Other interesting articles include The Programmer's Stone, a guide to writing Unmaintainable Code, The Ten Commandments for C Programmers (annotated edition), Ken Thompson's Reflections on Trusting Trust, What Colour are your Bits?, and Guy Steele's Growing a Language.
Ceterum censeo subscriptionem esse delendam.
One of the best (if not the best) Actionscript books out there...
http://www.moock.org/eas3/
excellent book about programming, starts off with lower level asm programming first and later on explains what the higher level stuff like c does in assembly.
here is where you can download it.
-----
Understanding the FFT, Second Edition
http://www.amazon.com/Understanding-Second-Revised-Anders-Zonst/dp/0964568152/
Examples are in BASIC (with line numbers even), but very simple explaination of the fast Fourier transform.
-----
Adventures in Group Theory: Rubik's Cube, Merlin's Machine, and Other Mathematical Toys (2nd edition)
http://www.amazon.com/Adventures-Group-Theory-Merlins-Mathematical/dp/0801890136/
Introduction to group theory using Rubik's cubes. Lots of typos, but they won't slow you down much.
-----
Cryptography Decrypted
http://www.amazon.com/Cryptography-Decrypted-H-X-Mel/dp/0201616475/
Cryptography explained in pictures.
-----
I put the 'fun' in fundamentalism
Nor does it mention breakfast, or shoes, as a concept. And I'm starving! And my feet hurt!
Yeesh. They've got to assume you know something before you get to page 1.
$META_SIG_JOKE
While Intro to Algorithms is considered the bible of algorithms, the Algorithm Design Manual might please some even more. Half the people I know love it for the extensive and very useful "Catalog of Algorithmic Problems". The other half like it for the entertaining yet educational "war stories".
Violence is the last refuge of the incompetent. Polar Scope Align for iOS
The Elements of Style, Strunk and White.
Anything by W Richard Stevens, esp. TCP/IP Illustrated and APUE.
The Practice of Programming, and most by Kernighan and anyone.
Stroustrup C++ Programming Language.
Wall et. al Programming Perl. I've moved on from the language, but that was a book and a half.
Mythical Man-Month, Brooks
Lakos Large-Scale C++ Programming.
Not GoF Design Patterns. Great idea, mediocre book.
Not one Java book, though that's the language I've paid my bills with for seven years.
Although I confess that I may have spent too much time in school, I can say that I had an opportunity to read and study a lot of books in both electrical engineering and computer engineering. My personal favorites are:
There are two types of people: those prepared for the zombie apocalypse and those who will be eaten.
Doubtless Dijkstra is one of the titans of the field. Interesting fact: the first syllable of his name sounds like "day," not "dye." Not many Americans seem to know this (not that I am assuming you are American).
$META_SIG_JOKE
I raise my glass to you, RF dude. It's been years since I worried about cleaning my connectors with q-tips or thinking about KTB, but the mention of Pozar takes me back.
May your power supplies always stay well decoupled from the rest of your circuit.
$META_SIG_JOKE
Agreed. The chapter on noise finally got me to understand what three crappy textbooks and an undergrad microwave course did not teach me.
Computer Networks (by Andrew S. Tanenbaum)
Fundamentals of Algorithmics (by Gilles Brassard and Paul Bratley)
Applied Operating System Concepts (by Abraham Silberschatz, Peter Baer Galvin, Peter Galvin, Avi Silberschatz)
Compilers: Principles, Techniques, and Tools (2nd Edition) (by Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman)
Software Engineering: A Practitioner's Approach 6th edition (by Roger S. Pressman)
Programming Languages: Design and Implementation (4th Edition) (by Terrence W. Pratt, Marvin V. Zelkowitz)
UML User Guide (Booch, Rumbaugh, Jacobson)
Unix (by Bach)
and more ... :)
Not universally endorsed
you had me at #!
I was quite amazed by the quality of this book, especially regarding how deep and pleasant all the CS foundations are presented to the reader. One of the best CS books I have here, definitely.
Out of print I think... big collector value
To Kernighan & Plauger's The Elements of Programming Style.
you had me at #!
Written by Pong P. Chu. This book focuses on the RTL synthesis standard (IEEE 1076.6) and has in depth coverage of how the language constructs translate into hardware. Also gets into design aspects like resource sharing and crossing clock domains.
Fundamentals: "Purely Functional Data Structures" by Chris Okasaki. A short, extremely clear book which will explain why key data structures work.
Engineering: "The Mythical Man Month" by Fred Brooks (it won't be obvious how good this book is until you graduate and get your first job).
once upon a time there was a vigorous discussion on perlmonks about non-perl books that have made people better programmers...
http://perlmonks.org/?node_id=508862
my reply...
http://perlmonks.org/?node_id=509146
* CLR
* The Dragon Book
* The Visual Display of Quantitative Information
* AI: A Modern Approach
* Catcher in the Rye
-- I've been asked about this one. This book is all about perceptions: our perceptions of others, and our concerns about the perception other people have of ourself. Realizing your own hangups, and when you/others are being "phoney" can vastly reduce the amount of bullshit you waste time on in your life/work.
-- The Hoss Man
My favorite tech writer of all time. Each 10 page chapter, written in short words on small pieces of paper will give you a deeper insight into each topic than any 100 pages by other authors. Truly a gem.
http://isbn.nu/9780134701882
Slashdot = Sarcasm
The Design of Everyday Things
And yes, it is a tech/eng/cs book as far as I'm concerned.
JJ
The One, The Only "Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning".
The Russians have won. They have made the world a cesspool of distrust, greed, fear and hate.
The Pragmatic Programmer.. This book is filled with wonderful metaphors about boiling frogs and fixing broken windows. It has pullout tip sheet filled with practical reminders.
http://www.amazon.com/Pocket-Ref-Thomas-J-Glover/dp/1885071000
'Pocket Ref' is a conveniently sized book containing an absolutely outrageous amount of data. In 3-3/4" x 5-1/2" x 3/4" dimensions and around 500 pages, Thomas Glover covers topics from ASCII tables, to load bearing capacities of 2'x4's, to a comprehensive math and physics formula 'cheat sheet'.
I don't know if it is possible to exaggerate how useful this book is. Along with a decent calculator and a knack for solving practical problems, you will be unstoppable with the Pocket Ref at your side. McGyver certainly had a copy hidden in his shirt pocket.
Sauer
by Foley, van Dam, et. al.
donald norman, all his books
-never blame users for your mistakes in design
edward tufte, all his books
-when to keep the information, when to remove visual noise
-good data presentation saves lifes
fooled by randomness
-why some things succeed and others fail
C - K&R ,
Deep C Secrets - Peter Van Der Linden.
C++ - Stroustroup ( C++ classic ),
Bruce Eckel ( Thinking in C++ )
Algorithms - Tanenbaum, How to solve it by computers - Droomey
O.S - Tanenbaum
Unix Internals - Maurice Bach,
Magic garden explained - Berny Goodheart ,
New frontiers in Unix - Uresh Wahalya
1 GED (Godel, Esher, Bach), Douglas Hofstadter
2 THHGTTG (Those who know, know)
3) The series of Knuth
(a lot has changed ........)
This book about the notorious ICMP Echo Request/Response utility is a must-have for any person in IT.
This highly-rated review describes the book more informatively than I can.
Show me on the doll where his noodly appendage touched you.
I am shocked, shocked I tell you, that "The Pragmatic Programmer" by Andrew Hunt and David Thomas isn't mentioned more. Awesome book.
"Types and Programming Languages" is far and away the best, most mind-changing computer science book I have ever read. Though, it is probably too theoretical for the tastes of most ./ers
I'll recommend a book that's really not CS, but is the most elegant, crystal-clear exposition of developing ideas from axioms I have ever read:
Calculus by Spivak
It's ostensibly about calculus - but it's really about how to think with crystal clarity and minimal assumptions and develop a vast field (in-joke) of conclusions from this. It was the first truly deep mathematics book I read, and I think it's a worthwhile step for anyone who thinks for a living.
There is a concept that is mentioned from time to time in mathematics education, called 'mathematical maturity'. It's a hard concept to define, and hard to measure with a test. My own, personal, idea about it is the level when you have to learn mathematics that extends beyond what your intuition has reached.
It is a difficult bridge to cross, and most people (in my experience) stop learning mathematics when their intuition about it ceases to carry them further. But it is an amazing bridge to cross, and once you do, you start to see how axioms can start to shape your intuition - it's a breathtaking experience (at least it was for me).
I crossed that bridge, a long time ago, thanks to a great mathematics professor, Dr. Swiatek, and that book. Like many of the greatest books, it takes you on a journey - it tells you a story. It brings you along on a voyage through the landscape of what a number really is, and what comes as a result. I can't recommend it enough if you are determined to learn what mathematics is really about.
I have a rule that I apply and it seems to work very well.
A good technical book is thin, often expensive with a fat index section.
Does not apply to reference books as they are an index of them selves
Not really a book, but I like the 'technical' writings at eternallyconfuzzled.com.
by christian queinnec is an absolutely great* discourse in the construction of linguistic towers.
Where in "Tech / Eng. / CS" would you put "advertising wankery and asskissing?"
[Y]ou could really benefit from reading some of these sorts of books.
Fortunately, I don't have to. I actually possess a skill.
Feel free to start a company and do without "marketdroids" and their "advertising wankery and asskissing" - and see how far you get. The truth is that if these non-technical people did not help companies succeed, then you could do without them and save X amount of money (a significant amount) and would be able to win in the marketplace. However, it would seem that all real companies have to have both technical and non-technical people - both have skills which do contribute to the company's ability to make money.
It's fine to love "Tech / Eng. / CS" and want to kick ass in technical skills, but it is very narrow minded to think that those are the only skills that matter and that contribute anything. You have to be able to sell your product, comply with a bunch of laws, finance product development and make smart moves against competing companies to succeed. I wish it was just about having a better mousetrap, but it aint. (Mod me down if you feel like it, that doesn't change anything.)
Some suggestions on good business books: The Business of Software by Cusumano (general overview of software business), On Competition by Porter (for software product companies), Managing the Professional Services Firm by Maister (for software services companies), Behind Closed Doors (general management) and the Art of Agile Development (for agile organizing).
The Pascal User Manual and Report. For some reason, I've got three of these [so I must REALLY like it] and now that I've seen the price on Amazon, I'm keeping them!
@peetm
Some others that I have/really enjoyed/re-read:
The History of Programming Languages
Inner Loops
Using Z
The Interpretation of Object Oriented Programming Languages
@peetm
Others by Brian Kernighan if you like _The Practice of Programming_. _The Unix Programming Environment_, also with Rob Pike, gets across the philosophy of how Unix is meant to be used, covering a bit of shell, awk, C, yacc, etc. _Software Tools_, with Plauger, writes many of the well-known Unix programs in Ratfor (a better Fortran), including the ratfor preprocessor that turns ratfor source into Fortran. Make sure you get the Fortran version and not the Pascal one; that caused bwk to write his infamous _Why Pascal is not my Favourite Programming Language_. Also with Plauger, _The Elements of Programming Style_. This, modelled on Strunk and White, takes real-life poor examples of code and critiques them. _The Awk Programming Language_ is a nice slim tome that uses awk to do lots of interesting things.
Other Bell Labs authors are also excellent. You must surely have _Programming Pearls_ and _More Programming Pearls_ by Jon Bentley. (Nothing to do with perl(1).) And he's got _Writing Efficient Programs_ out now too.
i second the notion that sicp is a technically superior book to k&r. i own one of the first 100 copies of k&r and worked through sicp in the 1980s and then again quite recently to brush up. k&r makes your brain think about the code whereas sicp makes your brain think about the logic behind the code.
This was one of the first technical books I purchased when I started in this crazy business. It's one of the best books I've ever read on how to think like a tester. Following Myers' principles will make any developer's or tester's life better.
For the non-CS folks among us: The Art of Electronics - Horowitz and Hill Numerical Recipes - Press et al (I know it's got flaws, but this is an interesting and readable book on math!) Classical Mechanics - Goldstein Radio Amateurs Handbook - ARRL eds. The entire MIT Intro Physics texts by A.P. French Halliday and Resnick.
Although it's not about programming, I'd recommend "The design of everyday things" by Donald A. Norman. It gives a good idea on how to design user interfaces (including, but not limited to software). It's really well-written and nice to read, wether or not you know something about user interface design.
5th edition copyright 1992
You can find his original post, and you can obviously find the book on amazon.
http://www.amazon.com/Stealing-Network-How-Own-Continent/dp/1931836051 Well, this got me into Linux and Network Security the way no other source could have. Oh, also came to know about Slashdot.org through this book only. The whole culture, basically. ;)
Lion's Commentary on UNIX has a very special place in my heart. First, it's a great commentary that allows the student to teach themselves, dropping just enough information to help them when they get stuck. Second, for the longest time, the only way to get a copy was by sneaking down to the photocopier while everyone was asleep and making a copy that a friend had gotten by sneaking down to the photocopier while everyone was asleep. Third, it's been reissued, so people can truly appreciate it.
It's old now, and I found the author to be a bit of a know-it-all, but the book itself was great. No code, no requirements, just ideas on making a website useful.
http://philip.greenspun.com/panda/
And from the "mother of the internet": Perlman, Radia (1999). Interconnections: Bridges, Routers, Switches, and Internetworking Protocols (2e ed.). Addison-Wesley Professional Computing Series.
Steven's Unix Network Programming has to be one of the best practical books. One of the funnest reads I've had that was also very enlightening was Expert C Programming: Deep Sea Secrets by Van der Linden:
http://faculty.upj.pitt.edu/gmDick/courses/sea/vanDerLinden/expert.c.programming.html
Those are all classics. My favs are here (with ISBN numbers) http://www.s5h.net/books.html
Why UNIX?
This was my first computer book and still the best on my shelf. A classic and great introduction to computer programming. In a sea of dry reading material, it stands out from the rest. It's one of the few computer books that's any fun.
Hold it yourself. Never said anything about accounting. Actually, I consider the study of business to be the study of advertising and middle management.
I've got no beef with accountants. Especially anyone who understands the Lovecraftian clusterfuck that is "Medical Billing"
... by Hagan, Demuth, Beale.
Amazon link
Most of my other favorite books have been posted here already, but no books on this topic have appeared yet.
I will be taking this course next term so I already got this MATLAB based book. I've already been reading it and it definitely deserves all the 5 star ratings it is getting on Amazon.
- as
http://www.amazon.com/Discrete-Time-Signal-Processing-2nd-Prentice-Hall/dp/0137549202/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1230144276&sr=8-1
That's the book that made me understand a lot of the maths I had (supposedly) learned before.
Security Analysis by Benjamin Graham
http://www.amazon.com/Recursive-Universe-Complexity-Scientific-Knowledge/dp/0809252023/ref=sr_1_1?ie=UTF8&s=books&qid=1230146873&sr=8-1
William Poundstone's "Recursive Universe" starts with Conway's mathematical simulation "life" and works his way to a startlingly coherent theory of the limits of knowledge.
It was the classic but now is so out of date it is not valuable. To be a classic it's content has to transcend time. I like all of Stevens stuff but to be blunt Charles Kozierok's TCP/IP guide is the new hotness and destine to be a classic, plus it is up to date.
Oh, for the techie out there there are some great books
Geekonomics: The Real Cost of Insecure Software by David Rice
The New School of Information Security by Adam Shostack and Andrew Stewart
Eric Sink on the Business of Software
and the true classics every geek should read
The Undercover Economist by Tim Harford
Freakonomics [Revised and Expanded]: A Rogue Economist Explores the Hidden Side of Everything by Steven D. Levitt and Stephen J. Dubner
For those of you who think technical skill without understanding how business works will save you you are mistaken. The days where we can bury our heads and pretend that what the marketroids and embezzling accountants are doing are not important to us are gone. In tough economic times the one-trick prima donna goes first. The top question says "Tech / Eng. / CS", sorry fools but you can not succeed in those fields without some knowledge of business and economics. And you'll never be rich and retire without
Personal Finance For Dummies, 5th edition by Eric Tyson
The Millionaire Next Door by Thomas J. Stanley and William D. Danko
I like Calculus from Michael Spivak.
Difficult for some students though.
Hennesy and Pattersons masterpiece.
http://www.amazon.com/Computer-Architecture-Fourth-Quantitative-Approach/dp/0123704901/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1230177565&sr=8-1
Also by the same authors - Computer Organization and Design: The Hardware/Software Interface
http://www.amazon.com/Computer-Organization-Design-Hardware-Interface/dp/0123706068/ref=pd_bxgy_b_img_b
Best books to learn about processor internals and parallelism...
Knuth's 3 volumes of The Art of Computer Programming (have never seen volume 4 though)
Another text that I would consider classic is "Data Structures and Algorithms" by Aho, Hopcroft, and Ullman.
Thru the years I have been truly shocked by how some people have come into computer programming without a CS degree and have little, if any, exposure to algorithms... the programming is just gross. No fundamental designs, no usage of tools that would facilitate the processing... code that processes instruction commands that could have benefited from LEX, just an ungainly monolithic function several thousand lines long.
Bertsekas and Tsitsiklis's Introduction to Probability Theory (1st ed) is a fantastic book about probability. It assumes that all you know is calculus, and builds all the fundamentals from there. I *highly* recommend it!
This book will teach you how to get a clear picture of what you want to build before you build it; it will also explain what the price of not doing so is.
This is a really good guide on how to write software requirements, I must also point out that most of the ideas there can be applied in other cases where planning is needed (ex: going shopping, organizing a party, moving out, etc).
http://www.amazon.com/Software-Requirements-Second-Pro-Best-Practices/dp/0735618798/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1230202804&sr=8-1
The saddest poem
Maybe not a classic, but I always liked it. Winston's LISP is an easy introductory textbook with lots of examples and solutions. All along the way it seems to say, "See how easy this is".
I really enjoyed Dave Agans' Debugging Rules, a book that presents a general, solid debugging process. One of the best points is to first be sure you can reliably trigger the bug, so that once you think you've fixed it, you can then do what triggered it before and verify that it does not still occur.
John Mitchell - Concepts in Programming Languages
Every year, the Jolts are awarded to the books considered by the judges (yes, I am one) to be the best in the industry. Granted that tech info does go out of date, still you could do worse than to click the "past winners" link at www.joltawards.com. It's a pretty eclectic bunch, but the winners all share one characteristic: That year, they wowed a majority of judges, who are very experienced in our field.
Fundamentals of Database Systems
Deven
"Simple things should be simple, and complex things should be possible." - Alan Kay