In the late ‘60s, I was a Programming Manager for a large aerospace company, and Knuth’s first volume had just come out. We were discussing the book one day, and a gentleman I had recently hired told me this story:
He was a student at Case Western in Cleveland, and was working with another student on developing an assembler1 for a Univac SS-90 (SS for Solid State, 90 for 90 column punched cards) under a contract from Univac. By February of the school year, working only nights at 3 hour clips, 4 days a week, they had basically finished the assembler.
During the last few days they had noticed another gentleman in a corner also writing a program and sharing computer time with them for his development. Out of curiosity, they asked him what he was working on, and he said that he was writing a FORTRAN compiler for the SS-90. When they asked him what he was using to assemble the program (since they hadn’t finished the assembler yet), he said, “Oh, I wrote one last night.” And as Bill Stern might say, “And ladies and gentlemen, that programmer was none other than Donald Knuth”.
1 – For those of you who never had the pleasure of using an assembler, it was a program that took computer hardware instructions written in symbolic notation and converted them into the equivalent binary/octal/hexadecimal machine instruction code, and allowed the use of symbolic address name for variables, e.g.:
would be input to the assembler (usually punched cards or punched paper tape in those days) and the assembler would spit out more punched cards or paper tape with the machine code representation of the symbolic assembler code, which would in turn be loaded into the machine and executed. This was the method by which all programs for the target machine were written. More advanced systems could eliminate the intermediate process and do “assemble and run”