Empowering others to learn
"When you have a population of people in computing that doesn't represent the country or world as a whole, you're not going to see all of the technologies that could exist. It's in the best interest of the world's perspective to have increased diversity in computing."
— Caitlin Kelleher
Computer skills have been taught in schools since the 1980s, but programming is not generally integrated into the K-12 curriculum due to lack of funding, resources or trained teachers.
Caitlin Kelleher, the Hugo F. & Ina Champ Urbauer Career Development Associate Professor in the Department of Computer Science & Engineering, focuses on how programming environments can support kids ages 10-17 to most effectively learn computer programming — not necessarily to pursue programming as a career, but to develop problem-solving skills, express creativity and understand its relevance to nearly everything.
Kelleher first began her focus on computer programming nearly 15 years ago as a doctoral student at Carnegie Mellon University under the mentorship of the late Randy Pausch, an expert in human-computer interaction and author of "The Last Lecture." Since then, the topic has become a national priority, with President Barack Obama launching the Computer Science for All Initiative Jan. 30, which will pump $4 million in funding to states to allow them and school districts to expand Science, Technology, Engineering and Mathematics (STEM) offerings to ensure all students have the chance to participate, including girls and students from backgrounds underrepresented in STEM fields.
That is a top priority of Kelleher's, as well.
"In thinking about how to get a more diverse sampling of people into computer science, the kinds of technologies we create are a natural reflection of our own life experience," she says.
"When you have a population of people in computing that doesn't represent the country or world as a whole, you're not going to see all of the technologies that could exist. It's in the best interest of the world's perspective to have increased diversity in computing," Kelleher says.
In his Jan. 30 weekly address, Obama called for all students across the country to learn computer science in school, saying it is a "new basic" skill necessary for economic opportunity.
"Now we have to make sure all our kids are equipped for the jobs of the future — which means not just being able to work with computers, but developing the analytical and coding skills to power our innovation economy," Obama said. "And workers of all kinds need to be able to figure out how to break a big problem into smaller pieces and identify the right steps to solve it."
And that is exactly what Kelleher is working to achieve through Looking Glass (lookingglass.wustl.edu), a graphics-based system she designed to support kids in middle and high school as they learn to program on their own.
"I've always been drawn to education as a problem space because it seems like it is one of the things that you can give people that can really have a dramatic impact on their lives," Kelleher says.
Looking Glass is based on a programming environment that Kelleher created at Carnegie Mellon called Storytelling Alice, initially designed to teach college students how to program. When she came to the School of Engineering & Applied Science at Washington University in 2007, she launched Looking Glass, a one-of-a-kind platform that allows users to learn to program by creating their own personalized animated stories with fun characters, such as aliens, trolls or animals, that can be programmed to perform different actions, like doing a backflip or spinning on a sheet of ice, or having a conversation with each other. These custom stories, called worlds, use simple drag-and-drop actions to create the activity or conversation in the world, which can be played back at any time. In addition, users can share snippets of their actions with other users and remix a variety of actions into their own stories.
Using Looking Glass, Kelleher and her team are studying how programming environments can support kids learning to program on their own through several avenues: playing and exploring, through puzzles to support different needs and styles of independent learners, and outreach and mentoring with professional programmers.
The play-and-explore aspect allows users to see a function in a story that captures their attention and ask how it works; for example, "I want to know what happens when the UFO light beam appears." That creates an opportunity for the students to learn the steps needed to get the desired result.
For the puzzles, the team provides users with the final animation and the pieces needed to build it, then helps them determine how to put the pieces together to re-create the animation.
"The puzzles try to build a framework for learning how to use a variety of programming constructs by considering models of human learning in the design of the system, such that kids can focus purely on how different programming elements combine to achieve different goals," she says.
Now, with funding from the National Science Foundation, Kelleher and the team are expanding on that work by predicting how well a user will do on a new puzzle based on his or her past history.
"We're growing that work in a way that's inspired by cognitive load theory, which argues that learning is limited by short-term memory capacity, so we have to be careful about how many things we're asking someone to do simultaneously," she says. "We're looking at what kinds of patterns someone uses to solve the puzzle, and what does that say about the degree to which they understand the concepts within the puzzle, or the degree to which they are still building knowledge, or that they've exhausted other options and happened to stumble on the correct solution."
Kelleher and her team are also looking at a way to connect the knowledge of professional programmers with kids in the community who don't have access to programming education through mentoring. The mentors look through the code and make suggestions to users, as well as write rules that run static code analysis over all of the worlds that users have created to identify other programs that would benefit from the same idea.
"Rather than just having that person have influence over one world that they worked on and one kid who authored that world, the idea gets broadcast to a much wider audience of people," she says.
Kelleher says computer programming is relevant to every field, which is why it is important for everyone to learn it.
"You can take on whatever problem you think is most compelling in the world and think about ways computing and technology can help address that," she says.