Women@SCS conducted an interview with Jean Yang, Assistant Professor in the Computer Science Department.
Could you tell us a little bit about your background and your journey before you came to CMU?
Yeah. I grew up in Pittsburgh, actually across the street from CMU. Well, I was born in China, and then I moved to Pittsburgh when I was five, and my dad worked at CMU. He was in human computer interaction. So I always spent a lot of time here. And I would go to outreach programs that CMU had for kids. And computer science was just always the thing that was around when I was growing up. But I never specifically expected to keep doing it. It was just the thing everyone did.
But in high school I went to Andrew's Leap, which is a program that Professor Rudich runs. I did Governor's School here. I did Pre-College here. I did a lot of stuff at CMU while I was growing up.
Then I went to Harvard for college and I wasn't sure what I was going to study, but I figured something that wasn’t computer science. I think that there was a lot of explicit and implicit pressure from teachers, parents' friends, family, that kind of thing, to study something else, something “more appropriate for a girl.” And I declared economics as my concentration my first semester, but I didn't care about it very much. My friend had also declared economics, and I just copied his course sheet, 'cause I was like, "I don't know anything about economics. I don't know which courses are good." But I kept taking computer science, and that turned out to be the subject I liked the most.
And I think I really struggled with deciding that was what I was going to do 'cause people would say, "Are you really gonna code all day for your career?" And I think part of it was like: people saw computer science as a trade, and there's some of that liberal arts prejudice against learning a technical skill. And a lot of it was: people didn't think that girls should or could – or something – do computer science.
But yeah: I tried being pre-med for a year. That was okay. I really liked taking organic chemistry actually. But I don't think pre-med was for me. But after a process of elimination, I decided I should just stick with computer science. That was what I liked. It was the homework I liked to do the best. It was the classes I liked the best. There was no reason I shouldn't do it except no one seemed to really think I should do it.
And then I interned at Google the summer before my senior year. And I was thinking, "Do I wanna go to grad school? Do I want to go to industry?" And I asked everyone at Google, "What should I do?" And a lot of them had dropped out of their PhDs. And I expected them to tell me, "You should just come to Google. Why would you do a PhD?" But they all said, "You should try to do a PhD because until you've done one, you don't know if it's not for you." And so then I decided, "That's a pretty good plan".
And so I applied for PhD programs. And I spent seven years at MIT. I wasn't really in a hurry to leave. People kept telling me, who were professors, that their PhD was the best time of their lives. So I figured, "Why would you wanna leave the best time of your life prematurely?" And so I had a great time. I wasn't sure that I wanted to be a professor because people said, "Being a professor is a lot of work and you don't get to do that much research anymore." And then I thought about it really hard, I talked to a lotta people, and I learned that being anything is a lot of work. And if you do other things, you probably get to do even less research.
So then I decided: being a professor seems to be the way to optimize all the things I like to do. So now here I am.
Why did you choose CMU specifically for your faculty position?
Well, I mean, CMU has the biggest programming languages group out of any school in the world. It's the place to do the kind of programming languages work I want to do. So I think in terms of that, there was not really much of a question. But also I think that people do have work/life considerations. Like: how much do you give up to be at the most appropriate school for your technical field? And I think that in terms of that, CMU also seems like a good place to be. People are very nice here, and they have families and they have lives. People other places have mentioned that because Pittsburgh has more of a community feel, CMU also has more of a community feel. And that's something I like about CMU.
CMU also does a ton of women-in-STEM outreach efforts, and that's something I really liked. It was nice to see that there's so much effort being put into making the freshman class gender-equal. There's a lot of effort in talking about bias. Carol Frieze is wonderful.
Yeah she is!
And also there are subtle things. Like women wear dresses here. That's not the cases in a lot of other computer science departments.
Really? That's surprising.
Yeah. I mean, I think it's good to be a woman in computer science here.
What are your favorite and least favorite parts of your job now?
I would say my favorite parts are interacting with students, being able to feel like I have a say in how computer science education is being shaped, having a voice in the research community; saying, "Look, these are the directions I think research is going to go. I'm gonna put my own stake in the ground by doing research in this direction." Yeah. You have a ton of freedom. So you have a voice and you have a lot of freedom. And those two things are really important to me.
I think my least favorite thing is – well, so I described to someone that my job now involves doing all the things I like, but the catch is I have to do them all at the same time. So I really don't feel like I have very much time for each thing, and that can be a bit stressful. But I think I'd rather be able to do all the things I like than not be able to do them.
Were you always interested in computer science? And what attracted you to computer science in the first place?
So I was always interested in computer science, but somehow I never expected to keep doing it. But what I like about is that it's never boring. You can take it at whatever pace you want. You can make whatever you want. 'Cause I feel like when I was a kid I was always bored. I didn't have siblings for a long time. My sister's a lot of years younger than me and so I was always playing by myself. And if you're making crafts, at some point you run out of craft supplies. But if you're making a program, you never run out of program. You always have more bits. 'Cause a computer doesn't have the same kind of limitations that physical things do.
And then also if you're trying to do something or you're trying to play and you're only by yourself, it's kind of boring. You can't just be all the different roles in a board game or something like that. But if you have a computer, you can always just make it do whatever you want. I don't know. There's this power that you get from being able to make the computer do anything. And then there's also this immediate feedback. You can make it do anything. You can make it talk back to you whenever you want. Whenever I did computer science homework, I really liked that there was a compiler.
I really liked learning theory, but doing theory homework – I mean, you kind of have a compiler because if you've proven something, you know that you've proven it. But it was just never as satisfying as having the compiler come back and say, "Yes. I compiled all your types." Or having your program come back, and it ran all your tests. I don't know. I guess I just don't have very much faith in myself, but always having something else that feels very responsible there is very appealing to me.
So you kind of answered the next question earlier: why did you choose to go into academia? But is the advice you were given the same advice that you would give to someone else who's making that decision now? "Try it and that's the only way you'll know whether it's right for you"?
Yeah. 'Cause I think the thing is: it's very hard to know whether you like something unless you've done it. And I think it's also very hard to know whether you want to be a professor, even if you know that you like being a graduate student. Because being a graduate student, you spend most of your time doing one thing. And you do it because you love the research and you want to grow in certain ways.
But as a professor, it's a little bit of a different job. And I think that's the part I struggled with in deciding. Like I knew I loved being a graduate student. But as a professor, you don't get to really work on one thing very deeply any more. You're in charge of a research agenda, which means: if you want a big agenda, you want more than one thing. And you probably want more than one student. And you're also in charge of other jobs, like fundraising and teaching. And so it's a lot more juggling.
But once you get to that stage of your career, that's your life no matter what. Like if you're a software engineer, you go into management at some point. That's just the natural lifecycle of a career.
We saw on your website that you created a programming language called Jeeves. Could you tell us a little bit more about Jeeves? What was the hardest part of your creation, as well as the most interesting part?
Yeah. So the main idea of Jeeves is: it helps programmers bake security and privacy into their programs. So the thing is, with programming right now: it really wasn't designed for security and privacy. And what this means is that there's no constructs to really help programmers tie security and privacy to programs. And so if you're implementing something like Facebook and you have a GPS location that's being shared and you want to protect that GPS location, you need to make sure that anywhere that GPS location's being used, certain policies are being enforced on it. The GPS location doesn't know what's supposed to happen. And the program doesn't know what's supposed to happen with the GPS location.
So the programmer has to, everywhere the GPS location is used, at the very least call some library function and say, "Hey, protect my GPS. These are the circumstances of the protection." And this is very error-prone because – I think of it as the difference between manual memory management and garbage collected languages, right? If you have to make sure to allocate and deallocate everywhere, that's just a whole big space of errors. And a lot of major bugs come from that. A lot of security vulnerabilities come from mismanaged memory.
And so the way I see Jeeves, it's the next level up. All the bugs that come from missing checks for access across your program. And so the main idea is that programs now encapsulate their policies and also all the different ways they can be shown. Or sensitive values now encapsulate policies about who they can be shown to and the ways they can be show. Because if you have a GPS location, one thing you wanna know is: "Who can see this?" But the other thing you wanna know is: "Well, if I can't show it, what do I do?" 'Cause otherwise you have to write another version of your program for all the cases when you can't see it.
So a hard part of doing this was coming up with a sensible programming model that let you program this way. Because it's kind of wacky if you think about it: what does it mean for values to actually be multiple different values? What does it mean to – so if you're doing "If the GPS location is equal to Gates Hillman complex, then I do this." Well, what if your GPS location is this or that? What does that computation mean? Can policies depend on these values? And how do we resolve those dependencies? And so we spent a bunch of years just sorting out the semantics of: what does it mean to compute this way?
And then there's the question of: if we actually want to build systems like this, how do we build it efficiently? And so I alluded to this already, but one way – the easy way to think about it is: you just carry around two values; you just blow up your number of computations, and you're just always doing 2 to the n computations all the time. But this is not very efficient. So then we had to show: "Well, you don't have to do this a lot of the time, and in real-world code, if you wanna do this as a run time thing, it's not super slow." But then we've also been working on: how do we get the equivalent of the semantics, but then do it at compile time? So there's been a lot of work in: how do we get this to work for real while still having the guarantees?
And I think another hard part has just been convincing people that we wanna do things this way. Because when we started working on this, it was like 2008, 2009 – 2009 I think, seven years ago. And people said, "Well, we manage policies just fine." And back then people hadn't seen these crazy kinds of policies and these crazy kinds of policy interactions. And so it took a lot of years to convince people that this kind of work is really important, that there's value in getting guarantees and that you can build systems this way.
Could you tell us more about current research projects that you're working on?
Yeah. So currently we're doing more work along the Jeeves trajectory. So with Jeeves, we developed this programming model called policy-agnostic programming, where the information flow policies are factored out. And so the first step was: factor out the policies. What does it mean? The second step was: "Well, we've been doing this as a runtime thing. That's pretty slow. Let's try to do it as a compile time thing and have the compiler insert checks."
And then I have this whole other direction on biological modeling. So I got interested in that because someone pointed out to me that the kinds of security questions I was interested in are mostly: "How does information flow through a program?" And for biological modeling, at least modeling of protein signaling, a lot of what they ask is: "How does information flow through a cell?" So I discovered there are these people modeling protein signaling. So protein signaling happens in your cells. It's pretty much like: some protein gets changed; this causes other proteins to get changed. You can get what's called post-translational modifications, which are like: bits get set on your protein, and this caused a chain of events, and then you get some event of interest, which is like the production or protein or locomotion or something. Like disease. I don't know. I'm just saying words here.
But yeah. So people have been trying to understand these systems in various ways 'cause if you can understand them, you can cure cancer; you can do all kinds of stuff. And recently some people have been modeling these systems using programs, which I think is super-cool. Because programs are much less opaque than a system of differential equations or something. You can actually sit down and tweak your program instead of like: "Let me tweak this coefficient." That just doesn't work as much. And the plus side is you can analyze these programs the way you analyze any program. So you can ask questions like, "What's reachable?" or "Where are symmetries?" or "What are paths that we take through the program?"
And this direction of research is much less well-defined for me right now because I've been working on it for a shorter period of time. But I am super interested in it. And I think what's really exciting is that a lot of computational biology work so far has been statistical. So it's been like: "Let's throw stats at this problem and see what happens." And it's gone really far. But what it lacks is this notion of understanding. And I feel like programming languages work is all about: "Let's deeply understand this. Let's tease out all the parts and formalize it." And I think that can really help with understanding in biology, which is very interesting to me.
What advice do you have for women in male-dominated fields such as computer science?
Yeah. So, for me, I think one thing that's made being a woman in a male-dominated field easier is the experience of being part of an immigrant family. 'Cause I grew up in Pittsburgh, which is mostly white, and my parents and I had come from China when I was young. And there was always this tension between assimilating and preserving your own cultural identity. But I think – I found it very difficult when I was growing up, but I had managed to strike a balance between "This is what I have to do to get people to accept me and to get people to listen to me" and, "But I can still preserve my own cultural identity at home or in certain circles in whatever way.” And once I become enough part of the community, I can assert my own cultural identity in certain ways.
And I think for women in computer science, it's very similar. There's all this bias against you, not necessarily out of malice, but because people just don't understand where you're coming from. And you do have to assimilate to a certain extent. You know, people say, "You need to learn to talk like a man; you need to learn to dress like a man," and all this stuff. And I think, to some degree, until there are enough women that people understand how to accept them into the community, you have to do that. But there's still this desire that women probably have to maintain your identity as a woman, if that's the identity you have, and to not give up your personhood just to be in this field.
And I think it's gonna get better as the field is more gender-equal. But in this early stage, navigating that tension is very important.
So you have a lot to balance on your plate. Do you have a rule of thumb for how you manage your time or what you make time for versus what you say no to?
Well, I'm still working on this. But I think what people keep telling me is: I should remember the main reason I got into this job, which was the research. And also that's the only thing they can really – well, okay. So essentially someone said, "They will fire you for not doing research. It's very hard for them to fire you for not doing anything else". And so I think there's a lot of stuff going on, but it's important to keep in mind that the research is why I'm here. And there's good distractions and there's bad distractions and there're things that are not distractions at all, but I think staying focused on making enough time for doing the work I care about, or at least setting up environments so my students can do the work I care about, is most important.
And then there are also just things that make me feel like a person. Like eating food, getting enough sleep, seeing people I care about every now and then. And those are also non-negotiable. I mean, what's the point of having a job if you don't have a life that the job is a part of?