Introduction to Computer Science for Social Good: Reflections from CS50

--

Image from Class Central

When you think of Harvard, this is the class you imagine. A professor paces across the grand stage of Sanders Theatre. Hundreds of students fill the seats, from the front row to the edges of the balcony. Professional camera crews record the lecture from different angles and pass microphones to students asking questions. For anyone who takes CS50, from Harvard to Yale to the world wide web, CS50 is their first impression of computer science culture. It’s known not only for being That Introductory Course, but also for its start-up-y, professional brand: the CS50 rubber ducks and T-shirts, the edX course taken by millions of people online, and the slogan “This is CS50” adorning each lecture video and piece of merch.

When I took it in my freshman fall, it was an exciting firehose of new experiences, my first time building a webapp and staying up all night for a hackathon. It’s fast-moving and wide-ranging, covering the basics of C up to HTML and Flask in just 12 weeks, because it’s meant to give students the tools to explore their own interests in computer science.

This makes it the ideal place for social impact learning to take place. Wouldn’t it be wonderful, if everyone learning computer science always thought in the back of their minds, “How can I use this to solve problems I see around me?” and “How do I make sure what I make doesn’t cause harm?” Since most people in CS50 have never taken a CS class before, and it’s one of the largest classes on campus, what better place to educate people at the beginning of their CS journey? So recently, Harvard Computer Society Tech for Social Good partnered with CS50, to help identify students with an interest in creating social good, and give them that exposure.

Here’s what I did this past semester.

At the end of CS50, there is an open-ended final project. It’s intentionally flexible, so that you can build a website, a mobile app, a game, an extension, or really anything you’re interested in (which is important, because coding is a tool you use to build whatever you want). When I was a CS50 teaching fellow, my students had some amazing projects, including an engineering project involving facial recognition software to make a chair turn away from anyone who looked at it, but if you don’t have an idea, the project loses a bit of its excitement — like my own final project, a somewhat disappointing study-space-searching app that wasn’t really different from the basic website we had built in the previous problem set.

Many other students struggle to come up with ideas they’re passionate about in such a short period of time. But many of these same students came into college with prior interest or experience in working to improve their communities, through activism or research or volunteering. They just might not have used computer science to do it. So to bridge that gap, I ran an ideation workshop, where students could come in with some general problem they wanted to solve, and after guided brainstorming and discussion, leave with a project idea.

Workshop structure

If you wanted to really come up with a great tech solution for a social impact cause area, you would need time. You’d want to do several iterations of thorough research and brainstorming on your problem, conduct user interviews, evaluate existing solutions, prototype it and test it, think seriously about any possible repercussions, and only when you were confident it could work, only then, would you build it. Ideally, you’d have lots of patience, persistence, and passion.

The typical CS50 student in the last four weeks of the class has these three things: a rough understanding of web development, a final project assignment, and an imminent deadline. They’re dealing with their other final projects and assignments, and fundamentally want to get an idea of something they can build in a couple weeks and get a good grade. If it can be meaningful and fun, all the better.

I kept this in mind while planning the workshop, and to keep it within an hour, ended up shortening the brainstorming process to these barebones steps:

  1. Initial problem research. Quantify the problem and figure out who is affected by it, directly or indirectly.
  2. Choose a more specific problem within the initial area. Narrow it down by target population, or location, or sector.
  3. Brainstorm as many possible solutions as you can think of, disregarding time, money, politics, or any limitations. Think about the people who are affected and every possible way you can help them.
  4. From these, identify a technological solution.
  5. Identify features this solution. Which ones do we already know how to build from CS50, and which ones can we fairly easily learn to build?
  6. Write down goals and bounds for your project. What does it hope to achieve, and what should it not achieve?

It’s essentially a very condensed version of the double diamond design process, with the additional steps at the end to help guide the code planning process, since people relatively new to coding may not immediately think of what is easy to code and what is not. My previous iterations of this workshop included the jobs-to-be-done framework and investigating existing solutions, as well as a little bit more time working on problem brainstorming, but after I ran a test workshop with some T4SG members, I learned these were not as helpful, and overcomplicated the already short workshop.

During the actual workshop, I explained each of these steps for a few minutes, ran through an example, then left time for brainstorming, with optional breakout rooms. I think the small group discussions were the most helpful, where students were able to articulate their ideas and hear inspiration from others in the room. It also allowed them to ask more specific questions about which of their ideas could be practically implemented into a class project, and how much time they could expect certain features to take.

Takeaways

Firstly, the workshop was pretty successful in my book. Since CS50 Spring is a much smaller class, I almost hadn’t expected anyone to come, and since we’re still remote, I had expected all cameras off and muted. So when nine people (roughly 10% of the CS50 course size in spring) showed up with great enthusiasm and exciting ideas, I was thrilled. We received good feedback on the workshop content, and a couple of students even formed a team together. Here are my concluding thoughts:

  1. Spaces like this, for people to ideate about things they’re passionate about, are great especially because they provide the opportunity to meet people with the same social impact interests. The fact that a team formed out of this initial workshop indicates to me that we might be able to provide a team-finding platform in the future as well, and start building a community of tech for social good within CS50.
  2. A disproportionately large number of people from graduate schools came, and had ideas for final projects that were based on their prior experience. There isn’t usually much interaction between grad students and undergraduates in CS50, and I wonder if these conversations and connections might be really helpful for college students to learn from other people’s work experiences, through how it shapes the way they think about technology and how to use it.
  3. There’s definitely room for improvement. I’d love to provide more time for discussion, since those felt like the most valuable parts of the workshop, and more resources for relatively accessible features to build that are not part of the CS50 finance pset. We could even cut the goals and bounds step from the last part of the workshop, since we were rushing so much by the time we got to it that I’m not sure anyone internalized any of it. It’s also possible that entirely different workshop formats might work better for an in person workshop, which is a consideration to make for the fall and future semesters.
  4. The CS50 course heads were really excited about this initiative, and graciously provided support whenever we asked. There is in general a shift to using tech for good in the computer science community — CS50 had already added an ethics module before this, too — and I expect there’s space for T4SG guidance in other CS core curriculum, at Harvard and in other schools.

Overall? I’m feeling encouraged. I think that in every technical community there are people who prioritize using it for good, and this growing network of tech-for-social-gooders is, in my experience, supporting each other all the time. Even in a large and well-established course at Harvard, a group of students like T4SG is able bring in something new, to provide some support for introductory students, and maybe help illuminate their path forward. “This is CS50,” I’m trying to say, “And here’s what you can do with it.”

April Chen is a joint Computer Science and Government concentrator at Harvard. As the Director of Growth for Tech for Social Good, she works on integrating social impact into CS curriculum with classes like CS50, and connecting students to social impact research opportunities.

--

--

Harvard Computer Society Tech for Social Good

HCS Tech for Social Good is the hub of social impact tech for Harvard undergrads. See more at socialgood.hcs.harvard.edu