I've attempted to break this list up into categories that make sense to me. Thanks to Jon Kalb, John Yen and Steven Woolgar for some suggestions about the books and categories that helped me clean up and update the list.
CategoriesSoftware Design - Software Development - C++ Reference - C++ Standard Library - C++ Topical - Advanced C++ - C Development - Operating System Design - Windows Programming - Graphics & Image processing - Security & Cryptography - Software Development Management - People Management - Business - (Base)Ball - Philosophy - History - Science & Technology - Food & cooking
Software Design (the thinking part)
- Designing Visual Interfaces - Mullet & Sano. ISBN:0133033899. This is a dense book. The information-content per page is pretty high. It's taken me forever to actually get this read, since I'd read a chapter (or a part of a chapter), and then have to stop and take a break to think about things. There was some information in here that was new to me, even after having thought about UI design for years. You need this book if you present any information to users in a visual way.
- Tog on Interface - Bruce "TOG" Tognazzini. ISBN:0201608421. talks about interfaces for computer programs in specific. Tog's been doing this sort of thing for a while, and is worth a read.
- Tog on Software Design - Bruce "TOG" Tognazzini. ISBN:0201489171. This time Tog's talking about the design that goes behind a good interface. I think that you're probably better reading this one before the other, since without a good design, the best UI is putting a dress on a pig.
- The Design of Everyday Things - Don Norman. ISBN:0385267746. (previously pusblished as The Psychology of Everyday Things). This is a classic. Everyone refers to it. I just bought and read it in early 1997, and now I understand why. You should, too. While it doesn't talk a whole lot about computers, it's in this section because if you're programming putes, you can learn from it.
- Computer Related Risks - Peter G. Neumann. ISBN:020155805X. Your code'll work fine. Yeah. Right.
- Design Patterns - Gamma, Helm, Johnson & Vlissides. ISBN:0201633612. This is a useful book. On the other hand, there are people who treat it like the bible. I don't think it's that good. It doesn't live within reaching distance of my computer, but I look at it once in a while when I'm putting together an object, and can't figure out how best to do it. When you find yourself saying "well, this is kind of like...[fill in the blank]" but aren't sure how to implement it, this is a good book to get you started in the right direction. There's a companion CD at ISBN:0201634988.
Software Development (the typing part)
- Code Complete - McConnell, Steve. ISBN:1556154844. This book talks about the code construction job, from design to shipping, but concentrating mostly on the coding portion. A weighty tome, but well worth the time you'll put into it. Everyone I know who's actually read any part of Code Complete has learned something from it.
- Writing Solid Code - Maguire, Stephen A. ISBN:1556155514. This has a bit of overlap with Code Complete, but concentrates almost exclusively on avoiding bugs in your programs. It's worth buying this one even if you've digested Code Complete, IMNSHO.
- Programming Pearls - "Bentley". ISBN:0201103311. Bite-sized chapters. You read one. You think about it. You come up with an answer. You're a better programmer. Neat! Jon cautions you to actually work through the problems. I repeat it here because it's the way you learn from this book.
- More Programming Pearls - "Bentley". ISBN:0201118890. The sequel. No less compelling for being #2 in a series. Different problems, same approach to learning.
- The C++ Programming Language (Third Edition) - Stroustrup. ISBN:0201889544. The current reference. This is almost entirely rewritten since the second edition, and it's a great improvement. The 3rd edition lives within reaching distance of my computer at all times. I couldn't say that about either the first or second.
- C++ FAQs - Cline & Lomow. ISBN:0201589583. Very handy quick-reference when you have a specific question. Becoming out of date.
- The Design and Evolution of C++ - Stroustrup. ISBN:0201543303. Talks about how C++ evolved. It's less useful now that the 3ed of The C++ Programming Language is out, but it's holds a fair amount of historical information that I find interesting. Also of use are explanations of why things in C++ ended up the way they did.
C++ Standard library & STL
- STL Tutorial and Reference Guide - Musser & Saini. ISBN:0201633981. If you've got the third edition of The C++ Programming Language, you can get along without this. On the other hand, it's really a tutorial, and is laid out differently than the STL information in C++3ed. I find myself using both of them when I'm stumped about something within STL.
- The C++ Standard Library : A Tutorial and Reference - Nicolai M. Josuttis. ISBN:0201379260.
This is another good reference. As Jon says,
The reason that it is a must have is because unlike all of the "STL" books it documents the whole library including the string class, the stream classes, and all the internationalization stuff.
- Effective C++ - Scott Meyers. ISBN:0201924889. Most excellent book telling you how to do things and how not to. Whether you're learning C++ or you've been using it for years, this book will have something to offer. 50 good, solid rules to follow. The second edition is now out. Beware of getting the first edition by mistake.
- More Effective C++ - Scott Meyers. ISBN:020163371X. 35 more rules. I wish this and Effective C++ had been combined as a rockin' second edition. You definitely want them both.
- Effective C++ CD - Scott Meyers. ISBN:0201310155. It's got all the content of the two books in nice hyperlinked HTML, but it ain't paper, and I still like reading from paper, rather than from a screen.
- Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library - Scott Meyers. ISBN:0201749629. Another fine book by Mr. Meyers, this time on the STL.
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions - Herb Sutter. ISBN:0201615622. These were the weekly C++ guru questions that were on the web, collected, cleaned up, and bound into a book. Some of the reading's a little slower than I like, but still pretty readable and very useful.
- More Exceptional C++ - Herb Sutter. ISBN:020170434X. The followon. More goodness.
- Advanced C++ - James O. Coplien. ISBN:0201548550. Mind Expanding. Shows you idioms that you may not have thought of, but others have. Don't worry about getting it until after you've mastered the basics, but once you have, it'll help you figure out ways to do things you weren't sure C++ could do. Also on Scott Meyers' reading list.
- Modern C++ Design: Generic Programming and Design Patterns Applied - Andrei Alexandrescu. ISBN:0201704315. I haven't actually read this yet, but it's been recommended to me by a number of smart people, so it's on my list.
- The Annotated ANSI C Standard - Herbert Schildt. ISBN:0078819520. It's the standard. A lot cheaper than buying it from American National Standards Institute. But you may want to read The Annotated Annotated C Standard as well.
Operating System Design
- Lion's Commentary on Unix: With Source Code - John Lions. ISBN:1573980137.
(I haven't read 'em, but a smart Windows guy I know has)
- Programming Applications for Microsoft Windows - Jeffrey Richter.
What every Windows programmer should read before writing any serious Windows application. I've found this particularly important since I've been programming Windows since way before Win32, which is very different. There are important basic concepts to be learned in this book about memory, file IO, threading, 64-bit development and structured exception handling.
- Windows Graphics Programming - Feng Yuan.
A very intense look at graphics under Win32. Gives you wonderful insight into the graphics subsystem from the perspective of a real programmer's use of it. The author knows his stuff, having spent much time looking at graphics from the driver side of the equation.
The book is a little painful due to errors and some bad editing, but the effort is rewarding.
- Win32 Programming - Brent Rector, Joseph Newcomer.
Basic GUI treatment. The stuff you just need to read and understand in Windows. Especially useful as a reference for people already used to Windows and as a way to adopt Windows for people used to other operating systems.
Graphics & Image processing
- Computer Graphics : Principles and Practice, Second Edition in C - Foley, vanDam, et al. ISBN:0201848406. Usually referred to as Foley & vanDam, it's the standard reference, and probably isn't a bad place to start, aside from the fact that it's not written as an introduction. It's got a lot of math, and algorithms are given in pretty high-level pseudo-code, but it IS encyclopædic in its coverage. The only thing lacking is in-depth coverage of 3D algorithms.
- The Image Processing Handbook - Russ. ISBN:0849325323. This book goes pretty much straight from the overview into the hard math. If you've already been working with image processing, the overview won't be very useful to you. On the other hand, if you're new to image processing, the overview is useful, and the math isn't that hard.
- Graphics Gems - Glassner. ISBN:0122861663. This is actually the first of a series. Some of the individual articles are excellent. Others aren't so good. My way of using these books is to search out which contains the article I need, and get that. There's a lot of useful information scattered among the five or six books in the series, but it sometimes takes a while to find it.
Security and Cryptography
- Applied Cryptography - Bruce Schneier. ISBN:0471117099. It's pretty much the bible on the subject.
Software Development Management
- The Mythical Man-Month, Anniversary Edition : Essays on Software Engineering - Frederick P. Brooks ISBN:0201835959. An updated version of the classic.
- Debugging the Development Process - Maguire, Stephen A. ISBN:1556156502. This Microsoft Press book concentrates on managing development projects, and the programmers who work on them. If you're about to be promoted into a management position of some sort, this is a must-read. Even if you're not, it's an oughta-read.
- Dynamics of Software Development - McCarthy, Jim. ISBN:1556158238. This is another fine book from MicroSoft Press. I hate to admit it, and sometimes it surprises me seeing some of the software that they churn out, but there are a few people within Microsoft who really seem to know what they're doing. They all seem to write books about it. In this book, there's a list of rules to apply when you're managing a software project. I hadn't thought about it before, but the good managers I've had were applying at least some of these rules.
- Rapid Development - McConnell, Steve. ISBN:1556159005. Rapid Development is a very good book about all the various strategies you can use to speed up the development process, from the simple things like Make everybody work more hours to the more subtle things like Give people offices with doors. It discusses the pros and cons of each of the different techniques and more importantly, talks about how they interact with each other.
- Software Project Survival Guide - McConnell, Steve. ISBN:1572316217. Congratulations, you're in charge. Now what? is the header on the back page. That accurately describes what this book is about. It's a guide for the first-time project manager, and does a pretty good job of telling you how to keep your first project from being your last. If you've read Rapid Development, some of it is review, but it's a worthwhile review.
- PeopleWare - Tom DeMarco and Tim Lister. ISBN:0932633056. Peopleware is a classic on how to improve the working environment by making people more productive. I'd like to see more companies where someone in upper management has even read this book. Even better if they understood it, but that's an awful lot to ask.
- Constantine on Peopleware - Larry L. Constantine. ISBN:0133319768. This is a collection of articles and essays. Nice bite-sized chunks on how to treat your people right. Sadly, most computer companies treat programmers as a black box where you put pizza in one end and finished software comes out the other end. These articles give you ways to improve upon that view.
- The Legal Guide for Starting & Running a Small Business - Fred S. Steingold. ISBN:0873375270. If you're looking to start your own business, this is an invaluable resource. It explains a lot of the basics you'll need to know, and will warn you of some pitfalls you'll want to avoid. If you're starting your own business, don't even think, just buy this one.
- Hiring Independent Contractors: The Emplyer's Legal Guide - Stephen Fishman. ISBN:0873373677. I bought this book when I was considering starting my own consulting/contracting business. The reason for buying it was that I figured it would give me a good insight into how businesses that would be looking to contract for my help would be thinking. It succeeded at that, and also has some stock contracts that have proved a useful starting point for contract negotiation.
- Million Dollar Consulting: The Professional's Guide to Growing a Practice - Alan Weiss. ISBN:0070696284. This book isn't directly applicable to running a software contracting business. On the other hand, it does tell how to grow a consulting business (the difference being that contractors are usually hourly, consultants bill by the job and provide more expertise in how to do the work, rather than actually doing the work.), which was valuable to me in that it got me thinking about different ways to run Polaschek Computing, Inc.. I wouldn't recommend this book to someone starting a new business, but once you've got things running, you may want to read it for some new ideas on how to do things.
- The Microsoft Way - Randall E. Stross. ISBN:0201409496. Subtitled "The Real Story of How the Company Outsmarts Its Competition". Stross is the first journalist that Microsoft let into the corporate archives. He uses them to good effect. This book shows some of the reasons Microsoft is so successful. (The basic recipe is: hire smart people, give them good direction, and have 'em work hard.)
- How to Drive Your Competition Crazy - Kawasaki, Guy. ISBN:078686124X. Guy talks about guerilla marketing, but a lot of his ideas will apply to other areas of business. He even has a section on how to deal with bad bosses.
- Only the Paranoid Survive - Andrew S. Grove. ISBN:0385482582. Andy Grove stepped down as CEO of Intel in March of 1998. This book explains his view of how he turned it into the powerhouse it currently is. He uses examples from Intel's history to explain how to take advantage of the constant change that goes on the computer biz. You may not agree with him entirely (I sure didn't), but it's a good prod to start you thinking.
- All Corvettes Are Red - James Schefter. ISBN:0671685015. This could easily fall into an automotive category if I had one, but it also fits into business. The book tells the story of the creation of the "C5" Corvette, from inception to production. It's an interesting story not only for the automotive engineering aspects, but also for the way GM's thrashing affected the project. Beyond that, it's a great book for all the details about an extremely cool car.
- Rebel Baseball - the Summer the Game was Returned to the Fans - Steve Perlstein. ISBN:0964033496. This talks about the birth of the Northern League and the St. Paul Saints. I bought season tickets the first year. I sit five rows behind the umpire and explain to him where the strike zone is.
- The Rules and Lore of Baseball - Rich Marazzi. ISBN:0812860586. Much easier to read than the official rule-book, and covers many of the points you find people arguing about in bars or in line for a beer at the game. Well, maybe you don't, but I do.
- Men At Work - George F. Will. ISBN:0026284707. George Will is a heckuva writer. He loves ball. The two come together nicely in this book. I find myself re-reading it almost every winter, when it's cold and dark and I need to think about happier things. Gets me through until pitchers and catchers report.
- Veeck as in Wreck - Bill Veeck with Ed Linn. ISBN:0671675400. Bill was a rebel. He made the game fun.
- Tao Te Ching - Lao Tsu. ISBN:0679724346. This is Taoism.
- The Tao of Pooh - Benjamin Hoff. ISBN:0140067477. Taoism explained in terms of a simple-minded bear. A good intro if you aren't into the poetry of the Tao Te Ching.
- Walden and Civil Disobedience - Henry David Thoreau. ISBN:0140390448. Live simply. Do what's right.
- The Book of Five Rings - Miyamoto Musashi. ISBN:0877739986. This is now considered a management classic. Hmm. That still doesn't explain most management I've seen. Good book. I liked the parts about swordplay.
- Zen and the Art of Motorcycle Maintainance - Robert M. Pirsig. ISBN:0553277472. Guy goes on a voyage of self-discovery. He learns stuff. You might, too.
- What Do You Care What Other People Think? - Richard P Feynman. ISBN:0393026590. Strictly speaking, this is an autobiography, not philosophy. I still put it in the philosophy section. So there.
- Eastern Approaches - Fitzroy MacLean. ISBN:0140132716. Fitz MacLean tells three stories. The first is his travels in the Central Asian Republics of the USSR during Stalin's years. The second is the story of his experiences in the Special Air Service in North Africa during the early years of World War II. The third is his work with the Partisans in Yugoslavia during the latter part of World War II. Ripping good yarns, and Fitz's adventures served as the basis for the original James Bond novels. And it's true!
- The Second World War - Winston Churchill. ISBN:039541685X. This is a collection of the five volume set which is Churchill's version of WWII. It's an excellent book, and most people who are interested in the history of WWII say it's the best book on the War. The paperback boxed set reissued in 1998 is the cheapest way to find it all unless you stumble on the individual volumes in a used book store.
- A History of the English-Speaking Peoples - Winston Churchill. ISBN:0396082750. Another history from Churchill. This one covers English and American history up to the beginning of WWI, and is a good read. The only quibble I might have with it is that the history of the American Revolution seems to be lacking details and the reasons why it happened.
Science & Technology
- Borderlands of Science: How to Think Like a Scientist and Write Science Fiction -
Charles Sheffield. ISBN:0671319531.
I haven't read this yet myself, but it's been recommended and it looks like it ought
to be good. John says:
It is a tour of scientific and technological highlights rigorously described for a science fiction writer audience. I think it should have been named outposts of science, or something along those lines. It doesn't describe all the borderlands, just selected parts possibly interesting to writers.
Food & cooking
- Joy of Cooking - Marion Rombauer Becker & Irma S. Rombauer. ISBN:0452279232. A classic cookbook. It's the first cookbook I bought, and after 20 years of use on the original, it was time to update. The new edition doesn't disappoint, and I expect I'll end up having this one rattling around the kitchen until the pages all fall out, just like I did with the first one. The really great thing about this book are the about sections, which give you some background behind the ingredients you're working with. And if it's American home-style cooking, it's almost certainly in here.
- Kitchen Confidential - Anthony Bourdain. ISBN:0060934913. A look inside the food service industry. Tony's a pretty good writer, and a lot of his stories reminded me of things that happened when I was washing dishes in a restaurant in high-school. No haute-cuisine stuff in my life, so we had a lot more kids on the staff, but I could see the similarities in the general vibe.
- The Naked Chef - Jamie Oliver. ISBN:0718143604 and The Return of the Naked Chef ISBN:0718144392. A pair of cooking books (published in the UK - I had to order from amazon.co.uk to get the second one) by the guy from the TV show. The recipes are generally more simple fare. Not to say they're not tasty, but Jamie's stripped the recipes down to their essentials so you don't spend time mucking about with extra work that won't make the food taste any better.