The main focus of my recent research has been computer science education and the role computer science can play in defining and advancing its own education research. Learning computational principles and learning to code is hard, and teaching these subjects is even harder. For most computer science topics, we know very little about how different learners’ best learn; how to effectively teach the material to audiences with different abilities, backgrounds, and goals; and how to reliably assess learning.
Computing Research News
My research revolves around tracking and understanding users’ emotional states and leveraging that information as additional context for the design of emotionally sentient systems. Some of the systems we have built have been designed for a user’s own personal reflection. Our first application, AffectAura, provided users with their own behavior patterns over time, such as what they were doing, where they were, who they were with and how they felt. This information could be used to make personal decisions about behavior change—if certain activities usually result in your feeling good or bad, perhaps you want to increase or decrease those behaviors.
Since I started graduate school in 1997, I have considered myself a member of the programming languages research community — and I continue to attend and publish in the annual conferences of this vibrant computing subfield. But over the last 5-10 years, I have also found myself increasingly passionate about opportunities for computing researchers to focus on ways to influence computing education beyond, for those of us who are academics, our own classrooms and independent studies. Let me share some of the projects I have enjoyed (seriously!) and others I wish I had more time to pursue.
My research is concerned with understanding and facilitating the lifecycle of cognitive software, which is substantially different than that of conventional software. This difference has profound implications for the methodology and tools required to build such software. Cognitive software includes at least one “cognitive” or “intelligent” component, such as a component implemented using machine learning, neural networks, or rules. Often multiple cognitive components will be involved in a cognitive application or service, but even just one is enough to impart special and challenging complications.