What I do all day, as told to a first-year CS student

A few weeks ago, I had the fun and thought-provoking experience of being interviewed about my career by a first-year college student. Conducting an interview with someone who has a career in computing was a homework assignment for her intro CS course.

We did the interview by email, and my interviewer graciously agreed to let me post our conversation here as well. A slightly edited version follows. (In this interview, I did my best to answer the questions in a way that would be helpful and relevant to first-year college students like my interviewer and her peers; for a different audience — say, older or younger, or with more or less computing experience — I might have phrased things differently.)

Where do you work and what is your job title?

Intel Labs, which is part of Intel, and my job title is Research Scientist.

What does your job involve and what kinds of things do you do daily for it?

I’m in a group that’s called the Programming Systems Lab. There are a lot of layers that go into a computing system — there’s the hardware, the operating system, programming languages and compilers and runtime systems on top of that, and finally, apps on top of that. My group works somewhere in the middle — the level of programming languages and compilers and runtime systems. Basically, we want to make it easier and more efficient to write programs and to run programs.

Some of the problems that the group works on include making tools that make it easier to debug parallel programs, coming up with new ways to compile code so that it will run on new kinds of hardware, and so on.

It’s a research lab, so we’re not working on a product that the company sells. Instead we build prototypes and write research papers, and sometimes those prototypes become products.

So I work on all that — building prototypes and writing papers. I also do a lot of work for the community, like going to conferences, giving talks, reviewing papers for conferences, and that sort of thing. Lately I’ve also been working on intern recruiting.

What is your favorite thing about your job? Least favorite?

My favorite thing is the people! We have a really great team here that I like a lot.

At the moment, my least favorite thing is that I just started this job two months ago, and I’m still getting used to the corporate world after having spent a long time in the academic world. For example, the code I write isn’t open source by default. But I do happen to be working on open source software at the moment, which is great.

Where did you go to college?

Grinnell College, which is a small liberal arts college in Iowa, the state where I grew up. I graduated in 2004. Later, from 2008 to 2014, I went to grad school at Indiana University.

What about computing do you find so appealing?

First of all, I really like the people — when I was in college I found that some of the most interesting students and professors I encountered were studying and teaching computer science, and I wanted to be like them. Second, I think the ideas are fascinating.

Some people get into CS because they like to build things, but that’s less what it’s about for me. Although building things can be fun, I’m motivated more by a desire to understand things than by a desire to build things. That’s probably why I ended up as a researcher.

When and how did you first realize you were interested in computing?

I took my first CS course in college on a whim. It was my sophomore year, and I decided to take a CS course because my roommate was taking one.1 I ended up in the intro course for CS majors. After three weeks of the course, we began to learn about recursion, and I was hooked! I thought it was a compelling and fascinating idea.

Did you do any CS-related things before college?

Not really. Before college, for me, was the early days of the web, and so I experimented a bit with making web pages — again, motivated by the desire to understand things — but never in any sophisticated way. I went to a small, rural high school that didn’t offer any CS courses, and no one in my family had a CS background. So I was a blank slate when I went to college. I don’t think I was any worse off for it.

As a kid I loved things like logic puzzles, but I never imagined that someone could have a career as a logician, or that it was related to programming, until I was well into my CS education. Maybe if someone had told me that when I was younger, I would have gotten started in CS faster.

Did anyone influence you towards computing or have a big part in you going down the career path you did?

I’ve had a lot of great teachers over the years. In undergrad, I was more interested in the math side of CS than the programming side, and I had a couple of professors who really recognized and encouraged that.

Does computing play a role in your personal life as well?

When you’re in grad school, there’s not much of a divide between your personal life and your professional life. Now that I’ve graduated and have a job in industry, it’s a little different, but I still do a lot of thinking about computing outside of work. However, I don’t have any big personal projects other than finishing my dissertation, which I still need to turn in a final version of. Maybe I’ll start one once that’s done. I do have a blog where I write about research and programming stuff, some work-related, some not.

What are some major milestones in your path to being where you are?

  • 2001: I took my first CS course and decided that I wanted to study CS.
  • 2003: I got my first job that could be remotely considered a “tech” job — teaching HTML and CSS to kids at a summer camp. I did it again the following summer.
  • 2004: I graduated from undergrad.
  • 2004: I got my first full-time job as a web designer and developer at a startup. I’d had no relevant work experience other than the summer-camp gigs, which got me in the door.
  • 2006: I got my second tech job, producing online books for a publishing company.
  • 2008: I quit my job to start grad school.
  • 2009: I started learning to do CS research and co-authored my first research paper.
  • 2010: I did an internship on the research team at GrammaTech.2
  • 2011: I co-wrote my first research grant proposal, which was funded the following year.
  • 2011-2012: I did two internships at Mozilla Research, working on Rust. My first major open source contributions were to Rust.
  • 2013: I published my first paper that was primarily my own work.
  • 2014: I got my first and second major conference papers published.
  • 2014: I defended my dissertation and got my first full-time research job.

Did you have any major obstacles getting where you are? If so, what helped you overcome those obstacles?

