
I read Brian Kernighan’s latest book recently, and many things in it struck chords with me. While the book was mostly about UNIX history, it was what Brian wrote about the influence that UNIX had on the development of computers, programming, and even printing that grabbed my attention.
For example, Brian pointed out that computers had been highly customizable machines that generally ran programs that were terribly inflexible. If you wrote files to disk using one program, you could only use that program, or a closely related one, to manipulate those files. UNIX, by comparison, uses byte streams for files, ones that can be opened by any program, even ones that can’t do anything sensible with the bytes, but that flexibility is enormous. Think of the old version of spell; that was a pipeline that converted a text file to a list of words, sorted those words, ran uniq on them, and then compared the results to a dictionary. None of those tools is unique to a spell-checking program. Today, spell is a binary, not a shell script, but you can find a version of the original script in Brian’s book.