Sunday, 15 June 2014

Coding is either an everyday basic skill or an elite profession - it can't be both


Let's start by mentioning that I can't write code - indeed I would know where to start. But I know it is important and that the ability to construct computer programmes will be central to the future of civilisation. So I am sympathetic to those who believe that more people - perhaps everybody - should be given the basics of coding:

We at the Year of Code are going to help change that. The new computing curriculum starts this September, and it puts coding at the heart of IT education. Coding is the art of telling a computer how to perform complex tasks. Once you know how to code, you can create virtual worlds within the computer where the only limit on what is possible is your imagination. We want to put this power into the hands and hearts of every child in Britain.

I applaud this initiative - it liberates coding from being the domain of specially trained folk and results in a broader understanding of how we can make the computing tools around us work for us.  However there's a dilemma - the code being written is giving instructions to important things like vehicles, heating systems and the delivery of medication. We want it to work.

So there's a bunch of people who want to control who can (and cannot) be allowed to write code:

Frailey suggests that software engineers should be required to demonstrate a certain level of expertise before offering their services to the public, just like professionals in disciplines like medicine and law.

Indeed some 30 states in the USA now require software engineers to take (and pass) a licencing examination before they can work on projects that "affect public safety". It's pretty simple to see that such a definition has the capacity to cover almost everything that involves programming computers and especially the programming of tools in the so-called "internet of things".

We have two different pressures - one the support among professional code-writers for licencing and the other a movement to democratize coding by giving the skills to everyone. It is difficult to encompass both things - coding is either a basic skill that everyone can use or it's a highly sophisticated activity akin to heart surgery requiring specially licenced individuals. In the latter case, it is in the interests of the licence issuer and the person licenced to extend the requirement beyond high risk areas (programming the computer that will aid in the heart surgery, for example) to encompass a much wider range of activities. Programming computers, rather than being a craft skill, becomes a licenced 'engineering' function, the very opposite of the world envisaged by the people at Year of Code.



Nigel Sedgwick said...

Part 1 of 2.

Simon writes of his acceptance of the importance of computer programming, which is great. He writes that he cannot and would not (not being a necessary insertion, I assume) know where to start.

But he could start. As written on the opening page of Year of Code, it's easier than you think.

As written by Simon and in the linked Guardian article by Dan Crow, the concept of programming is really important to the modern world.

As with any subject taught at school, there is some utility for living in the modern world. There is also the very important understanding of the basis concepts, irrespective of becoming a worker in the field. We teach maths; we teach science; most do not become mathematicians or scientists - or even engineers or technicians. We teach English literature; we teach foreign languages; most do not become linguists or translators, or move to a foreign country. We teach geography and history; likewise to those not seeking career opportunities for which those are the key subjects. But it is good to understand what these subjects are for and to understand a few bits (reading, writing, arithmetic) that are useful to all. And to have enough of a grasp for working and living in the big wide world.

For computer programming, IMHO, the key issue is to learn the very basics of an imperative programming language: sequence, selection and iteration. And learn that everything springs from the more complex combination of these 3 types of programming language statement. Then there is the concept of abstraction, that we also learn in our teen years with algebra - even if we hate it, rarely use it, and forget nearly all of it. Knowing there is such a thing is important, and having some basic grasp that we once knew what it was.

However, in the Guardian, David Crow writes: "Anyone can learn to code. In a few hours you can pick up the basic skills and in a few weeks you will be able to build useful applications and websites." I think this is going a bit far, especially when we are talking about educating the young. And how many weeks are we going to allocate to teaching website design, and usage of special website creation tools - which is largely an issue of static data definition? As with years ago, when there were teachers and educationalists who thought teaching use of a word processor, spreadsheet and database packages was the same as teaching computer programming, we need to avoid confusing apples and pears.

To be continued.

Nigel Sedgwick said...

Part 2 of 2.

Back to Simon and computer programming. The big difficulty is that, in the modern world, we all use complicated machines that embody computers and real massively large and sophisticated computer programs. By comparison, the simple steps of sequence, selection and iteration - and the examples likely to be used - look pointless, and so ineffective. For this reason, we need to start young with the first simple steps - such that one retains interest by the novelty of what one is able to do. As this is likely to pre-date the teaching of algebra by several years, there needs to be a replacement of the teaching of the concept of logical abstraction. This needs to be followed by carefully selected follow-on steps, up to say the age of 16, in which more complicated abstractions and applications are introduced - always trying to stay a bit ahead of the learning activity being viewed as trivial and so pointless. One particular way of doing this is to combine the learning of programming with other learning activities, as a time-saving skill one learns on the job. So some programming could be combined with lessons in science (particularly physics) and in mathematics, where programming can be taught, for example, as use of a more sophisticated calculator, to save time and effort. Computer programming to solve games can also be good fun: try Sudoku - programming it is relatively easy and short, if you allow the computer to do what people cannot: remember multiple partial game positions and guess and backtrack until one gets a sequence of guesses that go through to the end.

Which computer programming languages to use will, undoubtedly, become a heated discussion. This will probably be reminiscent of battles in the 1970s between FORTRAN and ALGOL, and then the introduction of PASCAL; all of this being on the scientific side, set against the use of COBOL for business. I'm going to avoid getting into the modern world on this issue here, but it will doubtless cover such languages as VISUAL BASIC and LOGO, with more modern languages like PYTHON and the general concept of Object Oriented Programming (and much else on programming languages for children to learn first) being thrown in.

Best regards