The new computing curriculum

Back when I was at school, people suggested to me that I could work with computers. Believing that working with computers consisted of entering data and typing, I rejected that option outright, unable to think of anything more boring.

Then I got my hands on a ZX81, and I discovered that while using a computer might be boring, someone actually had to write the programs for others to use. That was where my interest lay, and where I found real pleasure.

I completed a degree in computing and IT, and by the end of it had a growing understanding of how much society is dependent on computing systems, and of how problems are solved by careful thinking and planning.

At this point I was also trying to earn some money, and extended the childminding training I was doing by getting a job teaching in adult education. I was teaching beginner IT classes, so while I had done all this marvellous learning, I was now teaching how to use a mouse and use basic spreadsheet formulas. It wasn’t the most inspiring of subjects, but it was enjoyable, and at least in the early days I was learning more about my subject all the time as I came across problems that others were having.

I went further by qualifying to teach in a secondary school; the business ICT was not the most interesting of topics, but there was the creative and computing sides to tempt me. The first school I trained in used Flash and Fireworks, and the second had a strong control element, and both of these encouraged me to believe that the subject was well worth teaching.

It seems to me that the trouble with ICT is that it’s easy to teach but hard to teach well. Most people these days have some level of ICT skills, but generally the subject seems to have a bad reputation as far too often it’s taught by people who have no real training in it and don’t have any real knowledge to pass on (I rush to add that this is the general impression I get, not from my very limited first hand experience).

I have sought to keep a balanced curriculum, including creative, business and more technical elements, within the current guidelines, and I feel this is really the best way to go. The skills of word processing, basic spreadsheets and (to a lesser extent) databases are still important, even if you’re only running a home. Being able to balance a budget using a spreadsheet, write a well laid out letter, use the web efficiently and understand the consequences of using ICT for a business will be applicable to everyone, surely. Being able to express yourself creatively using ICT is also important; I’ve long had admiration for those who take ideas from the world around them and modify and develop them through use of technology, and I feel creativity is essential to living well. That’s not to say the new curriculum is wrong: you can’t possibly make the most of computers without having at least a basic understanding of how they work and the implications of them.

Now the curriculum is being completely overhauled. I should be rejoicing: it’s changing to embrace the side of the subject that first attracted me. I only became interested in computers when I found that I could write my own programs; surely I should welcome the chance to encourage that interest in others?

Sadly, things are not that straightforward. The draft curriculum does seem to be written in a rather biased way; maybe this is simply a reflection of the extra detail needed for the new elements, but it would be a shame if in the pressure to include computing elements the creative side was lost, not to mention the less interesting but still important business ICT.

Partly prompted by these changes, there are discussions taking place on the future of the subject: there are fears that the focus on computing will drive students away, or that the lack of teachers available to actually teach computing will mean that the subject will become still more watered down and weakened. I was shocked when I did my training to discover that while to teach maths you had to have a degree containing at least 50% maths (and that means maths, not accounting or economics), to teach ICT all you needed was an A level or equivalent experience.

There are already schools where ICT is taught in a cross-curricular way rather than in discrete lessons, and this worries me; while there are teachers who will encourage the use of ICT to complete work, are they actually prepared to teach the ICT skills needed, or are they dependent on the skills the students already have? Will they merely take advantage of the fact that students have a basic ability to type and correct documents, or are they willing to spend time teaching how to use audacity, for example, to create a podcast, thereby increasing oral skills? As long as there are discrete ICT lessons where the students can learn these specific skills, I can imagine some teachers taking advantage of those skills, always assuming they have the knowledge themselves to support them, but I don’t see much space in an already crowded syllabus for the extra teaching of ICT skills alongside the specific subject knowledge, which is a shame as using two separate skill sets will surely develop students’ thinking skills and ability to relate learning to different areas.

The new curriculum is still under consultation, and I have to trust that by the end of the consultation period it will feel more balanced. In the meantime, I intend to do the best I can to encourage good ICT and computing teaching, by developing and offering materials to help support teachers in the new curriculum, including cross-curricular learning. It worries me, for example, that primary teachers are expected to teach computing, which for many must be completely new and alien. I also see many opportunities to combine ICT with other subjects, but feel that often teachers just don’t have the time to investigate and create materials suitable.

