My Shared Items

Monday, May 25, 2009

Another collection of Joel Spolsky's blog postings in dead tree form. I have really enjoyed all of Joel's books and I have reviewed them all; here, here and here. This book is nearly 300 pages of wit and witticism from Joel. Although all of these posts AKA chapters are still available online I like having them in read anywhere form, especially since I read this book on a plane.

There are thirty six separate chapters in this book, which are further divided into nine parts. The first part Managing People contained many of the same postings that appear in Smart and Gets Things Done. Each section has some interesting information written in Joel's unique style which makes the material easy to read. I'll highlight my favorite chapter from each part.

There is one new post in section one, entitled "My first BillG Review" which is about a review of an Excel specification written by Joel by Bill Gates. I found it amazing that Bill Gates was so involved in every product in the beginning. The shear amount of material he had to go through must have been staggering.

In part two, Advice to Potential Programmers, I enjoyed every chapter. I wish I had some of this advice before getting started in computer science. The chapter "The Perils of JavaSchools" was quite interesting not only does the article quote Monty Python, but it brings up some good points on the change in curriculum of computer science. It really goes back to the debate, should programmers know C. As you may have guessed from the chapter title Joel is firmly in the learn C camp. His assertion is that CS programs have been dumbed down to increase enrollment. A more challenging CS program identifies the people with the best abilities to become great programmers.

Part three is about program design, which was my favorite section. I found the chapter on "Building Communities with Software" the most interesting. Like Joel I think that this is an area that is rapidly expanding with very little knowledge of how it really works.

Part four on managing large projects contains three articles on why large projects (products) are so difficult. "Martian Headsets" puts the problem of interoperability into perspective with a very clever analogy. These new headsets begin with a single standard which is used by all headsets. Everything works great until a new feature is added to the standard. Now the new headsets have to have a way to still work with older devices while adding additional functionality for new devices, this may sound familiar. Joel uses these headsets to demonstrate just how complicated software, particularly an operating system, can get rather quickly.

Part five is another round of programming advice. I found all of these chapters very useful but since I am picking favorites I'll highlight "Making Wrong Code Look Wrong", which discusses naming conventions as a way to help debug code. Essentially by naming variables and functions consistently the code can be more easily debugged. Joel uses the example of passing strings in HTML. This can lead to Cross Site Scripting (XSS) therefore all strings should be HTML encoded to eliminate this vulnerability. By simply naming strings with an "us" prefix for non-encoded (unsafe) strings it becomes apparent when the wrong type of string is passed to a function. A function should never publish an unsafe variable.

Part seven covers running a software business. Once again each chapter contains very useful information, for Joel's take on refactoring check out "Rub a Dub Dub". I found the chapter on "Seven Steps to Remarkable Customer Service" to be the best of the bunch. Having started in Advantage Technical Support over 10 years ago I could really relate to this chapter. One of the most profound ideas he puts forth is the idea that developers should be involved in tech support, an ideal we use with Advantage. It is much easier to eliminate a common problem than to pay someone to answer the same question hundreds of times. This puts a lot of pressure on technical support since the problems that do occur are difficult to work through. I think our technical support team excels at this and have become quite remarkable.

Part eight on releasing software contains two chapters. The first is "Picking a Ship Date" and the second is "Camels and Rubber Duckies" which is about pricing, go figure. The biggest factor in determining a ship date is the number of features that you include in your product. Joel recommends ranking the features by how important they are since developers will generally choose the "fun" features. He also recommends dropping features to meet the ship date rather than making the ship date a moving target. As it turns out some of the features you drop may never have to be implemented at all.

The final part is on revising software. Joel revisits and expands on his idea of determining features in "Set Your Priorities". He proposes getting a list of features from everyone you can; developers, sales, tech support and customers. Take these suggestions to a meeting with representatives from these groups. Have them vote on the features and prioritize them removing the features that don't get many votes until you have a manageable number. Take this list and allow people to vote on the features they would most like. Everyone gets the same amount of votes and the features with the most votes win.

The bottom line: I thoroughly enjoyed this book, I like Joel's writing style and he has a great way of conveying complex information in an easily digestible form. As I said in the beginning all of the chapters in the book are still available on Joel's website making the book (blook) somewhat redundant. However, having a printed copy of the book makes it a nice reference.