Exciting news!

I’m excited to announce that as of September I will be starting an education consultancy business and will be available to hire for training, speaking, advice and other awesome Comp. Sci. related activities.

When it comes to big changes, I don’t do them by halves. Since June this year I have got married, moved house, quit my job and decided to start my own business! Gulp. I decided to make this change because I really enjoyed the variety of the different things I did alongside my day job for the last few years. Having run training courses as a CAS Master Teacher I was delighted that people genuinely seemed enthused and happy with the delivery and the content of what I had taught them. As a teacher there’s nothing worse than going to a badly delivered training course, and with time being a very precious commodity my focus is always on getting the most use out of the short time available, matching the requirements of the people who are there.

I am also extremely pleased to announce that I will also be speaking at Pycon UK 2016, as a follow up to my blog post about the accessibility of educational software for teachers and schools. I have loved giving the various talks I have been invited to share in the past and public speaking is an area where I would certainly like to do more. Hopefully I will also be able to meet some interesting people – the Python in education mailing list has certainly impressed me with the willingness to listen and share from many talented developers.

I would really like to work on a variety of projects, so if you’re interested in working with me then please drop me a line. I haven’t yet launched my business website or contact methods so for the time being you can still reach me either on Twitter @codeboom or via email at codergoesforth@gmail.com – but you’ll be able to see my proper portfolio very soon! 🙂 I also realise that many people who comment on this blog are highly experienced and may have good advice to offer (and indeed some have already helped), so I would welcome your support.

Looking forward to developing this business over the coming year – it’s very weird to think I won’t be going back to school in September!

Scratch is the new Powerpoint

I keep hearing the phrase “Scratch is becoming the new Powerpoint” – teachers all over the country (nay, the world) are using the same programming teaching tool to teach with. So why is it that in a world with so many free tools for teaching kids to code, everyone seems to be using the same one?

I have a reason. Because the excessively complex installation process or the dreadful user interface of most of the other tools renders them completely unusable in education.

So it turns out that there are a lot of benevolent developers out there who really want to help improve the standard of CS education in our schools. They spend time building tools with kids in mind and then release them open source. I really appreciate that people do this – there’s some fantastic software out there (e.g. Sonic Pi) which is aimed at kids, free and frankly awesome. However, there’s also a lot of software which could be awesome but is missing something. Here are my top 3 peeves:

  1. If the website for your tool holds a thinly veiled contempt for Windows users (or no Windows installers), it’s unlikely it will ever see the light of day in education. Regardless of the pros, cons, rights and wrongs of the issue, the vast majority of schools run Windows networks and turning that juggernaut around ain’t going to happen overnight.
  2. OK so your software looks interesting, I decide to test it at home to see if it’s any good. If it takes me more than half an hour to install your product on my home computer because I have to work out which installer to get, install a dependent library, edit a config file and then perform 20 star jumps while turning the lights on and off in time to “Spice Up Your Life”, imagine how much I’ll be looking forward to asking the technicians to install it on the school network.
  3. I finally got the software installed, so I head to the “newbie tutorial”. Here’s something I learned – a lot of software creators have NO FREAKING CLUE what a newbie tutorial is. When I’m new to something, I want you to show me how to get started in a really basic way. Pygame, I’m looking at you here as an inexcusable offender. The top of the Pygame “learn” page has the sentence

“The PYGAME Documentation page has a number of tutorials.
A Newbie Guide to pygame is very good.”

Go on, click the newbie guide link, I dare you.

PSYCH! IT’S NOT A NEWBIE GUIDE! It’s not even a guide! It’s not remotely in the least bit helpful to an intelligent person who knows Python but who has just downloaded this library in the hope that it might be interesting to look at with A Level Comp Sci’s. (I’m asking for a friend *cough*) It even says (paraphrased) in the guide “if you get stuck, don’t ask anyone for help – spend hours trying to solve the problem yourself”. Wooooowww, such welcoming, many warmth. With introductions this good, is it any surprise hardly anyone uses Pygame in education when it looks like it has SO MUCH potential? (I hear there is now Pygame Zero but I found that similarly mystifying…what the hell is this pip of which you speak so casually?)

