Question 16 My interest in computing began five years ago when I got my first computer account, on a VAX/VMS system. There was little documentation available and I lacked previous computer experience, so I had to learn how to use VMS by trial and error. I enjoyed playing around on the command line and seeing what I could make the computer do, so the next semester, I took an introductory programming course. I fell in love with programming and knew immediately that I wanted to major in computer science. At the same time, I was taking a class in symbolic logic, and fell almost as much in love with formal systems. The beauty of programming and of formal logic as problem-solving methods struck me in a way which no form of mathematics had ever struck me before; the clarity of thought which both programming and logic engender appealed to me then, and still does. The concept of levels of abstraction, I think, is the organizing idea in computer science, and the most exciting one. Abstractions are what makes it possible for a machine that is, on the lowest level computer scientists like to think about, a collection of intricately strung-together NAND gates, to draw pictures, prove theorems, and do anything else that can be expressed as a terminating algorithm. I am drawn to the field of programming languages because it centers around adding higher and higher levels of abstraction on top of the level of higher-level languages. Programming is worthwhile because solving a problem with a program gives one a better understanding of the problem. However, programming in any existing language is as much about the specifics of dealing with a machine as it is about the problem itself. A programmer using assembly language has to spend much more time thinking about the low-level details of arranging data in memory than about the problem she is actually trying to solve. A programmer using a language like C has to think less about these details, but still has to spend time rearranging her abstract understanding of the problem in order to fit into the limited constructs which the language provides. Functional languages provide more mechanisms for expressing a program in ways that are closer to how a person might think about the problem, but programming languages have a long way to go until programming becomes merely a matter of developing a clear understanding of a problem, rather than phrasing the problem to fit the particulars of a given programming language. Narrowing the gap between what a human mind can easily conceptualize and what a programming language can easily express is what I hope to accomplish with my research on programming languages. I want to pursue advanced study in computer science in order to accomplish this goal, and also because I'm interested in a career path consisting of research and teaching. My first major research experience was in summer 1999 at Berkeley, working on a statistical algorithm in C. After that summer, I knew that I was capable of doing research, but also knew that statistics wasn't the kind of research I wanted to do. The frustrations of programming in C convinced me as well that research on programming languages which widen the abstraction barrier between computer and programmer is an urgent necessity, and so I spent summer 2000 working with my advisor at Wellesley College on implementing the type inference approach to deforestation. This research experience, which I'm continuing in my senior thesis work, made me certain that I wanted to study programming languages long-term. I want to do academic research as a career because I want to study problems which are interesting regardless of their commercial marketability, and I want to teach because I want to infect other people with my interest in these problems. I have found my experiences tutoring students in computer science classes at Wellesley to be very rewarding; there is nothing quite like the feeling of knowing that someone understands a concept better because of me. I hope to someday cause someone else to have an experience like the epiphany I had on the second day of my first computer science class, when I first understood that a few lines of simple code could cause a machine to perform a complex action. I look forward to spending my life learning as much about computer science as I can and sharing what I learn with as many others as possible.