Saturday, 31 January 2015

Increasing diversity in computer science

I recently organized a panel of MIT computer science researchers to answer questions about computer science to an audience of high-schoolers ( A lot of interesting discussions came out of it, and a lot to digest for panelists and audience alike.

One of the things that did stick out to me was how many of the panelists did not like their first formal training in computer science (in school, in college). I can't say I was terribly surprised, and I'd be interested to see such a survey done of the broader CS community (e.g. at a research institution) to poll about initial experiences and attitudes.

Here is where I think the problem lies: computer science courses tend to cater to a very narrow audience - maybe the type of audience that likes computer/video games, or the type of audience that likes tech gadgets, etc. Not that you can avoid it: you have to start somewhere - with some (salient) example or application or first program. But once you've settled on something, you might get one group of individuals hooked, but you'll also automatically repel a lot of other people (who are not interested in the application area you've chosen). If that was the only/first opportunity those people had to learn computer science, they might decide they don't like it and never pick it up again - which would be an enormous shame!

What's the solution? Introducing more variety and choice into the computer science curriculum - tailoring it to different tastes (and personalities!). Cater it to people who might like biology or psychology or architecture or design, and show them that computer science can provide them with a toolset, a simulation/virtual environment to test their ideas, a cool exploratory possibility. I believe this is the way forward to increasing the diversity of people in the field of computer science.

In practice, having a lot of variety in a computer science curriculum may not be possible (consider a school with a single programming course and a single teacher to teach it)... in this case, I think online education with its possibilities for individual customization, can come to the rescue... more about this later.


  1. Any idea how initiatives like scratch or different courses like khan academy compare to the traditional (classroom) introductions for students?

  2. I think for children to use those websites on their own, there is quite a barrier to entry (they need some sort of introduction to those websites and how to use them more effectively). But I do think that more traditional introductions can integrate such initiatives into the course content in order to combine the benefits of traditional teaching (mentorship, one-on-one support, feedback, social setting) with the benefits of online customization (pick the project YOU want to work on). Thus, for such initiatives to really be successful, they have to come out of the traditional setting IMO. So I'm not sure it's fair to compare them, and it may be more appropriate to think deeper about integration.

  3. It is difficult to avoid some kind of programming if you're going to be a scientist of any kind. I won't be surprised if several semesters of "CS" will be mandatory for all STEM students much like calculus/math is mandatory for lots of engineering students today.

    These kinds or courses have to be diverse to attract a diverse crowd and give people a taste for computer science.

    However, there at some kids who really think about physics simulations all day long and they need a rigorous CS education when they start college. These "CS" majors would get a better education if they were exposed to more diverse team projects, but it is important to not let diversity triumph over rigor when that is what those select few students really need.

    TLDR; CS has to soften to attract a new breed of students, CS has to continue being rough to be a hard science

  4. By diversity I do not mean less programming... by diversity I mean programming different types of things. Programming a video game may not be interesting to all - maybe some people would be much more excited if they could program a brain simulation or a physics simulation. You maintain all the rigor, but just allow flexibility in the application areas.

    And in fact, I would argue for making some flavor of CS mandatory not just for STEM, but for instance, for humanities and social sciences as well -- to teach people computational thinking as a language of thought. For these areas, letting them program something more relevant to their respective fields will allow them to maintain interest.

  5. Don't final projects of most advanced undergrad CS courses let students pick their topic?

    Programming a brain simulation for undergrads? Sounds like fun for some and sounds very researchy, so it might bit be easy I assign grades to those projects.

    It is also important that CS teaches the basics to become a solid software engineer. And it has to weed out the non-intense students so a CS degree maintains its superiority to the "I-teach-myself-the-codez" kind of job applicant.

    I guess what I'm saying is that I agree that we should do things to keep people interested in computational thinking, but CS needs to be a degree you have fight for.

  6. It's great if/when they do! Though that could also be a possibility earlier on too...

    And yes, there would be some logistical details to sort out... and yet I do think the new movement of online education might be able to lend a helping hand in this regard...

    Yes, let's keep rigor around.