Statement of Purpose

Many people collect things. Some collect stamps, others coins or pins or spoons. I collect programming languages.

I started programming when I was in grade school, having found a children’s book on BASIC programming at the local library. By the time I entered college, I knew a half-dozen languages with varying degrees of proficiency. In the course of my undergraduate education, I doubled that number, driven by a thirst for programming and desire to further my understanding of programming techniques. Programming languages, however, are only useful to the extent that they enable people to utilize computers; therefore, I specifically intend to pursue a Ph.D. specializing in programming language support for techniques beneficial for developing highly interactive applications, with the aim of making it easier for programmers to develop robust, responsive, user-friendly applications.

In my time at Iowa State University, I have taken the opportunity to take every course I could on the subject. Last spring, I took the junior-level programming languages class offered by the computer science department, where I had the opportunity to learn Scheme and have my first taste of the formal study of programming languages. I continued my studies in this area by taking the graduate-level class in programming languages, and am scheduled to take a course in compilers next semester. In the coursework I have had thus far, I have found the study of programming languages (and computational theory) fascinating. I am also continually thinking of new ideas for programming languages or applications (relatively few of which I actually have time to pursue).

I have also had the opportunity to be involved in two notable research experiences. For the last year and a half, I have worked as a research assistant in the Scalable Computing Laboratory at Ames Lab. My work there has been primarily on user interfaces for cluster monitoring tools. Currently, I am working on a tool for 3-dimensional visualization of InfiniBand network topologies and relevant status information (error counts, link utilization, etc.). The tool, dubbed Goanna and available under an open-source license, has generated some positive feedback from InfiniBand hardware vendors as I demonstrated it in the lab’s booth at the SC|06 conference in November. My work there has exposed me to the joys and frustrations of user interface programming, and inspired me to develop an interest in that subject also (both from usability and programming tools perspectives).

My other research opportunity was an independent study project done under one of the computer engineering professors. The goal of the project was to develop the protocols and implementation for a client-server search-based personal data management system for e-mails, addresses, calendar entries, etc. I spent considerable time researching e-mail infrastructure and design and working on concepts for the program’s architecture. The problem, however, turned out to be more involved than I initially anticipated, my ideas kept failing to solve many of its problems, and a semester just wasn’t enough time for a project of that scope. I did, however, learn a number of things: e-mail is a complex system, much more so than it initially appears, and more detailed planning of a project would make it go more smoothly. I also learned the value of test-driven development techniques: late in the semester, I decided to start coding based on the ideas I had and see what would come about. I rapidly adopted the idea of writing my code test-first with the py.test testing framework, and found that I was able to produce working code quite efficiently and with less frustration than previous attempts at writing and debugging monolithic systems.

Additionally, I spent a little under a year working as a web developer with a small consulting firm. In my time there, I became fascinated with creating user interfaces to information — finding ways to make the varying types and quantities of information our clients wished to present intuitively accessible to potential readers and users.

Ultimately, I aspire to be a professor, teaching and researching in programming languages and human interface design at a research university. I want to create programming tools and languages to make it easier for developers to write robust, user-friendly applications, and also develop new applications and technologies to improve computer usability. I also desire to work to improve programming education and better equip students with the knowledge they need to understand and enjoy programming — I see many courses teach students how to write if statements but fail to teach them how to think about the concepts they’re working with. I think that there must be a better way to teach programming, and want to find out what it is.

I desire to carry out my studies at University of Minnesota because of the availability of faculty working in both human-computer interaction and programming languages. I could see myself working with Dr. Joseph Konstan; his interests in information interfaces are appealing. I believe that the interesting work in his department, combined with the presence of programming languages faculty, will provide a good environment for me to begin a career in research.