by Bill Wadge
And you try and tell the young people of today that … they won’t believe you!
– Monty Python, the Four Yorkshiremen
Yes, punched cards – that’s how I learned to program.
Many years ago, when I was a math undergraduate at UBC, I decided to take a course in Numerical Analysis. It would prove to be my only formal training in computer science.
The best part was programming exercises in FORTRAN (my native language). We got accounts on the Computer Centre’s IBM 7040, UBC’s only computer at the time. It had 32k 36 bit words, the equivalent of about 150k bytes. Yes, 0.15M. A real powerhorse!
We would type our programs on an IBM card punch – yes, I still remember how to use one. Once our deck of cards was ready, I would take it to the computer centre lobby, put an elastic band around it, and leave it with other users’ decks in the “IN” tray. Then I would go have lunch, attend class, take a walk or whatever and return a few hours later (“turnaround” time) and pick up the deck from the OUT tray. The output? Printed on fanfold paper and placed in pigeonholes ordered by name. The excitement!
My First Program
The first program I ever wrote was an exercise in the numerical analysis class, a simple least squares interpolation. I knew that programs typically had bugs and I was determined that my first program would work first time out. I produced about 6 lines of foolproof code, double and triple checked it, carefully punched up the card deck and double checked it again. Finally, I dropped off the deck in the IN tray and went to the dorm for lunch.
When I got back, there was my fanfold output. Suspiciously thin … ? When I opened it up – no output!. No error messages, no output. I was baffled.
Asking around, I soon found the problem. It was a JCL error. JCL (Job Control Language) was IBM’s cryptic language for … controlling jobs. It apparently instructed the computer to read from the card reader, send output to the printer, etc. I still remember one of the lines
though I have no idea what it means – never did.
I thought I’d included all the JCL boilerplate but, no, I’d left out a vital ”command’:
This card basically tells the computer, yes, I really do want to run this program. I punched up a $ENTRY card, slipped it in the deck, which I then dropped off in the IN tray. When I returned the output was there, my program worked perfectly. But not the first time. That’s been the story of me and programming ever since.
The big problem with batch processing is that I/O can’t be interactive. If the program goes haywire you don’t find out till too late. I can’t tell you how many times I saw this: a user comes in, collects his cards, and picks up his output. An inch thick. He opens it up, somewhere in the middle (page 173) and looks at the numbers. Then frowns, shakes his head, closes up the output – and throws it in the garbage.
Then goes to the keypunch room, changes one column on one card, and resubmits the deck.
Doing the Shuffle
The big danger with card decks was that you’d drop the deck and the cards would get out of order (no problem if you were programming in Lucid). A friend saw that happen once with a big deck. It was thrown in the garbage.
Of course there was a technological solution – sequence numbers, in the last eight columns. You just throw the scrambled deck into a card sorter.
I told this to a friend who started his career in South Africa and he basically told me, “you had a card sorter? Sheer bloody luxury!”. They used to use a marker to scrawl on the edges of the last 8 columns.
Flash forward to my interview at the fabled University Far Far Away (UFFA). They really wanted to impress me (that didn’t last long …) that they had cutting edge technology. So they showed me “cafeteria batch”.
They took me to a classroom that had been converted. We entered through the rear door and saw a row of cafeteria-style tables lined up end to end running the length of the wall. A line of students shuffled along the the row of tables. At our end there was a card reader and the students handed decks of cards over to the operator who immediately fed them into the reader. The students walked slowly along till they reached the other end of the line of tables where there was a printer … and their fanfold output waiting for them! A turnaround time of only a few minutes!
Boy was I impressed!
The Terminal Room
(Odd, never noticed how ominous this phrase sounds.)
Anyway, a bit later appeared the terminal room. It was a converted classroom with cafeteria style tables and IBM Selectric typewriters on them. They were each connected to a computer – the same computer, through the miracle of time sharing. Turnaround time was reduced to a few seconds or less. You could actually interact with a computer. And cut off bad output without wasting reams of paper.
Even better, some of these Selectrics had special golf balls with Greek and mathematical symbols (and appropriately labelled keys). These were APL typewriters. APL was (is?) this wonderful array language. Basically a desk calculator, except that the objects being calculated are multidimensional arrays.
It wasn’t easy to learn but after long hours in the terminal room I got the hang of it. Among other things I produced some very pretty ASCII graphs of mathematical functions.
APL was a real technical miracle and I miss it very much.
Flash Forward – and Back
After the UFFA and I reluctantly parted I moved to the University of Warwick in the UK (Coventry). They had some new technology but in many ways they were behind. Punch cards were disappearing in North America but were still around for a few years at Warwick. There was a big keypunch room but it just didn’t have the same attraction it used to. Ditto for the terminal room wired up to a big ol’ Burroughs 6700.
The department had it’s own computer, called (I’m sure of this) a “mod one”. But neither Wikipedia nor even Google seems to know about any relevant “mod one”.
As I remember it didn’t even use punched cards. There was a closet with a teletype, you know, with columnar keys you had to hit hard. And physical storage of programs: punched paper tape. Punched cards really were S. B. L.!
Warwick soon got CRT terminals – no more typewriters or teletypes. After some maneuvring I finally got – the ultimate – a VT100! In my office! It was the state of the art in CRT terminals. It had a 80×24 ASCII characters plus some graphics characters. Also a 132 column mode and special effects like blinking and underline. All controled by ANSI standard escape sequences. I soon mastered the sequences and made my (orange screen) VT100 dance to my tune.
About the same time we finally got UNIX time shared and they went well together.
I got really good at UNIX. Then to make it all perfect I got a Diablo printer, basically an industrial strength IBM-style typewriter with “daisy wheels” instead of golf balls.
I needed a system to print math (there were math daisy wheels) but this was before Latex. So I made one myself. It was truly marvelous.
The math was input in an simple ad hoc notation, e.g. #a was the Greek letter alpha and #+ was capital sigma. Each page was printed using three different daisy wheels, the first being ordinary letters. Formatting used troff, a UNIX typesetting markup system, and a set of filters I wrote in UNIX shell and SED etc.
And here’s how you printed a page on the Diablo. You put the paper in and mounted the standard daisy wheel. You pressed return and the first layer was printed. Then you mounted the second daisy wheel, carefully rewound the page (still in the Diablo) to the original starting position, then pressed return. The Greek letters were printed. One more time, the mathematical symbols appeared, and the page was finished.
It actually worked. I printed my 350 page Berkeley PhD on the Diablo and my first grad student did his too.
DON’T STOP NOW!
VT100’s – gone. Diablo printers – gone. Troff – gone. UNIX – still around, but only for system stuff. All that technology I mastered, obsolete (eyes tear up).
But Grandpa, don’t stop now! Tell us again about the Batphone, that faxed email every half hour! About the hard disks that could creep across the floor! About the massive 500M hard disk that would end your UNIX storage problems forever! Waah!
Sorry kids, but Grandpa is getting tired (and his readers are getting bored). I’ll tell you about the Batphone, and the creeping disk, and the massive storage another time. And how you have 1 million IBM 7040s in your pocket.
Sheer bloody luxury, if you ask me!