Abstract: Engineers make things work reliably and efficiently; designers make them useful. In the development of buildings, for example, the civil engineer is concerned about the internal structural that prevents the building from falling down; the designer (i.e. the architect) is concerned about the aspects of the building (light, space, etc.) experienced by its users.
We have a pretty good theory of software engineering that guides the internal structure of software systems, using notions such as decoupling, information hiding, representation independence, redundancy, and so on. But we don’t have much of a theory to guide the design of software: the aspects that determine the user’s experience.
In this talk, I’ll present the elements of an evolving theory of software design based on the identification of concepts and purposes, and I’ll present how some straightforward design rules that can help improve the design of a software system without resorting to trial and error (e.g., by brainstorming and user testing). I’ll give examples from a variety of well-known applications.
I’ll also tell you about a new project in which we’re developing a mechanism for synthesizing applications from concepts drawn from a library of clichés.
Bio: Daniel Jackson is Professor of Computer Science at MIT, a MacVicar teaching fellow, and an Associate Director of the Computer Science and Artificial Intelligence Laboratory, where he leads the Software Design Group. He is the lead designer of the Alloy modelling language, and author of "Software Abstractions: Logic, Language, and Analysis" (MIT Press; second ed. 2012). He was chair of the National Academies' study "Software for Dependable Systems: Sufficient Evidence?" (2007). His research currently focuses on a new approach to software design, on new programming paradigms, and on cybersecurity. He was the recipient, with Mandana Vaziri, of the 2016 ACM SIGSOFT Impact Award for a research paper with long term impact.