Professor Daniel Jackson’s research aims to change the way people think about designing and building software, and make software more effective and more pleasant to use. “We in computer science tend to concentrate on making things go faster or process more data or do more dramatic things,” he says. “We spend less time worrying about software that just works, and that is more pleasant to use —more understandable, safer, and more robust.”
Prof. Jackson, a Professor of Computer Science in the Department of Electrical Engineering and Computer Science and Associate Director of CSAIL, leads projects that concentrate on how software and applications are designed and structured, especially at a fundamental level.
“If you look at work on the engineering of code, we have 50 years of research on different kinds of notions on modules, objects, data types, processors, and all this kind of stuff. But if you think about how you structure the functionality of an application, what the user experiences, we don’t have structures or patterns or idioms or principles for that. So it seems to me like a huge and exciting opportunity,” he says.
One area of research is exploring a theory around design concepts. “Concepts are sort of reusable pieces of functionality that give you a way to think about how to structure software design,” explains Prof. Jackson. In addition to analyzing the designs of concepts in apps from Apple, Dropbox, Google, Microsoft, etc., and extracting lessons about what makes them work (and sometimes not work), Prof. Jackson has worked with students to explore redesigns of powerful but hard-to-use systems, such as the version control system Git. Currently, he’s working with a student rethinking how exposure controls work in cameras.
When it comes to design concepts, he hopes that this work will help companies think differently about how they do design, and to make their design efforts more focused and successful. “One of the simple ideas behind concepts is that they are essentially reusable patterns. And in industry, there’s a lot of reinventing the wheel. What if we could capture all the best design ideas as reusable patterns? We’ve done this for code, but it seems harder to do it for application functionality. That’s what concepts are about.”
As an example, he discusses social media and the concept of upvoting. For instance, “liking” a post is a form of upvoting, which Prof. Jackson considers a concept around a collection of behaviors. He describes the behavior associated with upvoting as, “If you click it, that somehow makes it more prominent, which helps give you popularity ratings and so on. But the design of upvoting is actually pretty intricate.”
According to Prof. Jackson, upvoting design is intricate because of all the considerations that have to go into it. “You really need to think about, for example, how are we going to stop the same person from upvoting multiple times?” Storing user IDs and records of all the people who upvoted a particular post works well but eventually uses too much storage, so other strategies are needed such as freezing upvotes after a certain amount of time has passed. “These are not huge insights,” says Prof. Jackson, “but these are things that people discover that are like nuggets of reusable design knowledge.” Ideally, he would like to create a handbook that would address these types of issues and best design practices for particular topics so that design reuse would become more streamlined and common among developers.
In another project led by his graduate student Geoffrey Litt, Prof. Jackson is exploring new paradigms for end-user programming. Wildcard is a special kind of customizable browser extension that allow users to customize websites with their own additions and modifications. For example, an extension to Airbnb allows you to order listings by price, to add your own annotations, or to augment listings with walkability ratings of their neighborhoods—all features not supported by the app itself.
On the safety side, Prof. Jackson is working on the architecture of self-driving cars. He says, “We’re particularly interested in the question of how they’re going to be safe enough — not only how they’re going to be made safe, but how are people going to be convinced that they’re safe.”
Self-driving cars make extensive use of machine-learning for vision and perception, but the problem with machine learning is that it is “basically an advanced form of guessing,” says Jackson. “The problem is that no one wants to entrust their life to something making guesses, however good the guesses are.”
To solve this problem, he and his research team have created a new architecture where the machine-learning component must convince a monitor that what it’s doing is safe and reasonable. The controller will justify its reasoning about the decisions it makes. For example, if the machine-learning component has decided where it thinks a lane is on the road, it says, “Here are the lane lines. Here’s the photo I got the lane lines from. I believe these are lane lines because they’re 12 feet apart, they’re parallel, and they’re on the ground.” The monitor then checks to see if this makes sense. “The idea is that the controller presents the certificate to the monitor, and if that certificate is valid, it can’t be forged, so the monitor can’t, for example, invent lidar readings,” says Prof. Jackson.
The certified control project is currently funded by Toyota, and Prof. Jackson is optimistic about the technology being applied to industry. “I think it has a fairly good chance of making its way into cars. It addresses a critical need in a practical way.”