The C Programming Language
Brian W. Kernighan, Dennis M. Ritchie
I read The C Programming Language, by Brian W. Kernighan and Dennis M. Ritchie (henceforth K&R) around 1980. This was the first edition, which came out in 1978. I was a grad student in Biochemistry. The C Programming Language was one of three books that came out of Bell Labs in the seventies and eighties: Software Tools by Kernighan and Plauger in 1976, The C Programming Language by K&R in 1978, and The UNIX Programming Environment by Kernighan and Pike in 1983. My graduate mentor, who was one of those remarkable people who knows everything but is somehow not a know-it-all, pointed me to them. (He was not a computer guy -- I think he may have had a brother who worked at Bell Labs.) I have little formal education in programming, and these remarkable books were invaluable.
I began programming seriously in 1973 when I started my freshman year at Cornell University -- the first time I had access to a computer. I have continued ever since then -- 50 years -- it is perhaps my single most important creative outlet. At first I programmed mostly in Fortran and assembly language ("assembly language" is essentially the same as "machine language" -- it consists of instructions that can be executed directly by the CPU) -- those were the only options on the minicomputers available to me as an undergrad. I did more programming in assembly because the Fortran of that time was a frustratingly limited programming language.
I know that most of you Goodreads users are unable to conceive of the notion that a programming language can be a thing of beauty, but it is so. C is an elegant solution to the problem of designing a way to tell a computer what to do. The first thing to notice about the 1978 edition of The C Programming Language is that it is a 228 page paperback. If it were fiction, it would be a novella.
After this elegance, the thing that most struck me was that C was designed by a man (second author Ritchie) who understood very well that, underneath all the abstraction of a computer program, it describes code whose ultimate purpose is to run on the bare metal of a real computer and do useful, beautiful, and fun things. Every CPU that I know of has an instruction that looks something like "INC R1" that adds one to the number in register 1. C introduces an increment operator that does this. C introduced the now nearly universal rule that you start counting at zero. As a Fortran programmer I was continually adding or subtracting 1 from variables because Fortran uses the unnatural but human-standard convention of counting from 1. And so on -- C is a thing of beauty -- a glove through which you can feel the bare metal of the machine as you code. It made assembly language superfluous. It's still dangerous -- you can touch the third rail -- every C programmer became familiar with the words "Segment Violation".
C fairly quickly became the language that most serious programmers used. In 1988 the second edition of The C Programming Language came out. By then there was an ANSI standard and the language had become a little more buttoned up, and the second edition was 285 pages.
C and its successor C++ (which is, alas, a complicated monstrosity which no one has ever described as "elegant") are still the workhorses of commercial software development. More than that, almost all the many languages developed since C are C-like, that is, their syntax resembles C.


