Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming IT Technology

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.
This discussion has been archived. No new comments can be posted.

Best Computer Books For The Smart

Comments Filter:
  • I would recommend the "Dummies" series to any smart person.
  • For applied C++ (Score:3, Interesting)

    by djm2cmu ( 455791 ) on Friday July 26, 2002 @09:41PM (#3962534)
    Effective C++ and More Effective C++, by Scott Meyers
    • Don't forget Effective STL. And along with that, Josuttis' The C++ Standard Library.
    • More C++ suggestions (Score:4, Informative)

      by Anonymous Brave Guy ( 457657 ) on Friday July 26, 2002 @10:06PM (#3962649)

      A decent list of C++ books is in this newsgroup posting [google.com].

  • Applied Cryptography (Score:4, Informative)

    by demi ( 17616 ) on Friday July 26, 2002 @09:41PM (#3962536) Homepage Journal
    by Bruce Schneier. The book is enjoyable and has saved me from several gaffes when using crypto for applications.
    • And if you're completely new to cryptography, definitely check out Cryptography Decrypted by H.X.Mel. His writing style is incredible...that book could teach public-key crypto to a monkey. Hmmm...now there's a thought...
    • It is available for download, the full book, in PDF or Postscript, here [uwaterloo.ca]. Please read the copyright notices and respect them.
    • 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.

  • by markana ( 152984 ) on Friday July 26, 2002 @09:42PM (#3962542)
    Programming Perl (Camel)
    Perl Cookbook (Bighorn sheep)
  • some good ones.... (Score:4, Informative)

    by jeffy124 ( 453342 ) on Friday July 26, 2002 @09:46PM (#3962556) Homepage Journal
    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
  • 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.
  • by astrashe ( 7452 ) on Friday July 26, 2002 @09:50PM (#3962581) Journal
    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.

  • by BMazurek ( 137285 ) on Friday July 26, 2002 @09:53PM (#3962597)
    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.
    • One day I saw a list of *must read* computer / programming books compiled by Steve McConnell. I had a brainfart and forgot he wrote CC.
      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.
    • I strongly second reading _Code Complete_ and APUE. Another two excellent books, also by Richard Stevens, are TCP/IP Illustrated (vol 1) and Unix Network Programming. If you do any Unix or network progamming, you need some Stevens books.
    • Since the advent of the web, though, I've come of the opinion that language agnostic books are the important ones.

      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.

      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.

      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.

  • 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 [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.
  • Get theory books. (Score:4, Insightful)

    by WanderingGhost ( 535445 ) on Friday July 26, 2002 @09:56PM (#3962608)
    Personally, I value:
    • 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)
  • some recommendations (Score:3, Informative)

    by g4dget ( 579145 ) on Friday July 26, 2002 @09:57PM (#3962618)
    If you are looking for a concise book on C++, look at Pohl's "C++ Distilled".

    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.

    • by domc ( 11897 )
      I think that you are right about the Java part, but dead-wrong about the Perl part. The O'reilly Perl library is an invaluable resource for education in the more difficult (and not-so-difficult) areas of Perl.

      domc
      • The O'reilly Perl library is an invaluable resource for education in the more difficult (and not-so-difficult) areas of Perl.

        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.

    • 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
    • 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.
      That technique works when first getting your feet wet with Perl or when writing throwaway scripts. If you copy and hack up high quality code, you'll learn good habits. Randal Schwartz [stonehenge.com] and Tom Christiansen [cpan.org] are good. Code worth copying has 'use strict;' and usually has warnings enabled (-w). And if your interest in Perl ends with quick, hacked-up scripts, nobody will complain. But just because you learned to play "Happy Birthday" on the piano, don't assume you've exhausted the capabilities of the instrument.
      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.
      Most people coming to computers and computer programming wrongly think that objects are either the best, or even the only, way to build abstractions.
      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.
  • by Clover_Kicker ( 20761 ) <clover_kicker@yahoo.com> on Friday July 26, 2002 @09:59PM (#3962621)
    Check out http://www.canonicaltomes.org/ [canonicaltomes.org], people have entered and voted on the "best" books in a variety of categories.
    • 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)

    by Twister002 ( 537605 ) on Friday July 26, 2002 @09:59PM (#3962622) Homepage
    Sorry if I'm too lazy to look up any links or authors.

    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
    • by eddy ( 18759 )

      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.

      • 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.
  • 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.
  • by prospective_user ( 552211 ) on Friday July 26, 2002 @10:00PM (#3962627)

    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)

    by Alex Belits ( 437 ) on Friday July 26, 2002 @10:00PM (#3962631) Homepage
    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.

    • Let me second #1. K&R2 is one of the best "my language" books ever written. You need a copy if you don't have it.

      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.
    • I found "C++ Primer" by Lippman and Lajoie to be far more readable than Stroustrup-- although I use both.

      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.
  • by SuperKendall ( 25149 ) on Friday July 26, 2002 @10:01PM (#3962634)
    under the circumstances, than "SQL For Smarties [amazon.com]"? ;-)

    No joke, it really is a good book!
  • C++ In depth series (Score:3, Informative)

    by eddy ( 18759 ) on Friday July 26, 2002 @10:02PM (#3962636) Homepage Journal

    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)

    by sphix42 ( 144155 ) on Friday July 26, 2002 @10:03PM (#3962638) Homepage
    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.
  • by Chemical Serenity ( 1324 ) on Friday July 26, 2002 @10:04PM (#3962643) Homepage Journal
    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... ;)
  • Once people have learnt a bit of code, and are starting to deal with the troubles of working with large projects, documenting, and getting their head around what consitutes decent code... I'd recommend Code Complete [amazon.com] from the Microsoft Press. Say what you will about their software, but MS hardware, and some MS books are quite nice. In this one, Steve McConnell gives newbies many tips he's learned over the years. It doesn't have much to do with OO (, and the languages are old, but many of the ideas provide a good founding for the process of development.

  • by Succa ( 108618 ) on Friday July 26, 2002 @10:05PM (#3962648) Homepage
    SICP [mit.edu].

    (Structure and Interpretation of Computer Programs, a fine book that'll teach you more about programming than should be allowed by law)
  • by Axe ( 11122 ) on Friday July 26, 2002 @10:07PM (#3962653)
    King Wen & Duke Chou: The I Ching
    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:
    The Lord of the Rings. (doh)
    Hitchhiker's guide to the Galaxy.
    How to date a woman.
    ..and
    Definitive guide to mental and sexual masturbation.
    ..by me. ;-)

  • A brief list (Score:5, Informative)

    by moebius_4d ( 26199 ) on Friday July 26, 2002 @10:08PM (#3962659) Journal

    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.

    • Schneier, "Applied Cryptography" -- this is a must have if you ever do any type of crypto work, from munging files to hard encryption. Good for those who really want to know what the PKI thing is all about, and then some.
    • Re:A brief list (Score:2, Insightful)

      by deltavivis ( 26381 )
      Bruce Eckel's "Thinking in Java" can be added as a java book.
    • Re:A brief list (Score:3, Informative)

      by bmajik ( 96670 )
      Excellent list. Two domain specific ones i'd add are:

      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 :) I'd much rather read well reasoned technical arguments about the shortcomings of W2k than "it sucks d00d" and "BS0D city!". And maybe, just maybe, you might learn something about your quirky w2k box :)

  • 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.

    Behind the curve on .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.

    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 .NET docs without mouse's reach.

    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...
  • by shooz ( 309395 ) on Friday July 26, 2002 @10:14PM (#3962681)
    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 [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: Living With Bad Software." Boris Beizer, 1988, Tab books, ISBN 0-0306-3146-1. Out of print, alas. Absolutely wonderful.

  • by dpbsmith ( 263124 ) on Friday July 26, 2002 @10:22PM (#3962706) Homepage
    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)
  • These are all off the top of my head. So the titles or author names might be slightly off.

    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

  • by Chuan-kai Lin ( 26774 ) on Friday July 26, 2002 @10:28PM (#3962724) Homepage

    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.

  • 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)

  • by fermion ( 181285 ) on Friday July 26, 2002 @10:36PM (#3962750) Homepage Journal
    For Complete non-MS perverted C++:
    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.

    • 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.

      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)

  • Nobody's mentioned "Deep C Secrets" by Peter van der Linden. This is a great book for getting below the surface of writing C.

    Cheers,
    Toby Haynes

  • 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)

  • by pmorrison ( 513514 ) on Friday July 26, 2002 @10:48PM (#3962785)
    ... 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 [amazon.com].

    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.
  • 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)
  • books on patterns (Score:3, Insightful)

    by Dr. Awktagon ( 233360 ) on Friday July 26, 2002 @10:58PM (#3962817) Homepage

    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.

  • 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
  • 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:

    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 :) 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.

    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 :) )enough. Simply one of the most interesting and well written CS books out there, with that perfect mix of theory and practice.

    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. :) You'll find lot of really interesting, cutting edge stuff here. Generate height maps from stereo pairs and shit. Cool!

    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 [veen.com]? 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.
  • by DCowern ( 182668 )
    I see Tannenbaum's book mentioned several times but so far I haven't seen even one mention of The Dinosaur Book [amazon.com].
  • 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.
  • For those interested in database design instead of (or alongside) programming, here's a short list:
    • 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.
  • by lanner ( 107308 ) on Friday July 26, 2002 @11:28PM (#3962912)
    First off, find your books online by using www.isbn.nu

    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/resour ce s.html

    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

  • Interconnections by Radia Perlman

    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:

    Network Performance Baselining by Nassar

    Building Internet Firewalls by Zwicky, Cooper and Chapman (Soon to be on my Fave list)

    The Six Sigma Way by Pande, Neuman and Cavanagh

    And the book I want for Christmas
    Network Security: Private Communication in a Public World by Kaufman, Perlman and Speciner
  • 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 [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
  • 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
  • by KidSock ( 150684 ) on Saturday July 27, 2002 @12:29AM (#3963097)
    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
  • Another Short List (Score:3, Insightful)

    by StormyMonday ( 163372 ) on Saturday July 27, 2002 @01:25AM (#3963216) Homepage
    "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. [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)

    by John Jorsett ( 171560 ) on Saturday July 27, 2002 @11:52AM (#3964329)
    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.
  • Douglas Hofstader (Score:4, Interesting)

    by gwernol ( 167574 ) on Saturday July 27, 2002 @12:55PM (#3964525)
    I'm surprised this hasn't been mentioned yet. Godel, Escher and Basch [amazon.com] 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.
  • Databases! (Score:3, Informative)

    by crucini ( 98210 ) on Saturday July 27, 2002 @04:36PM (#3965159)
    I work on server-side business apps, so that colors my response. The single biggest error in business programming is probably underestimation or misunderstanding of relational databases. Used properly, the database takes on much of the burden of storing, indexing and searching the data and prohibiting the entry of inconsistent data, thereby lightening the load on the application programmer. It's generally best to make the database the center of gravity, and use the "host language" (perl/java/python) as a thin layer of authentication, validation, business rules and logging between the database and the network. To do this, you need a good understanding of:
    • 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.

He has not acquired a fortune; the fortune has acquired him. -- Bion

Working...