Lots of them. Compare this timeline with the one above:

  • 2002-2003: I really struggled with my CS and math classes in the middle years of my degree, getting B and C grades.
  • 2003: I applied to do undergrad research and was rejected.
  • 2006: My first job ended because the company fell apart and couldn’t pay its bills.
  • 2006: I applied to four grad schools; only Indiana accepted me.
  • 2008: I failed one of the two written qualifying exams in my graduate program and had to retake it. The other exam I was too scared to even try to take until 2010!
  • 2009: My first paper rejection.
  • 2009-2010: I was turned down for various internships.
  • 2010-2011: I tried to work on a research project that never succeeded.
  • 2011: My first advisor left for a different institution, and I had to switch advisors.
  • 2012-2013: My papers were rejected from several conferences.
  • 2014: Various job rejections.
  • 2014: Yet more paper rejections…

There’s a lot of rejection in the academic world. It helps to have friends and mentors who believe in you, think you’re great, and really want you to succeed.

You mention research papers a lot. What do you research and what do your papers include?

So, my particular research area is programming languages — how to design them, how to implement them, and how to reason about them using mathematical techniques. So far, my specialty in that area is languages for parallel programming.

There are a lot of things that a research paper can be. For example, say you have an idea for a new programming language feature. You might do some of the following while working on it:

  1. Build a prototype of the new feature, perhaps adding on to some existing language.
  2. Compare your idea to what people have done in the past.
  3. Do experiments and collect data that shows that your language feature is fast, is energy-efficient, and so on.
  4. Do a user study where you have people try the language feature and you see how they interact with it and whether it helps them code better.
  5. Mathematically prove that your new feature has certain good properties; for example, guarantee that it never causes a certain kind of crash.

Most papers don’t have all these things. But you might write a paper including 2 and 5, write a follow-up paper the next year that does 1 and 3, and never do 4. Or you might do 1, 2, and 3 first, then do 4 later, and never do 5. In either case, another researcher might come along later and pick up where you left off.

All this involves a mix of complementary skills — writing, programming, designing and carrying out experiments, math — and it’s usually a team effort, where a paper is co-authored by several people. There are solo papers, but it’s much more common for a paper to be written by a group of co-authors — all my papers have had co-authors.

What opportunities have opened up to you because of your knowledge of computer science?

Certainly all the jobs I’ve gotten since undergrad have been because I had a CS degree. Also, once I started grad school, the projects I started getting at my internships were much more interesting than the ones I was able to get at my full-time jobs with only an undergrad degree.

But enough about work. Many of my dearest friends, including my amazing husband, are people that I originally met because of our shared interest in CS or programming. And CS grad school has given me the opportunity to travel the world having adventures. In the last few years, various computer scientist friends and I have traipsed through Edinburgh Castle, explored the Coliseum in Rome, and biked around Aarhus, while on trips that were ostensibly to attend academic conferences. (We did go to the conferences, but we managed to fit in a lot of other fun stuff, too.)

Do you have any advice for anyone considering or pursuing a computer science education or career?

Sure. I’ll focus on advice for undergrads who are getting started in CS:

  • One thing to keep in mind, if you’re ever feeling like you don’t know a lot compared to your peers, is that some of the ones who seem the most impressive are really just muddling through. My experience as a teaching assistant in grad school drove this point home for me. The students who seemed like they knew a lot in class often turned out to be all talk when I graded their homework. Meanwhile, the ones who were willing to ask questions and risk appearing ignorant in class often did well on the assignments.

  • When you’re an undergrad, they try to stuff a lot of information into your head. You aren’t allowed to concentrate on any one thing for a decent length of time, because there’s so much ground to cover. A lot of people don’t do very well in that environment. If you go to grad school, on the other hand, you get to study one topic very deeply. Sometimes people who don’t do well in undergrad end up succeeding in grad school because they finally have time to focus. Some jobs can also give you the same opportunity for sustained focus on one thing.

  • Take a programming languages course and a compilers course! Studying programming languages gives you a superpower: because you learn the basic building blocks that all programming languages are made of, you can become familiar with all programming languages, even ones that haven’t been invented yet. And taking a compilers course shows you that a compiler for a programming language isn’t magical — it’s just another program, one you can write yourself! This is a tremendously powerful and useful idea.

  1. I was fortunate that my roommate happened to take that CS course. It wasn’t even the course I was in (and I don’t think she ended up liking it much, which was no surprise, since it was taught by a professor I didn’t care for when I had him for another course later), but the fact that she was taking it was what made me realize that CS was even an option for me. How many other would-be computer scientists are there who never even try CS because they don’t know anyone else who’s doing it, and so don’t see it as something that they could conceivably do?

  2. I should note that my internship at GrammaTech was the first job I’d had where people used anything like “real software engineering” practice. Before that, my professional programming work had consisted of haphazardly-written PHP and Perl, no code reviews, and an embarrassing lack of discipline around version control. In other words, I was in my second year of grad school, and six years out from my undergrad degree, before I had a job where the people around me took software craftsmanship seriously and expected me to take it seriously, too. It was a long road to get to that point. (And, if there’s anything I really don’t like about being a researcher, it’s that researchers usually have to optimize for impact of research contribution at the expense of software quality, as the existence of the CRAPL attests.)