The Legacy of Punch Cards: A Blast from the Past
As I carefully stacked up the legacy deck of punch cards in front of me, I couldn't help but feel a sense of nostalgia wash over me. Dating back to around 1971, these cards were left behind by a statistic student and had been sitting in our department for years, waiting to be rediscovered. The first thing that caught my attention was the colored card at the top of the deck, which served as a marker indicating who we were and what this job was about.
As I held up one of the cards against the light, I noticed something fascinating - it worked in a unique way, reading vertically rather than horizontally. This was because punch cards are typically read vertically, with each character on the card corresponding to a specific hole pattern. However, as I looked closely at the card, I realized that even this fundamental aspect of punch cards had been compromised by the limitations of their design. Each character had only two holes punched into it, which might seem like an arbitrary number, but was actually a deliberate choice to accommodate the ASCII character codes used in computing.
The impact of this limitation became clear when I attempted to print out the card and compare it with the actual characters on the screen. The result was a jumbled mess of characters, as if confetti had exploded onto the screen. This was because some ASCII characters have many one bits (binary digits) in them, which caused the hole pattern to become indistinguishable from a random sequence of holes. It was a reminder that even the simplest-looking technology can hide complex problems beneath its surface.
The cards themselves were used for an ICL 1900 computer, which had a unique architecture different from modern computers. Unlike today's 32-bit systems, where integers are held in four 8-bit bytes, the ICL 1900 series held characters in six bits. This meant that each character was represented by fewer bits than we take for granted today, which is why the cards were designed with a limited number of holes to accommodate this shorter code.
The reason for this design choice was purely economic - by using fewer memory cells and simpler adder circuitry, ICL's computers were able to keep costs down. This decision had a ripple effect throughout the industry, as other companies followed suit in their own pursuit of cost savings. It's fascinating to think about how these seemingly minor decisions can have far-reaching consequences on the development of technology.
When preparing these card decks, it was essential to take great care. The first card announced that this was a job for the computer to do - no surprise there! - and included Ken Akin's identifier (PMSKA) as well as a global terminator at the end. It also contained a piece of job control code that specified how much money had been allocated for the user, with options to spend less or more, depending on their budget. The cards were often used in conjunction with other programs and operating systems, such as ALGOL and GEORGE.
One card I noticed was an announcement that this deck contained a certain number of ALGOL jobs - a signal to the operating system that it should read the following cards in the ALGOL language. This was followed by a list of words in ALGOL, which had to be fed into the compiler before they could be executed. It was remarkable to see how much work went into preparing these decks, and how much reliance there was on this technology.
As I continued to examine the cards, I began to notice more and more signs of life - a reserved word in the ALGOL language that seemed out of place among the seemingly random sequence of holes. It was almost as if the designers had forgotten about their own handiwork, but it wasn't until I saw the word "BEGIN" that I realized what they were trying to say. This was a common programming term in many languages, including ALGOL and Pascal, which had been borrowed from its origins in other languages like C.
As I delved deeper into the world of punch cards, I began to realize just how much they had played a role in shaping our modern computing landscape. From their early use as a simple tool for automating tasks, to their eventual adoption by industries and individuals around the world, punch cards have left an indelible mark on history.
"WEBVTTKind: captionsLanguage: enThe thing you used to dread more than anything else was to take these out of the box in which youcarefully stacked them upand then accidentally dropped them on the floor. There is no quicker wayto discover what n factorial means when you start trying to put them back together in the right orderArmed only with your knowledge of ALGOL programs and which order these things must have occurred inWe have here in the department a legacy deck of punch cardsdating at my best guess from about1971 it was left behind by aStatistic student of that era can act in it just is like a blast from the pastWe'll put this on the classic black background provided by the cover of an iPadWhat could be better old meets new?At the top of the deck we used to have to put a colored cardBasically stating who we were and what this job was aboutNow I think the first thing to draw your attention to on any sample of these cards isYou look at them against the light and if you remember that a card reader is readingvertically to get its charactersRun like that not horizontally... The most amazing thing you then discover which threw me for a while because I'd rather forgottenIt works like this is that if you now put the card down on a black backgroundAnd will use another card as a ruler just look what happens every singlecharacter andif you look very carefully aswell as the whole patternThat denotes a character it can also be printed out at the top of the card although the printing Ribbon was pretty faded withoutthesenevermind every single character has got adifferent hole punch pattern but there's never more than two holes that are punched. Now that might seem very strangeand as I say I gave me a jolt at all. How on Earth does that getconverted into a character code which is going to be a bit pattern representing an ASCII characteror whatever you can't just port ASCIIcharacter punching down here if you did you get into all sorts of problems.Because some ASCII characters have got lots of one bits in themand if the situation is that you chose that every one bit was a holesome characters would make this thing look like confetti. It would be like having aterraform... you know the ... that the actual mechanical substrate of the card will be very fragileSo this is the reason that there arevarious choices of two holes here out of 11 rows in totaland that gives enoughcombinations to give aunique code fora fairly limitedalphabet admittedly, but it worksSo perhaps another thing to point out is that these arecards for anICL 1900 computer which was mentioned in the previous videoThe ICL 1900 seriesinternally did not hold its characters in 8 bits as would be donenowadays. It held them in 6 bitsSo pretty well all of you out there are familiar with the fact that nowadays if you likethe standardfor years has been that you have a computerwhose integers are held in 32 bits?but if you want those 32 bit entities called words are broken up intofour 8-bit bytesNowadays, it's the bytes that are addressed not the words and that particular architecture of byte address machines beenoptionally groupable into longer units to hold eitherinstructions or integers or whatever that really did start with IBM mainframes they were the first to go in for byte addressing and 8-bit bytesICL on the other hand did not have 32-bit words with four 8-bit characters it had24-bit words with four 6-bit characters. Why are here you cry the answer is it's cheaperYou've got rather less memory to provide rathersimpler adders to do you only need 6-bit adder circuitry not 8-bit adder circuitry andit's as simple as thatLCL could make their computers a little bit cheaper than IBM although they were arguably as well a little bit slower and so onSo this is what these hole punchings are all about.They are equatingby specialized circuitry in the card reader to it being able to recognize these patterns and say ohThat's the 6 bit character such-and-such, and it will put that into a temporary file behind the scenesNow when you're preparing these card decks you really did have to take huge careFirst of all the yellow card announces that this is a job for the computer to do - big surprise thereThere's a NUPMSThey're Nottingham (?) University Physics and Maths I think that stands for. This is ken's identifierPMSKA for Ken Akin (?), and I think this thing at the endannounces the global terminator for this deck of cards which will come right at the bottom for ourOkayThen there's a little piece of job control herebasically saying I want the Nottingham (?) University EXECutive program which was our own sort ofhomebrew addition to ICL's GEORGE operating systemAnd you notice at the end here. It says BY C in thisadded module to the operating systemYou could say how desperatelyurgent this job was or not. You were given a certain number of notional pounds to spend every month for every user.And you could opt to spend less money and have it run at low priorityBut you could either spend it by a which meansI want the job doing right nowOr you could say I'll go overnight and you were charged as a much lower rate. The next card we see hereannounces that this is an ALGOL job, the following cards will be in the ALGOL languageSo this is a signal to the operating systemthough to read all this in but when it's been read in it has to be fed in to the ALGOL compiler and theoperating system knows where that's kept you don'tunlikeUnix Linux, whatever these days you don't get very close to the operating system. It's thereIt doesn't do much for you except run your jobsYou just have to trust to it more or lessNotice here for those of you at all familiar with things like ALGOL and PascalIt's beginning to look fairly sensible: BEGIN. That's a reserved word in the ALGOL languageIt's a bit like open curly-brace (\"{\") in CBut ALGOL use BEGIN and END instead ofopen curly (\"{\") and closed curly (\"}\")Notice that it's signaled as being a reserved special word because it uses prime orSingle quote symbols, it's quote begin quote ('BEGIN')Quote procedure quote ('PROCEDURE'). That's another reserved word in the ALGOL languageAnd it's defining this procedure E01AAA with theseformal parametersor arguments.There we are then you're sitting in front of a card punch you type in just like you would do on aordinary keyboard these days except this thing is electromechanicalSo it's going to splash splash splash splash all the time. Every character you hit is punching out holeselectromechanically and at the same time is hammering out a typewriter record on the top ofexactly what all these holes mean.Every time you hit the return keywhereas even on the dumb terminal you find the cursor going zonk back fromfrom the right hand side of the screen to the left as you look at itwhat would happen when you hit return on one of these is that the card would as if by magic?Be taken away from the punching station and propelledI think with sort of compressed air to a catcher traySo one after another you would build up a stack of cards in orderThat would later be fed into the machineSo when it's all completed and of course the advantage is with having these things written out on top if you could see any mistakes ona quick scan through you can always punch another card and replace the bad card with a good cardYou would end up with a job to be submitted can stack is a particularly short oneIt just seemed to be running this routine and using it to generate a small amount of data to be printed outSo there we are, a very very small job.In order to stay sanewhat you need to do is the following?First of all decide whether your card punch like to have these beveled corners at the top left or top rightFaintly recall that ICL and IBM probably did them different ways around, but that was the thing to help you get your cards aligned andstop you turning one accidentally upside down andthereby reading in the wrong hole pattern in the wrong orderYou used to make sure the bevels werein place and like that, so that's oneself-protection mechanismAnother one that was optionally available on some better quality card punches with support at the far right of the cardtypically, I think in columns 72 to 80 because these are 80-columned cardsYou could put a sequencing number here, okay? You can have them automatically sequence the numbered as youpunch them out on the card punchThe thing you used to dread more than anything else was to take these out of the boxin which you carefully stacked them up and then accidentally dropped them on the floorThere is no quicker way to discover what n factorial means when you start trying to put them back together in the right orderarmed only with your knowledge of ALGOL programs and which order these things must have occurred inSo all sorts of subterfuge is used to be used, but the best was to have themnumbered if possible and then if you could afford one of these things that were actuallycard collecting machines where if you put in a randomized of cards they could electromechanically sort them for youI can't recall I ever used one of those perhaps. I was careful enough or perhaps the university couldn't afford oneI don't know.Another common trick to use which I'm actually portmarker pen markings at the top of these if you did or you wrote a word hereYou could get them broadly back in the correct order by just making your patterns at the top lookcorrect and get them back in roughly the way they should have been. So here we have you see a muchmore substantialALGOL job, I think most of this is programmedthere's a little bit of data at the bottom.-So would you have one of these cards for every line?would that be kind of...- Every line of the program?Yeah, would have a card.-Line and you could only fit one line for your copy.-Yeah, yeah, one lamp guard.Right at the end of this lodge of stuffLet's put it down here as a separate card of its ownyou see that magic word END and that is the final end of the programAnd just as in other languages you're open (\"{\") and closed curly braces (\"}\") can be nested inside each otherSo also in ALGOL the BEGIN END blocks could be nested inside one anotherSo that END then is the final card of the programBut then look what happens you get a full asterisks cardThe four asterisks is a marker to say that's the end of my program, but there's still another section of my stuff to comeAfter four asterisks you give the reserved word DATA and this is such a simple programI think from what I can make out it takes these three integers here anduses them to generate yet more datawhich will be of use in some other programs, sothat is it. There's the datathat's the end of the pack. If you had a program that generated more data for input to another program afavorite thing you could do was to specify in your job control at the very top that what you would like isnot just a line printer output of your answers, but to punch out another deck of cardsFor use in putting it into some other program later on-So that basically provides you with a set of data to use with a differentYes, and you might say well, why not just pocket in a disk fileYou've got to remember. This is the early seventies. You did not have a personalallocation of files on diskYes, then would be a disk backing up this computerBut use entirely by the operating systemFull of temporary files holding your jobs for you, feeding them in an order and all that, but in the very early daysYou in person did not get a personal account to hold your filesYou wanted to run something later on then you had to print it outSo whereas nowadays a lot of you knowif you want to punch out date for use another program you can either use a Unix pipe and pipe itdirectly into another program or you can use the Unix greater than symbol and send it into a fileMuch more complicated in these days you had to announce ahead of time that you would be punching outresults as well as printing them outThat's interesting. What would a computer do with a hanging Chad?The admission of Richard Stallman's name was not intentionalI was thinking of him actually as I spokeI was tempted for a while and many of my friends told me to try this on with youBut maybe notIt would tend that the compressed airis a lot of compressed air used in these machines to move the cars through very quickly\n"