The EDSAC was an early computer in the mathematics laboratory at Cambridge in the UK. I have just read an old article on the machine and how it was programmed, from a 1998 issue of the IEEE Annals of the History of Computing.
There are many fascinating aspects to the machine and its utter simplicity, but one that struck me as I read the paper was that so many of the fundamental ideas of programming and practical computing were invented then and there. Indeed, the EDSAC was designed as a machine to experiment with programming, rather than as a machine for maximal computing performance.
In particular, the way programs were entered into the machine was much more sophisticated (or desperate due to a lack of computing resources) than any other contemporary system. In hindsight, the “initial orders” of the EDSAC merged three major inventions:
- The use of a “bootloader”, a program that starts the machine and then loads the “real” program into memory. Other machines of that era seems to have had special loader hardware, or just used Hollerith punched cards and put the results into memory.
- The use of a symbolic code for instructions on the input tapes, not just a binary. Thus, the initial order also constituted an assembler. The binary instruction format of the EDSAC was never seen outside of the machine itself.
- The relocation and rewriting of the program as it was being loaded, essentially making it the first program loader and linker.
All of this was achieved in 40 instructions and 1 constant in the last version. A very impressive feat of programming, maybe one of the most impressive in the history of computing.