I’ve no idea how this will pan out, just as I had no idea when I started this blog how it would develop, but it’s a good excuse for me to put my own skills and creativity to use, and to extend my own ability and knowledge. And so www.coinlea.co.uk is born. Not much there yet, but I’ll be adding resources as I develop them (or find them in my filing system!), safe in the justification that as I’m offering them to others I don’t need to feel that time spent on them is mostly wasted.

Feel free to take a look, make use of anything you fancy and suggest anything you’d like to see in there.

 

 

Advertisements

codea – coding on ipad for ipad

While browsing code.org last night I came across a link to an ipad game that promised to help teach sequencing and control – a game called cargo-bot. There was mention of the app that was used to create it as well, so I went off to investigate.

a screen of cargo bot, showing a puzzle

cargo-bot, showing all tools available. Match the pattern at the top to complete.

Cargo-bot itself is free, and provides exactly what was promised – a way to practise sequencing instructions. If you’ve ever played with light-bot, it’s very similar, but also offers conditional instructions. The aim is to move the coloured crates and stack them in the right place in the right order, using only commands like left, right and down, plus the facility to create subroutines and loops.

The really interesting part comes when you start looking into how Cargo-Bot was created. An app called Codea, which costs £6.99 ($9.99 in the US, I believe), provides a way to code directly onto the ipad using Lua. The coding for several examples is included, and this includes the complete listing and graphics bundle for cargo-bot.

codea's front page

codea’s front page, showing example projects and link to wiki and tutorials

While learning yet another language isn’t necessarily the best idea, I couldn’t resist, and so bought and installed the app and started playing.

my game in action

my game in action

Within about an hour I’d produced my own program that drew a character on screen who responded both to gravity (tipping the pad) and touch.

The longest aspect of this coding was having to switch constantly from the app itself to the wiki with its tutorials, find the right place in the tutorial and then swap back again and try to remember. I did try to borrow another ipad so I could use both at once, but ended up reverting to the tried and tested method of paper and pen!

codea's editor adds extra buttons to help type in code

editor, showing the quick buttons on the top row

The editor seems to provide a lot of help, for example a button to provide brackets, another to provide speech marks, both leaving the cursor in the middle for typing, and a quick += button. Pop-ups provide help with coding, and I did eventually find a comprehensive in-app help system.

built in reference guide

built in reference guide

There are a couple of graphics bundles provided, plus a program that lets you design your own sprites pixel by pixel. You can also link it to your dropbox account and use graphics you’ve placed in there.

I haven’t looked into how you export the game from codea to become a stand-alone app, but cargo-bot is living proof that it can be done and the game can then become part of the app store.

Even without this, the app provides a fascinating way to write your own code not only for ipad but on the ipad itself.  While I wouldn’t rush out and buy a class set of ipads just for this, given the opportunity to try it out I think it would be an excellent way to encourage interest in those who want to try coding. There’s a wiki that’s easily available from within the app, which includes tutorials, and while typing on an ipad can be fiddly, the editor provides enough help to take away a lot of the pain.

code listing

my complete code listing

My program has the sprite moving across the screen to respond to gravity (tilt the pad and it moves) and to touch (it jumps to the touch point).

Code is colour coded and clear to read, with parameter help and code hints. Auto completion options help to make ipad coding a straightforward affair.

One thing that I’m reminded of when looking at this is that while once upon a time it just felt like there was hardware and there was software, nowadays there are the hardware providers, the end product coders and a whole variety of people in the middle, who are providing things like game engines, physics engines and so on – the steps in the middle seem to be growing fast, each level building on the last to produce an end product that is the result of many hours of work by many people.

Teaching game

teach logo

working title for game

I have an irrepressible habit of turning everything I can into a game, so when searching round for a game idea I could create for myself, my job seemed an obvious inspiration. One game I’ve enjoyed playing is Diner Dash, and I fancied the idea of creating a similar sort of game about balancing the needs of a class of students and reaching the goal of good exam marks.

It also seems to be the ideal type of game for object oriented programming, with classes of students extended into sub-classes of different types of student, all of whom have slightly different needs. One-to-one teaching is straightforward, but the wider the variety of students in the class the tougher it will be to achieve success. The possibilities are endless!

Having mapped out the original idea, I need to start with a single student and work out the balances between the different variables to achieve reasonable gameplay.

