Key Takeaways
- The Kollected Kode Vicious provides thoughtful and pragmatic insight into programming to both experienced and younger software professionals.
- The book offers a careful selection of the essays Neville-Neil has written for ACMs Queue magazine for more than 15 years.
- Covered topics include writing code with style and substance, the art of testing and documenting software, how to design composable systems, the intricacies of networking in a distributed world, and the complexities of human communication.
- The Kollected Kode Vicious brings some wisdom to recurring themes in the software profession that will help readers find their own way through the complexity of software creation.
Addison Wesley Professional The Kollected Kode Vicious by George V. Neville-Neil aims to provide thoughtful and pragmatic insight into programming to both experienced and younger software professionals on a variety of different topics related to programming.
The book offers a careful selection of the essays Neville-Neil has written for ACMs Queue magazine for more than 15 years under the disguise of his Kode Vicious (KV) alter ego.
KV is a caricature, [...] someone I might want to be, or turn into, from time to time, a Hyde to my Dr. Jekyll. Usually I want to be KV when I’m in one of those meetings where I take off my glasses, drop them loudly on the table, and run my hand over my bald head, thinking, "How can anyone be so stupid?!"
That same abrupt indignation can be also sparked by some badly-written piece of code, a project, or some news, says Neville-Neil, whose writing has the grace to convert KV's visceral reactions into useful advice or, at least, food for thought.
If I run out of material, all I have to do is open up a piece of source code and read it. If the code is well-written, then I can write about what is good about the code, and if, as is often the case, the code is not well written, then I just have to wait for my blood to reach boiling and off I go.
The book is organized into five chapters, each of which focused on a distinct dimension of building software systems: coding, testing an documentation, design, networked systems, and the human factor.
In the first chapter, The Kode at Hand, KV concerns himself with both styling issues and substance. Style, this all-time favourite for all programmer fights, is mostly a matter of consistency to KV, as well as the foundation for "substance", i.e. the property of your code of being correct, concise, composable, etc. The topics touched upon in this section include wasting memory or resources, the limits to code reuse and the perils of copy-paste, how to manage changes, readability, logging, and more.
The second chapter, Koding Konundrums, attempts to go beyond the notion that building software systems is more than just writing lines of code, and entails testing, writing documentation, improving performance, and so on. The section starts with an ode to the scientific method as the basis for debugging, i.e., finding software bugs and fixing them, and goes on covering a given tendency to pursue new ideas and methods, the complexities of code optimizations, tools to learn about code, how often to merge, "Heisenbugs", and so on.
In System Design, Neville-Neil aka KV, moves from the dimension of simple code, as in a single function or a small system, to that of coding at scale. The key idea to build well-designed systems is composability:
Write programs with well-defined interfaces so that the output of one can easily become the input of another.
System design is thus the realm of abstractions, avoiding the perils of over-specifying a system up-front, changes that break things, security, UI, and more.
The fourth chapter, Machine to Machine, enters the dimension of networked and distributed systems:
Most koders have the false belief that they’ll never have to design a network protocol and that this is an esoteric pursuit of a select few who work on standards committees. The fact is that anyone who is writing code that uses the network is, in effect, defining a network protocol.
This chapter deals with the intricacies of ports and protocols, the hardness of debugging distributed systems and dealing with latency, scalability, standards, etc.
Finally, Human to Human is a chapter devoted to the human factor in software development.
The success of a project often depends on our more human abilities, limited though they may be, compared to those who went “the other way” at university and studied the sciences or arts that related more to humans than to machines.
The first advice KV gives to fellow developers in this chapter is reading the story of Vasa, a "Frankenstein" project to build a ship in the first half of the XVII century that goes to show how the issue of technology management is not a new one and failure to communicate can have deadly outcomes. The chapter analyzes then some ways in which communication can go wrong, the importance of reviews, how to conduct a job interview, remaining relevant in engineering positions, and so on. The chapter ends with some short, if compelling lists of books that every programmer should read.
The Kollected Kode Vicious is a book very worth a read for its capacity to take you through a number of recurring discussions among software professionals in a light and insightful way. For some or most of them there isn't possibly a consensus as to what is the right answer or approach to follow, but in all cases KV brings them a kind of wisdom that will surely help readers find their own way through the complexity of software creation.
InfoQ has taken the chance to speak with Neville-Neil about his book.
InfoQ: It does not happen every day to have Donald Knuth write a foreword for one's book. Was it surprising for you to know Knuth was a Kode Vicious reader? Have you found out which quotation from KV he included in one of his books?
George V. Neville-Neil: To say I was surprised would be an understatement. While attending ACM's Turing 100 event in San Francisco, a friend mentioned that "Don is looking for you." I had met and chatted with Don a couple of times at an annual conference we both attend, but was confused as to why he would be seeking me out. I caught up with him in the hotel and he then told me that he had only just realized that I was also Kode Vicious, and that he was a fan of my work.
I was pretty much floored and tried not to trip over myself thanking him. He kindly asked if he could write a letter to KV, and I told him that would be fine but that it'd be difficult to respond to him in the sharp way I normally do. In the end he sent a postcard, which is now framed, next to my desk, as inspiration for when I have a KV deadline.
The quote in his book is on page viii of The Art of Computer Programming, Volume 4, in the Table of Contents, "In books of this nature I can only suggest you keep it as simple as the subject will allow." After he included it we met up at the same, annual, conference and he told me that it was there.
InfoQ: In your ACM Queue column, as well as in the book originated from it, you touched on a multitude of topics related to software development. Is there an overarching theme or underlying concern that runs through all of them?
Neville-Neil: The themes have come out as I reviewed the material. Each piece is written in response to a query and those are semi-random, one will be on a topic such as networking then the next might be on inter-personal skills on a project and the next on security.
I think the underlying theme is that I prefer to keep software developers grounded in the day to day work, rather than in pretty theories, so that no matter what topic is address it's grounded in day to day reality.
InfoQ: One of the "mysteries" around KV is how much you answered real questions from readers vs. how much you forged them. In both cases, what drove your choice of the questions you ended up answering? Where did your “inspiration” or “motivation” to pick a question come from, usually?
Neville-Neil: Due to my eclectic background and broad interests, it does seem to be random. On any given day, I will look at OS kernel code, user space programs, or a complete system made up of many parts. The thing that is in common to all of the pieces is that my first thought is something along the lines of: "What made you think this was a good idea?" I have had to stop myself saying that in actual meetings of course, but it's very nearly the inspiration for any KV piece.
There is a paper I reference very early on in KV, about how you can write poor code in any language, and this is depressingly true. There are so many poor practices in our industry that it is an embarrassment of riches.
InfoQ: Answering questions implied probably some kind of learning process for yourself. In what regard did writing Kode Vicious made a better coder of you?
Neville-Neil: The learning process is usually in looking up new sources for information or checking my own facts.
Since I start out with a strong opinion —I have no other type— the rest of the writing is usually from what I already know, but as any teacher knows, when you have to explain your thoughts to others, that's where your own learning happens. It's the process of organizing the rant that results in me learning new things.
InfoQ: Could you remember which of the topic you covered was the hardest to elaborate?
Neville-Neil: The hardest topics are the hard core technical ones, many of them in the networking area, because they require a precision that talking about how to slash the marketing guy's tires does not.
Pretty much all of the pieces in the chapter on Computer to Computer (Networking topics) required me to re-read and edit many times to make sure that timings and measurements were correct and in internal agreement. That being said, explaining how a networking problem is solved is not hard for me to elaborate, because, for reasons I cannot explain, they just come naturally to me. I think I have an unhealthy interest in communication.
InfoQ: You often seem to strive to add some irony or sarcasm to your views. You also mention Hunter S. Thompson and William S. Burroughs as some of your style influences. What role do you think those stylistic choices played both for your writing and its reception?
Neville-Neil: Let's address reception first. I think that writing in the way I do, with anger and sarcasm, appeal to people who cannot actually be that way at work, in which these very topics come up. The positive reception to that style of writing comes because it is an authentic voice, but one that most people keep inside. The freedom they recognize in seeing it in writing is, I think, one of the appeals of KV.
As to direct influences, it's not that I think, "What would William S. Burroughs do?". It's that when you're a writer, you often look to those you are reading and think, "I wish I could write like that." Hunter S. Thompson could give free reign to his id in his writing, the gonzo style of journalism, as it was described at the time. For Burroughs, it was talking about topics that made people, actually still make people, squeamish, but since they were his day to day experience he wrote about them as plain facts. It's all about being yourself and writing with your authentic voice, that's what I got from them both.
InfoQ: Is there any article you sort of regret to have written because you changed your mind later on or you realized you conveyed the wrong suggestion?
Neville-Neil: This is a common question in interviews and it's very hard to answer because the answer is pretty much, "No". But that seems obnoxious, how could I write over 100 pieces and not think any of them are wrong? But then, have you met KV?
InfoQ: What kind of reactions did you get from your readership? Engineers often hold their opinion in great respect and are willing to go into strenuous discussions for even minor nuances... Was it a hard part of your role as Kode Vicious?
Neville-Neil: There have been a couple of back and forths in the comments of some pieces but very few that rise to the level of current Internet vitriol, so that's gone quite well.
I suspect that most people don't have the time or energy to argue with someone who writes 1500 word rants monthly, they'd rather argue with people 140 characters at a time.
InfoQ: Changing perspective, what are the most interesting advances or improvements in programming you saw getting some traction since you started KV?
Neville-Neil: I think the two things I'm most excited about are the new attempts at replacing C as our systems programming language and in that area I am very excited by Rust. I've been toying with it for various projects and looking at what it will do for us in IoT and Embedded Systems. I'm also excited by Go, but more for its distributed systems bent. Given I speak several human languages, my propensity for learning new languages also extends to computer languages, so when something significant comes along in that area I get excited by that.
Tooling continues to disappoint though, and I can't say I've seen much that has improved there since I started working in software. It's the place I think we could really use a lot more effort, but things like IDEs I consider to be flashy distractions. The only tool that I think is worth a mention is LLVM, which I am thrilled to see crushing gcc in places. The idea that your compiler is a toolkit has done a great deal to improve the tools we have for turning our high level languages into running machine code.
InfoQ: Do you happen to have an opinion as to whether the way we write code and build software systems has actually improved since you started the Kode Vicious journey? Or maybe it is the case we are still dealing with the same kinds of issues and misconceptions?
Neville-Neil: Things have definitely not improved and you can tell that by going back and looking at papers on the software crisis from the 1960s, long before I started writing KV. The fact that every decade there is another fad which is supposed to save us from understanding all this complexity is another clear indication that things have not improved.
We can certainly build bigger systems, but we seem incapable of building better ones.
InfoQ: What are you currently spending your time with?
Neville-Neil: I continue to consult in my main areas of networking, operating systems, security and time. I expect the SolarWinds breach to be a windfall for what I like to work on, even though Ken Thompson told us all we needed to know about that in his Turing Lecture in 1984, Reflections on Trusting Trust. And, since you're asking this in 2020 continued (aka 2021) I'm just working at home in New York City and waiting for an injection :-)
If you want to read The Kollected Kode Vicious, you can buy it on Informit website at 35% off its shelf price using the coupon code: KODEVICIOUS.
You can download a sample of the book here.
About the Book Author
George V. Neville-Neil hacks, writes, teaches, and consults on security, networking, and operating systems. A FreeBSD Foundation board member, he served on the FreeBSD Core Team for four years. Since 2004, he has written the “Kode Vicious” column for Queue and Communications of the ACM. He is vice chair of ACM’s Practitioner Board and a member of Usenix Association, ACM, IEEE, and AAAS. Neville-Neil co-authored The Design and Implementation of the FreeBSD Operating System with Marshall Kirk McKusick and Robert N. M. Watson. An avid traveler and ardent cyclist, he speaks several languages including Japanese, French, Dutch, and some Mandarin.