I was cleaning out the dark corner at the back of one of the shelves in the workshop when I found a box full of old papers. A lot of them were MIT green bar, but there were also these 4 pages:
This is the program we used for figuring out the phone bill in school. It’s certainly the oldest software I wrote that still exists, and is pretty close to being the first software I actually wrote.
Every month New England Telephone sent us a big box of punch cards. One for each phone call we made. The card had the number called, the minutes, and the charge. We had another big box of punch cards which had the numbers that people in the house commonly called, with their 3 letter initial (mine, as you can see at the top was MPG).
The task was to match them up and figure out how much each person had to pay. I’d drop the two decks into two card readers and run this program. It was basically a simple merge sort. But merge sort assumes the inputs are sorted. To do that, I used a card sorter. This implements a radix sort in hardware. You throw your cards into the hopper, turn a little brass crank to select the column, and then press the big button. The different output bins fill up with the cards that matched in that column. Then you stack all of those up in order, put them back in the hopper, and turn the crank to the next column.
After running this, we had a pile of green bar which listed how much each person owed, and then had a list of all of the unrecognized numbers. We’d post that on the board at the bottom of the stairs and everyone would be expected to add their initials next to the ones they recognized.
Programming has changed a little bit since those days. For example, I don’t use much Wite-Out anymore. But I do think that the physicality of programming in those days was wonderful for learning.