Most people have little control over the technological environment that we all inhabit. For example, we read with browsers that other people made, talk on phones that other people made, and drive in cars that other people made. We even purchase products created by robots... that other people made.

Computer programming provides a modicum of control over this technological environment. Programming enables us to compute and communicate more quickly than we can with brains alone... and, with hardware, to monitor and change the physical world more easily than we can with bodies alone.

Helping people to gain more control over their technological environment is the purpose of my career. This aim includes enabling people to create software for their own use (end-user programming), which already is happening in spreadsheet and scripting tools. My aim also includes turning novice programmers (who are students now) into leaders who will someday solve world problems.

Achieving this aim requires giving people the means, motive and opportunity to program.

Giving people the means to program

Programming involves using human expertise to combine computational resources into new software. End-user and novice programmers often lack this expertise, or they don't have time to apply what expertise they do have. Moreover, they sometimes don't have adequate APIs, code and other computational resources that they can combine, or else they don't have time to find and reuse those resources. In response, my research group is investigating how to help people learn to program as well as to identify and reuse high-quality code when creating programs.

Giving people the motive to program

Programming takes time and effort. No matter what means exist for programming, people will never do it unless they have a reason. In my teaching, I am exploring how to motivate novice programmers (students) to take an active hand in shaping the computational world they inhabit (for fun and profit!) These efforts have led to a groundswell of innovative software engineering by our students. But the challenge of motivating novice programmers is by no means solved -- and the challenge of motivating end-user programming still remains.

Giving people the opportunity to program

Programming must co-exist with the real world to take place. By this, I mean that universities can create magnificent ideas, but people will never have an opportunity to apply those ideas until universities transfer those ideas into the outside world. Therefore, I pursue industrial partnerships that can aid in commercializing the results of my research. As I gain more experience with helping students to create startups, launching university spinoffs might also become a viable way to transfer results out of academia and into the world.