I took CS-302 in the fall of 1969 (so, 47+ years ago!).
I had already taken a variant of CS-132 taught in FORTRAN and targeted
at high-school students at UW Milwaukee in my senior year of high
school, and was already “hooked” before registering for my first
semester. So, when I came to Madison the next summer for the SOAR
program and the associated pre-registration, I was eager to sign up for
a computer science class. I seem to recall the person helping me sign
up suggesting that CS-212 (I think) was intended for engineers, but my
insisting that I already had some programming introduction, and wanted a
more thorough course. Perhaps because of my schedule or perhaps due to
some notation that the SOAR person put on my class list, the Freshman
first-semester scheduling program (which ran on an IBM 1410 that had
originally been used by the UW Registrar, and was finishing its life at
the UW School of Business by that time) the program “decided” to put me
into a section of CS-302 intended for majors, even though I was not a CS
major as an undergrad (Electrical Engineering was my stated direction).
That turned out to be extremely beneficial, because I was up to the
challenge – and challenge it was.
One thing I remember was having, via prompting from the TA, to “unlearn”
a couple of “bad habits” learned studying FORTRAN the year before.
The last two projects in our CS-302 section were a combined assembler /
interpreter for a stack machine followed by a recursive-descent subset
ALGOL compiler, done in ALGOL on the B5500 (both combined in the latter
project). For the compiler, I seem to recall that the TA provided the
recursive descent subroutine structure, but we coded all of the rest. A
couple of years ago I used them to help an acquaintance test out a B5500
machine emulator, and found a couple of bugs using my original code,
which I kept all those years. I have attached a copy of the project
(which includes the compiler, assembler and interpreter as one piece)
source and the output from the same test runs we ran. I also included
the input card images (so you can see the subset ALGOL input – the
compiler, oddly, didn’t echo the input).
NOTICE THE LACK OF COMMENTS. I had not yet learned their importance,
and punching extra cards took time. 😉
The TA, Bob Herriot, was simply *exceptional*. He taught well, was
readily accessible, and provided a perfect blend of patience and
guidance. He later went on to work for HP, I think, and did quite a bit
of work on IPP – Internet Printing Protocol.
Another CS-302 story. I later went on to work for the School of
Business as an operator, programmer and systems programmer on that same
IBM 1410. A colleague and friend of mine who also worked there, JoAnne
Kraut, taught a section of CS-302 at one point. As an “exchange” I
enrolled in music appreciation, and my then fiancee (now wife) enrolled
in CS-302 (probably pass-fail). My fiancee needed quite a bit of help,
but did get through the course. Since it was taught in FORTRAN, and Jo
was familiar with the 1410, I had my fiance code her projects on the
1410, which helped a lot because during the evening and weekends, the
machine was generally unoccupied, affording her near instantaneous
turnaround (and saving the CS department a bit of money ;)), and
keypunch machines were almost always available. Another student
co-worker, Mike Robbins was also enrolled in Jo’s section of CS-302 at
the same time. Unlike the section I attended, that section was taught
using FORTRAN, which had been the more usual language even when I took
the course, and by then the B5500s were, I think, gone.