Digital Apollo: Human and Machine in Spaceflight by David A. Mindell (2008) is a new book covering the technical history of the development of the computer software for the first manned lunar landing. This book would be of value to students of software engineering.
Mindell concentrates on the development of the interface between the computer and the crew, pointing out that there were few precedents for the design. It was not clear if the astronauts should be simply passengers in an automated and remote controlled system, or if they should, or could, pilot the spacecraft like an aeroplane. Previous books have covered the politics of this issue, and Mindell perhaps dwells to much on how this conflicted with the "Right Stuff" macho image of test pilots.
But Mindell provides new technical details of how contemporary systems then worked and how Apollo's approach was developed.
The Apollo systems were developed from ones designed for missiles and designed to be fully automated. This was modified to allow the crew the option to control part of the flight, but via the computer, making an early "fly by wire" system. The techniques and some of the hardware and software, was later adopted for military and then civilian aircraft. The DSKY interface of Apollo will look familiar to operators of civilian airliners and military computers, with a panel of indicator lights, small alphanumeric display and a keypad underneath. The Apollo side stick controllers, with multiple operating modes are the predecessors of military aircraft and Airbus airliner controls.
The early plans for Apollo did not take into account the difficulty of developing software and it was seen as just an adjunct to the hardware development. The software process became a bottleneck in the program, partly due to the success of the digital computer in replacing analogue hardware and so becoming central to the success of the project. This is a lesson military projects routinely fail to learn, with software development being seen as just something you do after the important part of building the hardware. The Australian Seasprite is one recent example of such a failure and the problem is increasing in government and corporate systems.
One of the useful lessons in the book for software engineers is how you end up doing some of the overall project planning for your clients. In the case of Apollo, there were no clear plans as to how the mission was to be structured. The software developers had to make up a structure for their work and this was adopted for the mission overall.
Mindell argues that many of the techniques for the systematic development and testing of software were either developed for, or refined with Apollo. One aspect not touched on was that how with the later Space Shuttle program the software engineering techniques had reached a point where they were superior to those for the hardware. In his comments on the Rogers Commission into the Challenger disaster, Richard Feynman praised the systematic development of the shuttle's software and criticised the processes for hardware.
It will be a startling less for modern students to see photos of little old ladies literally weaving the binary programs into magnetic core memories for Apollo. ;-)