Meet the Faculty - Antonia Zhai
Tell us about your journey to the University of Minnesota. How did you become interested in computer science and your specific field?
I’ve always liked math and physics, as describing the physical world through mathematics is both elegant and powerful. When the 386 computers were coming out in the 90s, I had a lot of fun working on those computers. By today’s standards, these are very old, outdated machines, but it was a very fascinating technology at the time. I started reading a programming languages book that covered the language Basic. No one uses the Basic programming language today, but it was my first introduction into programming and computer science. I would spend hours learning how to write programs and it was very addicting. That’s when it occurred to me that this is something I could pursue for my career.
My interests lie at the intersection of hardware and software, particularly in the realm of building and experimenting with systems. I’ve always been inspired by Galileo—by the stories of how he built his own instruments and prototypes to explore questions about the physical world long before advanced mathematics made such analysis easier. That hands-on, exploratory spirit resonates with me deeply. I enjoy building prototypes myself; it’s one of the most rewarding ways to turn ideas into something tangible and test how they work in practice.
My journey to the University of Minnesota started when I was presenting at a conference. I ran into some colleagues who worked at UMN and they told me that they are hiring and that I should apply. When I interviewed, I realized how friendly the department is and saw first hand the collaborative environment. People want to see you succeed.
Tell us more about your current research!
I work on building computers and building compilers. Compilers are translating from one language to another - from high-level language to machine language, or from high-level language to another high-level language. The recent advances in machine learning and large language models (LLM) make it seem like the LLM is going to do everything for you, however, LLMs do not guarantee that the information is correct. Ideally, you would be able to prove that the output from your query is correct, but that is a much more difficult task. Proving code is correct can be very tedious and can be boring. What you could do is ask the LLM to translate code for you and prove that it is correct. That is the problem I am working on.
Correctness of software is very important. All programs are eventually converted to machine language using some compilers. If the translation mechanism has a bug in it, there can be a lot of mistakes throughout your program. To ensure correctness, you want to thoroughly test the compiler so you can catch issues beforehand. We are testing out using LLMs to automatically generate input to the compiler program to intentionally trigger bugs in compilers. It is actually a much harder question for the LLM to handle. We are trying to push the boundaries of LLMs to solve problems that are very complicated and important, especially as it pertains to compilers and translation errors.
Which courses do you typically teach? What can people expect to get out of those courses?
I teach a quantum computing course, CSCI 8207 - Quantum Computing. I started to dig more into quantum computing during the pandemic. I would love for people to give it a try. It is not as scary as it sounds. The math required in this type of work is linear algebra, and I teach the class in a way that does not assume students have a strong mathematical background. We cover the basic formulas for correction so that you can read some of the quantum computing papers and do more research if you are interested. We are developing a quantum computing research program, and several faculty members are beginning to consider projects in this field.
Additionally, I usually teach CSCI 5204 - Computer Architecture and CSCI 8205 - Parallel Architecture. I hope to be able to teach a program analysis class that combines formal verification and classic compiler classifications in the future.
What do you do outside of the classroom for fun?
I have two kids, and I spend a lot of time with them. They have very different interests, and I have the opportunity to explore different topics with them. I enjoy expanding my knowledge by learning about topics beyond computer science. I have enjoyed lectures about psychology, history and English literature. I love learning new things!
Do you have a favorite spot on campus or in the Twin Cities?
I like the exhibition in Tate Hall with the dinosaur skeletons. My father is a geologist, so I’ve always enjoyed fossils and rocks.
Is there anything else you would like students to know?
Computer science is fun! I think it’s really important to enjoy learning and stay curious, because new technologies are always emerging. In addition, what I love about computer science is how diverse it is—there are so many ways to approach it. Find the area that excites you most, and if you truly enjoy it, you’ll never fall behind the curve of technology.