I guess what I really want to say is, if you’re making some software to help kids learn – THANK YOU. However, your software isn’t going to get the attention it probably deserves if things like the interface and the installation process are a bodged after thought. People just won’t bother to install it. Don’t confuse “I learnt how to do this a long time ago” with “this is trivial” when it comes to the installation procedure, and don’t think that people will be so blown away with your awesome backend implementation that they’ll forget Windows 3 called and wants its interface back.

Computing – the cake is a lie

I’m nearly at the end of my first time round teaching GCSE Computing and something has been bothering me. I decided to leave the topic of networking until the end, because I think it’s one of the hardest and also because I thought it would be beneficial to do it in Year 11 when my students are at their most knowledgeable. So I am teaching such objectives as:

“f) explain the terms IP addressing, MAC addressing, packet and protocols”

Eh? That’s quite a big ask really, isn’t it. My Year 11 group are as sharp as a hedgehog carrying a bag of knives to a cactus convention, so when I offer my GCSE level definitions with a casual “this is the stuff you need to know for the exam” I get questions along the lines of:

  • Why does a computer on a LAN need a MAC address and an IP address?
  • If packets are addressed to and from an IP address, how does that work when IP addresses are allocated dynamically?
  • Is it possible for someone with malicious intentions to create two pieces of hardware with the same MAC address? or to ‘steal’ your MAC address?
  • If a web server has an IP address which is looked up via DNS, how is it possible to host multiple websites on the same server with different domain names?

Now if you read the textbook, it just glosses over all of these things, which is sort of fair enough because a GCSE textbook isn’t meant to be a comprehensive tome on networking. I’m also not saying that I either don’t already know the answer or am lacking the ability to look up the answer to these things. The point I’m making is not that I need some help googling this stuff – stand down industry, I’ve turned off the bat signal. I’m stuck in a hideous choose your own adventure game where you can’t cheat and turn ahead. Do I…

a) Say “that’s not on the spec, don’t worry about that”
(crushing the student’s natural curiosity and undermining their confidence in me)

b) Say “I don’t know but I think it’s probably because of x…”
(fudge over the details until they get bored, not something I enjoy doing to my students, and something they HATE)

c) Tell the student the real answer
(and in the process waste lesson time on something that isn’t going to come up in the exam, confusing some students and opening up all sorts of other “but why is THAT” time sink questions)

No option is acceptable. It’s like when I did GCSE Biology and then I found out afterwards that everything I had learnt was actually a vastly simplified version of reality. And the cake being a lie doesn’t stop at GCSE – it’s all over A-Level as well. Computer architecture and processor design? A lie. Compilers? Lies. Networking? Still fib-a-licious. I really hope Professor Davenport doesn’t show up and say that everything in Uni networking lectures was a lie too otherwise I might cry.

So what do YOU do about this?

 

Image from http://cdn.meme.am/instances/250×250/59745067.jpg

How do you actually teach programming?

This is a question which has been bugging me for some time now – how do you actually teach someone to program? I don’t mean which language, or what resources should I use, or what time of the day is optimal. I mean what is it in your teaching which switches on the little lightbulb that makes a student able to think through the logic of what they want to do and translate that into code? I have recently been working on my Spanish using Duolingo and I sense that my own language learning is a little like what I’m seeing in the classroom with students who learn to code.

Here are the stages I often see in the classroom:

Syntax wizard
This is the first stage where the student is confident to use familiar concepts such as input, print, if/else etc. The student can memorize syntax and fix any errors that may occur. Confidence at this stage is usually quite high as it is early on in the learning journey, and you have probably provided a lot of help as well as offering fairly small and basic tasks. (Check out the super awesome diagram below produced by my art department.)

 

confidencecompetence

Pile of Lego
This bit is horrible for teachers. So, you’ve given your students a huge pile of programming building blocks to work with – they have understood conditions, loops, arrays, all the basics are there. So there you are with your special occasion turquoise pen, filling in your planner with glee, when you decide to set a more difficult task which combines some of these together. Here’s my favourite example of such a piece of thinking:

Teacher: Hmm, okay. I’ve taught input, loops and the % operator and everyone in the class did really well in those lessons. I know! Let’s put these familiar things together and ask them to write a program where they enter a number and the program prints out all of the even integers from 1 to the number they entered. 

Student: Burrr…what’s an integer?