I decided to stick to Python for now, although other options are Flash, Greenfoot or Scratch. Each of these offer easier access to graphics, but if we are to be using Python in school I need to have as much experience in it as possible. Flash also has the drawback of not being available on devices using iOS, which suggests to me that its days are limited, and Scratch, while great for first experiments, feels too self-contained to have wider use, while Python and Java/Greenfoot are more widespread and will run on a wider variety of machines and situations.

Next issue was the choice of editor. I started writing my code in Geany, as this is more compatible with pygame and other GUI modules, but then remembered that for the earliest versions it’s easier to test as I go along and for that I need IDLE, which allows me to type in commands directly. Having written out a first example of my code in Geany, I ran it in IDLE, tested some of it, and then amended the code and tried it again. Here I hit the first problem: I suspect that IDLE and Geany handle the indenting slightly differently, and so the code written in the two different editors threw spacing/tabbing errors. Having forgotten my earlier learning and not kept a log or changed file version, it took a bit of fiddling before I was off again, but this time I kept a log open to keep track of progress.

Adding in complexity to make the variables more interdependent proved successful on one level, but I need to know exactly what effect each variable is having, so at this point I’m moving to a spreadsheet so that I can explore the impact of different variables and weightings on the overall game more easily. I also need to draw up a proper flowchart so I can see what is happening.

I’m beginning to realise that this game will take lots of skill in lots of different areas: a spreadsheet model to explore the effects of the variables, maths skills to play around with the weightings, an understanding of game mechanics to achieve a playable game, graphics design to create the graphics needed, writing skills to write game instructions and even music skills to create music for it. And that’s before I even get to the coding skills!

At this point also I’m beginning to understand more of what my students will need to do when writing up their coursework, and appreciating the need to keep careful records of design ideas and progress. And thinking of the fun I’ll have playing with the settings to make sure that I don’t hit problems with transferring back to Geany as my editor!

 

on computers and female geekism

computer kit with lots of components

build your own computer kit

I and most of my family headed to Margate today for GEEK 2013 (Games Expo East Kent). I and one son went last year and enjoyed the talks and discussions that took place. I was disappointed that there didn’t seem to be scheduled talks this year, and I felt the whole event was much more about looking back and being a games consumer than looking forward and being a games creator, whereas last year the balance was better. Still, there was the main hall full of games consoles for people to play (didn’t spot any ZX81s this year, but spotted a couple of BBCs and Commodores with things like 10 John was here 20 goto 10!) and the upper hall with stalls and exhibitions.

Youngest son enjoyed the halo and minecraft most, of course. Hubby and I found more of interest in the upper hall, where alongside the cosplay there were also electronics demonstrations. The Pi and Arduino workshops turned out to be a couple of people showing what they were and promoting them, and I had an interesting chat with one man about computers and schools and programming and electronics.  There was also a gentleman selling kits to build your own computer. The kits cost £20, and the end result was a tiny circuit board, smaller than a pi or arduino, that included a fully working keyboard (8 keys), plugs into a TV and can be programmed to produce simple games – think of a ZX81 DIY kit, but much smaller.

We decided to buy two, one each, and left the man with our padded envelopes full of components. The instructions are available via the website, and there is also a support group who we are told are active in producing listings and ideas.

Expect to read more about this project over the coming weeks as and when I get a chance to build it and play with it, but the other thing that struck me during the day was how male-oriented the event was. Everywhere you looked, there were boys crowded around screens, playing, watching, discussing, and females were definitely in the minority. There were a couple of talks in the end, unadvertised but announced on the day, one about the history of games and promoting the speaker’s book, and another from a couple who were promoting their film on the games industry in the UK, and through those there was also definitely the message that the games industry is dominated by men. (There was another unadvertised talk, too, a Q and A with indie games developers, but that was scheduled at the same time as the movie talk, which was rather irritating as I would have liked to attend both.)

So why is the computer industry so male orientated? This was something I pondered as I returned to the house and sorted out making tea and organising the washing machine and dryer, pottering around doing various household tasks before finally managing to sit down and get the laptop out.

Is that part of the reason? That the boys who dabbled in computers grew up into men who dabbled with computers, while the girls who dabbled grew up to take care of the house and children and had no time left for playing? That the boys are eager to try things, and the girls much more likely to step back and watch them? The same thing that makes men more likely to figure things out for themselves and women more likely to ask for help? The same thing that makes men more likely to be competitive and women more likely to be co-operative?

Is this innate or is it culture-related? While men are those making games, they will make games that appeal to men, which means men are more likely to want to enter the industry and make more games. While women are content to step back and let the men get their way, how can they change things?

