Readers of Communications of the ACM and ACM Queue are surely familiar with the magazines’ “Dear Abby”-like column, written by George V. Neville-Neil, under his persona Kode Vicious, or KV. This book is a collection of 87 columns on a variety of topics. KV gives “frank” advice, in the same sense that “the diplomats had a full and frank exchange of views”; and indeed, the book is subtitled opinionated advice for programmers. For me, this is part of the charm of this book. Even in the occasional cases when I disagree with an author (yes, even with KV), I appreciate a clearly stated and well-reasoned viewpoint over vague recommendations. KV’s forceful, and sometimes colorful, writing style is entertaining, without detracting from the value of the technical content. (One of my favorite KV quotes is “picking through a kernel core dump is about as much fun as picking fleas off a dog.”)
The book is organized by topic rather than by date. The first two chapters deal with the code itself (I haven’t been able to discern the difference between the two chapters). Chapters on system design, networking, and human factors follow. Each column is preceded by a short introduction, with quotes that range from the ribald to the sublime. In spite of the variety of topics, some themes that seem to be important to KV thread the columns together.
One such theme is the exhortation to think carefully about your code and system, rather than trying things out until something seems to work. This goes together with the use of the scientific method: create a theory, derive hypotheses, and test them. And do all this on paper, not in your head. This leads to the second theme: be methodical and keep a journal of notes on the history, and especially the reasons, for whatever you do. I have been sorry when I didn’t follow this advice in the past.
Another common theme for KV is security, on which he has several pieces of advice that are clear in hindsight, but not always obvious to people with less experience. One example is being careful to blind or encrypt sensitive information in logs (or not putting it in the log at all); another is taking care to encrypt sensitive data in the database, including any backups.
The networking chapter, “Machine to Machine,” contains many tips that developers without significant networking expertise should pay close attention to; and since the network plays a part in almost all software, these are things that every developer should be aware of. These tips include the dangers of overusing ephemeral ports; always using length fields for new protocols; how to debug networking issues; and understanding the effects of latency.
For all his brash persona, KV places a lot of importance on good communication with “messy, inexact, demanding, annoying, aggravating people” (and maybe the real George V. Neville-Neil is peeking through here). This is most evident in the “Human to Human” chapter, but appears elsewhere as well. This chapter includes, among other things, discussions of how to conduct design and security reviews and how to host an interview (no brainteasers!).
A final recurring theme is the need to modernize Dante’s magnum opus with a new circle devoted to marketing people. I’m looking forward to reading KV’s contributions to “the Comedy.”
In the column title “Books,” KV lists his requirements for a good book. First among these is “narrative flow and clarity of thought and description.” While a collection of columns doesn’t have a natural narrative across columns, individual columns do comply with these requirements and are a pleasure to read.
While the space limitations of a magazine column don’t permit a thorough treatment of their topics, KV does manage to include thought-provoking and useful advice. While the reference book you keep on your desk may be one by Donald Knuth (who wrote the foreword to KV’s book), you should keep The kollected Kode Vicious for some lighter yet still enlightening reading for those times when you need some respite from your regularly scheduled programming.