To design things for humans, we need a science of human-centered design. The fields of ergonomics and engineering psychology apply the sciences of human anatomy and cognition to the design of objects like clothing, furniture, and vehicles. We consider these practices to be scientific
because a designer can make a principled prediction about how a person will use an object before testing with real people. We have pretty good models for questions like:
How much information can someone hold in their head before they start forgetting things?
How hard is it for someone to compare the relative size of two visual objects?
How often should someone revisit information if they want to remember it long-term?
The problem is that we don't have nearly as good models for questions like:
What makes one programming language more usable than another? Do static types really matter for productivity?
How should someone most effectively learn a complex software system like an image editor or CAD tool?
Which kinds of interactive components would actually improve technical writing, and which are distractions?
So what's the difference between these two kinds of questions? The first kind has to do with low-level cognition: working memory, basic perception, and rote long-term memory. Cognitive psychologists, vision scientists, and neuroscientists have built a robust (and replicable!) foundation of scientific knowledge regarding these elements of low-level cognition.
But the second kind of question has to do with high-level cognition: expert problem-solving, longitudinal learning, and tool-assisted comprehension. We know comparatively little about these topics. These are complex phenomena that emerge over long time scales and are heavily contingent on an individual's background. Researching them often requires expertise in both psychology and the domain under study. (Unfortunately, irresponsible writers also spread rampant misinformation on these subjects.) People who design complex software systems have no science to guide their most crucial decisions. They rely on intuition and trial-and-error (or more politely, iterative design
).
The goal of the Cognitive Engineering Lab is to research how system designers can use principles of cognition to improve their software. We primarily do this by example — we build systems that actually help people in practice with difficult cognitive tasks, and we write papers that articulate the cognitive elements of the system design process. (The system itself is a theory nexus, too!) This practice is reflected in the term cognitive engineering, which we borrow from Don Norman.
If you are interested in joining CEL, we are hiring PhD students! Contact Will for more information.
P.S. Academics love to define things in terms of subfields, so you might wonder: is CEL doing human-computer interaction (HCI) research? Or programming languages (PL) research? Or maybe software engineering (SE) research, or computing education research (CER)? The answer is: yes! Our work crosses all of these disciplines, and we sometimes publish in all of these venues. Our home base
is PL, so many of our papers have the flavor of importing HCI/SE/CER methods into PL, but sometimes we also bring PL to HCI/SE/CER.