January 22nd, 2012
|10:14 am - Programming languages in schools|
I have just written a post on the new computing curriculum for schools. People might be interested in the list of suggested programming languages. This is not mandated, but I think it is interesting. It is found on page 13.
Every student should have repeated opportunities to design, write, run and debug an executable program. What an executable program means can range widely depending on the level of the student and the amount of time available. The following are included in programming:
- Small domain-specific languages, such as instructions to a simple robot, or Logo-style turtle.
- Visual languages such as Scratch BYOB or Kodu.
- Text-based languages, such as C#, C++, Java, Pascal, PHP, Python, Visual Basic, and so on.
- Spreadsheet formulae
|Date:||January 22nd, 2012 11:44 am (UTC)|| |
I'd be more inclined to start with a language with a really good Integrated Development Environment (IDE). I haven't done any C#, but Visual Basic (fifteen years ago!) made it really easy to get started in writing things with GUIs, and Eclipse is a great IDE for Java.
Oh, please no, not Visual Basic. (shudders)
I'm not sure whether concentrating on IDEs is a good idea, because they could learn the IDE rather than the language, if you see what I mean. On the other hand, IDEs do often make debugging easier.
It's rather interesting how they choose to categorize the languages, particularly what they call "text-based languages" and "scripting languages", since some would call PHP and Python scripting languages. Do you know how they decided on the categories?
1) You can do cool stuff with it, which makes it attractive to use.
2) It is rich enough in its expressiveness that one can introduce quite a few programming concepts with it (including object-oriented programming, which is an advanced concept).
3) All you need to use it is a HTML browser and a text editor.
4) You don't have to declare variables before using them, which means that it's less fussy, but also that one is more vulnerable to typos.
Mind you, in one sense it doesn't matter what the language is - one can program badly in any language, especially if one is badly taught. It isn't the language that matters, it's the discipline of programming itself, which is transferrable to any language. Which I suppose means that the first language they are taught is important, if it's a language that encourages good habits.
I know nothing about how they arrived at this list. From my experience on committees people made suggestions for social reasons, within the group dynamics.
I am not an actual teacher, but this is how I would approach this:
"Repeated opportunities" = at least three times during their school life?
I mis-read "Logo-style turtle" as "Lego-style turtle", so I would buy some programmable bricks, and get people to make turtles..... There are great online communities, I understand, and teaching the children how to ask for help online / give help online is surely enough, I won't actually have to know anything!
Spreadsheet formulae is another easy one with lots of online teach-yourself stuff.
And then I would give up with the list and teach flowcharting and process design.
I think Logo is a nice language for little kids, and the turtle rushing about the floor. People scorn it though.
|Date:||January 22nd, 2012 01:48 pm (UTC)|| |
From an engineering perspective:
Arduino programming ought to be within the grasp of any secondary-level child, and will also teach a little about electronics. It is basically C with some C++ features, with some of the complexities hidden. There's a lot of satisfaction in programming that does something, even if that is just blinking some lights or driving a little electric motor.
If I didn't have to teach C (as a prerequisite for other things), I'd go for Python. I used to use Perl, which had a similar philosophy that you shouldn't have to know everything about the language to be able to do fairly complex tasks. Python has clearer syntax, and because of the emphasis on indentation it is much less easy to write messy code (one of my perpetual struggles with engineers, who tend to take the "if it works that's all that matters" approach, is to convince them that my insistence on neat code layout and proper indentation is not because I am some sort of Wildean aesthete, but because it is important).
Does anyone use Pascal any more? Outside of Delphi, that is?
Interesting that it doesn't mention graphical programming - we've had very good results teaching LabVIEW to students, and Lego MindStorms uses a variant of that. Again, not just writing a program to print stuff, but to communicate with objects in the outside world.
I just wrote a book for a curriculum in another country which is based around Pascal and pseudocode, so it is still used. I think it's a good teaching language.
The problem with a curriculum is that it either mandates, and gets out of date, or leaves the question open, and can lead to confusion.
Well given that the vast majority of ICT teachers in the country don't actually have computer science degrees, and are, in the main, media studies backgrounds (this is a fact, btw), I'd say most of them are probably a bit screwed.
Quite. The curriculum is a sideshow compared to the development of teacher skills. Possibly ICT should be delivered by peripatetic experts, like learning musical instruments.
|Date:||January 22nd, 2012 04:08 pm (UTC)|| |
I think it depends whether you want to get across some of the trickier concepts (I reintroduced pointers and call by address into the C course when I took it over a few years ago because I agree that sort of thing is important at university level especially when many of them will go on to an embedded systems programming module), or whether you want to get across some of the more basic elements of programming (loops, variables including objects, why on earth you would want to write a computer program yourself). At school level, writing simple programs, I don't think you'd need to get into the reasons for some of the side-effects you mention because they would be unlikely to crop up.
On the other hand, the lack of explicit variable declaration is a problem (in Perl, you can get round this by saying "use strict", which prevents you from introducing new variables without explictly declaring them). I had a student once who was so dyslexic he couldn't spell "hours" consistently, and he found programming a nightmare because the compiler kept saying "no such variable" and he couldn't spot his own spelling mistakes. With a language like Python, if you mis-spell a variable as "houres" halfway through a program, that's legitimate, and school students are much more likely to make that sort of mistake.
|Date:||January 22nd, 2012 06:33 pm (UTC)|| |
I have a knee-jerk reaction to C#, since it's a Microsoft invention, but I have absolutely no experience of the language itself upon which to base that. However, a curriculum should not lock you into paying money to a specific vendor of software, whoever it happens to be.
I'd recommend Java above both C++ and Pascal; Pascal's too dated, and C++ is, IMO, enough rope. I'd much rather people used C than C++.
I don't have a preference between Python or PHP; I hate Python's enforced indentation, but have nothing against it beyond that. Perl's too mad for a teaching language: it's write-only code, and it's far too easy to make a mistake that has an actual special meaning.
Go's on the up, it seems, but I don't know anything about it myself.
No Intercal? :-)
I can remember listening to a radio debate about thirty years ago and some employer was saying school kids should learn software package x which he used in his company. And of course that software was extinct before those kids would have even left school. So, my argument is that languages need to be taught via some kind of exemplary teaching language and development environment, which perhaps doesn't exist.
What programming language(s) to use in teaching is an age-old debate. About the only thing that you can say with any certainty, is that whatever language you choose, it's pretty sure it'll be obsolete by the time the student finishes school. Apart from that, mostly it's saddening to see the inclusion of languages that are held hostage by one single company (Microsoft and Adobe, respectively).
Yes, the issues are precisely those. The writers of this curriculum should be addressing those questions.
I think there's an argument that schools should teach concepts via a specialist teaching language like Logo or Pascal. However those are both extremely old fashioned now. But really a curriculum should begin by considering issues like that.
The curriculum is introduced with an endorsement by Microsoft and by Google, and this govt wants to involve commercial companies in the development of the computing curriculum. It is felt this will make content more relevant to employment, but as you say there is a problem with obsolescence, and a second problem of being too closely aligned to a particular company.
I asked Mr EA and I think the gist of his answer was that the language is far less important than learning the logical basis behind programming. I think it's tremendously important to use specialist teachers who know how to get across programming concepts, while making the exercises fun and relevant to the kids.
I agree with him about the language and I am coming round to the idea that we need a new teaching language and teaching approach.
|Date:||January 22nd, 2012 11:54 pm (UTC)|| |
This is COMPLETELY IRRELEVANT but I wondered if you might be interested in these Misfits vids
, as recommended/introduced by heyiya
? I didn't persevere past the first ep of Misfits
, so I haven't looked at the vids, but I always like your posts about it and the vids sounded like they might be up your street...
Oh, thank you, I will look at those tonight when I get back from work. I hope you are having a good time in Australia :-)
Thank you for that, what an interesting concept. I love the way you made the class work without teacher control. My daughter is doing one of her degree courses at a US university via an online thing.