Now, of course your students have not completely forgotten everything they once knew. They have just worked themselves into a panic (warning, this panic is contagious) because you asked them to put together more than one thing at once. It’s a bit like when on my Spanish Duolingo practice it asks me to write something involving two different tenses and some bit of vocab I only just learnt. Give me a test on each of these things individually and it’s ¡muy bien hecho!, but make me do them all together and it’s not exactly creme de la menthe, if you catch my drift Rodney.

Typewriter monkey
Upset by the loss of their former syntax wielding wizard glory where the challenges were easy and the gratification was quick (thanks a LOT, smartphone game culture x_x), students often get disheartened. Now, the way to program really difficult stuff goes something like this:

  1. Write some code. It doesn’t matter what it does, or even if you have any idea what it is supposed to do.
  2. Run your program
  3. If it doesn’t work, delete words and/or syntax from the code COMPLETELY AT RANDOM.
  4. Repeat 1-3 until either the code works, someone tells you the answer, or it’s the end of the lesson.

 

This is where the journey ends for some of the brave adventurers, they choose the wrong path*, Treguard packs them off home with a knapsack and they never enter the computer room again. However, for those who prevail, one day they turn up as…

Code Kitten
This student can code. They understand how to put together the building blocks and they aren’t phased by bigger programming tasks, e.g. programming hangman, noughts and crosses etc. They can think through how they will represent what they need to do using variables and data structures, and whilst they are only a kitten in experience terms, they are more than scrappy enough to hold their own in most tasks. I’d say this equates to a working fluency in a different language – good enough for most everyday situations, not good enough to read a newspaper.

But the question I ask is…how do you get your students from monkey to kitten? What is it in your lesson that takes them from random button bashing to confidence in building up their own code? For me, it’s all about the way I teach them to plan. Teaching syntax is satisfying and straightforward, indeed many ‘learn to code’ resources don’t go past the syntax wizard stage because they don’t want the student to lose interest. Teaching mastery is hard. But… that’s a post for another time 🙂

 

* By the wrong path I mean they probably opted to do something else instead of Computer Science GCSE. 😉

Computing – A beautiful dream

I didn’t believe the hype on the news about bad teachers. I mean, nobody I worked with was rubbish at their job so I put it down to teacher bashing media nonsense and got on with my life. I was happy to share my resources here and on CAS and to help people who asked for my help, because I understood I was part of a community where educated people treated each other with respect, were friendly and acted with professionalism. I understood that the government’s changes to my subject had taken some unawares and that there were people out there who needed support and help with transitioning to teaching a new subject and I would give whatever I could to help them. I was enthusiastic about anything and everything to do with teaching Computing, making new friends and building a network of people I hoped would be mutual supporters.

And then I woke up from a beautiful dream.

It’s now one year on from the introduction of the new Computer Science curriculum and my eyes have been well and truly opened to some of the nasty truths that are out there, lurking in my profession.

Asking for personal help

Having been a CAS Master Teacher, I have got used to people asking for things. People asking me to come to their school, to give them a scheme of work, to advise them on XYZ. Now don’t get me wrong, I’m a strong advocate of openness, sharing and collaboration but generally when you collaborate and share both parties are meant to benefit. This sounds more like one of those dogsbody jobs that you try to get inexperienced people to do by telling them “it’ll be good for your CV” (ha ha, sucker!). Yet, this is apparently now a totally fine thing to do. Master Teachers are meant to help people in their area, they are not your personal scheme of work slave. Last week I had two emails from random people who don’t live anywhere near me, who I’ve never met, asking for pretty specific advice about teaching Computing. Working with someone with the outcome of mutual benefit for both parties is fine, even if the benefit for one party is just the satisfaction of helping someone. Expecting people to do your job for you is not fine, it’s embarrassing.

Not improving subject knowledge

CAS runs events to help Computer Science teachers get to know each other and to connect with industry pros, many of whom are very willing to help (and it’s important to let industry know how to help!) I went to a hugely helpful session a few weeks back where a local teacher shared his experience of GCSE Controlled Assessment. How many teachers turned up? 3. How many teachers say they need help yet never seem to be able to turn up to a training course or meeting? I’ll leave that as an exercise to the reader. It’s totally unprofessional and unacceptable to not have the subject knowledge you need and yet to do nothing proactive about it. If you really care you’ll make the time – as demonstrated by many amazing teachers who have gone from zero to awesome and are now helping others.

Breaking copyright

