Q: How did you end up in Computer Science?
A: I took a course about computers at the Franklin Institute in Philadelphia around 1965 and never looked back.
Q: You’ve consistently taught the Introduction to Software Engineering course. How has the course evolved? What about the students?
A: Actually I taught the courses that kept getting split into separate courses and eventually yielded the current “Introduction to Software Engineering” course (CS101, CS190, CS132, CS32).
The course itself has evolved as the field has evolved. Today’s projects are larger and more complex, involving significantly more graphics and typically involving either networked communication (multiplayer games) or web-based front ends for data-oriented applications. The course has changed the underlying language from PL/1 and assembler to C to C++ to Java and now (coming back again) to Java and C and C++. We continually introduce new topics (most recently sockets, threads, agile development, and systems programming; before that design patterns, user interface design, and software architecture). We have also tried to make the course more hands-on, adding a variety of labs.
The students come in a bit more sophisticated, having learned more in their introductory courses than they used to, and quite enthusiastic about implementing a real application or their own design and choosing.
Q: You work in software visualization. Tell us about its importance.
A: Software visualization is only one of the several areas I work in and one that I haven’t really done much in over the past few years.
Different people have different opinions on the importance of software visualization. It is a tool that can help provide insights into the structure and behavior of software and is most useful where the software system or its behavior is complex enough so that the programmer needs to be presented with a high-level view of what is going on or how the program is actually structured. It has become an essential component of fields, such as reverse engineering where programmers are presented with large amounts of code they didn’t write and are supposed to understand what that code does so that they can either fix it or reimplement it. General software visualization has not caught on or become a part of today’s programming tools or environments and the reasons for this are still being debated in the field.
Our work in software visualization over the last decade has concentrated on using it to understand the dynamic behavior of software systems (i.e., providing insights into exactly what the program is doing). We have emphasized providing both detailed analysis of previous behavior, as well as attempting to provide insights into exactly what the program is doing as it is doing it. A lot of this work has concentrated on getting the right raw data and doing the right analyses so as to present the programmer with the most appropriate information in a timely fashion. Once we can achieve this, we have looked at developing appropriate visualizations for presenting the data so as to provide the programmer with the right overview, let the programmer zero in on detailed information, and highlight the information that the computer thinks will be most useful for the programmer.
Q: What do you think is the “next big thing” in software engineering?
A: Whatever I’m working on.
No really, I think that there will be more and more use of more and more sophisticated program analysis, machine learning, verification, and testing technologies to provide immediate feedback to the programmer as they both design and code their systems.
Q: Tell us about your most recent project.
A: Last summer I started doing performance analysis of long-running systems. We developed a system that gathers detailed information about CPU utilization, I/O behavior, the state of the heap, thread activity and synchronization, and memory allocations. It does all this within whatever overhead is specified by the programmer, be it ten percent, five percent, one percent, or even 0.1 percent. The system currently works on arbitrary Java applications, can be attached to an application dynamically, and features a web-based front end that uses Shriram’s FlapJax as well as a dynamic Java-based front end.
Q: Would you advise a gifted youngster to become a computer scientist today?
A: Sure, if that is what they were interested in. Both my sons are doing computer science and my daughter has recently become interested in the field as well. I haven’t really encouraged them, but I haven’t discouraged them either.
Q: Do you have any words of career advice for our recent graduates?
A: Keep current, look ahead to see what is coming, and have fun.
Q: Among all your past research, what is your favorite piece of work?
A: This would probably be the FIELD programming environment, both because it was so successful and because it was so simple and effective. It used a very simple generic message-based strategy to link together a variety of programming tools, effectively making them into a single environment. We used it for several years for teaching programming at Brown and the ideas (and in one case the code) were adapted as the basis for most of the Unix programming environments in the 90s.
Q: If you had enough extra time to study one additional area, what would it be?
A: Computer science. There is lots of it that I still don’t know that seems quite interesting. Outside of this, probably physics is most intriguing to me.