Important note: You can purchase any of the books listed here from Amazon.com by clicking on the link associated with that book. I have signed up as an Amazon "associate" which means that if you buy a book listed here by clicking on it, I get paid a percentage of the book price. Also, if you enter the Amazon site using the link shown above, even if that book is not listed here I get a (lesser) percentage of that book. So I encourage you to use this method if you decide to want buy a book.
One thing I like in particular about McConnell's books is the emphasis on factual data. Most books on programming methodology are primarily collections of wisdom (read: opinions) by people who've had a long experience managing programmers or programming themselves. However, McConnell goes a step further and backs up his statements with hard facts. Nearly every other page cites some study, research finding, or other form of objective evidence to back up his statements, and each chapter has an extensive bibliography.
Rapid Development : Taming Wild Software Schedules by Steve McConnell. What Code Complete is for the programmer, Rapid Development is for the Software Technical Director - a complete guide on everything you need to know to lead a software project successfully. In my opinion, the greatest value of this book is it's reliance on hard, provable facts. Are you tired of trying to convince you Pointy-Haired Boss that a quiet environment with few distractions will be more productive than an open sweatshop? Well, now you can simply say "Well, IBM discovered that their programmers were over twice as productive...". And if that fails, it's a nice, thick, heavy book that you can hit your boss over the head with.
There's a lot in here that's useful to the programmer as well. The last part of the book consists of a series of "best practices", individual techniques for structuring your development process, such as Evolutionary Prototyping, Staged Development, Code Reviews, etc.
If you are a programmer who has just been promoted to technical lead of a software development team, you should definately have a copy of this book.
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. This is one of those books that completely alters your world-view about how to think about designing a program. I've found that ever since I read it, I've started to think about my code in terms of reusable patterns. When I say "reusable" I'm not talking about something you can stick in a library and link to it and have it always work. Instead, design patterns are specific tried-and-true recipes for solving certain types of problems. Design patterns aren't like algorithms either. They are more like miniature frameworks.
For example, there's a pattern called the "observer" which I've used quite a bit since I read this book. Suppose, for example, you have some object in your program which has a state which changes every once in a while. Let's also suppose that there are various user interface components which can view various aspects of an object. For example, in a military simulation game, you might have an inspector panel which allows you to select an individual unit on the battlefield and get statistics about that unit. Now, what happens if the statistics change, perhaps because the unit was damage? How does the UI get updated. There are lots of inefficient solutions such as polling the unit's state at rapid intervals, or updating the UI every time any unit's state changes. But the idea behind the observer pattern is that there are two types of objects, observers and observables. An observable (the things being observed) keeps a list of all of the observers that are currently looking at it, and sends an "update" message to each one of them whenever their state changes. The observer and observable classes can be built seperately, and then mixed in with whatever object needs to be observed.
At this point you may be going "Well, duh." Sure, we've all heard of this technique before, most likely as an ad-hoc solution to a particular problem. However, we've never had a name for it. It's really useful being able to talk about these high-level concepts in a high-level way. Also, it's useful knowing that other people have found this solution to be useful. Whenever we invent a new ad-hoc solution, we have to waste a lot of mental energy working out all of the consequences of that solution; Knowing that others have adopted that solution widely allows us to take big giant steps towards solving the problem rather than little baby steps.
The book contains a listing of about two dozen design patterns, complete with names, descriptions, examples, and caveats.
The Mythical Man-Month: Essays on Software Engineering by Frederick P. Brooks Jr. This is the classic book on software program management. The latest addition contains a number of chapters of additional material.
I originally got this because everyone I knew who seemed to have a clue about managing projects recommended it to me. Fred Brooks certainly knows what he's talking about and I think most of his fundamental points (such as "plan to throw one away, you will anyhow.") are quite true. However, if you're new to all of this and you just want advice on how to run a project, I think that Rapid Development is the better book, and will tell you pretty much all you need to know. The Mythical Man-Month, by contrast, is basically a diagnostic book, and fairly light on solutions.
Besides, we all know that there's no such thing as a bad O'Reilly book. (Well, I've heard rumors that there actually is one. But I've never seen it.)
Linux in a Nutshell: A Desktop Quick Reference, by Jessica Perry Hekman, Andy Oram (Editor). This is a general reference guide, which means that it's basically a whole lot of tables of things like commands and their syntax. I didn't like it as much as the other books here, but I have to admit it's been useful.
Unix Network Programming, Second Edition by W. Richard Stevens. (A two volume set, of which I only have the first volume, since that's all I really need.) This is pretty much everything you'll ever need if you want to do programming with BSD sockets. It covers IPV6, Nonblocking I/O, Broadcasting, Multicasting, Multithreading and much more. This was originally recommended to me by my friend Leo Schwab, and it's been very useful in my Linux server-based programming.
Advanced Programming in the Unix Environment, by W. Richard Stevens. A really complete guide to programming the basic services of the Unix operating system, such as creating processess, manipulating filehandles, inter-process communication, console output, and so forth. I especially like the way it covers all of the subtle nuances of the basic system calls, something you don't normally pick up from reading the 'man' pages.
Programming Perl, 2nd edition, by Larry Wall, Tom Christiansen, & Randal L. Schwartz. An easily readable, humorous, and yet comprehensive introduction to the Perl language. It has lots of silly footnotes, which helps keep your eyes from glazing over with too much technical detail. Here's a quote from the introduction which I think captures the spirit of the book: "We will encourage you to develop the three great virtues of the programmer: laziness, impatience and hubris." I had the original edition which only covered Perl 4, and got this one when Perl 5 came out.
The Art of Ware: Sun Tzu's Classic Work Reinterpreted by Bruce F. Webster. This amusing book is essentially Sun Tzu's "The Art of War" translated into the language of software development, specifically addressing the "war" that goes on between companies in the competitive marketplace. Implicit in this premise is a whole sheaf of analogies and metaphors, such as the idea that different types of marketplaces correspond to different types of battlefields. While I certainly find the basic concept of the book to be clever, I can't really evaluate it's efficacy. I'm sure that many of the principles in the book could be usefully applied, but I have my doubts that the "free market competition is war" metaphor can be carried this far and still be useful. Also, since the book is primarily addressed at high-level strategic thinkers (i.e. CEOs) and since I've never operated at that level, not many of the concepts resonated well with my personal experience. However, if you are a CEO you might want to consider reading this (it's fairly short) and see if you get any insights.
Even today I'm still surprised by how much I enjoyed reading this series. After all, I've never been a big fan of military science fiction. And the blantant, and sometimes heavy-handed political overtones in the book did on occasion put me off. In other words, they aren't in the category of books that you're supposed to like. Even with that, they are still among my favorites, for the simple reason that they are just written well. Weber's storytelling is solid, the characters are interesting, and the action is well-paced.
I had gotten interested in the series when someone at a convention mentioned them as an example of "well-written space opera". My formative impressions of space opera were based on my readings of E.E.Doc Smith's Lensman series, in other words campy, overdone, and with outdated technology. However, these books read more like a Tom Clancy novel with Babylon-5 level technology. The main character is a female starship captain consciously modeled after Horatio Hornblower, and who occasionally gets into trouble for doing the honorable thing too well.
Another interesting thing is that, for the most part, the main antagonists of the story aren't bad people. Rather, they are sort of in the position of having grabbed the tiger by the tail, so to speak, and will do just about anything to keep from letting go (and hence be eaten). Even the political overtones, which at first seemed like a rightist diatribe against the welfare state, have taken on some interesting ramifications, especially the allusions to the French revolution. Many of the antagonists's problems stem from having achieved power without legitemacy, and this dovetails nicely with some ideas I've been reading in Alexis de Tocqueville.
The Deed of Paksennarion by Elizabeth Moon. This is a compilation of three novels: Sheepfarmer's Daughter, Divided Allegience, and Oath of Gold. I recommend buying the single volume compilation, it's got much better cover art.
One thing I notice about most heroic fantasy is that the characters are always 'loose cannons'. They are often rootless wanderers, owning responsibility to no one, or they are so far removed from their masters as to be effectively free agents. However, this is a story of a woman of heroic potential who doesn't want to be a free agent. Paksenarrion is one of the most charming female warrior characters to come along in a while, and only gradually does she realize that she has a duty to take charge of her fate. Paks starts out as a common footsoldier, and experiences the feeling of support and mutual bonding that comes from being a soldier in the ranks. This is aided by Moon's breathtaking knowledge of medieval warfare, which portrays rarely touched-upon aspects of combat such as logistics, training and seige. Also, Moon's use of language and poetic imagery is good, and the other characters are deftly rendered.
But what has really drawn me to this book is that it has a distinct moral center, and I enjoyed it for the same reason I enjoyed Stranger in a Strange Land. One cannot finish this book without a modicum of self-examination, and I like that. Even on the third and fourth reading, these books can still bring a tear to my eye. (Unfortunately, Moon's other writing, while competently done, isn't as spectacularly good as this trilogy. At least, what I've read of her work so far. I found Sassinak, for example, to be rather tepid in comparison.)
Metaphors We Live By by George Lakoff and Mark Johnson. An interesting little book, it's given me lots of ideas. The basic theme of the book is that we constantly use metaphors in our daily life, and yet we are unaware of them. For example, the metaphor "More is Up" can be seen in statements like "The price of coal went up" (meaning that the price of coal increased), or "My rent has gone down." More complex metaphors include "An argument is a building", examples of the which include statements like "Your argument doesn't hold up", "That position is unsupportable", "What's the basis for that statement?", and "Now you're on shaky ground." More than one metaphor can be applied to a single human activity, such as "An argument is a journey" (e.g. "Do you follow me so far?"). Not being a language scholar, there was some material that didn't really interest me, but I got the general gist of it and that part was quite interesting.
Coming Soon:
The Spiral Dance, by Starhawk
For example, his discussion of why the President of the United States is elected at four-year intervals is enlightening: If you elect too frequently, then the country cannot maintain a consistent set of policies. If you elect too infrequently, however, people become desperate to win the election (it's the only chance they'll have for many years) and the country goes into a kind of elective convulsion. There are similar analyses of the relationships between the Federal government and the States, the power of the courts, a comparison of the French, British and American constitutions, etc.
Surprisingly, I think that this book would appeal to the hacker mentality. Each aspect of government is explained carefully, giving not only the facts but the rationales behind them, and in a manner which emphasises workability rather than morality. I'm so tired of politicians telling us we have to do something because "it's the right thing to do", so now De Tocqueville comes along and says, "No, you have to do it this way, because if you don't, history has shown that your society will break down in twenty years."
The Transparent Society: Will Technology Force Us to Choose Between Privacy and Freedom?, by David Brin. Certainly one of the most entertaining and thoughtful polemics I've read recently. Brin's main point is that we are going to lose some of our privacy, and no technological or social barriers are going to stop it, so we might as well make the best of it. The "best of it", in Brin's opinion, is called "mutual transparency", a situation where few would be likely to spy on us because we can see then spying on us and spy right back. He points out that the reason we don't have privacy partitions in restaurants is that the embarrasment of being caught staring is worse than the embarrasment of being caught with crumbs in your beard. (While I accept the point, I happen to think that this example is rather weak. Personally, I don't particularly care if I get stared at by people in restaurants.)
Brin makes the case, and very thoroughly, that cryptography and technologically-enabled secrecy is more likely to curtail freedom rather than to enhance it. He argues that the "rich and powerful" can always find some means to bypass privacy protections (like spying on you using non-technological means), and that tyrannies have generally flourished in an atmosphere of secrecy.
He also makes the point that openness is a necessary prerequsite to criticism, and criticism is the only defense against error. I personally think that this is probably the most important point of the book, and it's one which I can agree with wholeheartedly, despite my reservations about some of the other aspects of his position. (For example, I know a number of close friends who engage in somewhat unusual sexual practices; I think that these people should be left alone, as long as they harm none, and I think that their privacy should be protected, if that's possible. If it's not possible, then of course they should be made aware of this fact ASAP. While I do think that in a transparent society that most individual foibles would be ignored by the watching public, I don't see our society's obsession with regulating other people's sexual behavior going away any time soon.)
I think that this book started out as an allergic reaction, on Brin's part, to the agenda of the Cypherpunks. This strikes me as somewhat ironic, in that most hackers (the ones that believe in open-source development, and that "information wants to be free", for example) regularly practice the values that Brin preaches. (Despite the fact that the Cypherpunks came out of the hacker community, and the fact that both tend to be libertarian, I think that there's little common ground between the archetypal hacker and cypherpunk positions.)
In addition to the main line of argument, the book is stuffed full of the usual entertaining Brin-ish ideas, such as disputation forums, information warfare, the future of the Internet, etc. There is much here to inspire creative thought, and much that fits nicely with my readings of Karl Popper. It's a fun book, but also an important one, taking a controversial stand on one of the most fundmentally important issues that we as a society will be facing in the near future.
Coming soon:
Cyber Rights
Popper Selections
The Republic by Plato
As someone who's nonreligious but interested in religion (and opposed to all forms of religious intolerance), the picture Cahill paints of St. Patrick is an interesting and sympathetic one. I realize there are those who would disagree with Cahill's characterization of Patrick, but based on this and my other reading I have to say that my opinion of the fellow is a pretty good one. (And it completely confirms my bad opinion of St. Augustine.)
(By the way, in case you are wondering, I'm not Irish, as far as I know. I do have a number of Welsh ancestors, however, and I've been told that my looks are characteristic of that ancestry. )
The Story of the Irish Race, by Seumas MacManus. After reading Cahill, this was the next logical step for me. MacManus is kind of like an Irish Will Durant, focused mainly on the dramatic aspects of history. This is a good thing, in my opinion, as purely factual history can be tedious for the nonenthusiast.Also, he's biased, but he's fair enough to admit it straight of the bat. Taking that into account, I think that this is a pretty good overall introduction to Irish history, it spans from prehistorical times till about World War I, and covers topics such as the Brehon Laws, the English Invasion, the Easter Rising, etc. There are a few places where the language and the detail gets a little thick, but I was able to get through them without too much trouble.
Coming Soon:
A World Lit Only By Fire by William Manchester
Fire and Stone
To Shining Sea: A History of the United States Navy
The Ship: An Illustrated History
The Non-Designers Design Book
The Case for Mars, by Robert Zubrin
Last updated:
Talin@ACM.org