Book Review: Coders at Work

At the outset let me just say that this is one book that every serious programmer must read at some point in their careers, preferably sooner rather than later. Coders at Work is a collection of interviews with 15 of the most brilliant programmers on the planet. You can find the full list of people and some excerpts on the book’s website. As a teaser, the book includes such names as Donald Knuth, Jamie Zawinski, Guy Steele, Brendan Eich and Ken Thompson. It’s a impressive list and what’s more each interview is very well conducted giving a deep insight into both the person’s general ideas on programming and their particular area of expertise.

The book is the brainchild of Peter Seibel, the author of the very well written Practical Common Lisp which I can safely recommend as a good starting point for people starting to learn Lisp. Seibel’s interviewing style is very effective, the questions are always short and to the point but they help guide the person in question into providing a lot of very interesting and useful information. They are also fairly open ended allowing the interviews to flow in interesting directions, unique to each person. He asks some general questions to all 15, things such as how they learned to program, what were their hardest problems or bugs, how they go about debugging and what their idea of the current state of programming is. But he also asks them things about their particular area of work. For example, with Jamie Zawinski he talks a lot about Netscape and Mozilla while with Donald Knuth the obvious topics are his masterpiece The Art of Computer Programming and literate programming. There are also some questions that you wouldn’t always think about, such as how to spot programming talent.

What makes the book very accessible is that it keeps technical jargon to a minimum. Anyone who has programming computers for a significant amount of time will have no problem in understanding most of the content. For areas that are more esoteric the programmers themselves provide very lucid explanations making it quite easy to follow along. A lot of the matter is about things that each programmer encounters: how to read someone elses code, how to debug programs, how to collaborate and pass on projects, how to improve as a programmer, what educational/personal qualifications are most helpful, etc. The book isn’t just about how awesome these people are: it’s about understanding how masters of the craft rose to that position and how us mere mortals might follow in their footsteps. Seibel does a pretty good job of asking the same question that many of us programmers would like to ask them if we had the chance.

Beyond the structure of the interviews, the book is made amazing by the stellar choice of programmers. Not only are they master programmers, they have very diverse experiences and interests resulting in lots of very interesting and powerful opinions. I particularly enjoyed Guy Steele’s interview which contains a fair amount of philosophy regarding programming and computer science and Fran Allen’s call for computing to become more socially relevant. At the same time, Zawinski and Thompson embodied what can be best described as the classic hacker mindset: coding for the pure joy of creation and problem solving. Many of the interviews are humorous in some way or the other and none of them degenerated into holy wars or religious diatribes.

There is absolutely no reason why you should not read this book. There are some areas for improvement, but these are of a presentational nature (I wish the interviews were broken in segments so that I didn’t have to read a full one at a sitting). Content wise there is nothing I have to say. Will this book help you become a master programmer? Well, not in any tangible, measurable sense. This book is not a howto or a handbook. Each person had their own ideas of how to do things and many of them disagree with what could be called ‘industry standards’ (in particular how code should be formatted or structured). What this book will do is give a window into the minds of some of the legends of our culture. I’ve found it most useful to compare what these people have done and how they think to what I do and think myself. Essentially, read the book the same way you would read Benjamin Franklin’s autobiography. You won’t learn how to become a great statesman, inventor or Founding Father of a nation, but you can figure out some ways to live a better, more impactful life.

Coders at Work tells the stories of people who might be very well be considered heroes of our times. If you have an interest in becoming a better programmer, go buy this book, read it cover to cover, think about everything they say about their programming practices and experiences and see how you can use that to make your own experience better. And above all else, remember and act on what you read.

Firefox’s greatest flaw: restarts

I really like Firefox. Despite the new slew of browsers showing of some very impressive competing technology, Firefox is still my browser of choice. I love it because it offers a consistent experience across platforms and the large ecosystem of extensions makes it a snap to bring parts of the web (Twitter, email) directly into the browser, cutting down on time spent and tabs used. Until some other browser grows a similarly impressive set of extensions I’ll keep to Firefox. With the Portable Apps versions, you can even take your personal, fully tricked-out Firefox with you wherever you may go.

Despite its general awesomeness, the one thing that continues to irritate me is the fact every now and then I have to stop work and restart. It’s probably not as bad as I make it sound, especially with the session management which makes it very easy to pick up where you left off. Of course, the restarts are for legitimate reasons: there’s a security update or I installed a new extension. Firefox is otherwise rock stable. However, even the once in a while restart can be very irritating, especially if like me, you are prone to the occasional bout of extension shopping. I went extension shopping when I started using Twitter a lot (to look for a good Twitter extension) and I went theme shopping to find something minimal when I got a netbook. There’s a lot of interesting stuff out there, but the problem was that every time I installed something I had to restart. That made browsing new adds-on a slow and rather painful experience.

I like the progress Firefox is making and commend the developers for making an awesome piece of tech but I really think that they should buckle down and just spend one point release on getting rid of the need to restart every time you install something. Some other extensible platforms (Emacs in particular and I think Eclipse too, to some extent) have support for installing extensions on the fly. Admittedly, Emacs is essentially a Lisp machine with a bunch of text editing primitives and I have no idea how Firefox is actually built. For all I know it could be a very difficult problem and might involve a significant rewrite and redesign. But difficult problems can be solved and I’m pretty sure much harder rewrites have been done in the past.

There is the possibility that I’m a lone minority and this restart problem doesn’t really bother anyone else. But I feel that this is more a result of people having gotten used to restarting than not really caring about the problem. Back in the day when I actually ran a Windows machine, frequent restarts were a part of everyday life. Things got considerably with Windows XP which wouldn’t suddenly freeze up at irregular intervals, but I still had to restart every now and then for a variety of reasons (mostly related to installing or updating software). Having been a full time Arch Linux user for the past 3 years, I’ve gotten used to not being forced to restart. I’ll only seriously considering rebooting my Linux laptop after doing a kernel upgrade and even then, I’ll wait for things to start not working right before I actually do restart. It’s far more likely that I forget to plug in my laptop and the battery slowly dies. Similarly, I often put off updates on my Mac Mini because I can’t stand the thought of waiting around for it download, install updates and then restart.

I will admit that things are probably easier to do when you have the freedom to tell the user to stop doing something and then restart. It means that you don’t have to worry about things getting overwritten or conflicts happening from trying to run the program while rewriting. As a developer, that peace of mind is something you’d be willing to pay a high price for. But that doesn’t change the fact that it is a nuisance to the user. And nuisances to users are by and large a bad thing. As developers I think we have a responsibility to give the user the best possible experience. Solving the problem of restart-free installs and updates is certainly a hard problem, but I think it’s one that is worth solving.