Since the 1980s, the primary theme in my computer science research has been applying contemporary network technologies and distributed computing to problems in high performance computing, scientific computing, and education, particularly computer science education. I have also sought to integrate the exciting developments in this field into the CS curriculum. This interest-- in distributed computing and network technology-- is reflected in the funded projects I have been working in recent years:
These grants have supported and continue to support most of the work described below.
LANs. In the 1980s and early 1990s, local area networks with large numbers of relatively inexpensive workstations opened new doors in parallel computing. The idea was to harness unused cycles of the loosely coupled heterogeneous set of computers on a net. The LAN was seen, correctly, as the the one truly ubiquitous parallel computer system. Along with many others at the time, I developed a portable programming system, DP, to facilitate the use of the LAN of workstations as a parallel platform. DP, like many of these systems (P4, PVM, MPI) was a relatively low-level message-passing programming environments that supported remote process creation and coordination. Four papers involving DP were published along with a presentation:
Exploiting LAN technology was also part of my work in CS education. In that regard, I developed a distributed automated homework program checking system along with a network environment to facilitate its use and promote information interchange between students and instructor. This work led to these publications:
WebComputing differs from traditional "internet-wide" computations in that it requires no knowledge on the part of the participant, no special compilers or other software and a generally lower commitment of computing resources. The key to WebComputing, besides the existence of the Internet itself, is Java. The essential idea is that a server, or collection thereof, in league with collection of web servers coordinates the execution of tasks by Java applets executing in parallel in an ever-changing set of unreliable, heterogeneous client machines. One of the most appealing promises of WebComputing is the potential for achieving an unheard-of degree of parallelism-- in principle, a computation could harness every computer that is connected to the Internet. Promising as WebComputing is, the platform is peculiar. The number of computing elements (hosts) is variable and in fact may be zero in the absence of a means for attracting "volunteers" on the web. The hosts themselves are unreliable and possibly untrustworthy, and disparate in their power. They execute Java applets, which are typically interpreted generally and therefore slower than an equivalent C code. Communication latency and bandwidth are quite variable but generally bad. In addition, the platform has a tendency bottleneck on a central server.
Our investigations here focus on the following issues in WebComputing:My interest in the Internet does not end with WebComputing. Another important ongoing project is WebToTeach. WebToTeach is an internet-oriented outgrowth of my earlier work in LAN-based automatic homework checking and teaching environments. WebToTeach is a convenient, flexible, web-based, multi-lingual automatic programming homework checking system. mechanism that supports a new CS education pedagogy. Some recent paper and other submissions related to WebToTeach are:
Our original interest in bringing distributed computing to the CS undergraduate curriculum predated Java. Java, however, is a great vehicle for making distributed computing concepts concrete at all levels of the CS curriculum. To that end, we developed a CS 1 course that uses Java, described in the last paper listed above. When we found out that there is no CS 1 Java book that takes a truly object-oriented approach (in the sense of writing class definitions early) and none that integrates network computing into the course, we decided to write our own: An Introduction To Programming Using Java: An Object-Oriented Approach
Interest in Java has led to interest in object-oriented programming issues in their own right. Weiss and I noticed that very often the advice given to beginners by experienced OOPers is not always meant to be taken literally. We discuss that in Reexamining an Object-Oriented Design Heuristic.