I’ve been reading a lot of the classic literature lately on mutation and selection from the 20s, 30s, and 40s. It’s interesting to read old science material with the advantage of hindsight. It’s like watching a movie — you might know what’s going to happen next, but the characters don’t. And so, reading Muller’s experiments with X-ray induced mutations, and other similar literature, I realize that while performing these experiments, they are really shooting in the dark. They know this thing called “evolution” happened (the existence of fossils is the key evidence factor for them), and now they have found a way to mutate genes. And they think that the combination of these is going to solve the riddle of evolution. All of this reminds me of my first experiences with an Apple II GS computer back in the 80s.
When I first got my computer, I was very young. I had a lot of time on my hands, and I was fascinated with this computer. I knew a little of BASIC programming from when I had a TI-99/4A. But there’s not much that you can do with BASIC. I wanted to know how the operating system worked. I learned about two mechanisms for dealing with memory itself – Peek and Poke. Peek allowed you to look at arbitrary memory locations and Poke allowed you to alter arbitrary memory locations. I looked at several programs (published in Byte magazine, I believe) which did some cool things that you couldn’t normally do in basic, by making use of Peek and Poke. Now, Poke just took two values — the memory location to put something in, and the number to stuff it with. I had no idea what was supposed to go anywhere, so I started trying various combinations of Peek and Poke on my own, to see if I could learn how to do this masterful programs.
For the most part, Peek and Poke did nothing. Sometimes, when I Peeked or Poked certain locations, the whole machine would freeze. Sometimes it wouldn’t freeze, but it would make all of the characters go funny, or some other erroneous behavior that was more or less amusing. Not knowing any better, I thought that I was on my way to programming. If I just found the right combinations of Peek and Poke, I could get my computer to do just what I wanted. I just needed to randomly try out combinations, and keep track of the ones that did interesting things.
Now, if I only had erroneous behaviors, I might be tempted to think that this wouldn’t work. But one day, I stumbled upon a Poke that had a very interesting behavior — it turned my screen to 80 columns instead of 40! At this point, I thought I was pretty smart, having figured out how to program my computer to be 80 columns wide. And so I continued cataloguing Peek and Poke behaviors, hoping some day to put them together into a real program.
What I eventually learned, however, was that this was not how programs were written. When I did a Poke and got the screen to 80 columns, I had not “programmed” anything. I had merely found an existing switch that had already been programmed by someone else. What’s more, I found out that no combination of Pokes would bring me a step at a time towards a program. A program must be planned (in fact, most of the steps leading to a functional program would be catastrophic individually – it is only when several are in place all at the same time does it work at all).
And so, I see a great connection between those who experimented with the genome in the early days, not quite having a conception of what they were dealing with, and my early attempts at “programming” a computer. It wasn’t until later that I learned how code really worked, and why arbitrary alterations of arbitrary sequences does not produce a program.