Computation counts: Python-based course sees enormous growth

Wednesday, May 9, 2018 - 5:30pm


Professor Eric Grimson, Chancellor for Academic Advancement, illustrates the concept of random sampling with a video featuring Professor John Guttag as a blindfolded archer. Photo: Lillie Paquette, School of Engineering

Meg Murphy | School of Engineering


When James Quigley applied to MIT, he didn’t need an algorithm to tell him getting in wasn’t a high-probability outcome. An Army veteran attending community college in California, he possessed a talent for math, a desire to do big things, and a sobering group of friends who insisted: “Mortals don’t get into MIT.” Quigley knew a dare when he heard one. As for probability measures, those he chose to ignore.

Now a second-year student at the Institute, Quigley was recently sitting in a lecture for 6.00 (Introduction to Computer Science and Programming Using Python). The topic of the day was using a computer simulation to estimate the value of an unknown quantity: the probability of winning at solitaire. He’s taking the class to learn to think like a computer scientist, he says. He speaks of Python, his first real computer programming language, with awe.

“When I first started Python, I basically felt like I was learning some unfathomable witchcraft. Many of the concepts still feel hard to grasp, and that feeling is what made me love it,” says Quigley. “People can use 1s and 0s to cure diseases, unite people, or destroy nations. Who wouldn’t be fascinated by something like that?”

It has been around since 2005, but over the last few semesters, 6.00, like the Course 6 major itself, has seen enormous growth in enrollment, with 424 students from 10 departments enrolled in 6.0001 this spring. (6.00 was recently split into two half-term subjects, 6.0001 and 6.0002.) About 60 percent are first- or second-year students, according to the class roster, with the remainder a mix of juniors, seniors, and graduate students. In spring 2016, 239 students enrolled, followed by 425 that fall. By the fall of 2017, it rose to 507. “It’s 2018, and even children are learning to code,” Quigley says.

“We teach computational thinking. It involves far more than coding. We start out with programming, which involves the creative application of math and critical thinking,” says Ana Bell, a lecturer in the Department of Electrical Engineering and Computer Science. She delivers the majority of the lectures in 6.0001. “Programming requires you think about math in a deeply logical manner while following the rules of language and being creative in your constructs,” she says. “With programming at the base, you can use computations and simulations to model and attempt to explain almost everything around us. That’s computer science.”

“Even if you never again write a program in your life,” says Quigley, “coding forces you to account for every possibility. It also teaches you that being wrong doesn’t mean you don’t progress. When I code, I’m wrong over and over until finally I’m right,” he adds.

A computing mindset

In one of MIT’s largest lecture halls, Quigley listens intently as computer scientist Eric Grimson, chancellor for academic advancement, describes Monte Carlo simulation, a method of estimating the value of an unknown quantity using principles of inferential statistics. In rapid succession, Grimson describes using randomized computation to solve problems that are not inherently random; employs coin flips and roulette wheels to explore quantifying variation in data; and illustrates the concept of random sampling with a staged video featuring MIT Professor John Guttag, the originator of 6.00, as a blindfolded archer.

Bell, who is sitting in the front row, smiles as she watches the video with the class. On screen, she helps Guttag simulate a computer programming method via a campy scene that involves fleeing students and arrows piercing books and furniture. It is all part of the fun for Bell, who has loved programming since building a computer at age 11. She also co-teaches 6.0002 (Introduction to Computational Thinking and Data Science), an additional class offered on the heels of the introductory course. The majority of 6.0001 students, such as Quigley, remain for the advanced section.

Bell enjoys guiding novices through the sometimes intimidating realm of computer science. She remembers how difficult it was, at first, to switch her own way of thinking and grasp tough concepts, such as object-oriented programming. “Sometimes students come to my office and they just don’t get it — but I know they can get it.” So, she’ll take a multipronged approach: draw something on the chalkboard, write the code, run the code with test cases, explain it in words. “Sometimes it takes them a really long time — but the switch occurs. They switch to a computational way of thinking; the students become the computer.”

First-year student Darya Guettler says the material resonates with most students because analyzing data is a core element in all engineering and science disciplines. “I have also found that I am able to look at seemingly random processes in the world as quantifiable now, so this class has given me a new perspective through which to view the world,” she says.

The appeal of mastering such thinking is clear to Michael Gritzbach, a visiting undergraduate student at Harvard University. His current focus is Chinese foreign policy and intensive Russian, but he nevertheless enrolled in 6.0001/2 at MIT. “Computer science is becoming more important for all aspects of our lives — in apps, games, or social media algorithms that influence society and politics,” says Gritzbach, who studies management, philosophy, and economics in Frankfurt.

According to Guttag, who has helped shepherd 6.00/6.0001/6.0002 from the beginning, 6.0001/2 is often difficult for students from non-computer science disciplines, but in a good way. “For a lot of students, it’s a struggle because it’s a very different way of thinking,” he says. “But at the end of the day, they’re glad they learned the material. And they see that computer science isn’t all about learning to build operating systems or compilers, or about designing clever data structures. This field is really about learning to use computation to do things that matter.”

People with no prior exposure to computer science or programming can also learn to think computationally by signing up for the two-course sequence for free on MITx. “We put a bunch of the course material on MITx so students have the ability to watch the videos and learn at their own pace,” says Bell. “It’s awesome to see the class being taught to the world.”

Quigley, like his classmates, recognizes the potential. “I want to do more than just coding; I want to build things,” he says, describing why he chose to major in electrical engineering and computer science. “I’ve heard it said that computer engineering is taking lightning, putting it in a box, and tricking it to think. Sounds like fun to me.”