Matthew Flatt, a Rice University CS Ph.D. alumnus and professor of computing at the University of Utah, loves building tools for other people to use. His own tool of choice is Racket, a functional programming language.
“While an undergraduate at Carnegie Mellon, I was hired to work for a group in the Psychology department building a graphical interface for experiment-design software,” he said. “When experiment designs get complicated, a GUI’s rigid forms aren’t good enough. An experiment designer needs a little bit of abstraction, so I ended up turning the GUI into a front end for a scripting language. In retrospect, I probably would have turned any job into a programming-language project.”
Flatt’s interest in programming languages grew out of that first effort. When he decided to go to graduate school, one of his professors recommended Flatt work with Matthias Felleisen in programming languages at Rice University.
“I took a year off between my undergrad and grad programs and worked for a company out of Pittsburgh,” he said. “As it happened, Matthias was taking a Rice sabbatical that same year and he spent it at CMU –so I had the opportunity to drop by his office there and chat with him.”
When he arrived at Rice, Flatt joined Felleisen’s research team in the creation of a language to be used for teaching introductory programming. Originally called PLT Scheme, it was a variance of a language known as Scheme, and it included the DrScheme programming environment. Later renamed Racket and DrRacket, the environment facilitated a streamlined approach to the way Felleisen taught introductory programming material.
Flatt said, “Because Racket provided language levels tailored to the curriculum and improved error messages, students could get straight to the programming concepts Matthias wanted to focus on instead of worrying about issues in the tools they were building to solve the problems.
“The Racket project was an early, happy collision of programming languages, implementation, and teaching. Since then, Racket has been used to build languages for a variety of platforms, like doctors working on treatment programs and writers building prose documents. Those are examples of specific domains where a customized language helps the users concentrate on what they actually want to do instead of creating the tool to do the job. Racket has turned out to be very good at supporting domain specific languages.”
In the last two years of his PhD program, Flatt began to consider a career in academia. He had expected to move into a developer’s job, because he enjoyed building software so much. “But I discovered I also liked teaching, and there were faculty opportunities at the time.”
While Flatt was in Rice’s Ph.D. program, his wife Wen Yuan Gu performed with organizations like the Houston Ballet and Houston Grand Opera. Richard Brown, a timpanist with the opera, also taught harp and percussion at Rice University’s Shepherd School of Music. Brown spends his summers performing with the Grand Teton Music Festival Orchestra and recommended the opportunity to Gu. There, her performance impressed the concertmaster of the Utah Symphony and she was encouraged to audition, where she won a position.
“Winning an audition for a major symphony is difficult,” said Flatt, “so we didn’t hesitate to move to Salt Lake City. I split my time between Utah and Houston, wrapping up my Ph.D. When I was in Salt Lake City, I sent a few letters out to the University of Utah and met Jay Lepreau. Jay ran an operating systems group who and was interested in adding a programming languages guy to his team.
“We also looked at dual-career opportunities in Boston, Chicago, and Indiana, where there were good music programs, but it is hard to beat the combination here. It’s a very pleasant city, the kind of place that makes a good impression on people in the fall and spring.”
He said one of the most appealing aspects of joining the faculty at the University of Utah’s School of Computing was the opportunity to continue developing software. “It is something a lot of professors worry about: can they keep writing code. Like anything else in a job, it is what you prioritize – whether writing code, publishing papers, or working through particular proofs or theorems. Utah is a relatively ‘applied’ place so I prioritize developing software, but I still have time to teach, publish, and advise grad students.”
Flatt said a good day is when he gets to program all day. “Although I do enjoy teaching, working on Racket all day is extremely satisfying. Using Racket, improving Racket, there is always an endless stream of ideas to make the language more usable or make programs written in Racket work faster.”
He continues to collaborate on Racket with his colleagues from Rice, even though the original team is now scattered across the country. Among the original team, Felleisen moved to Northeastern University, Flatt is in Utah, Robby Findler is at Northwestern University, Shriram Krishnamurthi is at Brown University.
“We’ve been doing this for so long, we just know who is going to work on different parts of the system. We coordinate through GitHub, Slack, email, and several other communication channels. The full group rarely meets together, although the principals try to meet once or twice a year in person. It is run like a typical mid-size project on the web.
“We are unusually development-focused for academic researchers –we keep servers and services working, but we’ve found plenty of research problems along the way. The fact that our work is put into production gives it an extra edge and believability. We are not just creating a toy or one-off idea.”
And that is how Flatt, a tool-builder and software developer at heart, turned his faculty role into the job he desired. “I wanted to build tools and abstractions for other people who want to use computers to write programs, and that’s what I am doing.”