Educational
Background

Academic
Interests

Hobbies

Resumé

Contact
Information

Statement of Purpose

Studying and applying advanced algorithms and techniques certainly is useful, but everything depends on the ability to write a program, a fact that people generally take for granted. I want to study the existing approaches for the design of advanced programming languages and environments and the implementations that make them practical. I want to create the tools and discover the techniques that will revolutionize the productivity of the common programmer.

Computer science has appealed to me for a long time because I want to harness the magic of computers, but doing so almost always requires writing a program in some form or another. I certainly have experienced the joy of programming, but the activity of programming isn't always natural: bugs tend to happen when programmers work below the level of the problem statement, and casual programmers don't spend enough effort bringing the level of the language up to the level of the problem.

Higher-level languages and domain-specific languages help alleviate the problem, but programmers still have a tendency to program "below the problem" even in such languages. Advanced programming environments undoubtedly can have enormous influences in programmer productivity, but relatively few advances have become universally available.

In pursuing a Ph.D. in computer science, my objective will be to design an educational program to give me both the theoretical background and techniques as well as the practical experience and understanding I will need to be able to work on both the theoretical and practical sides of problems. I'd like to perform research and development in industry, possibly creating efficient software development environments. I also am very interested in teaching and want to acquire teaching experience that I can apply after I complete my graduate degree. I likely will have multiple careers, and this approach of having background in teaching as well as research and development, and theory as well as practice, will equip me to deal with that reality.

At Johns Hopkins University, I have attained a very broad background in computer science (and supporting mathematical sciences topics through a double major), as I set out to do when I entered the department. My course selection has been aimed at providing a solid foundation, and I independently have read a wide selection of classic and otherwise significant works in my area to acquaint myself with languages, techniques, and viewpoints to which I would not have been exposed in the classroom. I quite literally have taken responsibility for my own education. This puts me in a strong position from which to undertake research at the doctorate level, since I will have to spend less time strengthening my background next year.

This year, I have been participating in the Data Structures Library in Java, a joint project between Johns Hopkins University and Brown University led by Dr. Michael Goodrich and Dr. Roberto Tamassia. The goal of the project is to develop a complete, usable data structures library in Java. Several data structures libraries are available for other languages, the most prominent being the Standard Template Library for C++, but none of them really tackles the issue of advanced data structures such as graphs, and the data structures supplied with the standard Java Development Kit are extremely limited in scope as well as flexibility. Furthermore, data structures classes and textbooks traditionally present data structures as separate but related entities with a particular internal structure; we intend to abstract the interfaces of standard data structures so that they can be used as higher-level tools rather than low-level constructions. I have just helped the principals of the project finish a textbook, Data Structures and Algorithms in Java, which seeks to advance the method of teaching data structures by presenting data structures as such abstract interfaces with various concrete implementations.

My role in this project has been to help the core group create a solid hierarchy of data structures that is flexible, easy to use, and robust in the face of future additions. A large number of implementations have been written, and certain flaws in the existing hierarchy design have become apparent, so I've helped rethink the organization.

For my Master's project, I spent last summer (and will spend part of next semester) designing and implementing a compiler from Smalltalk to Java Virtual Machine (JVM) code. This project appeals to me because it tries to bring out the best of both languages but has never previously been attempted. (Programmers concerned only about efficiency of programs rather than efficiency of programmers will think I have brought out the worst of both languages.)

The Java platform is appealing because it is object-oriented, device-independent, and provides standard libraries for such important programming tasks as network access and graphical user interfaces. However, the designers of Java felt compelled to keep the language very C-like, thereby limiting the structure of the language unnecessarily. Smalltalk, on the other hand, was designed from the ground up without reference to existing languages, so it is in some sense a more natural language in which to program. My greatest obstacle in the project was mapping the subtle features of Smalltalk onto the JVM.


Matthew S. Harris 
mharris@cs.cornell.edu