I’m keeping a record of my experiences on CS50x – a free, online class on the edXplatform, teaching basic computer science. I have some basic programming experience (I’ve completed coursera’s CS101, am 6/7 through udacity’s CS101, and did a few problem sets from MITOCW 6.00 early in the year.) I’m going to try and share my learning on the course, and my thoughts on the experience.
This week’s lectures were mostly videos of lectures delivered directly to the CS50 students at Harvard. There were two main lectures, each an hour long. I watched the videos on my tablet, to and from work, and didn’t feel that I was interrupting the flow too much by doing this. I’m not sure if this will be the case later on, when the topics become more involved.
The videos didn’t have interactive quiz elements (although the platform does seem capable of these). There were a few questions to get you thinking along the way, but these were just a part of the video – for example, I stopped the video to check my understanding of the binary to decimal conversion.
The explanations were good. I enjoyed the content, and found it to be quite effective in introducing new ideas. I liked the way that algorithms and complexity were introduced right from the start with the example of finding numbers in a phone book. The explanation of binary notation was clear, and after replaying it once and working through the examples, I had understood the concept.
Watching these videos did make me think that we can we can take the usefulness of online educational video a step further. People always mention the advantage of being able to pause and repeat educational video. But whilst this is useful, it can only go so far – what if the explanation was just not very helpful in the first place?
One way of improving this might be to have ‘alternative explanation’ videos for each concept. This could be using a different example to explain something, or could use different vocabulary, or break down the explanatory steps a little more.
Alternatively, we could crowd-source additional explanations. If a user thinks they can suggest a helpful alternative explanation, or a web link to somewhere with another good explanation, they could annotate the video with this. If someone’s having trouble with a section, they could select to view these annotations for the section in question.
This course is a neat insight into the culture around CS50 and Harvard. The musical interlude in the first lecture took me by surprise -pop culture and fun weren’t a feature of my own undergraduate lectures. I felt quite British and uncomfortable during the dance routine – being exposed to a different culture us good for me.
The apparent strength of feeling around the course, and the CS50 brand, was also something new to me. Let’s see if I end up wearing a CS50 t shirt! I was also interested to see how the on-campus experience uses technology, for example to allocate teaching assistants during office hours.
The user experience on edx.org was smooth in some areas and a bit rough in others. Downloading the videos was nice and easy – so I watched the lectures on the train to and from work on my tablet. The navigation of the course is a little clunky – it doesn’t initially feel very easy to get an overview of the course and to move between the different areas of interactivity. But I’m sure I’ll get used to this soon.
I submitted my assignment, and received a confirmation message, but can’t easily see how to go back and review this. Similarly, if I go to the course progress page, the meaning of the messages isn’t very clear: “No problem scores in this section” – is this because there’s nothing to submit, because I haven’t been graded yet but will be soon, or because I haven’t submitted anything. The backend of the system could do with being a little more integrated to reassure users.
How did I get on with the assignment? I really enjoyed creating an interactive game. I think this tactile assignment was a good way to empower people. Scratch is nice and straightforward, and quite powerful with it. I did find programming player movement in response to keypresses a bit fiddly, and I’m not entirely happy with the results here.
Here’s my game – Nightmare:
The concept of my game:
The player has to survive for 60 seconds. Avoid the ghosts, eat the stars for more points.
The player and enemy starting locations are randomised within certain constraints.
Enemies move around – two of them seek the player, and the third just bounces around, in a random fashion. Later on, two more enemies appear.
If the player survives, they escape the nightmare. If they get eaten, they stay there forever (unless they hit the reset button… ;))
The three main different enemy sprites all behave differently, and I’m quite pleased with the effect of this.
The red ghost has a forever loop – point towards the player, move 14 steps, then wait 0.6 seconds. This allows it to home in pretty well, but without being unavoidable.
The big face with teeth has a forever loop telling it to bounce on edges, move a step, and then with a 1% chance of turning a random direction between -90 and 90 degrees.
This gives it enough randomness to be scary, but not so much as to be completely unpredictable.
The purple face has a forever loop, gliding for four seconds to the position of the player. This gives the player just enough time to move away, but ensures that if the player doesn’t move – or moves badly – they’ll be caught.
These three enemy behaviours combine nicely, and they are my favourite part of the programme. I find the game quite hard to play!
New enemies, following slightly modified version of the red ghost movement, are spawned after events at 30 and 10 seconds remaining, to add to the tension. Their sounds and costumes are different, and the final one is slower than the rest, but other than that their tracking behaviour is not new.
It is not possible for an enemy to spawn on top of the player. Enemies have to spawn at least 50 pixels away – there’s a check for this before spawning. If it is failed, another spawn location is generated. I’m quite pleased with this feature.
An ‘artistic’ experience:
I enjoyed drawing my own graphics and sounds – it felt very playful. I’m not a confident drawer, but I really enjoyed making my own sprites, and then doing the sound effects.
I took inspiration from Psychonauts, from the sounds in Minecraft, and the Worker and Parasite clip from the Simpsons
What I’m hoping to achieve with CS50x
I’ve had really positive experiences when online education is a communal and creative activity. So I recorded a quick video introducing myself:
I’m hoping to learn about computer science, online learning, and to connect with others people. I’m looking forward to creating things and learning with new people.
I’d love to find out how the rest of you found the first week.
What did you learn? How did you find the lectures? How did you find the assignment?