In his State of the Union address this week, President Obama talked about the progress he's made on big issues, including education. And he laid out a new goal: expanding computer science in America's schools.
"In the coming years," the president said, "we should build on that progress, by providing pre-K for all, offering every student the hands-on computer science and math classes that make them job-ready on day one."
But what, exactly, would offering every student hands-on computer science look like?
Dan Garcia spends part of each day trying to answer that question. He's a computer science professor at the University of California, Berkeley, and he's working out ways to teach computer science to everyone.
BJC was originally an undergraduate computer science course, one Garcia co-developed to teach the subject to non-majors. In the last five years, he's given summer courses to more than 200 high school teachers across the country, helping them learn the same material.
He's also working with New York City public schools to create an advanced placement course for high school students there.
Garcia thinks a key is for teachers to make their courses joyful.
"Picking a project, getting engaged, getting really deep into the weeds of it, feeling they owned it, then having trouble ... and finally getting over that hump and getting it to just sing." Garcia says that can be the most most exciting time for students: "When they finally finish their first project and they want to shout to the roof tops, 'This is mine!' "
But students can't shout from the rooftops until more schools start offering computer science.
Fewer than 10 percent of U.S. high schools cover the subject, and those that do don't always teach coding. Some only teach the basics of Microsoft Office, or search engine use, yet still call it "computer science."
"We have a crisis in the country that we don't have enough computer science teachers," Garcia says. "Well trained, engaging computer science teachers. We just need more bodies."
But it's hard to attract those bodies when the tech sector is so hot. Both big tech companies and start-ups are struggling to hire young engineers. And those private sector employers can pay almost three times more than public schools.
Also, computer science doesn't have a natural spot in the school-day schedule. It's vying for a spot in a crowded curriculum.
Recently, I asked Sal Khan, the founder and CEO of Khan Academy, about this.
He says most educators weren't exposed to computer science classes when they were young, and that's part of the challenge. But, he adds, "there's also an opportunity in that there isn't anything to replace. It's a green field, it's a new area, and there's all sorts of incredible tools for people to learn. And when I talk about people, I'm not just talking about students — I'm talking about people of all ages. I encourage parents, teachers, people of all walks of life to start dabbling a little bit."
Professor Garcia says one key mistake he sees a lot is teachers giving the same assignment to all: " 'Hey, let's all do Tic-Tac-Toe, let's all do one project.' That's never going to engage everybody."
Instead, he counsels, let students search out and find a project that's based on their own interests. "Maybe it's working with a local non-profit and making an app for them. Maybe it's making a game. Whatever it is, it's important to that student."
Dan Garcia says there's another important issue: Once courses are created, educators must make sure they're reaching a diverse audience. Women and minorities are grossly under-represented, not just in tech fields, but also in computer science classes.
Teachers should shake the trees and reach out to more kinds of students, not just the student who's doing well in math. And, he says, connect computer science to bigger, more controversial topics, Garcia says, because coding and data are connected to issues of power.
With the persistent digital divide, he says, educators must ask, "What does that mean for equity? What does that mean for fairness? Privacy issues? Hopefully the curriculum brings equity as part of it," he says.
UC Berkeley student Michael Ball didn't arrive on campus intending to be a computer science major. But after taking Garcia's BJC class, Ball was hooked. He's now a graduate student and teaching assistant heading for a career he hopes will stay connected to teaching.
One of the biggest challenges, Ball says, is that computer languages can be tricky, especially when just starting out.
"Teachers need to be motivating, and open to the idea that CS doesn't come easy for a lot of students," Ball explains. "Even a very minor error can be the difference between code working and completely failing. It's important for teachers to be able to work through this process with students, so that they realize what's normal when learning and how to persevere through errors."
"I think we, as educators, need to go seek out the students we want," Ball says. "Go find them during lunch, or breaks. Ask them to join, and if they don't want to, learn their hesitations."
Despite all these challenges, there is some good news. Seven of the nation's largest school districts — including San Francisco, Chicago and New York City — have pledged to radically expand access to Computer Science classes.
In addition, Microsoft is expanding it's successful TEALS program which pairs computer science professionals in the tech industry with classroom educators to team-teach and support CS in high school classes throughout the country.