Monthly Archives: April 2013

CodeClub Thoughts

I’ve been a CodeClub leader for a while now at my local primary school, Woodhouses Voluntary Controlled Primary School, in Manchester. The club is after school on Friday afternoons and each session runs for an hour. We’re taking a break brought on by the Easter holidays, and I’m on holiday this week too, so I thought I’d put some thoughts together on how it’s gone so far.¬†Overall, it’s been a fantastic experience, if slightly chaotic and exhausting (in a good way) at times. The rewards of seeing enthusiasm and interest in the CodeClubbers, and above all their progress, have been great.

After registering my interest as a volunteer last year, I didn’t get round to contacting a school until December, where I approached Woodhouses Primary, as it was in the village where I lived. I’d got my CRB check done back in September, via STEMnet, as advised by CodeClub, and that was a very straightforward process. In fact, I’m as much involved as a STEMnet Ambassador now as I am a CodeClub leader. Definitely worth looking into!

The CodeClub website had some great resources to help build a case to put to a school, and good notes for volunteers on what to do, what to expect and even ideas on what to say (if you were unsure). I arranged a meeting with the Headteacher and Year 6’s Form teacher, and as soon as I explained what it was, how it worked, and that it was free, the deal was done. The following week I stood up in front of Year 5 and Year 6 children with some simple slides and explained what programming was all about. At the end, when I asked who might be interested in becoming a member of an after-school CodeClub, there were a lot of raised hands!

The school decided to restrict the availability to Year 6 children only, because of sheer numbers, and to give the Year 5 children something to look forward to! After all was said and done, I ended up with a total of 13 CodeClubbers.

