This is CS50.

May 31, 2016

Miles Berry

CS50 is an introductory computer science course offered at Harvard. Lots of US universities are offering ‘CS101’ introductory courses for programming and computer science, designed with a far broader audience than just those pursuing computer science as the subject, or major, for their degree. UK higher education generally lacks this flexibility, but it’s possible to think of A Level CS as a qualification with a similar sort of scope, and one which would be of value for any future academic or professional use of programming rather than merely as prep for a CS degree. CS50 is now the most popular course at Harvard (and Yale), and similar courses have attracted similar levels of interest elsewhere.

You don’t have to go to Harvard to study CS50 though. The course content is all available for free through edX, as CS50x, an online, self-paced MOOC. There’s a pretty rich collection of content here: videos of the lectures given on campus, challenging, auto-graded problem sets (psets) linked to each lecture in the course, lots of support resources including an impressive online IDE (powered by cloud9), coding examples, short tutorial videos, and walkthroughs and post-mortem videos for the psets. The production standards of all this are really very high. You can take the MOOC with some ID verification (and a $90 fee) to get a certificate at the end if you want.

There’s also a version of the course that’s been tailored to US high school students sitting College Board’s new Advance Placement CS Principles exam. This uses much of the same content and maintains the same rigour, but breaks the course down into smaller bits. The Harvard team seem to be going out of their way to make this something that high school teachers can access, adopt and adapt. There’s a couple of modes to delivering the course, I guess depending on time and expertise: one would be to take David Malan’s lecture slides and the associated notes and materials as a starting point for ones own teaching, the other would be to use the CS50 materials in ‘flipped’ mode, getting students to watch the videos at home and then use class time for discussion, coding examples and work on the psets.

A few of us gathered together at Microsoft’s London office over the bank holiday weekend to learn a little more about this version. I think we were pretty impressed by what we saw. It’s worth saying that there are other courses which lead up to the CS Principles AP exam, including Berkeley’s Snap! based Beauty and Joy of Computing and a course from

What’s distinctive about CS50?

Accessibility: On campus, 72% of those taking the course have never studied CS before. The ambition is to create a course experience which crosses all divides. The diversity of the CS50x community is some testament to that.

The course starts from Scratch (literally), the on-ramp is deliberately gentle, although the traffic is fast-moving. There are some great online support resources that sit between the lectures and the psets, which isn’t the case with some other MOOCs I’ve taken in the past. In College, there are large numbers of undergraduate ‘teaching fellows’ recruited from previous cohorts supporting, and grading, students’ work – I could see some schools’ ‘digital leaders’ taking on responsibilities similar to this.

The lectures include quite a lot of unplugged and computational thinking content:

Whilst Harvard and Yale students, and MOOC participants, are perhaps not typical of the population as a whole, making the course accessible to a broader demographic, and providing granular support seems to be a priority in the AP version of this.

The underpinning philosophy is admirable:

what ultimately matters in this course is not so much where you end up relative to your classmates but where you, in Week 11, end up relative to yourself in Week 0.

Rigour: There’s no doubt that this is a hard course, particularly so after the first few psets. Prof Malan is unapologetic about this, believing that learners will rise to meet the challenges they’re presented with. I’m conscious that this might seem at odds with the preceding claims about accessibility, but changes to curriculum and assessment at home are, in part, about raising the expectations for all:

Teachers should set high expectations for every pupil. They should plan stretching work for pupils whose attainment is significantly above the expected standard. They have an even greater obligation to plan lessons for pupils who have low levels of prior attainment or come from disadvantaged backgrounds. Teachers should use appropriate assessment to set targets which are deliberately ambitious. (DfE, 2013)

There are two elements of rigour here that deserve special mention.

