Kathryn Mazaitis (formerly Kathryn Rivard) from Olin’s inaugural class works as a research programmer at Carnegie Mellon University. She is also studying part-time for a Master’s in Human-Computer Interaction, and previously completed a year in the robotics PhD program before changing tactics. We recently had the chance to talk with her to learn more about what her life is like now.
First off, any advice for Oliners considering grad school?
Expect people to not know how to help you! You will be way better at projects than anyone expects you to be; prepare to take a leadership role in project planning and execution, particularly for team projects. You may have more trouble with problem sets than anyone expects you to have; prepare to show up for office hours ("just to hang out" if that helps your mindvoice actually do it). Stay in regular contact with other Oliners if you can.
How did you choose this path?
I feel like graduating seniors face a false dichotomy: go work in industry, or go study in academia for an advanced degree. A research staff position in academia doesn't enter the list, and I think it should, particularly in Olin's case. As a research programmer for a lab at CMU, I get to be multidimensional: I use my engineering skills to design and write supporting code for our research systems, scale up prototypes, and integrate grad student code into a more robust, modular, and maintainable architecture. I use my peer-teaching skills to mentor students. I use my communication skills to write conference papers, API documentation, and getting-started guides that help new students rapidly get up to speed with our system so they can start contributing new results. I use my visual and interaction design skills to write web interfaces and demos that show how our system can help meet real user needs. Research staff for academia may not be a traditional target for graduating seniors, but it's been a great fit for me.
Tell us more about the work you do in the lab at CMU.
The lab I work in studies information retrieval, machine learning, and language technologies (so basically, search engines and the technologies that support them). Most of our code is in Java, which is nice for giving students a modular interface for trying out new techniques. Because we're research focused, we run a lot of experiments to collect summary evaluation data on how well our system works -- this usually means shell scripts, perl, and python, plus enough organizational skills to keep everything straight and remember what version and settings were used to run what files.
Interpreting the data is sometimes ornery, and involves a lot of data visualization and analysis to help figure out what's going on. I frequently take python or matlab prototypes and port them to Java, adding multithreading where necessary, and adding scalable data structures like disk-backed iterators or database connections and the like. Occasionally we have an opportunity to showcase our stuff in a real time setting, and I write web apps for that, both front and backend. I write documentation and tutorials for our system to help students and other collaborators get started using it.
My boss advises PhD students, but also takes on summer interns and semester-long research projects for masters and undergraduates. For these students, while my boss is their research adviser, I tend to be their project manager and implementation adviser, helping them figure out what to do in what order, debugging practical issues with code, etc.
When we submit conference papers I usually write something in the implementation section, including if we have any impressive scalability results; I also produce whatever diagrams are needed. Additionally, I keep track of the various servers we have for running experiments on, including managing accounts and installing software.
How is your typical day structured?
When I get in, I read email and address any questions or requests that have come in the previous evening. Typical requests are for access to a machine, or software to install, or a question about an error message. After that, it depends -- my job varies a lot! Right now I'm working on two primary tasks. The first is collecting evaluation data on a structure learning problem we're debugging. It's an older dataset, and on bringing it up to date with the new version of the code, we're not seeing as good performance as we did when we published it. The student who wrote the dataset is away for the summer, the notes are sketchy, and running the system once takes over an hour, so it's mostly just trying out hypotheses and grinding through data collection.
The second task I'm working on is an optimization my boss came up with for how we store nodes & edges data while the graph is being built. His prototype worked, so I've been weaving it back into the current structure of the code in a way that will let us turn this new optimization on or off. This mostly involves thinking really hard and writing very few lines of code placed very precisely, then fixing compile errors until everything is back in alignment. Then I run a test, and see if it runs. If it does, I see if the results match what we get without the optimization. Usually one of those conditions is false, and I go back to thinking and writing as little code as possible.
In between I have short meetings with my boss twice a week, even shorter status meetings with each of our undergrads twice a week, and a big lab meeting once a week. The latter either involves one of the grad students practicing a talk, or a round table where everybody says what they've been working on. Usually if someone is stuck, someone else in the group will have an idea that helps, so this meeting is typically quite useful.
It sounds like you’re doing a lot! Is there something that you feel is particularly innovative?
Everything we publish is innovative! :) But seriously, Olin's perspective on interdisciplinary thinking has transferred quite well to the work I do now. Our current project combines two divergent approaches to AI (logic programming and machine learning), which I find totally delightful.
How have you made a difference in the world since leaving Olin?
All of my teaching, whether it's at work or for social dance. The easiest way to make a difference is to share what you know, especially if that's the same thing as sharing what you love.
Looking back, how did Olin help you get to where you are today?
I think the most valuable thing Olin did for me was the "normal" it established. In the early years, if you wanted something to exist, you had to make it exist yourself, and not knowing how to do that was completely irrelevant. That approach -- of not batting an eye when faced with a task you have no idea how to do, of making guesses and using failures to adjust course instead of getting discouraged -- has been astoundingly useful.
Advice for current students?
Olin is a high energy place relative to the rest of the engineering world! If you feel introverted at Olin, your self-care routine may need to change drastically once you leave. I was very shy at Olin and didn't realize I would need more social time than the average grad student in my department. That was no fun to learn first-hand :(
Do you have time for fun? What do you like to do?
One of my favorite things about being in academia without being a grad student is that I definitely have time for fun! For the last six years I was one of the senior instructors of west coast swing at a local ballroom, and taught weekly classes on a monthly rotation. I do all my own cooking. I've fallen in and out of a lot of other hobbies: winemaking, beer brewing, cheese and yoghurt making, vegetable ferments, hobby electronics, sewing, working wood with hand tools, preserving jams and salsas, puzzle hunt writing, interactive fiction writing & reading, and most recently, fiber arts -- I have two spinning wheels that I use daily, making yarn from fleece I wash myself, which I dye with plant dyes I grow in my yard. I've also been making soap.
Life is good.