An Interview with Brian Kernighan on C and The C Programming Language
Read what leading programmers in the field have to say about The C Programming Language.
John Wait: Many popular newer programming languages trace their roots to C. Unix has had direct and indirect influence on many newer operating systems. To what do you attribute the longevity and popularity of both C and Unix?
Brian Kernighan: Both C and Unix strike a very good balance among expressiveness, efficiency and economy of means. That means that they are a good base to build on: the good ideas are worth stealing and the efficiency sets a standard of comparison. It's also easier for people to make a transition from something familiar than to make a big change, so a language or system that has significant elements of familiarity is more likely to be a success.
John: Related, why have C and Unix had such a strong impact on other languages and on operating systems?
Brian: C's influence on other languages is clearly visible in syntactic echoes like braces for grouping and operators like += for incrementing. C++ was specifically designed as "a better C", with notational conveniences and data abstraction for hiding implementation details, while retaining C's efficiency. Semantically, C++ adds facilities to deal with very large programs, for which C is not likely the best choice. Java is in some ways a reaction to the perceived complexity of C++, and of course C# is partly a marketing response to Java. C still sets the standard for efficiency, and is the best way to get close to the hardware while maintaining a reasonable degree of machine independence, so it's likely to remain a significant language in its own right.
One could argue that Unix's influence on operating systems is easier to assess: aside from Windows in its many variants, most operating systems today are Unix systems. If one counts cellphones, there may well be more *nix systems running than anything else.
John: You once said that if stranded on an island with only one programming language it would have to be C. Is that still the case? If not, what language would you choose and why?
Brian: It's probably still true. Partly it's because of familiarity—I still program more comfortably in C than any other language, though I routinely use half a dozen. And partly it's because I could (in theory, not in practice!) build anything else with C: almost every language and operating system one might use today is ultimately written in C at some stage. Today I tend to use AWK for quick and dirty data analysis and small tools. I use Python for larger versions of the same, and I use JavaScript for web programming. All of these are implemented as C programs, and AWK and JavaScript borrow C's syntax quite freely.
John: Have you followed the development of the ISO C11 standard? If yes, are there big improvements in this standard? Is Multithreading support the most significant change?
Brian: I have paid almost no attention to the C standard this time around, unfortunately. Standards are important in codifying new features, and dealing effectively with multiple processors is something that's very important today, but my own code is pretty much confined to the kinds of programs that would be unchanged from the 1988 standard.
John: Congratulations on the publication of a digital version of The C Programming Language, as well as your entirely new book, D is for Digital. What big trends in publishing do you see in the next five years?
Brian: As Yogi Berra is reputed to have said, "Predictions are hard, especially about the future." My ability to predict the future is quite limited and often wrong, but it seems safe to say there will be "interesting times" ahead for authors, readers and publishers.
As an author, I've always used computers to prepare books, so electronic publishing is in some ways familiar territory, though the details are different. It's much easier and faster to get a book into the hands of readers than when one had to send a manuscript off for copyediting and printing. Today, if I'm satisfied with my words, I can upload a PDF to a web site, and the book is available both electronically and (with print on demand) on paper within hours. Of course the downside is that the author is now responsible for all the things that publishers did behind the scenes—copyediting, cover design, registering copyright, negotiating rights like translations, and of course publicity. Speaking from personal experience, all those services were valuable, and I miss having experts do them for me.
Speaking as a reader, I strongly prefer paper books for most reading, whether technical or not. It's easier to flip around in the text and to make marginal notes, and of course there's a helpful visual memory ("It was towards the top of a left hand page near the middle") that electronic books don't provide. But ebooks are easier to search, to cross-reference internally, and to link to the rest of the world. Ebooks are also a lot more portable. When I went on an extended vacation last summer it was handy to take Kindle books, which weighed nothing and took up no space. But once I found a library of good old-fashioned paper books, I spent my time there; most of the Kindle library remains unread.
Publishers are working hard to adapt to a world in which their role as intermediaries between authors and readers is threatened. Speaking as an outsider, I imagine that, especially for technical books, we'll see a lot more publications like the digital version of K&R, where readers can get both paper and electronic forms, using one or the other as circumstances dictate. I did that with a new book on software engineering—when I went on vacation, the paper version stayed at home because it was too heavy, but I use it for reference when I'm at home.
John: You teach a "Computers in Our World" class at Princeton. How has the typical student's relationship with computers and technology evolved over the last decade?
Brian: Students are much more involved with technology today than they were a decade ago, in the sense that they have a lot more of it, it's much more sophisticated and powerful, and it's far more portable. Everyone has a laptop, of course, but almost everyone also has a smartphone, which I sometimes facetiously say has been surgically attached to their bodies, so much and so often do they use them. Thus all the time they are carrying computers that are far more powerful than the supercomputers of even two decades ago, probably without realizing how much improvement has taken place in that short time.
They also take it for granted that they will have high-speed connectivity everywhere, and that they can connect with friends and information anywhere. This is an enormous change: two decades ago, the Internet was a playground for academics and researchers, not the pervasive communication system that it is today; similarly, the cellphone barely existed.
Their social lives revolve around their phones and Facebook, of course, and to a considerable extent their academic lives rely strongly on computing. In the class, I try to make them aware of how pervasive technology is, how much they depend on it, and how they might think about the effects of technology on society. This is all in the hope of making them more educated citizens, better able to deal with the world, and perhaps even to shape it better for the future.
John: You also teach a class, “Advanced Programming Techniques,” which I expect anyone who has read any of your books would like to audit. In your course description you mention that "programming is more than just writing code." What do you desire that students most learn in that class?
Brian: How to write good code that works well and does something useful. In the early assignments in the class, I ask students to modify existing code, perhaps by rewriting it in a different language. Or I might ask them to write a library that implements part of a standard, or that interfaces with a database. In each case, I also ask them to write tests to check their code, and a test harness so the testing can be done mechanically. These are useful skills that are pretty much independent of specific languages or environments.
The major part of the course work is a group project, where students learn a bunch of new things. Some of these are purely technical, like a new language or framework or hosting environment, but many are non-technical, like the realities of working with other people, figuring out what to do, allocating tasks among colleagues, and managing schedules when everyone is way too busy. Most of what they learn comes from the project experience, which I often characterize as a simulation of reality.
John: What do you want students most to take away after reading The C Programming Language?
Brian: It's pretty much the same answer: how to write good code that works, and is easy to maintain and modify. If they also get some subliminal idea of how to describe software systems well, that's good too.
John: What are the most pressing problems that new technology creates with regard to social, political and legal issues?
Brian: If I had to pick a single issue, it would be privacy. The spread of the Internet, the steadily decreasing cost of storage and processing power, and the pervasive use of the Internet have combined to make it very difficult to restrict how much others can find out about our lives. Commercial interests of course want to know as much as possible as they can about us so they can induce us to buy more. Governments have perhaps come a bit late to the party, but they too are eager to learn everything possible about their citizens. I fear that without some unlikely combination of restraint, law, and pushback by ordinary people, we are heading to a world that will make the invasions of Orwell's 1984 seem desirable by contrast.
Security goes along with privacy to some degree; it's hard to feel secure if every aspect of one's life is known to others. Security is perhaps more amenable to technical solutions, however, since threats like viruses, fraud, and identity theft are clearly criminal activities and thus there are more likely to be concerted efforts by governments and business to control them.
I also think that the legal system is dealing badly with intellectual property issues like software patents and copyrights; we seem to be spending more of our resources on high-priced arguments about trivial "inventions" than on creating new ones. This may perhaps be a short-term problem, so I am more optimistic about sensible solutions.