In some circles it’s become an article of dogma that Ada Lovelace was the first computer programmer, and those who dispute it are denounced as “sexist.” When disagreement with a claim becomes heresy, that makes it worth looking into, if only to find out what’s stirring up such passion. Having looked into it, I have to conclude that not only is the claim false, but it trivializes her actual accomplishments. (Here’s an example, whose author says she was coding a mere “adding machine.”)
First some background. Allan G. Romley’s “Charles Babbage’s Analytical Engine, 1838” provides an excellent introduction, with lots of technical detail. In the 1830s and 1840s Babbage designed and tried to implement a series of mechanical computing devices called “Difference Engines” and “Analytical Engines.” The Difference Engines were super-calculators, but the Analytical Engines would have been the first general-purpose computers if built. The programs would have been entered on punched cards, using a reader that could move forward and backward through them, so branches and conditional operations were possible.
Ada Lovelace, Lord Byron’s daughter and a mathematician, was fascinated by Babbage’s work. With her translation of an article by L. F. Menabrea of an article on the Analytical Engine, she included extensive notes, longer than the article itself, on the potential of the machine. These notes are astonishing.
Babbage’s original impetus was a wish for faster and more reliable astronomical calculations, but Lovelace saw the broader possibilities:
It may be desirable to explain, that by the word operation, we mean any process which alters the mutual relation of two or more things, be this relation of what kind it may. This is the most general definition, and would include all subjects in the universe. In abstract mathematics, of course operations alter those particular relations which are involved in the considerations of number and space, and the results of operations are those peculiar results which correspond to the nature of the subjects of operation. But the science of operations, as derived from mathematics more especially, is a science of itself, and has its own abstract truth and value; just as logic has its own peculiar truth and value, independently of the subjects to which we may apply its reasonings and processes. Those who are accustomed to some of the more modern views of the above subject, will know that a few fundamental relations being true, certain other combinations of relations must of necessity follow; combinations unlimited in variety and extent if the deductions from the primary relations be carried on far enough.
Note G shows in detail how an algorithm for calculating Bernoulli numbers could be implemented on the Analytical Engine. It was the first really ambitious description of how a computing device with variables and looping could solve a mathematical problem, but it isn’t a “program” as such. Babbage never fully described the “instruction set” for the Analytical Engine, so actual programming of it, even on paper, was impossible. The conditional branching code isn’t described but just noted. (“Here follows a repetition of Operations thirteen to twenty-three.”) It wasn’t the first description of how the Analytical Engine could be coded; Babbage had created some examples himself, though they were simpler.
Though she didn’t create actual computer code, what she did was an astounding accomplishment. She broadened the idea of computing to information processing, grasped the value of conditional branching and looping, and described how complicated algebraic operations could be reduced to mechanical instructions. Really, she laid the foundations of computer science. And the dogmatists call her a programmer, as if she merely sat in a cubicle and wrote code for Babbage’s “adding machine.” Any intelligent person can learn to write computer code, but it takes extraordinary intelligence and creativity to grasp and describe the potential in a new kind of machine.