When a couple of New York City high school teachers partnered with MongoDB to teach computer science, did they succeed? Their curriculum was untested, and they were teaching in difficult districts where most students are from poor and minority families. I talked with these two teachers, Jeremy Mellema and Timothy Chen, back in September, when they had completed a summer fellowship at MongoDB and had just started teaching their curriculum; at the end of the academic year this spring, I visited Jeremy and Tim again to find out the result.
Their successes were sparse and partial. They discovered that their students' poor reading skills were a barrier to learning to code, and that teaching new coders how to solve problems is, itself, an unsolved problem. With a coarse unit of iteration—a school semester—it is painfully slow to experiment and find teaching methods that work. But even partial wins make a difference for individual kids, and the support of professional engineers at companies like MongoDB can be a powerful accelerant.
What engages students
Jeremy's main struggle was to get his students excited about code. He was assigned to teach a computer science class at Bronx Compass High School in the fall, using the curriculum he wrote during his fellowship at MongoDB last summer. In the beginning he spent too much time lecturing. “It felt weird,” he said. “It should be more like, ‘Let’s get down and dirty,’ and not, ‘Let’s have me talk to you.’” Even when his students did get their hands on computers, the first exercises were simply retyping Python scripts from a textbook. The payoff, watching a script run without throwing an exception, was hardly satisfying to them.
Things started to click when he introduced Python turtle graphics, which gave the class more obvious evidence of their accomplishments. It also allowed Jeremy better opportunities to motivate and engage his students directly. “Some days I would challenge them to see who could make the craziest drawing,” Jeremy says. He would tell his students, “That’s so cool. I only made a star. You definitely beat me today.”
Jeremy teaches both history and computer science, and he finds that some of his lowest-performing history students are his best CS students. “It’s satisfying to see them in their element,” he says. In Jeremy's view a computer science class can touch a student's intellect just as deeply as history. “People are multifaceted. You’re not only who you are when you’re in my history class.”
Jeremy's computer science class was cancelled this spring; the students at Bronx Compass High School are behind on history credits and there are only three history teachers on staff. For now, computer science is merely an elective, so Jeremy is back teaching history full-time. “I really miss teaching CS,” he says.
If he resumes the course, Jeremy thinks it must be livelier. He is reconsidering his use of the videos from How To Think Like a Computer Scientist, which he studied last summer on the recommendation of his mentor Shannon Bradshaw, MongoDB’s vice president of education. The content helped Jeremy train to teach CS, but when he showed the videos to his kids they were bored. Jeremy hopes to make new videos that will draw them in. His students from the fall semester say he should get their advice. Otherwise, they warned, “you might do something that you think is cool but it’s actually super corny.”
A head start
Although there is no computer science elective this semester, some students are pursuing the topic in other ways. A young woman from his class in the fall, Tatyana Camacho, now interns for the high school’s IT department. I had quoted her in my previous article, and Jeremy tells me she loved it. She commanded him to show her father in the next parent-teacher conference: “You need to show my dad that I’m one of the advanced students.”
Jeremy still runs the afternoon Computer Club. I visited the club to meet a student, Daniel Rodriguez, who was tinkering with an Arduino and a circuit board that the school provided. “I don't have the ability to get this equipment otherwise, in my predicament,” says Daniel. He starts his Arduino projects by copying examples. The wiring is easier than the coding for him, he told me, "especially because I'm not the best speller in the world." Once he has the example working he modifies it to his own taste. Most recently, he wanted to show a message but, with only LEDs, he can’t display much. He researched Morse Code and made a light flash the code for “HELLO”, like any programmer demonstrating a system for the first time.
“Most people think that once you plug something in, that’s it, it works,” says Daniel. “But I’m the person that makes the circuit run. I tell people, ‘I made it do that.’ And seeing them fascinated by what I did, it makes me, in turn, fascinated by what I'm doing.”
Daniel has to return the Arduino at the end of the year. Next year he’ll go to a trade school for electricians. Working with the Arduino will give him an advantage, he hopes, and it seems plausible to me. As he finishes school and starts work as an electrician the world will be changing around him: smart appliances and programmable components will be everywhere. An electrician who loves to code will have a big head start.
Making anything they want
Timothy Chen teaches in Hell’s Kitchen, at Urban Assembly Gateway School for Technology. I visited his class in May to see how his students had progressed since I last saw them in September. They were involved in a multi-week project called the AP Create Task, part of a national Advanced Placement exam. “They are allowed to make literally anything they want, in any language,” says Tim. Students submit their code and a one-minute video of the program in action, and they may describe their project either in writing or in audio narration. I was surprised by how 21st Century the test is, and how accommodating it could be to students with a deficit in reading and writing. It must be remarkably difficult, however, to score fairly.
The Create Task is many students’ first time scoping and integrating a sizable project, and there were flameouts. One young man tried to make a maze game drawn with ASCII characters; it proved too ambitious and he ran out of time. Tim isn’t supposed to help students define the scope of their projects, but if they announce they’re going to tackle something difficult he will push them to list all the components. In the best case, they realize they don’t know how to do most of the project and choose something simpler.
One of Tim’s students, Jahseem Maxwell, was building a Go Fish card game in Python, and she was having trouble integrating the pieces. “It has to be a certain order and it's hard to make that order when you don't know, really, what you’re doing. I’m struggling, putting it all together.”
Another student, Cecilia Gonzalez, was writing a Choose Your Own Adventure game. She says the AP Create Task encourages students to work in pairs. “We work sort of together but not exactly.” Each must create at least one significant part of the program independently. Cecilia’s game is based on a monster of urban legend called The Rake, which comes closer when you think about it. The game begins by asking questions such as the player’s name and height. She told me the player’s answers will determine “some things that are going to happen,” but she didn’t give away any spoilers.
When Tim began teaching the class in September, he hadn’t written the ending yet, either. His greatest fear was his students would learn the curriculum faster than he could write it. By May it was clear that wasn’t a problem. “Some of the students can’t read very well, and that was a big barrier because all the things I made were text,” he says. “Everything just took longer than expected.”
How do you teach problem solving? This is Tim’s great unanswered question from the year. Perhaps if high school computer science were taught like math, as a series of small problems with only one right answer each, then how to solve those problems wouldn't be such a mystery. But high school CS is taught like art class. Tim’s students invent new projects and somehow solve the unpredictable problems that arise in them.
Tim speculates that he would learn problem solving himself by watching an experienced programmer solve a new problem, hit roadblocks, and overcome them. Indeed, that is how I have taught problem solving to MongoDB interns. Together, we attack problems without knowing the answers beforehand. It requires an entire summer of one-on-one collaboration. “I don't think that model works very with the kids,” says Tim, “especially if they are not very good with sitting still for an extended period. I'm not sure how to reach them.”
Falling in love
Tim, like Jeremy, wants to make more multimedia to reach students despite their poor reading skills. “I want to rethink how it should be done before I start this time. I kind of jumped into it too quickly.” Tim’s main goal is to give kids the chance to fall in love with programming and continue on their own. Many other goals are still out of reach: students at his school score low on the AP test, and few of them are likely to get a college degree in CS or be professional coders. Still, Tim hopes that a more varied course, with audio and video, could bring students farther. “The big hurdle for everyone is teaching problem solving. If I can get that, everything else is easy. I'm still trying to figure out how to do that.”