January 18th, 2005


Typical Response from the Reactionary Forces

A massive survey has just discovered that the traditional method of teaching children how to write (nouns, verbs, etc) doesn't work very well:

The university says this review "discovered no evidence that the teaching of traditional grammar, specifically word order or syntax, was effective in assisting writing quality or accuracy among five to 16 year olds".
"This does not mean to say that the teaching of formal aspects of grammar is not interesting or useful in its own right," says Professor Andrews.
"However, in a pressured curriculum, where the development of literacy is a high priority, there will be better ways of teaching writing and our findings suggest that the teaching of 'sentence combining' may be one of the more effective approaches."
The teaching technique of "sentence combining" is defined as "combining short sentences into longer ones, and embedding elements into simple sentences to make them more complex".

Which is exactly the kind of research that needs to be done into education - find out what works and what doesn't. Of course, it doesn't help to do these studies if people are going to ignore it. For instance the response from the Conversative Party:

The Shadow Education Secretary Tim Collins said it was surprising that this report should come to a different conclusion to the "tried-and-trusted methods" of helping children to improve their writing skills.

"At the very least parents should have the choice of sending their children to schools where traditional approaches to literacy have been adopted," he said.

i.e. "I don't care if it's proved to be crap, that's how it's always been done, so that's what I'm in favour of."

Whole article here.

Corner Cases, Code and Law

I've rewritten this three times and it's _still_ wrong. But I'm putting it up anyway, in the hope that criticism from you scurrilous lot will poitn out what exactly needs fixing

The idea that the problems of the world can be solved with a few well-placed rules is sadly all too common amongst geeks - their lives are usually full of rules - mathematical rules, physical rules, programming rules - simple instructions that produce beautifully complex results. Much as physicists tend to be convinced that the rules that make up the physical world can be reduced down to one aesthetically pleasing equation, a fair chunk of computer geeks seem to tend towards the idea that the world at large can be described by a few simple systems.

Fortunately, this tendency is usually kept to geeky areas, where it manifests as a belief that text interfaces are better than graphical ones, programs should be done right rather than soon, and that making changes to fit the customer's wishes is the root of all evil (rather than the purpose of their jobs).

It's when these tendencies branch out into real life that problems occur - when people start to believe that a simple set of instructions can lead to the perfect life, society or world. This tends to lead to such abominations as libertarianism and communism that start from simple principles ("No person shall directly harm another" and "We shall all work together") that seem seductively reasonable at first glance but have horrific results in the long run.

(For instance, a brief perusal of Slashdot will show a ridiculously large number of libertarian geeks declaiming that if only the government would get out of the way the world would run vastly better, and that the only thing keeping us back is the corruption of these civil servants.)

The reason for these unwanted results can be illuminated by what physicists call "The three-body problem". If you have two objects (or "bodies") floating in space then you can absolutely predict where they will both be at a future point. However, adding a third object makes the situation so complex that there is no known set of equations which will give you a general answer (in order to work out the position of planets at a future point astronomers carry out simulations instead). The amount of complexity increases

The IT expression for this is "corner cases" - these being the remarkably frustrating situations that occur when multiple sets of rules interact. The average programmer works by taking a problem apart into small enough pieces that each piece can be trivially solved, and then producing code that solves each piece. However, for anything other than pointlessly simple programs, situations occur where the code in one part of the system causes a problem for some other part of the system - the corner where the two systems 'intersect' with each other causes the system to either fail catastrophically or produce an unexpected result (which is even worse!).

The traditional way to deal with these corner cases is to 'patch' them - i.e. to write a new bit of code which works around the situation that causes the problem. There are two problems here - (1) finding all of the places where these corner cases occur and (2) each patch is a new piece of code, and therefore jut as likely to cause a new corner case as any old piece of code.

Over the lifespan of a piece of software more and more patches are applied as new corner cases are found, until eventually the events that can still cause problems are so rare as to either be negligible or so complex as to make them untraceable. Large numbers of systems allow superusers to override their normal working and edit data manually in order to deal with the occasional situation which is outwith expectations.

Now, these situations are annoying enough when dealing with code (which is, after all, binary and logical), but when dealing with real life situations they become many orders of magnitude more complicated. If you think of legal systems, these are made up of laws, each of which is designed to cause a certain effect. Hwoever, not only are they dealing with individual cases that are remarkably complex, but whenever a patch is applied to a law (in order to fix an unwanted result of it) the patch itself tends to have unintended results.

This gets particularly bad in the areas of tax and finance, where finding a corner case (or loophole) can net millions for a company. The government constantly patches the laws until they become so unwieldy that the average _honest_ business can't cope, and then attempts to rewrite them in a more basic form, while still taking into account all of the corner cases taken into account by the previous revision of the law. This slow swinging from simple law to complex and back again is a consequence of the clash between the need to both cover all situations without strangling people in complex regulations.

This is remarkably similar to the way that a new coder will take one look at a horrifically complex system, scream about its unnecessary hackery and unclean code and demand that it be rewritten - claiming that it can be made much simpler and much easier to code, in a tiny fraction of the original time. As any experienced coder will tell you, by the time these rewrite projects are complete (if they ever reach that stage) they are inevitably vastly over schedule/budget and full of exactly the kind of horrible stitching that they were complaining about in the first place.

The answer to this problem (in law) is exactly the same as it is when dealing with computer systems - allowing trusted superusers to decide what the answer _should_ have been and making sure that the final result is in accordance with that. We call these people 'judges'. In addition to making sure that the rules and procedures are followed, they are also assumed to have a very high working knowledge of not just how the law is supposed to work, but how it actually works, what kind of errors tend to occur, how to work around them, and what the best outcome is.

Very few people would want to live in a purely rule-driven society - there will always be loopholes, corner-cases and gaps in the logic. At some level people must be trusted to use judgement. Not trusted completely, obviously - there must be transparency and oversight, to ensure that power doesn't go to their heads - but trusted to know how to deal with the world better than any rule-driven system possibly can.