A conversation with Tucker Taft, Summer Student Class of 1969 and Director of Programming Language Research at AdaCore in Lexington, Mass.
How did you first learn about JAX, and what inspired you to enroll in the Summer Student Program?
It’s a little bit of an unusual story. My mother, I think, wished she had gone to medical school, and she certainly wanted at least one of her children to go. I was the youngest, so she thought, “Oh boy, this is my last chance.” As it turns out, literally our next-door neighbor was CC Little’s son, Robert (Bob) A. Little. He and his wife were some of my family’s best friends, and, in fact, they were my godparents, making me, in a sense, CC Little’s grand-godson.
When I arrived in Bar Harbor, I think I was probably the youngest in the program, and I was also very short. I was very science and math oriented, though I was a little intimidated by the caliber of all the other students. But I held my own and had a great time.
What memories stand out from that summer?
A lot of it was the social experience. A funny thing happened on my first day. Tucker is my middle name, and I’ve always gone by Tucker. But for the purposes of the program I needed to include at least my first initial. For that reason, on my application I was S. Tucker Taft. I was one of the last to arrive at Highseas, and when I walked in everyone exclaimed “Stucker is here!” and for the entirety of the summer I was known as Stucker.
We did lots of hikes and various outings, and I remember playing Bridge on a regular basis. The other high point was that we were there the day that Neil Armstrong landed on the moon. I remember all of us hovered around the small screen at Highseas as we heard the historic “One small step for man…” line. It was also the summer of Woodstock, so while all the cool people were heading to Woodstock, us nerds were at JAX listening on the radio about the million kids crossing the Hudson to get to the festival.
Do you remember what your research project was about?
I had an interesting project that involved looking at the blood sugar levels of mice, including different inbred strains and what they called at the time, I believe, random-bred strains which were serving as a wild type strain. I was investigating the variability of the blood sugar levels within each inbred strain, comparing that to the random-bred and determining how much of the variability is due to their genetic makeup as opposed to their environment.
What did you go on to do after the program?
I didn’t become a lab scientist, or even a biologist, but I am a scientist—a computer scientist. Though I really see it as more of an art than a science, almost like writing a book. A good piece of software is clever and elegant, and it fits together nicely to solve a problem.
My particular focus is a little bit unusual. Pretty early on I became interested in designing programming languages and I’ve spent most of my career doing that. Throughout my career, I have been very involved in a language called Ada. It was originally designed in a competition paid for by the U.S. Department of Defense, who were trying to come up with a programming language that was particularly good for building mission-critical systems for the military. I wasn’t involved in the earliest phases of the design, but I have been involved since 1980. It has gone through four generations, with the fifth generation (Ada 2022) in its final stages of production. I’ve also designed some of my own, completely new, programming languages in the last 10 years focused on parallel programming.
That is a new term for me; what is parallel programming?
Computers used to have, essentially, one brain, and the job of the programmer was to come up with a sequence of instructions you wanted a computer to do. Moore’s law was basically saying that you could put twice as many transistors on a processor every two years and, until relatively recently, that meant that the computer went twice as fast. But about 15 years ago, this doubling process stopped. They hit a wall where they were still able to pack more on to a processor, but it required more than twice the energy to make it run twice as fast.
To solve this problem, they started putting multiple “brains,” or cores, on these chips. This meant that you could have the computer running many different things simultaneously, but no one thing was going to run any faster. The problem for programmers is that if you want to run your program faster, the only way to achieve that is to divide it up into pieces and have each core solve part of the problem, then stitch the whole thing together at the end. Which is not something programmers were taught. They were taught how to come up with a sequential set of instructions to be executed. But now you’ve got to come up with 10 or 100 of these sequences because you've got that many brains to keep busy.
The analogy I like to use is that every year you get this new grad student who is twice as smart as the one last year. But then at some point, you come into work to meet your newest student, and there are 10 first graders sitting outside your door. If you put them all together, they’re smarter, en masse, but then you have to figure out how to break the problem up into pieces that each of them can solve and put all the pieces together. So, my efforts these days have been focused on creating a programming language that makes it easy to write programs that can use “divide and conquer” parallel processing.
How do you create a new programming language?
Just like with genetic code, you’ve got a small number of little building blocks and you want to be able to create an output. Programming languages are finite, as are other human languages. But nevertheless, you can use these building blocks to create things that are, in some sense, infinite. Imagine you were a playwright and you could make up new words, you could make up new parts of speech and you can make up your grammar rules just to help you express yourself more clearly.
Wouldn't that be amazing? Then you look at Shakespeare and that’s basically what he did. Look at the number of words that he invented by using the existing building blocks of language. We want to talk about new things, we want to have new ways of saying things, we've got new problems to solve and the language has to keep up. I like to think of myself as a Shakespeare of programming. I’m creating a new language, and then I’m trying to use it.
What corollaries can you draw between programming and genomic research?
With software, you're supposed to have a pretty good idea that if you put 'X' language statement here then it will have 'Y' effect there. But when you have a big program, a small change in one part can have an unpredictable consequence somewhere else because everything is connected. There’s the genotype and there's the phenotype, and it is very much like a program and the behavior of the program. In both cases, the connections are fascinating, and probably deterministic, if you have enough data. But it's too hard to do that when there are so many variables.
In some ways, we don't really know yet exactly what the genetic programming language means. You know what the elements of the language are, and you know what the net effect is, but you're not sure what each of those little components really means and how they work with the other components. So, you're trying to figure out what the underlying semantics in the transformation from gene to behavior are. Whereas in a programming language you define the semantics and hope your program doesn't have a bug.
Even though you’re a computer scientist, what keeps you engaged with JAX’s research?
I’ve been involved with JAX for some time now, and when they started getting interested in bioinformatics and computational biology, they said to me, “Oh, you know something about computers; what do you think of this?” So, I got a bit involved in the early days of the genomics revolution, if you will, and how JAX was going to help keep track of information about mice.
While the Human Genome Project was focused on the human, someone had to worry about the mouse. There were all kinds of data about genes and how they were connected and so on, so this became one of the first places where clearly computers and biology came very strongly together. Genomics research generates an amazing amount of data, and bioinformatics could now be used to keep it all straight. What people began to realize is that throughout an experiment you gather a whole bunch of data, only to use a subset of it for your hypothesis. But if you can save all that data somewhere where someone else can get to it, then others can analyze it again and combine it with more data to make correlations.
What JAX has realized is they can be a hub for genomic data. Now you have dry labs collaborating with the wet labs in a really important way and computer science has become so critical to the kinds of research that they do now.
Why is the Laboratory’s mission important to you? What makes JAX special?
The thing that I've always loved about JAX is I feel like it's got this enormous leverage. They create the mice that drive research, they provide training for people, or they do the research themselves. For me, the three “prongs” of JAX were always their mouse resources, their education and their internal research. But then they said they were going to have this fourth thing in Connecticut focusing more on the human. It was interesting to see how they integrated that into the mission and now it all feels almost seamless. I think when you ask the folks in Connecticut why they love working for JAX they would say it is because they have all these resources. As a scientist, I could have some problem, observe it in the human, translate it down to something I can research on the mouse, and then I can get the mice and do the experiment. It’s just amazing.