When I studied a foundation course with the open university, as part of the science module we learnt about how it was not until women joined the scientists that a whole new side of the way gorillas behaved was recognised. In the same way, it’s not until women really push themselves into the computer industry that the industry will grow properly and become more balanced.

The idea of introducing computing right from the start of the educational progress is a big step towards that, if done in the right way: if we can introduce it in a way that doesn’t alienate half the population. In the same way that we need to get over this “cool to be useless at maths” attitude, we need to get over the “I can do email and facebook, what more do I need” attitude about computers.

Getting back to the kit, I feel like I’m on a quest to find out how computers really do work. The programming side is straightforward, and I understand the theory/software side of things. What I don’t understand is how the hardware makes these things happen. That’s part of what my electronics experimentation is about, and I welcome this chance to take my knowledge back a stage further, but at some stage I still want to know how the software is acted on, how the processors themselves work.

In the meantime, it’s back to school next week…

 

codeword success

codeword gui version 1

first idea for a GUI

It only took a screenshot of my project in action to put myself back on the right path, and a very pleasant afternoon was spent adding the last piece of functionality to it – as a reminder, it’s a program that allows me to enter the settings for a codeword grid, which is a puzzle that looks like a crossword but with number standing for letters. The user tries out a letter in place of a number and eventually solves the whole puzzle, with each number representing a different letter. My program does not create or provide puzzles, but instead you can use it as a tool to help solve commercially available puzzles, to save scrubbing out incorrect guesses.

I had got it to the point where it would display the grid in the console and accept changes via direct entry in the console, so what was left to do was to provide a list of what letters had been used already and to not allow the same letter to be used for two different numbers.

Writing code for the list proved to be straightforward – rather than delving into different data types and debating which was best, I opted for a simple list, with the first entry at index 0 set to “*” and the rest of the entries set to ” ” (space). Adding a letter for a specific number then involved setting the list at that index to the letter, and resetting involved setting the entry back to a space.

I could then call these list functions as part of the setting and resetting a letter, and check whether a letter had been used already before allowing it to be entered into the grid.

My code at the moment has very little help for the user (hence part of my problems yesterday!) and it has very little error checking for input, but neither of these is a real issue as the intention is to put a GUI on the front of the code, to handle display and entries.

And here I hit the next issues: issue one is how to create a GUI in python and issue two is which editor to use to create it.

The book I’ve been working from suggests pythoncard, but I have not been able to install this successfully. I’ve managed to establish that Tkinter is already available as part of the python standard library, but it carries a warning that it will not run with the basic python IDLE, as that does not handle events properly, so that then leaves me looking around for an editor that will do the job.

I enjoy working with the IDLE, as it’s incredibly straightforward, and I object to using more time figuring out how to use an editor than I spend actually coding. I’ve got Eclipse that I’ve used for Java, and I’m currently looking into using that with a pydev plugin, but I’m starting to get frustrated by all these different options, which all seem designed to provide high levels of support with very complex projects and make life very complicated for the casual user who just wants to create a simple project.

The other IDE that I’m trying out is Geany, which I recognise as the software that originally came on my raspberry pi, and so I have used already for python. I’ve got it running with my codeword software, but when it gets to the end of the program, which goes as far as creating the grid, the program then seems to terminate without allowing me to enter further commands via the console. If I can put a GUI onto the program, then the console won’t be needed anyway, but it’s just another frustrating step.

I think with fondness of the days when I learnt programming, when we used C++ with an IDE that allowed us to design a GUI and attach code to it really easily. Even the Java editor we used back in those days seemed far more straightforward, even though I never did really get the hang of the different containers that you could use for java layouts.

Surely these things should be getting easier, not more complex?

Incidentally I’m now running a log of my project, with notes for each version change on what I’m attempting to do. Each feature is being developed piece by piece, with constant resaves as different versions – all versions ending in 4X are the basic version, while 5X added in the list and 6X used the list to check whether the letter was available before using it. I’ve also included screenshots of the project in action and a first sketch of what the interface might look like.

Hopefully if I end up leaving the project again for an extended period (for example while I build up my GUI skills) this log will make it much easier next time to pick it up and catch up with progress. I can’t say I understand every line of the code I’ve written or could duplicate it easily, but at least I know enough to know what it does and how to use it, and which functions are available.

 