Here are some bite-sized thoughts on my experience so far.

  • Hardware: I was somewhat (pleasantly) surprised that the school had enough laptops and desktops to go round. However, they were, understandably, in pretty poor shape, many suffering from performance issues, Windows update issues, and some would randomly refuse to boot.
  • Access: Further, each child had their own login, with restricted access. This meant that I had to get admin access to each of the machines to be able to install Scratch. This went well, generally, although some of the installs ended up with no icon on the child’s desktop, meaning we had to go and find the Scratch executable (c:Program Files…) to start it up in some cases.
  • Saving: children each had their own area (network-served home directory) to save files, so we use that to save their Scratch work each week. Access to the Web was possible, but via a proxy, the credentials to which have remained somewhat elusive, so we haven’t shared any projects on MIT’s Scratch community site yet. At least, not by direct upload from the Scratch environment (there are proxy and other config parameters you can set if you know the details).
  • Time: There were already a number of after school clubs active, but a Friday slot was free. This was ideal, as for me it meant I could choose that slot as the least likely time to impact my day job (more on that later) – I travel with work sometimes, but Friday is the day I’m most likely to be in Manchester. “After school” does not equate to “after work”, as the former starts usually around 15:15!
  • Setup: Some setup time each week is essential, to get the laptops out, arrange the desks and chairs, and get the worksheets ready (having a last look at the task in hand yourself, too!). So I try to arrive at 15:00 for a 15:15 CodeClub start. This also gives me time to think about what the key characteristics of the project are, so I can bind in some emphasis of those points during the session.
  • Materials: CodeClub has done a great job of putting materials together for the leaders. There are volunteers that put together projects on a term by term basis. Term 1 is Scratch-based, and what I’m teaching. For Term 1 there are three sets of three projects (i.e. 9 in total), and each project is about the size of a single CodeClub session. Some children finish sooner, others need more than a single session (this does get challenging sometimes, see later). There’s a sample project available on the CodeClub website.
  • Belonging: There are non-programming resources in the CodeClub materials – such as name badges, door signs and so on. These are wonderful, especially with the CodeClub branding, and I’ve used these to good effect to create a sense of club-style belonging. And as the CodeClub-supplied materials suggest, name badges are ideal for helping you remember each child’s name! A sense of belonging is heightened when you give children little tasks that they can own; I have a badge monitor (distributing and collecting them before and after each session), a door-sign monitor, and so on. And of course, getting them to start and end each session with an almighty “CodeClub” cry is as bonding as it is deafening!
  • Ratio: CodeClub recommended around 10 children per volunteer. There’s only me at Woodhouses CodeClub so far, and I have 13. I would agree with CodeClub’s recommendation. While I’m just about coping, it does get a little hectic sometimes, as there are always plenty of questions, the children go at different paces, and it’s sometimes hard to get the balance right between spending quality time on an answer with one child and covering as many questions as possible in the shortest time. Overall, I’ve found that you soon get to recognise those that need more help generally, and those that are more independent. Bear that in mind, and above all, use praise a lot. It really boosts their confidence which in turn edges them further along the continuum from reliance towards independence.
  • Space: One thing that caught me completely by surprise was room logistics. The room we have at Woodhouses is long but narrow, and the way the desks and chairs are arranged (there’s only one way, really) means that when the children are in the chairs, it’s quite difficult sometimes for an adult-sized person to squeeze past. This becomes a real issue when you’re trying to flit between as many children as you can answering questions and helping out. If you can bear this in mind when arranging the table logistics, it will help you a lot more than you think.
  • Enthusiasm: Year 6 children are excitable and their enthusiasm shows itself in ways that we might initially think are disruptive and chaotic. With the graphical nature of Scratch, this chaos is extended into the projects themselves, with more or less every child wanting to use a different name, character or sprite costume for the project protagonists. Embrace it, don’t fight it. The only thing you should do is be consistent in the naming, so for example the two characters in the first project are a cat called Felix and a mouse called Herbert. What’s certain is that in many cases you’ll neither have cats or mice, nor the names Felix & Herbert. But use ‘Felix’ and ‘Herbert’ consistently when you’re explaining things and the children will naturally translate into whatever they have.
  • Co-Working: Some children like to work together, others like to work alone. But for any emergency logistical reasons (laptop won’t boot) you can put them together and they won’t mind. Some children are also keen to help out, so embrace that and give them tasks (e.g. help the child next to them find the right sprite costume) and they will thank you for it.
  • Checkboxes: Each project worksheet has checkboxes that are designed to be checked off as each child completes that part (one worksheet per child). I forgot to specify that the children should come with pencils or pens on the first session, with the result that some of them, after an interruption, couldn’t find where they’d got to, and it took a little bit of time to work out where they were. So make sure they bring pencils to tick off each section as they do it. It helps them, but it also helps you when coming to answer a question.
  • Extras: Be prepared, or be ready to think on your feet. There’s a couple of girls that work together in our CodeClub, and they’re super keen and also very very competent. They just “get it” (e.g. I found myself explaining things to them with the use of the standard Scratch XY Coordinate stage background, possibly too advanced for some, and they loved it). They’re starting to consistently finish the projects before the end of the CodeClub session. There are great ‘bonus’ tasks on the project handouts, which faster children can do, but I found myself having to give them completely new extra tasks to do to satisfy their hunger for learning and experimentation. So play around with Scratch yourself in between CodeClub sessions and you’ll be more readily able to come up with new small tasks at the drop of a hat.
  • Flexibility: Be flexible and creative, too. I discovered that some of the desktop machines had faulty speakers, so the sounds that some of the characters were to make were no good. Rather than have the children disappointed, I encouraged them to “hack” the project by getting the characters to “say” or “think” (speech/thought bubbles) something instead. They loved it, as they were doing something special.
  • Assets: One of the early Scratch projects involves image and sound asset files that are not part of the standard Scratch installation. They are, instead, supplied in the files made available for the CodeClub leaders. This is great, but one mistake I made was not loading the assets onto the laptops before the start of that project session, which meant that some time was wasted distributing them on a USB stick. So remember to check what the project requirements are before you start!
  • Coordination: The biggest challenge for me as the only volunteer (somewhat exacerbated by having 13 children) is that the varied pace of progress means that some children are finishing off the previous week’s project while others are starting the new one. This, combined with the room logistics, has been the toughest challenge for me. Keeping track of who is doing what, and therefore in what context to answer each question, is hard. What I want to avoid at all costs is for someone to get bored, either waiting for me to get round to answering their question, or because they’ve finished something and are waiting for new instruction. I’m not sure there’s an easy answer to this except perhaps to recruit a second volunteer (I’m in the process of doing that now!).
  • Certificates: One of the highlights for me has been the reward of Level 1 certificates for those children who’d managed to complete all three projects of Level 1 before Easter. Again, the CodeClub materials are fantastic and a nice A4 landscape certificate with the child’s name hand-written on it and handed out in assembly can only be a good thing, not only for the recipients, but for CodeClub and programming in general.
  • Highlights: As well as the specific highlights like certificate awards, there are many weekly highlights for me. Here’s just one example. A child, who’d enthusiastically suggested “Binary!” as a programming language in answer to one of my questions in the talk to Years 5 & 6 (and who could deny him that answer?) came up to me at the end of the second session and said something that completely made all the effort worthwhile: He had an idea to combine some of the code from the previous week’s project (attaching a sprite, with a couple of costumes, to the mouse pointer and changing costumes when clicked) with what he’d built that afternoon to make the game even better. It was a super moment for me, as he’d independently figured out a way to make the game better by “hacking” it (and yes, this is “hacking” in the proper sense, not the ignorant way the popular media use the word) – and using code from different sources.
  • Scratch: This may sound obvious, but embrace Scratch and the projects that CodeClub offer. Do them yourself, to get not only a better understanding and appreciation of Scratch itself, but also to get the project – its goals, purpose, challenges and flavours – into your head. It makes it a lot easier to lead the session this way. I was initially skeptical of Scratch, but the key point to remember about that skepticism is that it was formed before I used Scratch properly. I was completely wrong to be skeptical. It’s an excellent learning environment – a design-time and run-time in one single executable, and a single interface too. It’s got the right balance between syntax, graphics, ease-of-use and capabilities, and is absolutely ideal for teaching coding to primary school children. Yes, I would like to teach Python too, but Scratch is excellent in what it delivers.
  • Collaboration: The first project from CodeClub comes with a series of step-by-step instructions that you can use to lead the children through their first discovery of the Scratch environment. I used this in the first session, in fact I extended it into a complete discovery hour. It worked really well. I did something in Scratch – something small and bite-sized – and then the children followed suit and did the same thing themselves on their laptops or desktops. It got them used to the interface, but even more importantly, the side-effects of turning it into a Q&A were very valuable. “How might we do this?”, “What do you think would happen if we did that?” and so on. The engagement factor was very high. So much so that for the next scheduled session, I’ve prepared an “off piste” project that we’ll do in collaborative mode, with me guiding them through a complete session to build a maths quiz game. And yes, for the ones running at a more rapid pace, I’ve got some ‘bonus’ bits that we can cover separately.
  • Employer: Finally, some thoughts about how you might do this after school if you have a full time job. I’m lucky in that my job involves programming and that I work for a forward thinking company – Bluefin Solutions. They already knew of my work with STEMnet, and of course being a company with the highest number of SAP Mentors, were already aware of the positive benefits of contributing back into communities. With a positive attitude towards social responsibility and an inherent interest in technology (a core competence) it was almost a no-brainer. Bluefin have supported me in my efforts thus far, and are being open minded and flexible (thanks folks!). I wrote a blog post on Bluefin’s “Insights” section about CodeClub and related subjects: “Our Computational Future“. If you can approach your employer and explain the benefits of CodeClub not only from a immediate payback view but also from a longer-term perspective you’re in with a chance of succeeding. As an early bird, my working day starts well before most people’s, so I manage to get things done to such a degree that switching to CodeClub on a Friday afternoon is workable. If you have flexible hours, then so much the better.

