Style of Work

In 1983, my first year of graduate school at Carnegie Mellon University (CMU), I attended a talk by well known computer scientist Andy Van Dam in which he said ``in computer science, if you haven't written the program you don't know what you're talking about.'' I have taken Van Dam's philosophy as my own.

I am an inventive experimental computer scientist: my goal is to invent significant new concepts for system design. In general, the aim is to develop ideas that may have impact within about 2-5 years after performance of the work. My work focuses on inventing new designs, developing prototype implementations, and evaluating the prototypes experimentally.

Although there are disadvantages to implementation and it is not necessarily appropriate for all types of work, I believe that in ``systems'' subfields it is usually desirable, and that one should be biased toward implementation, for several reasons. The first is that predicting the impact of a new idea within a system is rarely straightforward. A large system typically presents many constraints that may foil an appealing idea. Second, large systems are usually complex and the interplay of various mechanisms is often surprising. Similarly, implementation aids in debugging a new idea and exposing unrecognized assumptions and unconsidered details. Further, an implementation -- as opposed to a more abstract description of an idea -- provides a more specific demonstration of the idea and a more concrete foundation for follow-up work. Finally, an implementation often eases the reproducibility of results by others.

Upon joining the Columbia faculty in 1988, I abandoned the topic of my doctoral dissertation (techniques for incorporating atomic transactions into the operating system) and started on the new subject of mobile computing. At the time, portable computers and cheap hardware for wireless digital data communication were curiosities, and the concept of mobile computing presented virgin territory. Protocols and systems for distributed computing were designed on the assumption that computers did not move, and this assumption was so basic that for all practical purposes it was impossible for a distributed system to continue running automatically and normally if some of its constituent computers changed locations. Relocation would terminate a computation and require human intervention to reconfigure the system before restarting. Starting from this point, with no pre-existing principles for how to build effective mobile computing systems, my research proceeded in two phases.

In the first phase -- transparent mobile computing -- I investigated how to design lower layers of distributed computing systems to hide from upper layers the fact that computers are moving. This work resulted in new designs for several common and pre-existing computing/communication services. The most prominent example, Mobile IP is a set of algorithms that allow a computer to move from one IP network to another without having to change its underlying IP address. Since the IP address does not change, movement is invisible to all software above the IP layer, including the operating system and applications. Other services that my students and I designed or re-designed for mobile operation include: the X11 protocol for remote graphics, replicated read-only file service, replicated read-write file service, and remote virtual memory paging.

The second phase of my research investigated how to enable application programs running on mobile computers to automatically adjust to changes that may occur in their surrounding environment as a result of the computer's movement. My research evolved from hiding the effects of mobility to exposing mobility in a structured manner because it is not always possible or even desirable to hide the effects of mobility. For example, it is simple for a mobile computer to disconnect from a 100Mb LAN and re-connect to a 56Kb phone line or 9.6Kb wide area CDPD wireless service. However, the difference in network bandwidth, a factor of 10,000, is so vast that it is difficult to imagine any technique that operates only at a low layer, without the benefit of knowing the meaning of the network traffic, that can by itself automatically reduce communication by a factor approaching 10,000 yet still preserve the essential operation and performance of higher layers.

Accordingly, I initiated work on techniques that permit automatic adaptation to network heterogeneity. Heterogeneity may be introduced by movement of a mobile host among networks with substantially different characteristics. The resulting solution is a mechanism for inserting and removing programs (called ``filters'') into the middle of client-server connections (even ones that are already active), and then dynamically controlling filter behavior. The filters are typically application-specific, and usually act under control of an application running on a mobile host. They may drop, delay, re-segment, or transform data moving to and from the mobile host, making use of application knowledge about the meaning and purpose of the traffic.

Besides the work described above, I have undertaken a few projects that do not fit a theme:

Past Advisees

While on the faculty at Columbia, I graduated five doctoral students, four of whom were my advisees. A sixth is due to graduate on December 6, 2000. In addition, two students wrote Masters theses with me, and many others performed more limited research projects. I have worked with undergraduates who have gone on to doctoral programs at Caltech (Dan Maskit) and Carnegie Mellon (Jon Nowitz).

Below is a list of the MS and PhD students I have worked with, including in each case the student's date of graduation, information about his thesis, and his current employment. Some of these people have graciously agreed to answer your questions about what it was like to work with me.