First, after the initial, Scratch-based, introduction, the main programming language is, er, C. I’ll admit that this struck me as odd for an introductory course, especially given the primacy of Python here for programming in secondary schools (see, e.g, Sentance, 2015 and Martin, 2016). I’m pretty much convinced that Python is the right choice – low floor, wide walls, high ceilings, just as Papert would want for an introductory language, plus a great support community and lots of resources. However… C does get you somewhat closer to the machine itself, which I suspect makes for a better notional machine, and the syntax carries over into lots of languages that owe their heritage to C. Malan provides some further justification for the choice on Quora. Other languages get used in the latter half of the course (PHP, JavaScript and SQL) where the focus shifts to developing web-based applications, and the final project can be attempted in any language you want.

The other is the grading. Grading on the edX version of CS50 is simplicity itself – if your solution to each pset passes all the automatic unit tests, you get full credit for the pset. The CS50 team have developed a check50 tool so you can run the unit tests yourself before submitting your work. I like this approach. It does, however, do little to encourage good commenting, good layout or good design. In College a multi-axis approach to grading is used, and this approach is recommended for the AP version too.

The axes are

  • Scope: To what extent does your code implement the features required by our specification?
  • Correctness: To what extent is your code consistent with our specifications and free of bugs?
  • Design: To what extent is your code written well (i.e., clearly, efficiently, elegantly, and/or logically)?
  • Style: To what extent is your code readable (i.e., commented and indented with variables aptly named)?

There’s then a weighting applied, with the overall grade for a pset determined by scope * (3 * correctness + 2 * design + 1 * style). Scope, correctness (using check50) and style are pretty easy to determine (the latter made easier via a quasi-linter, style50 and the course style guide), but design is much more subjective and, I think, much harder for a non CS specialist to determine. As a starting point, Doug Lloyd (who’s coordinating the AP version of this) suggested getting students to ask themselves:

  • Can I eliminate:
    • Repetition?
    • Loops?
    • Magic numbers?
  • Is there a shorter way to accomplish the same thing?
  • Should this code have been broken out into its own function

The psets each have detailed grading rubrics for those teaching on the course, which helps.


There’s no doubt that CS50 has a real buzz to it at the College. This starts with a puzzle party at the beginning of term, free cake after the first lecture, a hackathon, a programming contest and a fair at the end of the course to showcase final projects. There are CS50 t-shirts, stress balls and a high profile presence across social media. There’s a well articulated, and consistent, message that the course is hard, but fun. This has, unsurprisingly, upset some folk. For anyone looking to promote the profile of computing in their school, (qv [Brown, 2014 ppt]). I think there’s much to be learnt from this. I could see puzzles and problems taking off in schools, and I know a few folk who’ve already tried out school hackathons, although perhaps not on the 7pm to 7am schedule of the Harvard version.

Another key element of culture in CS50 is the emphasis on academic honesty. There’s detailed guidance on each pset about what is and is not appropriate help, but much of this boils down to:

“when asking for help, you may show your code or writing to others, but you may not view theirs”

One of the dangers with MOOCs is that solutions to problems do get posted online, and too many students might fall prey to the temptation to base their own solutions on these. This absolutely never, ever happens with controlled assessments for GCSE computing. CS50 has such a strong presence on a range of social media that folk on the main channels seem to be pretty good at keeping to the spirit of the academic honesty policy. There may well be solutions out there, but you’re unlikely to encounter them by accident in the main support fora. CS50 does use plagiarism detection software (moss and ETector), and has no qualms about reporting students for academic discipline infringements, but, uniquely at Harvard, also has a regret clause – if students own up to breaking the academic honesty policy within 72 hours of the offence, the course manages this themselves rather than reporting it up to the ‘Ad Board’ for more drastic sanctions.

How would this work in England?

CS50 and its derivatives have been developed in a US context, and not everything translates across perfectly. Their higher education system has some significant differences from ours, as does their school system. There are, though, some ways that we could make use of the amazing work that’s gone into this.

ITT and CPD We’re all acutely aware that one of the biggest challenges for making a success of the computing curriculum and associated qualifications is teachers’ own subject knowledge – almost uniquely, computing is a subject where we expect teachers to teach something they didn’t learn at school or university themselves. We’ve done much to address this subject knowledge gap, through initiatives like Barefoot, QuickStart and Tenderfoot, as well as the activities of CAS Master Teachers and others. There are also generous bursaries and scholarships to encourage computer scientists and software engineers to train to teach in secondary school.