Now on to the PG Online resource copying scandal. Apparently, 1200 people were members of a Facebook group where people were illegally sharing paid PG Online resources with others. I know how long it takes to write resources having spent my entire summer holiday last year writing A-Level resources for Cambridge Press so I can imagine how much of a blow this must be to the people running PG Online. Have we really got to the stage where some teachers think it is OK to break the law? Anyone else find it totally ironic that copyright law is even covered in the things we teach?! Not cool, Computing community.

Failure to respect Creative Commons

So do free resources fare any better than the paid for ones? No! I thought part of being a teacher was the craft of putting together a series of lessons, planning out what you were going to do and how your students would progress. Arguably this is even more important if you’re not as confident in the subject matter. Yet all I see is a feeding frenzy of people after a quick fix, endless “can anyone send me a scheme of work for X” posts and a flagrant disregard for Creative Commons. Here’s an example – a resource was removed from CAS by its author, presumably after many complaints from people whose work was reproduced inside it without acknowledgement (this was later fixed). In the comments section, do we see upstanding members of the community reminding each other that plagiarism is bad (more irony here as we teach this too) or do we see comments like

“Why has it been removed? I had already downloaded it some time ago. Anyway it remains available in the resource history”

 

What! So instead of acknowledging that people who poured hard work into something deserve to be credited as authors and it is wrong not to do so, some of the people in my profession are actually more interested in screwing over the people who make the resources they use by telling others the ‘back door’ way to get at the unaccredited material. Thanks guys, really feel you’ve got my back. How is the outside world expected to take teaching seriously as a profession if we don’t respect each other’s right to be acknowledged for our work?

Yeah OK it’s a rant 😉

I know that people always say I rant in posts (which is mostly because I only remember to do a blog when I’m seriously cheesed off). However I think we as a community need to make a stand and say ‘not cool’ when this kind of thing happens. Behaviour like this is burning out the good will of so many good people who want to help, and it makes me embarrassed to have the same job title as someone who makes a total mess of teaching the subject I love. Please stop doing this. I don’t want the media to be right.

Javascript Binary to Denary

I wrote this but I am not sure I can use it for the purpose I wanted. Feel free to use if it’s useful to you!

<html>
<head>
<style>
input[type='text'] {
   font-size: 24px;
}
</style>
<script type="text/javascript">

// A quick and dirty binary to denary converter in Javascript
// I wrote it to use with Year 9 students but not sure it meets my  
// objectives, so here it is for you!
// By @codeboom codeboom.wordpress.com

function generate_denary(form) {
// Generate the denary number by multiplying the digits by their place value and adding together
   var denary = 8 * parseInt(form.first.value) + 
   4 * parseInt(form.second.value) +
   2 * parseInt(form.third.value) + 
   parseInt(form.fourth.value);
   form.denary.value = denary;
}

function generate_binary(form){

   // Reset the form if they tried to enter a number we can't make with 4 bits
   if(form.denary.value > 15) {
      alert("That number is too big to make with 4 bits!");
      form.denary.value = 1;
      form.first.value = 0;
      form.second.value = 0;
      form.third.value = 0;
      form.fourth.value = 1;
   }
   else {
      var binary = "";
      var current = form.denary.value;

      // Repeatedly divide by 2, see if there is a remainder
      // and store it as the binary digit
      for(var i=0; i<4; i++){
         var digit = current % 2;
         binary = digit + binary;
         current = Math.floor((current - digit)/2);
      }

      // Set the values you worked out into the boxes
      form.first.value = binary.charAt(0);
      form.second.value = binary.charAt(1);
      form.third.value = binary.charAt(2);
      form.fourth.value = binary.charAt(3);
   }

}
</script>

</head>
<body>
<form>
<h1>Binary number</h1>
<input type="text" name="first" style="width: 50px;" maxlength="1" onchange="generate_denary(this.form)">
<input type="text" name="second" style="width: 50px;" maxlength="1" onchange="generate_denary(this.form)">
<input type="text" name="third" style="width: 50px;" maxlength="1" onchange="generate_denary(this.form)">
<input type="text" name="fourth" style="width: 50px;" maxlength="1" onchange="generate_denary(this.form)">

<h1>Denary number</h1>
<input type="text" name="denary" onchange="generate_binary(this.form)">
</form>

</body>
</html>

Computing – Pitfalls of a new subject