One final thought: If you’re wondering whether to take the plunge and become a CodeClub volunteer, just go for it. The support is great, the community is growing, the time logistics will sort themselves out, and the rewards are unlimited. Go for it!

Functional Python – Itertools Exploration

Well, time passes, and my 30days challenges are continuing. January: no Twitter, February: no beer, and the month just passed, March: Meditation. I didn’t do too well on the meditation front, but that hasn’t put me off. I’ll reflect on that perhaps another time.

Now it’s a new month, and a new challenge. Although I don’t see it so much of a challenge, but something I want to use the challenge mechanism to complete. In my activities with CodeClub and the MadLab U-18 CoderDojo activities I’ve a refreshed interest in coding at the core, and have been looking at and using Scratch and Python in earnest. And in wondering and discussing how to present approaches to coding, and in particular some Python idioms (for example, see this question on ‘pedestrian’ vs ‘functional’ approaches), I’m developing a keen interest in the functional programming features in Python. I was particularly taken by this video: http://www.youtube.com/watch?v=EnSu9hHGq5o and did some more research, combining what I was learning with the functions map, filter and reduce, also of course available in many other languages.

All roads seemed to lead to itertools, a Python library that “implements a number of iterator building blocks inspired by constructs from APL, Haskell and SML”. So this month I’d like to investigate the functions in this library, one at a time. I’m not sure what that investigation will look like, but I know I’d like to have a look at each one in turn, find examples of how they might be used, and write a little bit about them. The writing part is interesting; I felt that this WordPress-based blog was slightly too formal (and cumbersome?) for what I wanted, and hankered after a Wiki-based environment, with minimal edit friction and the ability to build document and page structure relationships dynamically. I’d had one on this host a (very) long time ago, called “space” *, and it was a MoinMoin powered one. That’s Python-based, and it served me well, so I’ve just installed a new instance. I’ll use that to help me on my itertools voyage of discovery. Wish me bon voyage!

* Gosh, there are a few references to “space” still around in code, such as here!