I do see a role for the CS50x as a high quality, rigorous and challenging element of computing CPD, both for those who’ve never programmed before and for those who’ve picked up some skills in Scratch and/or Python but are now looking to extend their programming knowledge into lower level programming as well as developing web-based apps. I think CS50x would also work well as subject knowledge enhancement for those wanting to train as computing teachers, at both primary and secondary levels, but lacking an A level in computer science or whose degrees didn’t include much, if any, programming.

Alongside all the subject knowledge content, I think there’s much that teachers can learn from watching someone of Malan’s class teach: I know I certainly have, even if I have no hope of matching his energy and polish. In the style of those director’s commentary DVD extras, he’s recorded a pedagogic commentary on the 2014 version of the lectures.

Resources and psets The video content (plus slides and notes) for CS50 and CS50 AP are really high quality, and could be used very easily to support teaching at both GCSE and A Level. Rob Leeman from OCR joined us for some of the weekend and demonstrated how what’s there maps to OCR’s GCSE specification; he’s doing a similar mapping to the A Level spec. Looking at the A Level subject content requirements from the DfE, I reckon the coverage should be good, although far from perfect, for other boards too.

If you’re willing to adopt C as an initial teaching language (and it’s a big ‘if’), then the psets themselves could be of great value, perhaps particularly in their more granular AP format. Even if you’re using another language, the pset tasks and unit-testing approach could still prove useful. I do worry at times that our approach to computing education has moved too far in the direction of unplugged approaches, and computational thinking without computational doing: CS50 provides, for me, a welcome emphasis on programming as the medium for learning much of the other subject matter.

Another fab resource is cloude9’s online IDE for CS50. To get access, all you need is an edX account, and I think these are available for pupils (over 13) as well as for teachers. This is a web interface to your own Ubuntu virtual machine, with a really simplified user interface: there’s an editor, a file browser and a console. Whilst optimised for C, the IDE has Python 2 and 3 installed out of the box, and installing new packages is simply a matter of sudo apt-get install foo. The IDE has built-in real-time collaborative editing too, as per Google Docs. There’s something similar available from Codio, which some CAS teachers will have encountered already as part of the BCS/CAS certificate scheme.

Teaching the course As things stand, I don’t think there’s anything to stop schools here registering as centres with College Board and entering pupils for AP CS Principles. At the moment, it doesn’t actually carry UCAS points, but the other AP exams do, and I guess there’s some sort of routine recognition protocol that will mean new AP exams get UCAS points too. It would be odd if they didn’t. However, this isn’t an Ofqual regulated qualification and it certainly doesn’t count for performance tables. I suspect that without this recognition it would be a brave head teacher or principal that would devote limited resources to teaching a course designed for such an exam.

That said, the final project element of CS50x or CS50 AP (which counts for 24% of the AP CS Principles grade) could be submitted as a practical project for the EPQ – this too carries UCAS points, seems well regarded by the Russell Group:

As well as your advanced level qualifications you might also consider the Extended Project Qualification (EPQ) which provides the opportunity to develop valuable independent study and research skills. Russell Group universities value the EPQ which can be drawn upon in your personal statement and at interview to provide evidence of enthusiasm for your chosen subject. Some Russell Group universities may also include the EPQ in their offers – check individual university guidance for more information.

… and, crucially, counts for the academic performance measure in sixth form and college league tables (even if it doesn’t count towards the A-level section of the tables).

To get more of a flavour of the CS50 experience live, come along to the CAS Conference on 18 June 2016, where David Malan’s giving the closing keynote.

I’d be interested to hear what others think about using these materials, teaching this course: is the context too far removed from our own? Is C too off-putting? Does the mismatch between the course and our qualification / accountability framework make this a non-starter for most English schools? Have you made use of MOOCs such as this for developing your own, or your colleagues’ subject knowledge? Was that a positive experience?