Best Computer Books For The Smart
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.
I would recommend the "Dummies" series to any smart person.
Effective C++ and More Effective C++, by Scott Meyers
by Bruce Schneier. The book is enjoyable and has saved me from several gaffes when using crypto for applications.
demi
Programming Perl (Camel)
Perl Cookbook (Bighorn sheep)
Anything with Knuth's name on it
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
The One Rule Of Chess You'll Ever Need: Don't play someone who carries a kit in their bookbag.
http://www.amazon.com/exec/obidos/ASIN/0130206016/ qid=/sr=/ref=cm_lm_asin/103-3920026-0250219
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.
Design Patterns, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
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.
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.
If you use Linux, please help development of Autopac
Introduction to Algorithms - Cormen, Leiserson and Rivest
- 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.
The best textbook I have read for those just starting in EE (from a digital logic point of view) is "Digital Design: Priciples and Practices" by John Wakerly.
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)
Gets my vote. And any of the Oreilly books on Perl..
I have read a lot of good books (mostly by Wrox publishing) but the best book, and most relevant (and very seminal too!) is Avanced Renderman: Creating CGI for motion pictures. If you want to write shaders (and who doesn't) this is the book. All of the concepts apply directly to the current realtime shaders even though the book s written with movie CGI in mind. If you want to be taken into the world of 3D rendering, see where its going, where its been and how it got there, this is the book. It will take you in new directions, it will tell you all you need to know and is written so well, you will almost lose respect for 3D developers because it makes things seem so simple.
This Wiki Feeds You TV and Anime - vidwiki.org
- Theoretical background -- experience in a CS course, good books that give you a theoretical base are nice. Why? Because later, to translate the theory into real work, you'll just need a reference, and things will work easier!
- Reference books -- to learn how to implement your ideas in specific settings (OS, language, etc).
I never found the first with books for specific compilers, IDEs, versions of things, etc, or any of those "big" books that promise you a lot.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)
You might also mention his book "On LISP", which
is now out of print, but can be downloaded from
his webpage.
On LISP goes into LISP issues much deeper than
ANSI Common LISP.
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.
Check out http://www.canonicaltomes.org/, people have entered and voted on the "best" books in a variety of categories.
Sorry if I'm too lazy to look up any links or authors.
Thinking in C++/Java
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 - 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.
The Art of Computer Programming, Volumes 1-3 by Donald E. Knuth
"For a successful technology, honesty must take precedence over public relations for nature cannot be fooled." -Feynman
This is a tremendous waste of money at $45 CDN ($29.95 US). Firstly, it's lacking gross content at a measly 165 pages of large print pages (for $45 that is already criminal). More importantly, however, the content that is there could easily have been condensed to a two page article (I say this with complete sincerity): The author clearly strung along simple statements for long periods of time to convey the idea of foundation for some pretty dubious assertions.
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.
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 The Art of Computer Programming.
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". 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'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.
1. K&R, The C Programming Language, 2nd ed.
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.
Contrary to the popular belief, there indeed is no God.
under the circumstances, than "SQL For Smarties"? ;-)
No joke, it really is a good book!
"There is more worth loving than we have strength to love." - Brian Jay Stanley
For everything (well, almost) C++, you need the C++ in depth series. 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.
Belief is the currency of delusion.
Code Complete and Rapid Development are the kinds of books I find most useful. I don't like any books that are specific to a language. These two are fantastic resources for learning how to program better, not how to write in a particular language.
Specifically Unix Network Programming (vols 1 + 2) and Advanced Programming in the Unix Environment. Basically the holy bibles of all things unix-programish.
;)
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...
"People will pay big bucks for the luxury of ignorance."
there is no thing
what else could you want?
SICP.
(Structure and Interpretation of Computer Programs, a fine book that'll teach you more about programming than should be allowed by law)
A decent list of C++ books is in this newsgroup posting.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
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.
<^>_<(ô ô)>_<^>
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.
If not, I strongly recommend Koenig & Moo's Accelerated C++. They write a column for C Users Journal. I knew C++ when I read it, and it completely flipped things around for me.
.NET? Still haven't figured out COM? O'Reilly has a book called Learning DCOM by Thai. I used to need it alot, but it might still be useful to ya'll.
.NET docs without mouse's reach.
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...
[o]_O
union select * from books where author = 'R. Stevens';
bla
Not sure if these are for "the smart" but here are a few books that I've enjoyed. They make for nice easy summer reading -- and ya might learn somethin too!
The Pragmatic Programmer: From Journeyman to Master -- A excellent guide to help you go from spagetti coder to a professional programmer.
Programming Pearls (2nd Edition) -- Elegant solutions to interesting problems.
The Practice of Programming -- 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: Living With Bad Software." Boris Beizer, 1988, Tab books, ISBN 0-0306-3146-1. Out of print, alas. Absolutely wonderful.
"How to Do Nothing," kids activities, back in print!
I think it's the examples they use. They don't pick some abstract boring problem to demonstrate the concept, they show the code in an app that is similar to something in the real world, so you can see how it looks in practice, rather than just showing the general case in mathematical terms. Sometimes it is easier to learn a specific case before you learn the general case, since the more abstract general case is harder to grasp without some idea of how one would use it in practice.
Man, with his flaming pyre, has conquered the wayward breezes.
The three Edward R. Tufte books...
"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)
"How to Do Nothing," kids activities, back in print!
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
It's this attitude and mentality that drags down our society. Funny how you post your "cool" idea as an "anonymous coward". Such a great idea, but you won't stand by it?
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.
You nearly pulled it off, but unfortunately, appropriate use of an apostrophe proved your literacy.
Advanced users are users too!
This is the introductory computer programming textbook used at MIT, and had been featured on slashdot here. 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 at MIT Press. Definitely a must read.
Two books stand out: "Python: Essential Reference" (2nd edition) for the ins-and-outs of all of Python's built-ins and most of the major modules, and "Python Visual Quick Start Guide," which is sort of like a Python cookbook of the basics, if you're new to it all. These two books have taken care of all my needs.
:Peter
My background is in computer graphics, so here are some of my recommendations if you're interested in this specific topic:
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)
There's 10 types of people in this world, those who understand binary and those who don't.
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.
"She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
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.
union select * from books where author = 'R. Stevens';
:-)
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
A dingo ate my sig...
Don't be a slimebag. Go the the library.
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. 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.
Belief is the currency of delusion.
Cheers,
Toby Haynes
Anything I post is strictly my own thoughts and doesn't necessarily have anything to do with the opinions of IBM.
By an odd coincidence, I've just read Hidden Order last week (I seem to have gotten onto a complexity/artificial life kick lately, unfortunately about 7 years late...is the party over?).
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.
If you are looking to write software that talks over sockets/pipes/anything in unix - you must have Richard Steven's books - Unix Network Programming - 1 & 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)
... great, classic, book on how to think about problem-solving.
'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.
You don't say if you're new to programming or not, but should the former be the case I suggest The Little LISPer.
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 and since you ask for "books for the smart" it deserves a note. It is interesting, no doubt, but a little overrated.
"If you think education is expensive, try ignorance" - Derek Bok
I am going through "The Metamorphosis"...
<^>_<(ô ô)>_<^>
TCP/IP Illustrated Volume 1 (The Protocols), by (the late) W. Richard Stevens.
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)
You absolutely need the book on Design Patterns by Gamma et al.
Also you should check out the Antipatterns 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 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 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.
I think the book "Windows XP for Dummies" just about says it all.
Linux Administration Handbook by Evi Nemeth, Garth Snyder, Trent R. Hein. Published by Prentice Hall PRT. ISBN 0-13-008466-2
Linux Firewalls Second Edition by Robert L. Ziegler. Published by New Riders. ISBN 0-7357-1099-6
I have no signature
These are the books in the bin of my cube, in no particular order.
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
Like many others here, I have an interest in computer science. These are my favorite books having to do with CS:
:) Less theoretical than the above, but I just love this book. For some reason it reminds me of the early 90's when Jurassic Park came out and SGI's were amazing. It has that kind of excited vibe about the potential of computer graphics.
:) )enough. Simply one of the most interesting and well written CS books out there, with that perfect mix of theory and practice.
:) You'll find lot of really interesting, cutting edge stuff here. Generate height maps from stereo pairs and shit. Cool!
:)
Structure and Interpretation of Computer Programs: 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: find out what all those data structure API's you use are actually doing!
Introduction to the Theory of Computation: 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: 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: This book and my AI professor really sparked my interest in AI. I cannot praise this book (and professor
Introductory Techniques for 3-D Computer Vision: 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.
Content Addressable Parallel Processors by Caxton Foster.
laws of form by g. spencer brown.
What about Jeffrey Veen's The Art and Science of Web Design? This is the only book you need to learn about smart web design. It covers the important topics - assuming you know some basic html - and introduces you to fundamental aspects of building sites. It's a bit too lenient regarding tables-for-layout and such, but then, it's a year or two old and I'm a fanatic.
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.
Karma: T-rexcellent.
So isn't this basically the same thing, except that he's not wasting time and gasoline to get there, and he's not potentially depriving someone else of the opportunity to read the book?
I see Tannenbaum's book mentioned several times but so far I haven't seen even one mention of The Dinosaur Book.
UF Book I: User Friendly the Comic Strip - $12.95
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.
Let's not forget that programmers are writers of sorts. We need a muse like any other with a creative endeavor. I find these books that stay away from the low-level syntax and raise up what it is, the essence, of what we as programmers do to be much more uplifting and inspiring. After all, if I can't pick up on syntax, there's little use for me to drink caffeinated beverages well into the night.
- Any of E.F. Codd's original papers (hard to find)
- Introduction to Database Systems - Chris Date
- The SQL Standard - Chris Date
- Practical Issues in Database Management - Fabian Pascal
- The Data Warehouse Toolkit - Ralph Kimball
- Building the Data Warehouse - W. H. Inmon
Programmers, if you ever find yourself building a relational database for a project, please please please read up and design it properly. There are way too many fucked up database designs out there already. Designing a mathematically sound database is way different from designing an algorithm.This can be helpful, although I've found that 90 copies of the same linux howto don't neccesarily answer my questions. Mailing list archives, though, are often extremely helpful.
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.
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 ChristmasI don't want knowledge. I want certainty. - Law, David Bowie
General Books
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)
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
I have discovered a wonderful
I have said this before but this is a good book (in my opinion of course):
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
man
No manual entry for
Many O'Reilly are good, but some seem slapped together. That imprint is not the end all of computer publishing.
For example,Addison Wesley publishes
OpenGL Programming Guide
C++ Primer (Lippman/Lajoie)
C++ (Stroustrup)
The C++ Standard Library (Josutis)
AOCP (Knuth)
LateX (Lamport)
LaTeX Companion (Goossens/Mittelbach/Samarin)
I'd say that both AW and O'Rielly have good editorial staffs-- but a book should be judged by its contents, not its imprint.
(On the other hand, certain imprints are acquiring a bad rep. Usually they are distinguished by loud, slogan strewn covers-- and a bias towards Windows.
see, for instance, Donald Knuth's Big Dummies Guide to Visual Basic)
That link again is http://www.mindview.net/Books
Not only are they free, but they are pretty useful books. Bruce has done a really good job. Wheneven I start a new job and people begin to ask me silly Java questions all day I make them download the "Thinking in Java" book and look for answers there first. Bruce explains things better than me. I admit it. He also saves me time.
Lasers Controlled Games!
If there is any book that fits this topic, it is SICP. What makes this book different from any other intro CS book I have read is that it focuses on the science of computation, not just on "programming." Solid knowledge of higher math and some logic are prerequesites for reading, but this is the best possible book for anyone who wants to skip the syntactical crud of usual CS courses and jump right into the theory and mechanics of computer programming.
While this may not be the best route for computer engineers, shame on anyone who thinks that this book isn't an important read for anyone studying towards a computer science degree. This book lays out all the necessary concepts for learning any further languages or programming methods.
Some people don't like this book because it uses Scheme. They're mostly wrong - the book uses Scheme as a pseudocode, and touches only a fraction of the R5 Scheme standard. The benefits of this are apparent right from the first chapter - the book weans you from thinking of loops in terms of rigid and clumsy constructs, instead demonstrating that tail-recursion can completely replace them. And I really pity the people who think static types would enhance either Lisp or the readability of this book, as Hemos seems to be convinced about in his review. PS, R5 Scheme does have looping constructs; do some research before complaining.
In short, if you like math for math's sake and want to learn computer science, read this book.
In the great CONS chain of life, you can either be the CAR or be in the CDR.
I find that most computer books written at an "intelligent" level are too dry and boring to read through, although O'Reilly is pretty good about not falling into this category, great examples are the Samba and Python books.
For the most part, I just use the Sam's "Teach yourself in 24 hours" series to get started, because they tend to be written by some pretty damned smart people who know the subject matter and present it casually, and then just buy a pile of more "sophisticated" books to read for detailed reference later on. Then again, I practice system-administration-on-the-fly-at-4am, so my style definately will not work for everyone.
I looked at the books there on C++, and couldn't quite figure out where they came from. Some are obvious choices with many votes. At least one (by Schildt) is... not on my recommended list... and seems to have no votes, yet still appears. What gives?
URL resolved fine for me, BTW.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
At the risk of sounding pedantic... Shouldn't an author possess, at the very least, a basic grasp of spelling and grammar?
Yes, I'm a smartass and an asshole. Would you expect any less from a Slashdot poster? ;)
Cheers.
The Standard C Library,P.J. Plauger
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
I would start by looking at the publisher:
Prentice-Hall
O'Reilly and Associates
Addison-Wesley
Singer-Verlag
Scanning down the spines of the books in my bookcase that matter, that contain information relevant year after year, those are the ones I see on the shelf.
Avoid anything that has a software version number in the title. Avoid anything that has logos from Magazine Publishers (i.e. 'PC Magazine recommends') on the cover. Avoid anything that has recommendations on the cover from the coffee-stain boys who write columns in the Ziff-Davis/Byte/PC Mag grade of magazines.
Thumb through the book. If it's more than 5% screen shots, avoid it like the plague.
If it looks like it was typeset with LaTeX, it's probably a good bet.
I know some of these are prejudices, and that there are exceptions to all the rules above, but it works for me.
Category Theory is the most intuitive and practical branch of mathematics. Category Theory is even more useful and intuitive than counting. It is the glue that ties together the vast sea of concepts within your head. Category Theory is not just useful for continous or discrete mathematics/sciences, but instead Category Theory is useful for all kinds of exact thought! It lets you move from arithmetic to logic, from logic to set theory, from set theory to geometry, from geometry to a specific daily situation, from a specific daily situation back to a formal branch of matheatics, etc...
... So just as you learned the rest of counting, why not learn the rest of Category Theory ? It will give you a whole new insight into Computer Science.
You didn't get it taught to you in school because its such a young field of mathematics at around 50 years of age. Most branches of mathematics are at least hundreds of years old. However, you already use parts of Category Theory, even though you don't know the words for it, just as you used parts of counting before you knew the words "one", "two",
For its not just about the specific ideas used in Computer Science... its also about having enough "string" to tie it all together. Category Theory is an infinite supply of that "string".
Bruce Eckel's "Thinking in ..." series are particualrly good (and have the requisite ugly cover to be a classic text). Especially the C++ and Java pair, which should more accurately be titled "Thinking in Objects, C++/Java flavour". These are particularly good for people moving from procedural languages like Cobol, into the OO world. There are also a number of pieces of books he has put out for free.
The Gamma et al. book has really never impressed me, but then I suspect that is because most of the patterns they present were taugt to me over the years already... so by the time I saw that book, it was mostly review.
The other books that I've always found helpfull are the fomal specs for the language... for C++ developers, get a current copy of the bible from Stroustrup. C heads would want K&R's version. For java developers the Lang Spec from Gossling, Joy, Steele, and Bracha is a must read, and the VM spec from Lindholm and Yellin can be a great resource for anyone that is used to assembly level programming and wants to know how this "machine" works.
...by Cliff Stoll. Not a "how to" manual, but a very interesting tale of tracking hackers on the Internet in the pre-www days... Should be required reading for all geeks.
You're using her as bait, Master!
Psychology of Computer Programming
Gerald M Weinberg
O'Reilly's "High Performance Computing" (the harrier book, although I've heard it called the raptor book as well) is an excellent volume on performance. It covers everything from hardware architecture to high level language structures. Excellent starting place for those writing performance critical code; although it expects that you already know how to write properly functional code first. (you might be surprised how many people neglect to ensure code still functions properly after the "improve performance".) There are sections on specific langauges (HPF for example) and environments (MPI, PVM) as well. Also good reading for anyone that has to benchmark code (it explains how to do it right) and those who have to understand benchmarks. Includes an explanation of a number of industry standard benchmarks. I wish marketing people that try to sell something based on benchmarks would read this.
"The Mythical Man-Month", Brooks. Won't really help much, but you'll have the satisfaction of knowing exactly how your pointy haired managers are screwing things up.
"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. 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++.
Welcome to the Turing Tarpit, where everything is possible but nothing interesting is easy.
Actually, I learned perl with "Perl 5 for Dummies." It's a terrible book, but it let me (with mostly C and Pascal experience) fix a client's webstore.
I also recomend:
Oh! Pascal by Doug Cooper -- sure it's Pascal, but it has lots of general programming info that I use to this day. It's available in many flavors, including my favorite, the platform neutral one.
Assembly Language for Intel-Based Computers by Kip Irvine. It gets into all kinds of details about the x86 architecture.
Structured Computer Organization by Andrew S. Tanenbaum will teach you how to build a processor that understands Java byte code (integer instructions only) out of transistors. It's really that good.
Archimedes' Revenge: The Joys and Perils of Mathematics by Paul Hoffman is a wonderful book that covers everything from encryption to Turring machines to number theory. This book is a fun read that, altough somewhat dated, is still very relevant today.
Insanely Great: The Life and Times of Macintosh, the Computer That Changed Everything by Steven Levy provides an interesting look at the history of the first personal computer with a gui. The edition I have is from pre PowerPC times, so I assume that this one (featuring an iMac rather than one of the boxy 9"screen Macs on the cover) is more current.
t'nera semordnilap
I also loved the Perl CD Bookshelf, especially the Learning Perl volume. I found myself frequently referring to it.
I understand that TCP/IP Illustrated Volume 1 and Volume 2 are valuable. I own both but haven't yet read either. (sorry for the amazon linking. I don't have anything else handy)
Dianetics.
The middle mind speaks!
Class Construction in C and C++ by Roger Sessions was the book that showed me that OOP was as much (or more) a design philosophy than a language feature. You learn to write your OO code first in plain C, and only then do you start getting any introduction to C++'s language feature. An excellent approach.
Libertarianism is rich wolves and poor sheep playing gambler's ruin for dinner.
The Hardware Bible by Winn L. Rosch. (Its cheap too!)
:-)
Why?
I'm tired of working with programmers who can't deal with whats inside a computer. It drives me insane!
Reading and trying a bit of this puts you in my extra good books too.
If you could be told what you can see or read, then it follows that you could be told what to say or think - BoC
It presumes the reader already knows something about programming, but wants to learn the essentials of a new language.
A smart book by smart people, for smart people, about a smart language.
Java is the blue pill
Choose the red pill
In addition to Kernigan & Ritchie's 2nd edition, The C Programming Lanugage with ANSI C, which should be on any programmer's workbench, be they Perl, Matlab, Maple, TCL, or even elisp programmers, here are some others:
The Algorithm Design Manual by Steve Skiena. Excellent.
The Nuts and Bolts of Proofs -- the heart of correct math is showing your work, and this book shows you how.
The Data Game -- Controverses in Social Science Statistics -- this really puts you in touch with the kinds of numbers you hear bandied about on the news, and what those numbers mean.
The Maple V Learning Guide -- this comes with Maple (and presumably Matlab if you get it with Maple) and teaches more than a typical undergraduate mathematics program in about 270 pages. Actually, you have to delve into the hypertext documentation of Maple to get at all the calculus, linear algebra, statistics, etc., but it's all in there.
Studies in Inductive Logic and Probability -- actually there were two volumes published in 1980, and one or both might have gone out of print.
What If there were No Significance Tests -- this overpriced volume (which you should be able to get for much less from the publisher's site, www.erlbaum.com that doesn't seem to be working right now) explains exactly what soft scientists (e.g., psychologists) mean when they say something is true.
100 Statistical Tests -- this reasonably priced but somewhat advanced, applied book will tell you how to tell whether something is true, even if you have to use indirect or partially correlated measurements. The author has provided tools with what you can quickly find the appropriate test(s) for most situations I can imagine.
All I Ever Needed to Know I Learned From My Golf-Playing Cats. Here's hoping for the +1 Funny moderation for Ruben Bolling, whom I believe to be perhaps the finest editorial cartoonist, up there with Ted Rall, Tom Tomorrow, Tom Toles, and Gary Treadeau. Fantastic!
Apache The Difinitive Guide from O'Rielly is a brick.
For books on AI, I'd definitely recommend -
Artificial Intelligence - Elaine Rich & Austin Knight
Artificial Intelligence - Patrick Henry Winston
If you're serious abt AI, I'd also recommend that you also read these auxillary ones -
Natural Language Understanding - James Allen (awesome book)
Compilers: Principles, techniques and tools - Aho, Sethi & Ulman
Graph Theory - Narsingh Deo
These books would give you a general idea about AI, and then specializing into any area would be fairly less difficult.
If you are planning on using LISP in AI, I'd again recommend Patrick Henry Winston & Berthold Klaus Paul Horn's book on LISP.
And in graphics, I'd recommend 2 must-read books -
Computer graphics: Principles & Practice - Foley, van Dam, Feiner & Hughes
Graphics Programming Black Book - Michael Abrash
(ok, although this is very outdated, he mentions some amazing techniques on optimization like bit compression, culling and the like, good anyday!)
Ofcourse, in almost all areas of comp sci, having the three volumes of Knuth would also be very handy indeed, if only as a reference material.
- The Art of Computer Programming (Knuth)
- Designing Web Usability (Nielsen)
- Computer Networks: A Systems Approach (Peterson + Davies)
- Distributed Algorithms (Lynch)
See the computer science, computing, networks, and Internet sections for information about lots of other books.Danny.
I have written over 900 book reviews
Moderation doesn't seem to work very well for lists like this. Maybe each poster should have equal weight, votes for specific texts are added together, and the highest scoring texts bubble to the top. Moderation seems to be a bit orthogonal to this, in that whole "groups" of recommendations are rated. Tough job for a moderator!
And I think it's HIGH TIME for the allowed HTML to be reviewed in line with recent W3C standards. For instance, most semantic/accessible markup is disallowed (<CITE>, please?) This is wrong (IMHO).
you had me at #!
There really is no good answer to the question. What book is good for you to learn from is not a matter of how smart you are or what websites you visit. It's how you learn. My suggestion is look at what books you already have and ifgure out which one's did the best job for you. Then look for other books on the topics you want to learn by the same publisher/line. Generally a publisher tries to keep a "feel" for a line (say the O'Reilly in a Nutshell books) even across authors and subjects.
Cookbooks tend to be better than average...the Perl and Java ones from O'Reilly are great, the PHP one I got from somewhere else was ok.
I tend to add a cookbook section to my Atari 2600 programming Tutorial, 2600 101
SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
Yeah, I was fairly disappointed in their Python book.
The nice thing about imprint is that if a publisher takes time to pick out quality books, you don't have to wonder if you're purchasing a lemon. O'Reilly has really earned it's reputation, but I think it's been slipping a bit as of late.
Engineering and the Ultimate
Also, it's MORONIC that NOT A SOUL is recommending a book that'll teach you even ONE of the Top Ten most important algorithms of the 20th century.
You're getting outraged over nothing. This page you link to gives the top ten most influential algorithms for computing in science and engineering, not the overall most influential algorithms of programming in general. Reading through them, I didn't see more than a couple that would be useful for general application. They're mostly just for the researchers in these different fields. Besides, everyone knows the most important and influential algorithm of all time is Hello World.
For my money, I really like the O'Reilly books. They're detailed and informative without feeling overwhelming or distant. I would recommend most of those to a beginner in whatever subject it may be.
--
Promoting critical thinking since 1994.
Back in the late 80's, there were couple of "Bag Of Tricks" series of books, for C and C++, and for Programming in general.
There were extremely helpful.
I am sorry if I can't remember the exact title, someone borrowed my books and never return them.
If anyone still remember the title of those books ( something like "101 Programming Tips" ), please post them so I can go and search for them in used book stores.
Thanks in advance !
Muchas Gracias, Señor Edward Snowden !
My favorite computer books EVER are the PHP Developer's Dictionary (SAMS, by Wyke, Walker and Cox) and PHP Developer's Coookbook (SAMS, by Sterling Hughes). Great organization, just-the-basics examples, even decent typography and layout! It's almost a shame that the language is continually evolving, 'cause I'd like to keep these on hand for a long time.
I also second everyone who's mentioned Code Complete.
"Luck is the residue of design" --Branch Rickey
As I interpret the question, seminal works on technical topics of all sorts qualify. In that spirit, I most highly recommend "Calculus Made Easy" by Silvanus Thompson. Originally written in 1910 (I think. It's recently been republished), this is the book that finally enlightened me. After 3 years of advanced mathematics and an engineering degree, everything I knew about calculus was rote: I could come up with the answers, but not because I understood the underlying principles or basis, but because I could memorize procedures. After I got this book and read it, I finally understood what the hell it was all about. I don't know whether I was just a bad student before, had bad teachers, or simply was presented the material in a way that was incompatible with the way I learn. In any case, this book did it for me, and perhaps it will do the same for others.
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.
Kant can't cant; Kant croaked.
Everything in the Universe sucks: It's the law!
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.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
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.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
I'm surprised this hasn't been mentioned yet. Godel, Escher and Basch by Douglas Hofstader. This is profound investigation into the fundamental theories that underly computer science. After reading this book everything else is just work. If you can understand Hofstader you have all the theoretical and philosophical underpinnings you need to really understand software.
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.
Sailing over the event horizon
I don't think Code Complete is only relevant to newbie programmers. Far from it, I know many who went into programming without any formal background in CS or programming theory, whose work is good more because of natural talent and enthusiasm than anything else. These people will make the effort to read a book like this if you give it to them, and they will go from being good to being great.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Sounds like you didn't actually learn the lesson. Recursion and loops are mathematically equivalent - if you see a difference between the two, it's only in your head (and perhaps on the stack of a language that doesn't properly support it).
All of the most sophisticated languages available today make recursion a very natural part of their operation: the ML family, including OCaml; Haskell; and of course, Scheme. Here's a factorial function in ML:
All it says is "the factorial of 0 is 1; the factorial of n is n times the factorial of n-1". Of course, factorial might be called a naturally recursive function, but the point is that in languages that support recursion, recursion is as natural as looping, and in fact usually much clearer in terms of communicating what's happening.If you'd like to learn about recursion in a very natural way, try A Gentle Introduction to ML, which is an excellent tutorial. You don't have to get very far into it before it becomes obvious how useful and natural recursion can be.
On the other hand, Deitel and Deitels book may not be perfect, but they are pretty good for a typical first-year "introduction to programming" course. I'm sure there are plenty of alternatives out there, but Deitel and Deitel really aren't that bad (of course, I can't comment on the C version, as I've only read the Visual Basic version (because I had to teach it, I wouldn't normally read such a book otherwise), which by the way struck me as perhaps the only decent VB book out there).
- database design. Read Graeme Simsion's Data Modeling Essentials. This explains how to analyze proposed and existing business activities and accurately reflect them in a database schema. Knowing a lot about SQL or Oracle is not a substitute! A strong schema forces the database to do much of the work for you. A weak schema reduces the database to expensive passive storage.
- SQL. Read Joe Celko's SQL for Smarties. Work through the examples with Postgres or Oracle. (Knowledge is in the fingers.) Main benefit: the ability to craft a SELECT statement that generates a desired report with little or no postprocessing in the "host" language. On average, the database is going to be faster and less buggy at extracting, correlating and sorting data than any custom-written code. If you ever perform two SELECTs and knit the results together with custom code, your SQL knowledge may have room for improvement.
Geeks love introverted, clean, mathematical problems and hate ugly, fuzzy business-driven problems. That bias is reflected in the responses here - Knuth is the hands down favorite. While I don't dispute Knuth's value, the focus on algorithms reinforces the lamentable tendency to reinvent the database for each major application. The programmer with a knowledge of C and a head full of algorithms has in a sense a complete toolkit to take on the world, but the programmer with a high-level language and a relational database operates at higher leverage because he need not reinvent fundamental parts each time.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.
- Tufte, Edward: I've already seen a few recommendations for his books, but they are so good I wanted to reiterate them. Even if you're not a UI person, these books are worth at least a flip through in the bookstore.
- Visual Display of Quantitative Information
- Visual Explanations
- Envisioning Information
- Cooper, Alan, About Face: The Essentials of User Interface Design. Good book with lots of practical advice for designers.
- Johnson, Jeff, GUI Bloopers: Don'ts and Do's for Software Developers and Web Designers. Concentrates more on the "don'ts" than the "do's" but still an excellent read. Well designed, too, so that you can go to exactly the right section to do a quick check of your work. Good for developers as well as designers, and designed with both audiences in mind.
- Jacobson, Robert (editor), Information Design. A collection of papers on general information architecture, grouped by topics. Probably the best read I've ever had on information architecture and design, even if I didn't agree with everything in it.
- Wildbur, Peter and Burke, Michael, Information Graphics: Innovative Solutions in Contemporary Design. Good, hardcore success stories. The section about the signing in Schipol Airport and Dusseldorf Airport is a highlight. Each chapter has relevant case studies about design in various media, from in-car navigational displays to neighborhood maps for the blind.
- Flanagan, David, JavaScript: The Definitive Guide. One of the only JavaScript books to treat JavaScript like a real language, as opposed to just concentrating on recipes for making mouse cursor trailers and other abominations. I haven't seen the newly-released edition yet.
- Schengili-Roberts, Keith, Core CSS. A fairly advanced text that I use regularly. Lots of examples. At the time I bought it, it was the only full CSS-2 reference I could find in print.
I also have several pure design books for various media--books on typography, graphic design, web graphics, technique books for Photoshop and Illustrator, and so forth. Those aren't precisely apropos, though.In addition to my UI books, I have a few other books that I'd classify as seminal:
I think that O'Reilly's has put out more quality and less fluffy technical books than any other publisher. Their books on Perl are Masterful, and they really care about the computer and technical topics that matter, not stupid stuff about "Windows ME Super Secrets"
I think that their stuff on Bioinformatics is great, because few others are covering that. Or books on just Regular Expressions. Other publishers might touch on something like that for 2 seconds, and then leave. I haven't seen anything written by them that gets your hopes up too much. They don't promise that you will Master C++ in 7 days, or 24 hours (which I think is what some of the people in my Com Sci classes thought they could do, but they failed, after trying to cram everything in in one night). They don't claim that programming games is easy, and that anyone can kick out quality game engines.
Alot of publishers put out these books that offer too much, often more than they really offer.
The books for dummies are ok for people who have never touched a computer, and don't really want to know much more than the basics, but they really aren't gonna do that much for you
Tibbon
tibbon.com
Looping is a very special case of recursion, isn't it. I am not a good programer for sure, but after fully grasping recursion I wonder why do we need loops at all. Maybe only to save some stack memory in special cases, but loops should be teached well after recursion, and only as a practical convenience or short cut.
:) (neither do I studied CS or CE). But any science should force you to study CS or at least advanced programing. It's a shame to see Economists using paper writen math in publications and not programs, or even Excel spreadshits for complex stuff which should have been a program really.
I'm not good at math, but will definetly take a look at this book
unfinished: (adj.)
Volumes 1, 2, and 3. One, in particular, teaches you everything you need to know about networking protocols. Everything is broken out at the tcpdump level, and his demo network is well illustrated, so you can see how everything talks.
This space for rent. Call 1-800-STEAK4U