I read a really good article the other day which compared learning to program to leaning to read and write in the middle ages. It goes on to give two good criticisms of the accessibility of programming to students. Firstly, setting up and choosing your language and environment is a lengthy and difficult process. For the most part, I make the decisions on behalf of my students about what language we will learn and what IDE we will use, but that’s largely because I have a degree in Computer Science. Many teachers are not in this position and rely on the experiences of others to make the choice, and are often ludicrously limited by what technicians arbitrarily decide should be “allowed on the network”.

Secondly, students are often taught programming for programming’s sake, and they find it hard to understand why and when they would actually want to use this knowledge. I totally get this one. I remember age 15 or so buying a book about JavaScript and expecting to learn how to make all manner of cool web stuff (read: stuff that was cool in the 90’s), and then feeling minorly cheesed off that it covered basic mathematical operations and alert boxes for about the first 10 pages.

I feel that encased in the first term’s worth of “oh no I have to teach Computing and I don’t know what I’m doing” panic, people are in danger of losing the plot and falling into these holes. Here are my top tips for avoiding the pitfalls I’m observing at the moment:

Share the point with the students

DON’T: The students need to and deserve to know why they are now being taught Computer Science. The answer is not “because I said so” or “because the government said so”;)

DO: Remind them of how often they use a computer, including devices they won’t even consider to be computers. Show them what they could do with the things you’re teaching them – my students love it when I tell them they could make money making web pages using the skills I’m teaching them right there right now. Make them part of your “in crowd” by helping them understand things they’ve seen before (did they know there are 10 types of people in the world?) And if you can’t persuade that one annoying “but I don’t want to be a programmer when I grow up” kid, you’ve still won because being able to create programs is just totally amazingly awesome.

You are not the most important person in the room

DON’T: Fall into the ‘sage on the stage’ trap. Your objective should not be to make yourself famous online by boasting about the most fantastico wizz bang lesson you’ve done with 15 ipads, a lego mindstorm kit and a tweeting skunk. I really don’t care how many Christmas cards you got or followers you have on Twitter.

DO: Your job is to craft your lessons so that every one of those people in front of you is able to discover the coolness of Computing for themselves. Not all of them will love it, but that’s OK. It’s not a popularity contest, it’s mainstream education.

Step away from the budget

DON’T: Reach for the departmental credit card and order some scheme of work from the first leaflet that flops into your pigeon hole/ go on a course because it’s held in the nicest looking hotel / order a set of books from the rep with the coolest hairdo etc. STOP PANIC BUYING. A lot of these companies are fearmongers who can smell your terror and want to use it to pry your school’s money from your stressed white knuckled hands. I have had a lot of marketing thrown at me this year, and I’d say about 10% of the things on offer were products I actually thought were good value for money, would result in good lessons or were something it wasn’t worth producing myself.

DO: You’re a trained teacher – you know how to produce resources, you know how to teach, you’re a professional. Take a deep breath and go and have a good look at all of the free stuff that is out there to help you – lots of it is really good. Don’t write it off because it’s free.

Everybody likes to be appreciated

DON’T: If other teachers have been kind enough to share their stuff to make your life easier, the surest way to piss them off is to copy and paste their stuff into your own document, plaster your own name on it and post it on CAS as your own resource (or with a blasé “I got some of this stuff from some other people, thanks xoxox” declaration somewhere in size 8 font).

DO: If someone made a nice resource, drop them an email and say thanks – you’ll probably make their day and end up with a new and very useful teacher buddy!

The point of the task is not to accomplish the task

DON’T: I’ve seen teachers get so enthusiastic about the end result of a programming task that they forget that the whole point isn’t the result, it’s the journey. If I set a task, let’s say I asked students to write a quiz program, it is not because I really need a quiz program in my life. If I need a quiz program I will write my own quiz program. (Well, actually I’d probably Google one.) The point of the task is the THINKING process that the students need to go through to get to the end product. There is no point setting tasks where students essentially copy out code because you’ll end up with a class set full of identical programs and no one any the wiser.

DO: Set tasks as a scaffold – something interesting to do that also covers the things you are trying to teach. Sometimes students will spend an hour doing their homework and will not come up with the answer – this is perfectly OK. If they are having trouble, make it a default behaviour for them to note down or explain to you/a friend the things they tried to do in their program and why they think their attempts didn’t work. Not completely finishing a program perfectly is fine, as long as they learnt something along the way.