Picking up the pieces

codeword throwing an errorIt’s been a while – a hectic six weeks of term, until finally we’ve reached half term and I have time to try to pick up the pieces of my technical developments and see if I can make progress with them.

I left a few projects hovering: there’s the virtual pet that I started in Scratch and app inventor, the Simple Simon game that I made in Scratch and started to convert to app inventor, the general learning I was doing with Python and the codeword project that I started in Python.

It was the codeword project that’s been my ambition for longest, and the project that I remember as the furthest developed, so that’s the one I’ve opted for first. And there I hit my first problem.

Just in trying to pick up the pieces of this project, I’ve learned several things: that it’s really hard to pick up a complex project after so long, that without any real structure it’s difficult to pick it apart and get an overview, and that with no log of changes it’s hard to even find which version to use! I’ve got versions of the file from codeword to codeword6, plus codeword4a and codeword4b. I’ve gone back to codeword4b, as that contained a note saying it was the latest – but of course there’s nothing to say I didn’t progress further and just not remove the note. I remember the project being workable via command line codes, but now it doesn’t seem to respond to even the simplest of commands.

This blog is probably the place I’ve documented my project the most, so I guess I’ll have to read back and see if it’s any help. In the meantime, I really need to pick the code apart and understand it thoroughly, and produce some sort of map or algorithm so that I know how it all ties together – although algorithms/flowcharts become rather complicated when they’re event driven rather than procedural!

In the meantime I’ve learnt that even the most straightforward of projects needs to be thoroughly documented and planned before coding, and that actively writing and testing code is just a small part of any software project. Managing your code so that it can be easily understood and followed, and leaving some sort of explanation to progress, and building in error checking are also incredibly important.

I’ve also proved the point that software needs concentrated effort to get to grips with, and picking it up only for a short while can be counterproductive, as it can take so long to catch up with where you were that you never actually have time to make proper progress. On the other hand, maybe  little and often isn’t too much of a problem – but little and seldom definitely is a no-no!

A change of strategy

We’ve been plodding along for a few weeks now with Python, and a few boys in particular have amused me with the way they’ve played with the code we’ve used, particularly input and loops:

Enter password:

Wrong password, this computer will self destruct in 10..9..8..

Downloading virus…

downloading virus…

downloading virus…

We also had some fun with making the computers beep (thanks codeboom!).

But overall it felt slow, and some of the lower ability kids were finding it hard going.  Bear in mind that this cohort has done very little coding previously, if any at all, and they’ve been finding it very difficult to think in the logical way needed to build up algorithms.

So this afternoon we tried out Greenfoot.  I had originally considered it as a learning tool, but rejected it because coursework for GCSE seems console-biased, and it seemed any editor that would edit Java to run in the console seemed unnecessarily complex for our use.  However, I became interested to see what the kids would make of it.

We started with Mik’s videos, and soon we had turtles crawling and spinning merrily on screen.  The students who had previously seemed to lack motivation started experimenting and playing, and by the end of the lesson, curses over brackets and semi-colons aside, all agreed that they would like to see more Greenfoot.  Most importantly, they had experienced the wow factor that I had felt was lacking previously.

Scratch is misleading, in my opinion: it looks as though it’s designed for younger kids, and it’s very easy to click blocks together and do something, but in fact it can get very complex very quickly when they want to do something specific, and it can be frustrating when they see all the blocks there but don’t understand how to use them, especially when their perception is that it should be easy because of the child-like design.

Greenfoot can be just as complex, but it’s revealed part by part as they learn, rather than thrown at them all at once.  It feels grown-up, and produces effective, visible, entertaining results very quickly.

Python is described as easy, and on some levels it is, but Greenfoot’s way of laying out code and colouring the blocks makes it straightforward to understand and read, and the braces indicate clearly where code blocks begin and end, and the Greenfoot environment makes it much easier than standard Java to work in.

So we’ll continue with Greenfoot for a little longer, looking at the same constructs – if statements, loops etc – as we have in Python, and I’ll investigate the possibility of a simple editor that will help us create programs easily without panicking over how complex it is.

Oh, and I might investigate Processing further as well – as I understand it, that also uses Java, and is also very visual, enabling students to see and visualise the results of their code much more easily.  That, as I see it, is the most useful and efficient way for them to learn, rather than plugging in lots of text-based code.  They’re only 14/15 year olds, after all.