People of ACM - George Neville-Neil

June 13, 2013

George Neville-Neil is a computer scientist, author, and practicing software engineer whose consulting company builds high-speed, low-latency systems for customers in the financial services sector. He is the co-author (with Marshall Kirk McKusick) of the textbook The Design and Implementation of the FreeBSD Operating System.

For the last 10 years Neville-Neil has served on ACM Queue's magazine editorial board, where he developed the column Kode Vicious, which has been a regular feature in both Queue and Communications of the ACM for the last eight years.

From 2004 until 2008, Neville-Neil lived and worked in Japan, developing a set of courses dubbed "The Paranoid University" teaching safe and secure programming to engineers at Yahoo! Inc. at their offices in Asia, Europe, and North America. While on assignment in Japan, Neville-Neil became fluent in Japanese.

Neville-Neil is a member of ACM, the Usenix Association and IEEE. He received his BS degree in Computer Science from Northeastern University in 1990.

How has your book on the FreeBSD operating system, described as the only university-quality textbook to cover a broadly-deployed open source OS, impacted the software development field?

Many operating systems textbooks cover the subject matter only at a high level without showing students a working implementation of the ideas that the teachers are trying to communicate. There are also books that talk about the details of a particular implementation of an operating system, but they brush over almost all of the important theoretical underpinnings that support the code. The Design and Implementation of the FreeBSD Operating System bridges this gap, giving students a view inside a working operating system, and one that handles much of the data carried in the Internet today. At the same time, it gives them a good grounding in the higher level abstractions that they'd need to work in, not only operating systems, but any large software system. The book's impact can be measured by the successful projects and companies that are based off the system described within it.

What was your motive for naming your ACM Queue column Kode Vicious and how does the title relate to column's content?

When the Queue Board decided to add a column to the magazine we did a bit of brain storming about what type of column we should have and who should write it. Many ideas were bandied about, but the one we kept coming back to was a type of Miss Manners for software engineers.

The original idea came from one of the other board members. Here is how it played out:

"So now I'd like to throw out, 'the worst idea of all time.'" With these words from Wendy Kellogg, the idea that was to become Kode Vicious was born. In February 2004 I was, along with the rest of the Queue editorial board, attending our monthly meeting. It was the early days of Queue, now in its 4th year, and though we had had several successful issues, we had no regular columnists. I had written a couple of pieces for Queue, and was working on co-authoring my first book, but I had never been a columnist, and although the idea seemed fun at the time, perhaps due to too much wine at dinner, I was at a loss as to how to make it actually work.

The original idea for KV, as he came to be known, was for a "Miss Manners" style of column. I would write the pieces, "in drag" as it were, and this seemed like an interesting challenge. The initial idea was to write as "Mother Code" and I actually submitted two pieces to our editors based on this persona.

A bit of the character sketch might give a better idea of where this was going: "Although Mother is never harsh in her advice or criticism she is also firm in her beliefs. The image is of a strong but flexible and kind advice giver. She also has a signature line on every piece, like 'don't forget to wipe your shoes' or 'Remember to wear your galoshes' but which is related to our audience. Such as 'and remember, make sure your code builds before you check it in to the source tree.'"

In the end this approach was unworkable. Most importantly, it's very very hard to write as someone you're not. Although one or two pieces might have been possible in a very different guise, it's far easier to write as someone closer to your own persona. Let's face it, "Miss Manners" I ain't.

I actually spent quite a while trying to come up with the persona I would use, including some obvious ones like, "Code Confidential" and "Code Critic" as well as the almost embarrassing "Captain Safety", "Bug Basher", and "Lint Picker" before hitting on the word Vicious as a good one to use as a nom du plume. From there it was a quick romp through "Kid Vicious", "Code Vicious", and "Vicious Kode" to finally getting something that sounded right, "Kode Vicious."

With the new name came a new character sketch:

"Fool with a heart of gold. Always willing to teach, but unwilling to teach those who are not willing to learn. Think Zen Monk in a Sex Pistols t-shirt who you worry about bringing home to dinner. Often uses nose tweaks to show the student 'the way' or at least 'a way' '' and I was off and running. I rewrote the original "Mother Code" piece "So Many Standards" about picking coding standards, and began my career as a columnist.

As a former resident of Asia, what do you see as the challenges ACM faces in advancing computing as a science and a profession in that region?

Probably the biggest challenge for ACM in Asia is the language barrier between the US and much of the region. While there are many practitioners and academics who are fluent in English due to study in their own countries of studying in the United States, that is a very small percentage of the total number working in the computing field in Asia. ACM's publications are overwhelmingly published in English, and getting material translated into Japanese, Korean and Mandarin is a non-trivial problem, since the content is highly technical and subtleties that are lost in translation can make a paper fall flat.

What advice would you give to budding technologists about bridging the gap between computing research and the daily practice of programming?

It has been interesting and fruitful to follow what's going on in both academic and industrial research. There are a lot of people trying to solve similar problems, and seeing what others are doing can help me solve problems more quickly as well as spur my own thoughts on a tough problem. Keeping up with the breadth of work in computing is now nearly impossible, as you could spend all your days reading papers, forums and blog posts and still not be up to date. I like to pick a few things that are in my personal area of expertise, for instance Operating Systems and Networking, and at least read all the abstracts about current research so that I have an idea of what to go back to and read about more deeply. I also try to keep tabs on a few interesting areas that aren't directly related to my day to day work to keep my brain from seizing up due to reading too much of one thing.

I don't go very far from what I'm working on, for instance, looking at programming language research. But sometimes I'll just pick an area at random and ask a colleague who might know something about it and what's the best recent thing I ought to read.

One last thing to point out is that the answer is in the question. Programming is a practice and the only way to bridge the gap between research and implementation is to keep working on implementations. I like to build toys and prototypes of things I've read, or tinker with the things that research groups open source, just to see what's inside.