The inventor of the Z4 relay machine was the German civil engineer Konrad Zuse. He is probably the author of the now-discovered operating instructions (see Fig. 2). Heinz Rutishauser obviously copyedited them: the eyewitness Heinz Waldburger wrote in his epilogue to Herbert Bruderer: Konrad Zuse and Switzerland. Who invented the computer? (Oldenbourg Verlag, Munich 2012) on page 205: “In addition, there were the 16 pages of the Z4 user manual, which he [Heinz Rutishauser] had certainly revised, and the short regulation for the use of the program controlled computing machinery from September 20, 1950.” (Note: In a letter dated December 29, 1950, Swiss School Board President Hans Pallmann informed the head of the Institute, Eduard Stiefel, that the School Board had decided on the regulation for the use of the Z4 on December 2, 1950. These rules were possibly directed at external users).
From the article, we see the machine was well-used for serious work:
According to Heinz Rutishauser, around 100 jobs were carried out with the Z4 between 1950 and 1955. Of these, 55 commissions are listed in a directory of the Institute for Applied Mathematics dated July 11, 1955. These included calculations on the trajectory of rockets (for the Oerlikon Bührle machine tool factory), on aircraft wings (for the Eidgenössische Flugzeugwerke, Emmen LU), on flutter vibrations (for the Flug- und Fahrzeugwerke Altenrhein, 800 hours machine time), on nosedive (for the Flug- und Fahrzeugwerke Altenrhein, 120 hours machine time), see Herbert Bruderer: Konrad Zuse and Switzerland, pages 29-39.
Possible we should link also to Zuse’s high level language:
This is true by definition of all pioneers. Who would have they learned from? What book or paper would have they read?
Zuse did work in isolation while you can imagine Turing and Church bouncing ideas off of each other or Von Neumann collecting the result of discussions into a report. Woz likes to boast about what he hadn’t studied or seen before doing his work.
My own style is to first try to figure something out entirely on my own. After that I look at what everyone else has done. Then I try it again. If I start with step 2 then I am less likely to think of something different.
I would love to have a translation of the manual, it is amazing how the designers of their period have imagined and created several solutions and architectures from scratch. Each computer was unique, with interesting ideas under their hoods.
Haha, I thought the OP was talking about instruction for the abacus. I actually knew how to operate an abacus when I was young. Since most of my generation were taught to operate abacus as children, the instructions were a set of singsong rhymes, but “lip reading” was no-no. To even pass a basic skill test, the operators need to push the skills into muscle memory, like playing piano. I no longer know how to operate an abacus.
I notice in the notes that the machine (Z4) originally lacked branches aka conditional jumps. (Without which, I’m not sure if it would have been Turing complete.) Certainly it’s good to have them! The simplest of ‘programmable’ sometimes just allow the recording of sequences.
You can implement a conditional move in a machine that would seem not to have it by:
Z := A * C + B * (1 - C)
where C is either 0 (false) or 1 (true). This does the same thing as the following in the C language:
Z = C ? A : B ;
With a loop (possibly by making a program tape into a physical loop) and conditional assignment you can write an emulator for any machine you want. It will be really awkward, but we are talking about it being possible and not about being reasonable.
Mind that this is true for any machine with an arithmetic unit, some amount of memory and a physical input medium which can be re-fed in some way. E.g., Colossus, the Heath-Robinson machine, early ENIAC (maybe requiring some trickery with automatic punch card rereading), even mechanical tabulating appliances.
They were able to implement code on the ENIAC in 1948 to make it a simple stored program computer.
In a discussion about this manual on Hacker News there was a link to a proof from 1997 that the Z3 could implement a Turing Machine which does conditionals as I suggested. The main complication was the lack of indirect addressing, so they basically had to have one instruction for every memory location.
The ENIAC is a rather complex story. Short version: Apparently, in its original 8 operations design, there was some capability for instruction modification, but this seems to have been soon abandoned and any conditional operations had to rely on an external adaptor feeding output back as input. (In 1946, there had also been suggestions for using the pulses of the function table – ENIAC’s equivalent to instructions in its original distributed logic design – for sequencing subprograms.) The design modifications from 1947/1948, which resulted in the “converted ENIAC”, introduced the new paradigm of numeric instruction codes, rather than relying on FT pulses. There was now a technique for branching, involving any of the accumulators (apparently just a single digit), FT settings and the “master programmer” unit, which was used to count down loops, that could be used to implement something like an arithmetic IF. (Unlike other designs of the era, ENIAC had lost any capability of self modification, but its memory could now be used for data and instructions interchangeably.) As usual, this later addition, which transformed ENIAC into a true general purpose computer, was subject to various claims that were eventually put to court. According to a court testimony, the need for such a provision had been foreseen early on and a cable had been included in the original design to connect to such a future extension. (There had been an engineering diagram for such an “F.T. Program Adapter” dated January 1946.)
(Personal interpretation: ENIAC in its original design had been much like an electronic version of the differential analyser, but expanding on the speed and flexibility thanks to electronics. In a sense, this was a quite different vision from what we might deem a computer nowadays. However, Eckert and Mauchly seem to have foreseen consequences and future needs that originated from this design quite early on, probably as early as 1944, which eventually resulted in the EDVAC draft, as well as in some provisions for future revisions in the ENIAC itself. From there on, it’s a rather convoluted history, which transferred ideas expressed in the EDVAC draft and principles implemented in the IAS design back to the machine, which inspired them. This is especially somewhat convoluted as it implied implementing a more centralised design in what was an essentially distributed logic design. Eventually by 1948, with the finalisation of the “converted” design, ENIAC became a machine that we would recognise as a computer. Or, as some say, ENIAC was now emulating an EDVAC-style computer. Notably, to do this, it had to be Turing complete.)