Of course we live in a world where computers are playing a very important part of everyday civilized life so it is important that children have some understanding of them. But does that mean that that every child should be able to program them? Might it be just as important to teach them what is happening at the electronics level? Or to use word processing tools? Or graphic art packages? It is important to realise how fast technology is changing and existing I.T. style jobs may have become redundant within their lifetime. I am not going to enter this debate but to ask a far more profound question:
Should we teach children to “think like machines” or should we build machines that “think like people”?
Or is it already too late?
We all know of one case where a technological fix has become and established standard – with so many people taking it for granted that an alternative hardly gets a look in. The QWERTY keyboard dates from the 1870s and was devised to solve some technical problems that affected one particular design of early typewriter. Now so many millions (perhaps billions) of people have brains which have become adapted to this particular layout that no other layout is going to be economically acceptable. When there are two competing designs for a consumer product the successful one will be the first to reach a critical mass in term of the number of users. Some years ago there was a battle between VHS and Betamax tape formats – and while Betamax was technically the better of the two it lost out because of the way VHS marketed and was the first to achieve critical mass.
More recently social networking packages such as twitter and facebook are successful because they have a critical mass of users. In fact many people have tried to establish such packages – but it didn’t matter how good they were, they failed if they didn’t achieve enough users to make them a worthwhile means of social exchange. In fact the prize example of a technical fix solution we all take for granted is the World Wide Web. The web currently has about 3 billion users and about 50 billion web pages are indexed by google. But the Web, and the underlying Internet, started small and have grown over the years. There are many technical problems, including security and privacy issues, and these are address kludge after kludge. While it might be possible to design a technically far better system we a stuck with what we have for the same reason we are stuck with QWERTY – the user opposition to a change would make a move to a “better” system impractical. Humans are much more adaptable than computer systems – so is some cases it is easier to educate people to accept sub-optimal technology than to improve the technology.
So back to the question of teaching primary school children to program. Society is addicted to the power of the modern computer so children should find it beneficial to be able to “think computer.” But of course we are training children to think this way because computers are unable to “think human”.
If we ask why computers don’t “think human” the reason is quite simple – they were never designed to. People are naturally not very good at mathematics and even when trained are not very reliable calculators. Computers were originally designed to handle highly repetitive calculations fast and accurately because people were not able to do the task efficiently. For a computer to work there had to be someone to create the algorithm and then code it up to form a program, everything being reduced to strings on numbers, addressed numerically. For a task to be economical a program must be able to do the required task enough times to pay for the cost of programming and running the computer. Thus a task such as providing a hole in the wall cash machine which will be used billions of times is economical because it is more efficient for both the bank (less staff needed) and the user (less time queuing). In addition the approach is assumed to be the best possible approach because work by Turing has proved it to be a “universal machine” so that there is no point in looking for anything better.
If you look at the research behind computer technology you will find that for the first 25 years of so the only “human” related research was to design better procedural languages to program the computer and the first real look at the human interface was carried out at Xerox Parc – which effectively led to the design of windows software. But if you look at this pioneering work it started from the assumption that the stored program computer was inherently alien to the human mind, and had to be hidden by layers of cleverly crafted software. They never questioned whether it was the best underlying technology if you wanted an electronic information processing system to work with humans. They took it for granted that an information processing machine must have a human-unfriendly “black box” at it centre and this “fact” is a fundamental understanding in the computer industry.
Of course there have been some large projects that have failed and they usually involve human users and messy real world data. In the NHS a comprehensive medical data base of patient records must allow for the fact that it has to deal with many different medical staff, with patients who may be vague about their symptoms and have several medical problems at once, many different diseases, where sometimes the symptoms are not well understood or change as a result of mutation, many diagnostic tests with new ones coming out every day, and many new medicines as well as long established ones. Such problems involve so many possible variations, including real time changes which could not be easily predicted that it is impractical, if not impossible, to predefine the algorithms for the task. Of course the human brain is naturally adapted to handling open-ended tasks – and the new-born infant has to build up a working mental model of the real world from nothing.
Perhaps what we want is a system which works like a human when faced with open-ended real world problems.
In fact I stumbled on a possible answer by accident in 1967. What one needs is a different model and (the following wording has the benefit of hindsight) my way of simplifying the problem was to stand as far back from the problem as possible. My starting point was to assume that I wanted an algorithm which would process all possible open-ended tasks which humans can do. This would include tasks about which I knew nothing. I assumed the human users could name the entities relevant to their task and organise them (at least locally) into sets and partitions of sets. The algorithm needed to store these sets and compare them to make logical deductions by pattern recognition because ignorance of the task makes it impossible to a priori break the task into “rules” and “data.” Finally introducing recursion allows unlimited nesting of sets within sets so there is no upper limit to the depth of nesting of sets. The result was a proposal for a “white box” information processor – and the symbolic assembly language was CODIL. The approach is clearly novel - see Why using CODIL is completely different to programming a computer – it has been demonstrated on a wide range of applications and MicroCODIL attracted rave reviews.
So why did CODIL fail to attract the funding it needed? There were a number of factors (including the knock on effects of a family suicide) but one of the reason is very relevant to teaching primary school children programming. CODIL is optimised towards helping users to look for creative solutions to open ended information processing problems, while the stored program computer approach is more about finding precise solutions to closed problems (i.e. problems where the task can be exactly predefined). The two approaches are complementary but overlap – in that CODIL can tackle closed problems (but not necessarily efficiently) because closed problems are a proper subset of open problems. However the problem is that the stored program “got there first” – just like QWERTY and VHS – and got critical mass (and what a mass if you consider it in terms of cumulative investment) many years before CODIL was first thought of. Since 1967 the stored program computer approach is even more deeply ingrained in society. Our minds are all infected with “computer think” – and it is taken for granted that any automated information system must have at its heart a human incompatible black box. Open ended solutions no longer are respectable – if you are trying to pre-define a task and fail the problem is your incompetence and never that the task is too unpredictable to be pre-defined.
Ideally we would like our children to learn about thinking creatively about open problems and also have the skills necessary to tackle closed problems. What we really need are machines which “think like people” CODIL style to encourage children to think creatively about real world tasks which are hard to predefine. Concentrating on making sure that they all think like a computer is actually narrowing their view of the world.
Of course this is all wishful thinking. Any genuine human friendly white box solution will get nowhere until the investment in it is such that it can challenge the critical mass investment in the established computer market. The limitation of the stored program computer, which was rushed onto the market with no thought of how humans think, are so deeply ingrained that they will probably be affecting society for as long as the QWERTY keyboard.