So I've been into "connector technologies" (if that's a thing) for a while -- more specifically I really admire the simplicity of edge connectors that nowadays are basically free (except the higher amount of metal than traces, (gold?) plating etc.). Anything you'd like to add about these sort of connectors from this era? Were they reliable in mating-cycle sense? Could you just casually insert them or was there a specific process? Was there a standard?
As you can see I don't have a precise question, I'm looking more towards the considerations that an engineer at that time would have to take into account. Unfortunately it's not very easy to google this these days.
The connectors were generally reliable; I don't think we've had any problems with them. You could clean them with isopropyl alcohol if necessary. There was one IBM manual that described a process for removing SMS cards where you'd put a punch card on either side of the board to protect the board against catching on neighboring boards, and then use a special puller to remove the board. But we just pull the boards out by hand without problems.
Or was it more like microcode where you had to consider some contextual implementation details as well?
The Univac 1004 made things more complicated in two ways. First, you had multiple steps; tabulators did one step per card (more or less). Second, the Univac 1004 had core memory, so characters were moving in and out of user-controlled storage locations, instead of directly from the card to the printer.
There's a diagram on page 96 of the manual. Take a look and I'll see if I can explain: http://bitsavers.org/pdf/univac/1004/UT2543_1004_Card_Proces...
There are 31 holes for the "step output" (rows L through P on the panel). These get energized on steps 1 through 31 of the program. The basic idea is that you wire from a step output to everything that should happen during that step. You connect a wire from a step to the action you want to perform on that step. You also connect wires to select the two operands for the operation during this step.
The core memory is arranged as a 31 by 31 matrix. (I think it's a coincidence that 31 matches the number of steps.) To write a value to the core memory, you give the memory the two coordinates by connecting two wires (rows j through m on the panel).
For a branch, you wire to a Step Sequence Change input (row W), specifying which step should be executed next.
There are a bunch of "selectors" which are like relays that select one of two inputs. These let you implement conditional actions based on a signal (without doing a branch).
There are a bunch of "address combine" connections, which I think operate like AND gates, producing an output if there are multiple inputs.
Because everything is wired electrically, you can't simply wire two outputs to the same input or they will get shorted together. So you have "distributors", which essentially produce multiple copies of the same signal. (Internally, it's just a diode.)
The plugboard also has a lot of features that are useful for card-processing applications but may seem random, like suppressing leading zeros on a number.
It's really a different model of programming from what you're used to. I haven't looked thoroughly at how the Univac 1004 gets wired up, so my explanation is a bit hand-waving. You can look at the manual if you want to learn more.