Best Computer Books For The Smart 522
You'll remember last week, I asked for recommendations of the Best Websites for developers. This was a -great- thread and in the story, I mentioned that I was planning on doing the same regarding books this week. So here it is. What do you, the slashdot reader consider seminal works? What would you consider great introductions to technical topics? If you are interested, check it out...
As part of this I'm looking for books on C, C++, Perl, Python, PHP , System Administration, anything...you name. As before I have opinions on great books, but I want to see what you think. Also, what do people think is a great introductory book for people new to linux.
Isn't it obvious? (Score:2, Funny)
Warning: Redundant Troll Pandering (Score:2)
Re:Isn't it obvious? (Score:2)
"How to Fuck up and Hide it" by J.D.Coder
"Speaking Marketroid" by C.U. Sales
"Book Cooking for Dummies"
For applied C++ (Score:3, Interesting)
Re:For applied C++ (Score:3, Interesting)
More C++ suggestions (Score:4, Informative)
A decent list of C++ books is in this newsgroup posting [google.com].
Re:For applied C++ YEAH! (Score:3, Informative)
If you truly believe that those are the ten most important algorithms of the 20th century, you really need a change in perspective. Quicksort could certainly be put forward as one of the most important algorithms of all time in computer science. Most of the remaining algorithms mentioned are important for their mathematical basis and/or their contribution to the field of engineering, not for their contribution to computer science.
And of course, in order to make any use of these algorithms, it is important to have a good implementation of them. If you don't know how to write those "frickin for loops" and how to make use of your development tools of choice, you're going to get nowhere real fast. It's true that from a computer science perspective, many development languages or features in them are isomorphic and once you've learned it once, the rest is mostly just a different syntax. But you do have to learn it once, and well.
Applied Cryptography (Score:4, Informative)
Re:Applied Cryptography (Score:2, Informative)
Re:Applied Cryptography (Score:2)
Re:Applied Cryptography (Score:2)
Re:Applied Cryptography (Score:2)
Kahn's The Code-Breakers (Score:3)
AC is a fine book if you're reading around to be able to implement protocols and cryptographic algorithms, but if I had to pick one book on cryptology it would be David Kahn's The Code-Breakers [amazon.co.uk]. A fantastic book on the history of cryptology. I can't even begin to phantom the amount of research that went into this tome, it's just unbelievable.
Don't get the abridged version, and don't expect this one to be up to date on things happening after WW2 -- but understand that this is not a failing, it's a strength.
It 1100+ pages of pure goodness, and I couldn't put it down.
Re:Applied Cryptography (Score:2)
You mean the part where he says he lied about everything in "Applied Cryptography"?
Obvious Perl choices.... (Score:4, Informative)
Perl Cookbook (Bighorn sheep)
some good ones.... (Score:4, Informative)
Dragon Book (Compilers - Principles, Tools & Techniques, Aho et al)
Gang of Four (Design Patterns, Gamma et al)
Andy Tannenbaum's OS book
That thick ass Intro to Algorithms book from the MIT boys
Patterson/Henessey Computer Organization & Design
Re:some good ones.... (Score:2, Funny)
UNIX System Administration Handbook (Score:2, Informative)
When I was thrust into the role of assistant System Administrator at the first company I worked at out of university, the "UNIX System Administration Handbook" by Evi Nemeth, Garth Snyder, Scott Seebass, & Trent R. Hein was recommended to me as a good overview book of maintaining a Unix system, and a great reference for whenever you needed to do something. I was very impressed, still have and use my copy today, and would recommend it to any other new SysAdmin out there.
A couple of suggestions (Score:3, Informative)
Refactoring: improving the design of existing code, by Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts.
Joe Celko's SQL books.
It's an introductory text, but Jerry Sussman's and Julie Sussman's Structure and Interpretation of Computer Programs is pretty good too. It makes you think about things more deeply than many other books do.
The best books ive read (Score:2)
John Smiley makes great books, mainly because, it makes it alot easier to read through boring as hell visual basic and java books when its told in the style he uses.
You can also learn about from websites, marinoland C tutorial is the best
It only teaches you the basics, but the foundation is what matters most when learning C, you can buy a refrence book/manual and deal with the advanced stuff as you have to use it.
Just a few that come to mind.... (Score:5, Informative)
- Great book, little bit of everything.
Code Complete - Steve McConnell
- Must read for anyone serious about programming. Read it.
Advanced Programming in the UNIX Environment - Richard Stevens
- Still one of the best UNIX programming books I've seen.
Since the advent of the web, though, I've come of the opinion that language agnostic books are the important ones. Books on particular languages ("Learn Foo in 21 days", "Practical Programming in BarBaz") or technologies date way too quickly. The web is the best source for information like this.
I think we're thankfully seeing more books like "Pragmatic Programmer", the "Extreme Programming" series, "Design Patterns", "Refactoring", "Death March" and other books that transcend particular languages and technologies.
Re:Just a few that come to mind.... (Score:2, Funny)
I emailed him and told him that I loved his list, had read a good portion of it, and was copying the rest down to look for. Then I recommended he look into a fantastic book called "Code Complete."
Just before I hit 'send' I realized what I'd done. So I changed the text, but told him what happened. He sent back a nice reply that I probably still have around here somewhere.
Re:Just a few that come to mind.... (Score:3, Informative)
Language agnosticism and using the web (Score:3, Interesting)
I think that was always true beyond a certain point. Most developers follow the same path: they start out with specifics (their first language, a particular I/O library) and as they learn more specifics, they start to see the generalities (procedural/OO/functional/etc. approaches, "pseudocode" for algorithms, concepts like controls/widgets and event-driven code in GUIs). There is always a need for good information on any given tool, be it a programming language, a library or whatever, but the distilled knowledge that transcends any specific tool will always be more useful for longer.
That I have to disagree with, though. The web is a great source of information for a few languages, particularly the less popular ones. It's a lousy source of information on good programming technique in many (C, C++, Java, etc), because most of what's there is written by enthusiastic but ill-informed authors, and they simply spread their poor style or incorrect knowledge.
Most languages do not change so fast that a good book will date too quickly to be useful. In various places I've programmed, there have been plenty of books on the shelf covering C, C++, Java, Python, Perl, FORTRAN and other languages, many dating from several years ago but still just as relevant today. Sure, there come certain cut-off points; books with only the Java 1.0 library in them or dating from before the C++ standard have limited use, now. But those cut-off points are relatively rare. Reading a good book takes only a few days, and even if the benefits last for a year or two, that's still a very sound investment.
The web can be good for keeping up with rapidly changing libraries (Java's, for example). Then again, if your library is changing so fast that books on it are obsolete before they're useful, perhaps you should slow down. This problem is usually caused by adding too much to a library too fast, and the consequent continual efforts to clean up the mess.
Best in Electrical Engineering is DDPP (Score:2, Informative)
It starts with simple logic, truth tables, and so on, and covers more advanced topics in later chapters such as VHDL and other cool things. If you're not strictly CS, this is *the* handbook to have if you don't want to look like a doufus listening to EE guys. And, I've always found the index to be very complete (and filled with riddles) -- something MANY books seem to be horrible at!
I'd have to say the best 'feature' of this book -- and of any other, I'd say -- is the offer of a cash ($5!) reward for the first to discover an error!
(The author maintains an errata page and other goodies at http://www.ddpp.com [ddpp.com])
Object-Oriented Perl by Damian Conway (Score:2, Interesting)
Shader Writing (Score:2)
Get theory books. (Score:4, Insightful)
Interesting choices are books written "by the language author" (think Stroustrup, Larry Wall, etc), or books by people with a good background in CS (a CS professor, for example).
Also, books on theory are interesting. A book on Compilers may change the way you think. (The old "Dragon" book is nice, and Andrew Appel's book is also interesting). One book on Analysis of Algorithm like the one by Cormen, Leiserson, Rivest and (forgot the third author) is quite good, but you need a decent math background.
And for a reference, I think the more compact the better (I use Java in a Nutshell). References shouldn't be more verbose than the necessary.
(Just my $0.02)
some recommendations (Score:3, Informative)
For Java, a smart person with a little computer background should be able to figure it out from the language definition. Any of the more complex topics in Java change so quickly that it isn't worth buying books on them anyway--just use the on-line references. Sun has on-line tutorials ("trails") at developer.java.sun.com, left over from the days when Java wasn't hot yet and when they still had to bother recruiting people to Java.
For Perl, I wouldn't bother with any kind of reference. Just find scripts that roughly do what you want and hack them; it's blind groping around, but that's the way Perl works. If you can't get it to work that way, you probably should be writing in something else other than Perl. If you must, get something like the Perl Cookbook and a quick reference guide.
For Python, I like "Python and Tkinter Programming" and "The Quick Python Book", although O'Reilly's reference is also decent.
For a fun yet challenging introduction to computer programming, "Structure and Interpretation of Computer Programs" is good. What makes it even better is the fact that it's a book that teaches modern abstraction techniques but does not rely on object-oriented programming for everything. Most people coming to computers and computer programming wrongly think that objects are either the best, or even the only, way to build abstractions.
Re:some recommendations (Score:3, Insightful)
domc
Re:some recommendations (Score:2)
I agree with that statement. I just recommend that once things start getting difficult, people should start using something other than Perl. For the kinds of things Perl is really good at, little scripts, you don't need a lot of books.
Python recommendations (Score:3, Informative)
Re:some recommendations (Score:3, Insightful)
If you want to advance further, I recommend reading comp.lang.perl.misc for a few months. You'll go from being happy that there's a way to accomplish X through awareness of the many ways to accomplish X to a feel for the best way to accomplish X in a given situation. When I was going through this phase, a single post on clpm could send me on an all-night hacking, reading and learning session.
The only Perl book I can wholeheartedly recommend is Damian Conway's Object Oriented Perl, which I love despite my lack of OO religion. Yes. There is a tendency for OO advocates to rewrite history and essentially claim that code was a disorganized mess before the advent of OO, or alternately taht all previous coding paradigms were simply OO by another name. In fact, most useful code in the real world is procedural C, using functions and data structures as the key abstractions.
Perl is agnostic about OO - the facilities are unobtrusively present. But it's easy to write C-style procedural code in Perl. And the grep, map, and sort functions support functional programming.
http://www.canonicaltomes.org/ (Score:5, Interesting)
Re:http://www.canonicaltomes.org/ (Score:2)
Interesting site. You might want to update your bookmarks. The posted URL doesn't resolve. It's apparently moved to reactor-core.org. Just don't go there with an older version of Mozilla (I've never seen a web page make a browser actually display portions of a page outside the browser window before :-) ). Konquerer works alright (mostly) but, oddly enough, the oldest browser on my system (Netscape 4.76) works the best. Go figure.
And... I didn't see much there that might interest a developer. Unless you're interested in reading about how to write a buffer overflow.
list (Score:4, Informative)
Thinking in C++/Java [mindview.net]
Algorithms in C, the whole series.
Design Patterns by Erich Gamma, Richard Helm,Ralph Johnson, and John Vlissides.
Hidden Order: How Adaptation Builds Complexity and Induction : Processes of Inference, Learning, and Discovery both by John Holland [amazon.com] - father(?) of the genetic algorithm - not necessarily computer books, but they do provide a different perspective on how you can write software to do thing.
[amazon.com]
The Art of Computer Programming, Volumes 1-3 by Donald E. Knuth
Re:list (Score:2)
I haven't read Hidden Order, but I've read Emergence [amazon.com], and I really do not think that Holland is a good writer. This isn't a book one must buy, this is more like a book one maybe lends at a library.
My overall feeling after reading it was that I might as well have gone straight for the papers.
Again, Hidden Order might be a better work.
Hidden Order (Score:2)
Anyway, I rather liked the book, although it is hard to say who the audience is supposed to be. It is too technical to be a good book for the general public, and yet isn't full of proofs to satisify the propeller-heads. And yet, I think it was better than reading the papers, at least for me, because I could focus on the main ideas rather than the details.
! Extreme Programming Explained (Score:2, Insightful)
While I've always found XP to be pretty sketchy to begin with (indeed this book further convinced me of that: This book actually claims that each of its revolutionary new ideas can't be measured alone, but rather have to be all performed in parallel, whereby they'll have an amazing cross-product effect and you'll get multiples of the effects of each piece individually. I couldn't help but thinking of snake oil salesmen: "You didn't have the best luvin' ever? Well you muster forgot to take it while facin' to the East!"
The only way I could even imagine recommending this book is if the same copy is going to be shared among a very large team, but otherwise save you're money. It's shameful to think that this book that literally could have been hashed together on the weekend is seling for the same price that a game that a team worked on for a couple of years.
Knuth's "The Art of Computer Programming" (Score:4, Informative)
I have no doubt that if you want to have a more theoretical background on many subjects regarding Computer Science, you have to read (or, at least, take a glance at) Knuth's [stanford.edu] The Art of Computer Programming [stanford.edu].
His books give an excellent introduction to many subjects, including many of the hardest problems in Computer Science. The first volume of his "The Art of Computer Programming" gives a very concise and comprehensive review of Mathematics needed for the remaining volumes. You might even learn about mathematical objects you never heard of (if you don't have higher education in Mathematics).
If you need something ligther on the Mathematics needed for Computer Science, then you might want to read his "Concrete Mathematics" [stanford.edu]. Quite a beatiful book (typographically speaking), with an outstanding expostion of some advanced topics in Mathmematics neede for Computer Science and also quite funny to read.
I should also mention that his books are also a prime example of how someone should write a book. His books, while mostly technical, show a clear style of writing, direct and also entertaining, while discussing deep subjects.
The "problem" with Knuth's books are that they are intended for serious readers. You know if you are serious if you can read the first pages of his first volume. :-)
Another book that I would recommend is Andrew Tanenbaum [cs.vu.nl]'s "Modern Operating Systems" (which is a bit more practical than Knuth's books) gives an overview of the structure of some common Operating Systems, including DOS and Unix.
I could give you many other recommendations, but you'd have to specify if the other recommendations that you want are more practical or more theoretical.
I hope this helps.
Books: (Score:3, Informative)
2. R. Stevens, Unix Network Programming, 2nd ed.
After that one should decide what to choose. If it's C++:
B. Stroustrup, The C++ Programming language
After that people usually can find their way around books on their own.
Re:Books: (Score:2)
I have a special place in my heart for "Smalltalk-80: The Language And Its Implementation.". When I first encountered it in 1989 or so, it changed how I thought about programming. Now that object-oriented programming is part of the ambient, I don't think it would be so startling, but it's interesting to see where it came from.
These days, you can only get "Smalltalk-80: The Language" which cuts out the last bit, which describes how the language was actually implemented on the hardware available as of 1983. I suppose it's not that relevant to see the bytecode used on the Alto when there are systems like Squeak around that are both portable and quite performant on commodity x86 hardware, but I still find the details of how to implement on 1983 hardware interesting.
Re:Books: (Score:2)
C++ textbooks are notorious for inculcating bad habits in beginning programmers. Of course, some of that stems from lack of exposure to the standard C++ libraries.
My biggest pet peeve: "using namespace std;" is not a magical incantation to be placed in every C++ file. Fine grain control of namespaces is something that C++ students should learn-- collisions are the cause of many a bug.
Re:Books: (Score:3, Insightful)
You have got to be f#&king kidding me! That Stroustrup book is the worst programing book I own.
It's not the book, it's the author -- that book and C++ design show that Stroustrup has pretty poor understanding of the design and philosophy of C. The problem is, C++ is still the most usable general-purpose OO language, and Stroustrup's confusion and his part of C++ dual philosophy are still reflected in it, so the book is still good for studying.
What book could be better to reccomend (Score:3, Informative)
No joke, it really is a good book!
C++ In depth series (Score:3, Informative)
For everything (well, almost) C++, you need the C++ in depth series [amazon.co.uk]. Get it, it's a great package.
Contains More Exceptional C++, Exceptional C++, Essential C++, Accelerated C++ and Modern C++ Design.
Accelerated C++ is the best book teaching C++ from the ground up that I have ever seen. It's worth getting and reading even if you think you already know the basics. Really.
Code Complete! (Score:4, Insightful)
Richard Stevens books (Score:4, Informative)
Aside from that, same as what others have mentioned... Applied Cryptography, Unix System Administration, Practical Unix & Internet security...
Oh yeah, "The Complete Canadian Small Business Guide" has come in handy in many instances indirectly related to programming...
Code Complete, for new programmers (Score:2)
Four sweet little letters... (Score:4, Informative)
(Structure and Interpretation of Computer Programs, a fine book that'll teach you more about programming than should be allowed by law)
Here are some for you.. (Score:4, Funny)
Zoroaster: The Avesta
Lucretius: On the Nature of Reality
Marcus Aurelius: Meditations
Immanuel Kant: Critique of Pure Reason
Albert Einstein: Relativity
Then, more specific for developers:
..and
..by me. ;-)
The Lord of the Rings. (doh)
Hitchhiker's guide to the Galaxy.
How to date a woman.
Definitive guide to mental and sexual masturbation.
Re:Here are some for you.. (Score:3, Funny)
Hear! Hear! (Score:2)
I am going through "The Metamorphosis"...
A brief list (Score:5, Informative)
Aho, et. al. "Compilers"
Alexandrescu, "Modern C++ Design"
Bentley, "Programming Pearls", 2nd ed.
Brown, et. al. "Antipatterns"
Cooper, "About Face: The Essentials of User Interface Design"
Fowler, "Refactoring"
Gamma, et. al. "Design Patterns"
Hanson, "C Interfaces and Implementations"
Johns & Lins, "Garbage Collection"
Josuttis, "The C++ Standard Library"
Kernighan & Pike, "The Practice of Programming"
Kernighan & Ritchie, "The C Programming Language" 2nd ed.
Knuth, "The Art of Computer Programming" vol 1-3
Meyers, "Effective C++"
Meyers, "More Effective C++"
Meyers, "Effective STL"
McConnell, "Code Complete"
McConnell, "Rapid Development"
Plauger, "The Standard C Library"
Stroustrup, "The C++ Programming Language"
Stroustrup, "The Design and Evolution of C++"
For specific topics:
Foley, et. al. "Computer Graphics"
Kernighan & Pike, "The Unix Programming Environment"
Schneier, "Applied Cryptography"
Stevens, "Unix Network Programming"
Stevens, "Advanced Programming in the Unix Environment"
Also the Graphics Gems and Game Programming Gems series are superb. Maybe my list makes me old-school, but I like to understand what is happening from the use case all the way down to the register allocation algorithm. Of course, I can't always do that.
I don't mention any Java books because they get outdated so fast. The language hasn't changed much since 96, but the class library api is in constant flux.
Re:A brief list (Score:3, Funny)
Re:A brief list (Score:2, Insightful)
Re:A brief list (Score:3, Informative)
Expert C Programming: Deep C Secrets
This is the orange book with a blue fish on the cover. the guy that wrote it worked for Sun on the c-compiler or the kernel (dont recall, honestly).
This book is hillarious and manages to tackle all the ugliest quirks of C.
Next (hold your breath)
Inside Windows 2000, 3rd Edition.
This was written by the guy that does the Sysinternals website. If you have any NT/2k/XP machines at _all_, this book is like the bible. All the guts of everything in the architecture and implementation of windows 2000 is explained. Want to know what csrss.exe does ? It's in there. Want to know how kernel debug your windows machine ? included on cd. This book lives on my work bookshelf. I answer more questions for people out of it than anything else i have. Everytime i go to the can, i take the book with me and read a little bit more. It's a good read for no other reason than to stop making stuff up when you want something to insult microsoft for
do you know c++? (Score:2)
Behind the curve on
Don't get me wrong. I absolutely HATE Perl. But when I'm forced by circumstance, I use Programming Perl, 3rd Ed. by Wall, Christiansen & Orwant.
Programming C# by Liberty is the only C# book I've read. I recommend thumbing through it only when you have the
Don't known DirectX and learning DirectX 9 isn't a priority? I wholeheartedly recommend Programming Role Playing Games w/ DirectX by Adams.
There's more. But these are the books I've used most often since January of this year...
Some light summer reading! (Score:4, Informative)
The Pragmatic Programmer: From Journeyman to Master [amazon.com] -- A excellent guide to help you go from spagetti coder to a professional programmer.
Programming Pearls (2nd Edition) [amazon.com] -- Elegant solutions to interesting problems.
The Practice of Programming [amazon.com] -- Coding style, algorithms, etc.
Titles that are more meaty would include Code Complete, Design Patterns, Refactoring, Applied Cryptography, Knuth, etc., but I'm sure these will be mentioned ad nauseam.
"The Frozen Keyboard" by Boris Beizer (Score:2)
"The Visual Display of Quantitative Information" (Score:4, Informative)
"The Visual Display of Quantitative Information" Graphics Press; ISBN: 0961392142; 2nd edition (May 2001)
"Envisioning Information" Graphics Press; ISBN: 0961392118; (May 1990)
"Visual Explanations: Images and Quantities, Evidence and Narrative"; Graphics Press; ISBN: 0961392126; (March 1997)
Depends on the subject (Score:2)
The C++ Programming Language. Bjarne Stroustup
Computer Graphics: Principles & Practice. Foley, Van Dam, et al
Modern Operating Systems. Tanenbaum
Compilers. Aho, Sethi, Ullman
Artificial Intelligence. Russell, Norvig
Introduction to Algorithms. Cormen, Leiserson, Rivest.
Design Patterns. Gamma
Code Complete. McConnell
TCP/IP. Comer
Structure and Interpretation of Computer Programs (Score:5, Insightful)
This is the introductory computer programming textbook used at MIT, and had been featured on slashdot here [slashdot.org]. However it is very different from what you would expect from such kind of books, with Scheme as the implementation language, it really does not teach readers how to code in a specific programming language, but how to program computers in a large variety of paradigms, what are the trade-offs in program design, how to manage complexity, and how the basics of computing works, by stretching the flexibility of the Lisp family of languages to the maximum. I first read it four years ago as a freshman, and it was a real eye opener. And it never ceased to amaze me through all these years, as I continue to discover new insights in the passages.
You can almost find a full undergrad CS program concentrated in this book, with topics including language design and computing paradigms (object-oriented, functional, imperative, non-deterministic and logic programming, as well as lazy evaluation), operating systems (issues of concurrency), architecture (the design of a register machine), and compiler construction (the reader is asked to build a Scheme compiler in the end). Instead of being filled with buzzwords, here you are shown how the basics of everything works, in ways that you can really understand. Working through this book will teach you concepts that many people with a CS degree had never heard of.
Hell, if I could only save one CS book when the world comes to an end, this would be the one. And the best part is: you can get the full-text online here [mit.edu] at MIT Press. Definitely a must read.
Best graphics books, in my opinion... (Score:2)
Foley, Feiner, van Dam, Hughes: Computer Graphics, Principles and Practice, second edition (may have a even newer one out...)
Glassner, Principles of Digital Image Synthesis -- a good all-around reference for rendering, useful as a jumping-off point for more in-depth works.
Graphics Gems series (up to Volume 5, the last I checked)
If you're interested in interactive 3-D algorithms (eg, games), 3-D Game Engine Design (forgot the author)
good books and the best publisher (Score:3, Informative)
The C++ Programming Language by Stroustrup(Addison)
A quick introduction to Fundamental Design:
Composite/Structured Design by Myers (ReinHold)
For on-time software projects:
Debugging the Development Process by MacGuire (MS Press)
For TCP/IP protocols and issues
TCP/IP Illustrated by Stevens (Addison)
For numerical programming:
Numerical Recipes in C/Fortan/etc by Press, et al (Cambridge)
For what a computer might be like:
The Humane Interface by Raskin (Addison)
For advance C:
C Traps and Pitfalls by Koenig (Addison)
For object-oriented design
Design Patterns by Gamma, et al (Addison)
For general reference:
The CRC handbook by the editors at the Chemical Rubber Company
Now, I have a question. Who is the most reliable publisher of computer books. It seems that O'Reilly is all the craze, but I have been disappointed with their accuracy and editing of late, though I buy their books if they are on discount or the only good text. For example, I bought their PHP book and I saw several mistakes in the programming examples, mistakes which would totally confuse an inexperienced coder. IMHO, the most consistently good books are published by Addison-Wesley. I would like to hear what other people think.
Re:good books and the best publisher (Score:3, Informative)
The best publisher depends on the subject matter. Addison Wesley have by far the best lineup of C++ books (almost a monopoly on good C++ books), while Prentice Hall have most of the good C books. O'Reilly have most of the good UNIX-centric books: Python, Perl, and general UNIX stuff,
Addison Wesley are probably the most consistent of publishers, and have one of the highest signal to noise ratios. They published at least one of the Stevens titles (Advanced Programming in the UNIX environment)
For C.. (Score:2)
Cheers,
Toby Haynes
Networking books (Score:2)
If you want to know the theory behind a lot of the networking stuff - then Tannebaum's "Computer Networks" is an excellent book as it Stalling's "Data and Computer Communications" (any edition - of course later ones are better but even the older ones are good)
'How To Solve It', George Polya... (and 9 more) (Score:4, Informative)
'Godel, Escher, Bach', Douglas Hofstader - for melting down, spinning around and reshaping your mind.
'Structure and Interpretation of Computer Programs' - Abelson and Sussman - read the negative reviews at Amazon to realize how sophisticated a book this is. I found it my senior year in Computer Science and realized I'd hardly learned a thing yet. Deep stuff.
'The Pragmatic Programmer', Thomas and Hunt - wish I'd had it at the start of my career, it'd be even more fun, profitable and far less painful.
'Code Complete', McConnell - The bible of 'how to code it'.
'Software Project Survival Guide', McConnell - got me through my first independent project, with plenty of room for growth. Great book for a newly appointed project manager. Helps developers (and everyone else) figure out if their project is going gold or down the tubes pretty accurately.
'The Mythical Man Month' - Fredrick Brooks. Should be read regularly by anyone who manages software professionals. It's an interview question I ask any hiring manager. Ones who care about the field say 'Yes'.
'Programming Pearls' (any edition), Jon Bentley - Great fun, great exercises, great quotes. When you start feeling like programming is drudgery, a great tonic to renew your appreciation. Full of little techniques and large wisdom.
'Programmers At Work' - Interviews with 1985's leading lights of the software development industry. Great inspiration, now with historical relevance.
'The C Programming Language' - my vote for the most influential computer book ever(Hello?), and full of worthwhile knowledge. Anything Kernighan's involved in is worth picking up, an author who really cares about writing well.
the little LISPer (Score:2)
I have not read this book myself, mostly because I already knew a fair amount of LISP when I first heard of it. However, I know a number of people who read it as their intro to programming and simply LOVED it. Few people can say that about their first programming book.
Of course, slightly more pretentious people would recommend the Wizard book [amazon.com] and since you ask for "books for the smart" it deserves a note. It is interesting, no doubt, but a little overrated.
Best TCP book... (Score:2)
This is an EXCELLENT and fundamental book on networking.
(He also wrote volumes 2 and 3, but you get a lot out of volume 1)
books on patterns (Score:3, Insightful)
You absolutely need the book on Design Patterns by Gamma et al.
Also you should check out the Antipatterns [antipatterns.com] book by Brown et al. A book on "common pitfalls" and more importantly, possible resolutions.
But, if you want to deviate a bit from the technical books, and if you want to expand your understanding of design and design patterns in software, and the philosophy behind it, you might be interested in Christopher Alexander's [patternlanguage.com] books and writings. His books are quite old, published in the 70s.
He's an architect (of actual buildings), but his ideas apply to anything that is designed. He developed the concept of "design patterns" and the computer science world has been applying his ideas. Here is a little article [utsa.edu] about him. It's because of him that we have the following definition of pattern: a solution (set of forms or rules), which solves a problem (resolves a set of forces), in a given context (a recurring sitution). A very general idea.
Basically he was trying to come up what he calls a "Pattern Language", a high-level way to describe design patterns in urban architecture, so that people could basically design their own homes and buildings. But the end result was something more profound and philosophical. Very interesting stuff but rather touchy-feely at times. For instance when he talks about the QWAN (quality without a name, the mystical sort of "beauty" that a good design has).
He also has (or he's still working on, I'm not sure) a recent multi-volume work called "The Nature of Order". I want to read it and I bet it's a much more interesting and insightful book than Wolfram's recent giant tome about a "new kind of science", and without the hype.
Disclaimer: I'm just getting into this type of stuff so I'm not 100% aware of all the history, etc., but Alexander's the name I see everywhere.
Two Books I've Found Useful (Score:2)
Linux Firewalls Second Edition by Robert L. Ziegler. Published by New Riders. ISBN 0-7357-1099-6
System Administration Books (Score:2)
Sed and Awk - Dale Dougherty, Arnold Robbins
Exploring Expect - Don Libes
UNIX System Administration Handbook - Evi Nemeth
Mastering Regular Expressions - by Jeffrey Friedl
Sun Performance and Tuning: Sparc & Solaris -Adrian Cockcroft
Solaris Internals: Core Kernel Architecture -
Jim Mauro, Richard McDougall
PANIC! UNIX System Crash Dump Analysis Handbook -
Chris Drake, Kimberley Brown
AIX Performance Tuning Guide - Frank Waters
UNIX Shell Programming, Revised Edition -
Stephen G. Kochan, Patrick H. Wood
The Korn Shell - Anatole Olczak
Just the basics (Score:2)
Structure and Interpretation of Computer Programs [amazon.com]: If you want to be a software developer, read this book. If you're smart and motivated you won't need a CS professor to guide you through it. If you want to be a low level code monkey for the rest of your life, go read any C++ or Java book and go to technical school.
Introduction to Algorithms [amazon.com]: find out what all those data structure API's you use are actually doing!
Introduction to the Theory of Computation [amazon.com]: Wrap your head around the Halting problem. Find out why Alan Turing was one of the greatest minds in humanity's history. Blow your mind.
Computer Graphics: Principles and Practice In C [amazon.com]: Want to be the future John Carmack? Good for you. Now read this book or you won't stand a chance
Artifical Intelligence: A Modern Approach [amazon.com]: This book and my AI professor [mcgill.ca] really sparked my interest in AI. I cannot praise this book (and professor
Introductory Techniques for 3-D Computer Vision [amazon.com]: This tiny, yet $90.00 book is packed with information. I can't think of a more concise introduction to the field of computer vision, although admittedly this is the only book on the topic I've studied.
Again, no need to be a CS major to understand any of the above, but you'll have to be smart to do so. I'm personally not very smart, so I had to go the CS major route. If you're not smart and you don't want to and/or can't take courses, I'll refer you to the title of this slashdot story.
CAPPs and Laws of Form (Score:2)
laws of form by g. spencer brown.
Veen, of course. (Score:2)
Dabbled in HTML and want to learn the CSS and principles to really make it work? Check this one out. It's also in very pretty colors.
For operating systems (Score:2, Interesting)
So fscking obvious (Score:2, Funny)
UF Book II: Evil Geniuses in a Nutshell - $12.95
UF Book III: The Root of All Evil - $12.95
http://www.computergear.com/usfriencarbo.html
Because any fscking dork can code, but it takes a mondo sense of humor to create.
Cryptonomicon, Golden Braid, Mythical Man Month (Score:2)
Database books (Score:2)
Unix admin, WAN networking, Cisco (Score:3, Informative)
Unix System Administration Handbook, Third Edition, ISBN 0130206016, Prentice Hall
This book covers Unix systems administration for common Unix systems of the day. Dated by a year or two, this book is still excellent, using real world examples for Red Hat Linux, FreeBSD, Solaris, and (the now useless) HP-UX.
This book goes over everything for Unix systems administration, given that you have at least half a clue and the willingness to sit down at a terminal and try a few things out.
I very much like the quote on the back of the book;
"This is not a nice, neat book for a nice, clean world. It's a nasty book for a nasty world. This is a book for the rest of us." -- Eric Allman and Marshall Kirk McKusick.
This is a really great book for people who got shoved into Unix sysadmin work and covered what they needed to, but would like to figure out what the rest of the filesystem is for and what else their Unix system can do.
Nearly a 900 page book, for $40 or less, worth it.
For Linux users, I recently found out that they have an updated Linux version of this book. Look for it! I know that it at least covered Debian and Red Hat.
For advanced computer networking, with Cisco in particular, all Cisco Press books are highly recomended. Accept no cheap imitation. If it is Cisco press, it kicks ass.
And I was going to rattle off some titles for more WAN studies, but I remembered that Juniper.net did it for me!. I have actually read about half of these and all were excellent sources of WAN networking info.
http://juniper.net/training/certification/resou
John Stewart, BGP v4 Interdomain Routing in the Internet, 1998
Bassam Halabi, Internet Routing Architectures 2nd Edition, Cisco Press 2000
Routing TCP/IP, Cisco Press 1999
Jeff Doyle, Routing TCP/IP Volume 1, 2000
Radia Perlman, Interconnections 2nd Edition, 2000
John Moy, OSPF: Anatomy of an Internet Routing Protocol, Addison-Wesley 1998
Christian Huitema, Routing in the Internet 2nd Edition, Prentice-Hall, 2000
Beau Williamson, Developing IP Multicast Networks, Cisco Press, 2000
Raza & Turner, Large-Scale IP Network Solutions, Cisco Press, 2000
Understanding Optical Communications, Prentice-Hall, 1998
D. E. Comer, Internetworking with TCP/IP, Volume 1, Prentice-Hall 1991
W. R. Stevens, TCP/IP Illustrated, Volume 1, Addison-Wesley 1994
David Ginsburg, ATM Solutions for Enterprise Internetworking 2nd Edition, Addison-Wesley 1999
Divakara Udupa, Network Management Systems Essentials, 1996
B Davie & Y Rekhter, MPLS Technology and Applications, Morgan Kaufmann, 2000
P Ferguson & G Huston, Quality of Service, Wiley Computer Publishing, 1998
Uyless Black, SONET & T1 Architecture, Prentice-Hall, 1997
Uyless Black, MPLS and Label Switching Networks, Prentice Hall Series, 2001
Dave Kosiur, IP Multicasting, Wiley Computer Publishing, 1998
Thomas A. Maufer, Deploying IP Multicast in the Enterprise, Prentice Hall, 1998
Some of my faves (Score:2)
Essential System Administration by AEleen Frisch
TCP/IP Illustrated Vol 1 by W. Richard Stevens
Mastering Regular Expressions by Jeffrey E. F. Friedl (Hip Owls goes 2nd edition. Yeah Baby! Now I just need it to be put on Safari)
And fwiw, some books I'm reading now:
And the book I want for ChristmasMy List (Score:2)
Bertrand Meyer: Object Oriented Software Construction
Robert C. Martin: Designing Object Oriented C++ Applications using the Booch Method (this is useful for any OO programmer. You can read some good essays of Martin's at his company [objectmentor.com])
Gamma et. al.: Design Patterns
Martin Fowler: Refactoring
Kent Beck: Extreme Programming Explained
Java Books
Any O'Reilly book for specific parts of the API
Joshua Bloch: Effective Java
Off Topic
Hofstadter: Godel, Escher, Bach -- still a must-read IMHO
SA book (Score:2)
The Practice of System and Network Administration
This is a very good book covering many good processes and procedures in systems admining and the what not. I would recommend this book to any one working in the field. It covers everything from good practices in setting up a data center to good tips in dealing with Users.
Check out the slashdot review here [slashdot.org]
Author: Thomas A. Limoncelli and Christine Hogan
Publisher: Addison-Wesley
My List is Bigger than Your List (Score:3, Informative)
I use this book *all* the time. It's very informative to see how a C library implementation works, and it has the important sections of the C standard reprinted with discussion. My #1 pick.
Advanced Programming in the UNIX Environment,W. Richard Stevens
The comp.unix.programmer bible. A must have for UNIX programmers.
UNIX Network Programming Networking APIs: Sockets and XTI, W. Richard Stevens
Another classic from Stevens. I have not done a tremendous amount of socket programming in C but I have extensively in Java and I am confident that I can in UNIX after having read select portions of this obviously high quaility book.
Lex & Yacc, John R. Levine
I think yacc (the GNU version is called bison) is an extreemly usefull tool. I started writing yacc grammers for all sorts of configuration files on my system while reading this the first time. Great fun, and potentially very usefull. A good yacc grammer can save tremendous amounts of time and is often the proper way to handle a problem. And I'm not recommending the book just because it's the only of it's kind. It's genuinely good.
Algorithms on Strings, Trees, and Sequences Computer Science and Computational Biology, Dan Gusfield
This is a tough book. Be prepared to ponder the presentation of each algorithm and skip the proofs (I believe you Dan). If you find yourself getting stuck in spegetti string manipulation, implement a few of these algorithms like calculating the edit distance of two sequences or Boyer-Moore. You'll be a better programmer after and there are very practical application hidden in this book. Again, the presentation is of the highest quality.
Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest
I have three algorithms books. This one's the best and that's not a compermise. It's a great book.
The C Programming Language, Brian W. Kernighan, Dennis M. Ritchie
Of course.
The Art of Computer Programming (Vols 1-3), Donald E. Knuth
The C++ Programming Language (Third Edition and Special Edition), Bjarne Stroustrup
Xlib Programming Manual, Adrian Nye
Applied Cryptography: Protocols, Algorithms, and Source Code in C, 2nd Edition, Bruce Schneier
X Window System Toolkit, A Complete Programmer's Guide and Specification, Paul J. Asente, Donna Converse, Ralph R. Swick, Paul Assente
Expert C Programming, Peter van der Linden
Life with UNIX, Don Libes and Sandy Ressler
Programming Pearls, Jon Bentley
Structured Computer Organization, Andrew Tanenbaum
The Code Book, Simon Singh
Etudes for Programmers, Charles Wetherell
Secrets and Lies, Bruce Schneier
The Pragmatic Programmer, Andrew Hunt and David Thomas
TCP/IP Illustrated, Richard Stevens
Exploring Expect, Don Libes
UNIX System Administration Handbook, Evi Nemeth et al
If you use UNIX, you need this book. Forget Running Linux. This is much better and the latest edition covers Red Hat as well as BSD, Solaris, and HP/UX.
Digital Woes, Lauren Wiener
Surely You're Joking, Mr. Feynman!, Richard P. Feynman
This was a pretty funny book. Very readable for anyone. A NYT Bestseller.
Structure and Interpretation of Computer Programs, Harold Abelson, Gerald Jay Sussman, and Julie Sussman
Essentials of Programming Languages, Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes
Software Fundamentals: Collected papers, David L. Parnas, Daniel M. Hoffman and David M. Weiss
The Invisible Computer, Donald A. Norman
Lion's Commentary on UNIX 6th Edition, with Source Code, John Lions
Envisioning Information, Edward R. Tufte
The Visual Display of Quantitative Information, Edward R. Tufte,
I think I have this book. I was disappointed.
Visual Explanations, Edward E. Tufte
The Design of the UNIX Operating System, Maurice J Bach
Algorithms in C, Robert Sedgewick
Not that great. Having lot's of code samples is nice but the comments are unbelieveable. Their HUGE. Really ruins and otherwise good book. I'd rather go with the Cormen book on Algorithms and just write c from there (done just that many times actually).
Introduction to Computer Theory, Daniel I A Cohen
Compilers, Principles, Techniques and Tools (The Dragon Book), Alfred V Aho, Ravi Sethi, and Jeffrey D Ullman
The Practice of Programming
Kernighan, Brian W., and Rob Pike
The Mythical Man-Month, Anniversary Edition : Essays on Software Engineering, Frederick P. Brooks
Another Short List (Score:3, Insightful)
"Design Patterns", Gamma, et al. Without this, you simply won't be able to understand current discussions about programs or programming. This book gives you the philosophy and vocabulary to understand what's going on.
"The Art of Computer Programming", Knuth. What can I say? An absolutely mindboggling treasure trove.
"Software Tools", Kernighan & Plauger. A Golden Oldie. The book is ancient, but the "software tool" concept is still solid.
"The Design of the Unix Operating System", Bach, and "The Design and Implememtation of the 4.4 BSD Operating System", McKusick et al. (These are old. I would hope there is something equivalent for Linux and current BSDs). While abstraction is all well and good, at some point you have to open up the black box and figure out what the machine is actually doing in there.
You need the definitive description of the language you're working with. For C, it's "The C Programming Language", Kernighan & Richie. For C++ it's "The C++ Programming Language", Stroustrup, or, if you're a standards junkie like me, INCITS/ISO/IEC 14882-1998, "ANSI Standard C++".
If you're doing anything connected with the Internet, learn about RFCs. [rfc-editor.org] Personally, I credit a large part of the success of the Internet to the free availability of its governing standards. (Other standards are freely available, but not available for free. A paper copy of ISO 14882, for example, is US$175.)
There are all sorts of "domain specific" books. What you need depends on what you're doing. I find "Advanced CORBA Programming with C++", henning & Vinoski, to be priceless, but then, I do CORBA programming in C++.
"Calculus Made Easy" (Score:3, Informative)
One caveat: I read the original, not the current version, which Amazon says "In this major revision of the classic math text, Martin Gardner has rendered calculus comprehensible to readers of all levels." I'm loathe to recommend a book that I considered perfect in its earlier incarnation and that someone has 'revised,' so perhaps you'll want to search for the original.
Douglas Hofstader (Score:4, Interesting)
The real joy is this book is not just meaningful it is also enormous fun. Hofstader covers some complex mathemetical ground (Turing machines, Cantorization, Godel's incompleteness theory) wrapped up in erudite and thought-provoking tales of the relationship of computer science, language, art and music.
Truly one of the great works of our field.
Databases! (Score:3, Informative)
For example, I learned many sorts in school. I have never used any of them at work. Perl has a built-in quicksort, and SQL has ORDER BY. I think you can assume that more energy and expertise went into Oracle's implementation of ORDER BY than you can bring to bear on average on a homemade sort.
Re:Lisp (Score:3, Informative)
is now out of print, but can be downloaded from
his webpage.
On LISP goes into LISP issues much deeper than
ANSI Common LISP.
Re:easy (Score:4, Insightful)
Re:easy (Score:2)
I have to agree with that! Unix Network Programming, Volume 1 is THE authoritative reference, in my opinion. TCP/IP Illustrated, Volume 1 is an excellent book on IP in general, and Volume 2 is the perfect reference for someone working in the BSD network stack. Honestly, after crawling underneath the BSD IP stack code, reading Vol2 is almost a religious experience
Re:Nothing specific, but ... (Score:2, Insightful)
Re:My only source (Score:2, Interesting)
Also, I happen to know that most of the rockstar authors, like Knuth, Stevens, and Kernighan, have far more money than they would ever know what to do with. And, those bozos at Prentice Hall and O'Reilly are all a bunch of thiefs anyhow. I understand that they've recently lobbied congress for the right to burn down libraries to prevent the spread of information among poor people who can't afford to buy books of their own.
Re:My only source (Score:2, Informative)
Don't be a slimebag. Go the the library [berkeley.edu].
Re:My only source (Score:2)
Re:My only source (Score:2)
I wonder how many people have stolen "downloadable" products from brick-and-mortar stores simply because they're that sickly impatient. I'm sure I don't want to know.
Re:Kant read. (Score:2, Funny)
Re:Coding books? why? (Score:2)
People also tend to mirror the incomplete, and often not especially helpful Cocoa/NextStep documentation. I've found that even the (slapped together) book "Learning Cocoa" has more structure.
Old books are useful for debugging and porting old code-- newer books often (and with good reason) give short shrift to deprecated/nonstandard/obsolete functions.