You never forget the first girl you kissed – in my case, it was Suzie (or maybe, Carol), just as you remember your first computer, in my case the IBM 650 at Brown University in 1957. (Just to set the record straight, that was a year BEFORE Don Knuth saw his first computer, also an IBM 650. Didn’t take him too long to catch up to and pass me.) A bright-eyed, shy 16-year old Freshman, I had enrolled in an Applied Mathematics course. The first half of the semester, we learned to solve difference equations, learned the rudiments of Numerical Analysis, and how to use a Frieden desk calculator. (I’m sure I was assigned one of the ones that some nice lady at Bletchley Park used to crack the Enigma Code.) But then, aah – I learned all there was to know about programming in only half a semester (you have to remember that, after all, Brown IS an Ivy league institution).
Thomas Watson, Jr. the President of IBM was Brown ’37, and made sure the his alma mater got the newest and best if the IBM computer line. The 650 was the only computer to use a bi-quinary number system. A digit consisted of two parts – a 0/5 designator, and a 0/1/2/3/4 designator. The minds reels trying to figure out how that was all implemented in hardware after learning Boolean logic and the 1s and 0s of current computer circuitry. The memory consisted of a rotating magnetic drum with capacity of up to 4000 “words” of 10 digits or 5 characters each. An instruction was fetched from memory using a read head that read from the drum and executed in some fixed (for each different instruction type) time, and the next instruction fetched. Remember, however, that while the CPU was executing the instruction, the drum was rotating under the read head, and it may just have passed the location where the next instruction to be executed existed, forcing us to wait for a (almost) complete revolution to find out what to do next. No problem, right? We just make sure to figure out where the read head would be after the CPU executed, say, a 15 command (which added a number to the lower accumulator) and store the next instructions right where the read head would be at the completion of the add instruction. Great, but that bookkeeping becomes ridiculous, keeping track of what locations have been used, and remembering how long an add takes, and, oh, yes its code is 15. So along comes SOAP (Symbolic Optimizing Assembly Program) to do all the grunt work. It figures out where the next instruction should be placed for optimal fetch time, knows that AU means add to upper accumulator (= op code 15), oh, and even figures out optimal placement of data, as that also has to be fetched to be operated on.
I thought that was a good as it got in programming, until some guy (actually a team led by John Backus at IBM) went and invented Fortran. This is what I did the programs for the data reduction for my Honors Thesis in Physics (no easy Computer Science majors then). Lots more about Fortran and FORTRAN (don’t get me started on that controversy) later.
“This book is affectionately dedicated to the Type 650 computer once installed at Case Institute of Technology, with whom I have spent many pleasant evenings” – Donald Knuth (1968) – Dedication to The Art of Computer Programming