This is a conversation with Brian Kernighan, a professor of computer science at Princeton University and a pivotal figure from the early days of Bell Labs. The discussion covers the history and philosophy behind some of modern computing's foundational technologies. Kernighan recounts the creation of the UNIX operating system, detailing the collaborative environment at Bell Labs and the minimalist, programmer-centric design philosophy that emerged from hardware constraints. He provides a brief history of programming languages, from assembly to the success of C, which he co-authored, and modern languages like Go, highlighting its powerful concurrency model. He also discusses the design and utility of his co-creations, including the text-processing language awk and the algebraic modeling language AMPLE. The conversation touches on theoretical computer science, including the P vs. NP problem, and Kernighan’s reflections on the evolution of Artificial Intelligence and the societal impact of ubiquitous computing.
A Conversation with a Computing Pioneer: Brian Kernighan on UNIX, C, and the History of Programming
0:00:01 Introduction: The host introduces Brian Kernighan, highlighting his key contributions to computer science, including his work on UNIX, the C and Go programming languages, the text-processing tool awk, and the AMPLE modeling language.
0:04:25 The Birth of UNIX: Kernighan tells the story of how UNIX was created at Bell Labs in 1969. After Bell Labs pulled out of the complex Multics project, Ken Thompson, over a three-week period while his family was away, wrote the first version of the UNIX operating system in assembly language on a little-used PDP-7 computer.
0:21:24 The Bell Labs Environment: The unique environment at Bell Labs was crucial for innovation. It was a very open, collaborative, and physically close-knit community where a tight feedback loop allowed programmers to create and refine tools quickly. This atmosphere fostered a sense of community and productivity.
0:22:22 The UNIX Philosophy: The fundamental goal of UNIX was to create a productive and comfortable environment for programmers. Its design was shaped by early hardware limitations, which enforced a philosophy of minimalism, efficiency, and the creation of simple, general-purpose tools that could be combined in powerful ways.
0:35:20 Awk for Data Exploration: Kernighan explains the design of awk, a scripting language he co-created. It is designed around a simple pattern-action paradigm that automatically loops through lines and fields in a file, making it exceptionally powerful for writing short, quick programs to analyze and manipulate text data.
0:46:42 A Brief History of Programming Languages: The discussion covers the evolution of programming, starting from low-level assembly languages tied to specific hardware, to higher-level, portable languages like Fortran and COBOL, and then to systems programming languages like C, which enabled the creation of operating systems and other complex software.
0:53:07 The Enduring Success of C: Kernighan attributes C's long-lasting impact to finding a "sweet spot" between expressiveness and efficiency. Its success was also deeply tied to the UNIX environment, as UNIX and its tools were written in C, making the entire system portable across different hardware.
0:59:33 The Go Programming Language: As a co-author of a book on Go, Kernighan discusses its origins from Bell Labs veterans Ken Thompson and Rob Pike. He praises Go as a "C for the 21st century" and highlights its built-in concurrency model (goroutines) as a particularly natural and efficient way to handle parallel computation.
1:11:04 AMPLE for Optimization: Kernighan describes AMPLE, an algebraic modeling language he helped create. Its key innovation is allowing users to express complex mathematical optimization problems in a human-readable, algebraic format, cleanly separating the model from the data and the underlying solver algorithm.
1:18:19 P vs. NP and Theoretical Computer Science: When asked about the P vs. NP problem, Kernighan states his intuition is that they are not equal. He recalls his early work on heuristics for hard problems like graph partitioning, which predated the formalization of NP-completeness theory.
1:22:26 Reflections on Artificial Intelligence: Kernighan reflects on the early optimism surrounding AI in the 1960s. Today, he expresses concern that modern machine learning systems can learn and amplify historical biases present in their training data, but also notes the optimistic view that this process can act as a mirror, revealing and helping correct societal biases.
1:40:48 The Golden Era of Programming: Kernighan fondly recalls the 1970s at Bell Labs as a "golden era." It was a time of great excitement and satisfaction, defined by working with a close group of talented people and having the joy of building new tools that were immediately adopted and found useful by the community.