Tempus fugit – 12 months have passed since we ran our Haskell MOOC for the first time. And here we go again … the second run of the course begins next week.
We summarized the findings from our initial MOOC run at a recent academic conference on Trends in Functional Programming in Education. You can read a draft paper or see the slides from our conference presentation.
We have also analysed the qualitative feedback we received from learners on the course. We are in the process of writing these results up too – slow going! Repeated feedback seemed to relay the idea that we jump in difficulty level from simple one-line expressions to more complex multi-line functions mid-way through the course. We need to manage this transition better, I guess.
We corrected lots of minor typos and made a few clarifications to the learning materials for this second run. We have recorded a few new videos, but there wasn’t time to get them QA’d, transcribed and tidied up for the official FutureLearn pages. These videos are mainly clarification, about difficult concepts in the course. We’ll keep them in reserve and post them on youtube as and when these extra resources are required.
The class size is significantly smaller on this second run. We had over 5000 learners first time round. This time, we have around 1000. We are not sure what will happen in terms of learner engagement and retention – but we hope that the new FutureLearn model will encourage learners to stay for the whole course.
We have interacted with several course veterans on Twitter, as we have been promoting this second run. We encouraged learners who took the course last year to re-enroll and provide support for beginner Haskell developers. We hope this community atmosphere will be apparent during the course.
We want to place more emphasis on learners tackling practical puzzles and coding exercises, which we hope to host on github as the course progresses.
When students used our interactive tryhaskell coding environment on the MOOC, we logged their IP address. I ran all 3000 IP addresses through a geo-locating service to generate the Google Map image below. Unsurprising, the most popular country was UK, but it was heartening to see people playing with Haskell from across the world!
I gave a talk about our FutureLearn Haskell course at the Haskell eXchange in London, this afternoon. The Haskell experts in the room had lots of useful feedback for us, which I’ll summarize here.
- syntax highlighting is _really_ important. Can we do syntax highlighting in tryHaskell?
- should Glasgow students have the opportunity to watch the course videos together, on campus. This would be a kind of ‘Haskell cinema’ which would promote shared learning and peer support.
- people who have never programmed before and people who have programmed in imperative languages need _different_ learning strategies.
I met several people at the Haskell eXchange who have signed up for our FutureLearn course – it was great to meet them and talk about their (mostly positive!) experiences.
This is an excerpt from an email I sent to our academic overlords at Glasgow to report on the status of our Haskell MOOC after the first week.
I’m delighted with the way our course is going. We have over 5000 signups now, and over 1000 people logging in and engaging with the learning materials.
There were a few typos and minor mistakes in the articles and video captions, but as these have come to light, I have been correcting them very quickly. There is a kind of slip-stream effect – the first learners on an activity are able to identify any problems before everyone else gets there – then I fix things up quickly!
The load balancing seems ok – we are now running on three Amazon cloud servers and we seem to be coping with demand.
I’ve been very impressed with the immediate sense of community, in the comments. People are ‘owning’ the course, and helping each other out with conceptual and technical problems. This is highly encouraging. Along with three (PhD) mentors, I have been monitoring the comments and adding my own comment if necessary.
We thought a while ago about a second course in ‘Advanced Functional Programming’. Already there is some demand for this from the learners. So we will have to try and put together a proposal for this – and investigate whether the university would fund this…
When we prepared our video lectures for the Haskell course, we sent them off to a Closed Captioning service to generate the subtitles. We strongly suspect that the people doing the subtitling did not know any functional programming – at least, not before they started.
This resulted in some humorous mis-transcriptions. I’m going to record my favourite instances here, so I don’t forget these classics.
I said ‘lambda abstraction‘. They heard ‘lambda obstruction‘.
Wim said ‘compact syntax’. They heard ‘complex syntax’.
I said ‘Haskell programming’. They heard ‘high school programming’,
I said ‘Glasgow Haskell Compiler’. They heard ‘classic Haskell compiler’.
There are lots more examples, check our github repo logs for details.
Our Glasgow Haskell MOOC started just after midnight, early Monday morning, 19th September. I was slightly caught out, because I was still tweaking our online Haskell programming environment when the course went live! I quickly finished my edits and deployed the code on Amazon Elastic Container Service, so it was ready for the eager learners.
The first few learners to start the course were like swarming ants – energetically exploring all the activities and posting comments about typos and other minor glitches. So I was able to iron out lots of typos and inconsistencies before the bulk of the learners saw most of the material.
Lesson 1 – fix bugs early and often.
I was a little worried that our online Haskell interpreter would not scale to meet the demand of hundreds of learners – however it seems to have coped very well indeed. We are running 10 medium sized AWS instances, each one hosting a Docker container with the tryHaskell web server running on it. We have not exceeded 5% overall CPU load across the cluster – so we probably only need 1 or 2 instances in general.
Lesson 2 – cloud computing enables scalable provisioning for server tasks
Well, I haven’t actually scaled down yet – I will reduce the number of VMs and Docker containers once I get my head round the amazingly complex Amazon interface 🙂 UPDATE I have scaled down to 4 AWS instances now, and everything still seems to be running ok.
One of the most impressive aspects of the course, to me at least, has been the level of engagement from the learners. This is very evident in the Comments section attached to each page of the course material. Learners are very keen to find and fix bugs — and, more importantly, to discuss ideas and misunderstandings with other learners. We have a team of 3 mentors (PhD students from Glasgow) and myself, who all respond to comments where we can. However it’s brilliant to see the learners supporting each other.
Lesson 3 – peer assisted learning is the ‘default’ for MOOCs
We have 3964 learners signed up for our FutureLearn Haskell MOOC. We have 108 students enrolled for our Glasgow University Functional Programming course (the face-to-face version of the MOOC).
So – lots of people will be learning Haskell over the next six weeks! These numbers are down on what we wanted. When we scoped out the course we were aiming for 10k learners and 120 face-to-face students. But we are very happy with the numbers so far. Let’s hope the students are equally happy with our course! It starts Monday!
I pulled an all-nighter to address the (very long) list of content issues from Claire, our FutureLearn contact. Most of them are sorted now, so just a little bit of academic ironing to do over the weekend. Oh, and lots of spamming to try and get closer to that 10k target 🙂