Search This Blog

Monday, September 10, 2012

Education, Software and Agile Failure

It started out simply enough.  A problem on a grade school paper:

Put in alphabetical order:

   ___ Grape

   ___ Bread

   ___ Soup

   ___ Apple

So most people would, as the teach expects, do this:

Put in alphabetical order:

   _3_ Grape

   _2_ Bread

   _4_ Soup

   _1_ Apple

Meaning that Apple is first, Bread second, Grape third, and Soup fourth.

How do most people accomplish this?  Usually by scanning the list looking for the "lowest" value first, then the next lowest, and so on marking each as you go.

Is this the only correct answer?

As it turns out no.

You could say:

Put in alphabetical order:

   _4_ Grape

   _2_ Bread

   _1_ Soup

   _3_ Apple

But that's wrong, you might say, how does that work?  For one thing, there's no description of exactly how to put these things in order.

The assumption is that we number each item with its position.  But that's just one option.

In the second option we simply put the number in the first slot of the position of the item that goes in that slot: so first is "Apple" so "4" - the index of Apple goes first, "Bread" is second, so "2" goes on the next line, and so on.

Why write about this?

Well it goes back to the "I Hate Algebra..." post I wrote about a year ago.

Its another example I think of how the US educational system is failing our children.

In particular I find that today school is all about the notion of "conformity."  In this case I am using the first example above.

The real instructions should read "In ascending numerical order, starting with one, mark the ordinal of each entry's final position in an alphabetized list."

But this is not what's stated.

An equivalent version of what's to be done is "Mark from top to bottom the ordinal of the position of each entry in an alphabetized list."

Now without some domain knowledge and instruction how is that we are know which of these two descriptions are the correct one to follow?

Further, if someone views the world differently, via a dyslexia or from their "own perspective" without instruction I argue that its simply impossible to say one or the other model of alphabetizing is wrong.  There is no clear instruction on what to do and the only result that's required is that the list end up in alphabetical order.

But there's more.

There is also the process of arriving at the list.

The first method I described - scanning the list for the lowest item, then the next lowest item and so on is the most inefficient means to sort the items.  The process is called a "bubble sort" and requires us to pass through the list of n items n/2 + 1 times (assuming integer division).

For example, if there are five items I have to go through the list of five once to the find the lowest (I must inspect each entry once).  Now four remain.  So I have to go through four items to find the next lowest, and so on.

So I pass through the list five times, then four times, then three, then two and finally one.

But I can match up the four and one times, and the two and three times for a total of three times through all the entries, or 5 / 2 = 2 + 1 or three times.

There are many sorting algorithms like this that are much faster.

Of course, this assumes that you go through the list linearly - that is, on thing at a time.

But some people's minds may not work that way.  For example, in the movie "Rainman" there is a scene were the protagonist - a man with autism - observes a pile of toothpicks on the floor and blurts out a number.  His brother, a "normal" person, does not grasp that his brother has simply looked at the pile of toothpicks and counted them up instantly (as opposed to, as you or I might, counting them individually).

In the case of "Rainman" presumably the autistic brother's mind works somehow in parallel to convert the view of the toothpicks into a count.

From the perspective of software develop or mathematics its clear that both linear algorithms I describe to alphabetize the list are equivalent because at the end the list is ordered.

But in the context of a classroom or computer program we have to think about what happens next, i.e., how will the list be processed subsequently because {3, 2, 4, 1} and {4, 2, 1, 3} are not equivalent though they can both be interpreted by different algorithms to convert the list to alphabetized forms.

Some children might simply look at a list like this and operate on it to produce an answer.

If the answer does not follow an unwritten set of rules and yields the correct result can it still be wrong?


And this is where the notion of teaching begins.

Someone might be quite brilliant but unable to function in the "read world" because the see things differently.

But differently, as I show above, doesn't mean wrong with the specification for what's required is unclear.

So in this case someone would require additional information and perhaps instruction to understand the alternate means of alphabetizing such a list.

There may be even more ways that what I describe to do it, I really don't know.

Another issue is the means of communication.

There's an old riddle:

There a city of liars and a city of truth tellers.  In the city of lies people tell only lies.  In the city of truth they only tell the truth.  There is a fork in the road you are on.  One fork leads to the the city of lies, the other to the city of truth.  A man from one of the two cities, though you don't know which one, stands at the fork.  You are allowed to ask him a single question to determine which road leads to the city of truth.

What question do you ask?


You ask him to point to "where he lives."  The liar will only point to the city of truth as will the truth teller.

So in the case of alphabetizing you can determine the right order by asking someone to point out the first entry.  Regardless of the algorithm they might use you will get either the right answer ("Apple") or the wrong one.  Similarly they can point out each sequential entry.

By "pointing out" the entry we eliminate the need to use written language and the need to express the algorithm used in the process.

This makes the communication process much simpler.

So the question becomes if someone can produce the right answers by a non-written means but not by a written means are they wrong?

Or is the educational or specification process wrong?

I think that teaching involves two things: 1) understanding what someone sees about a problem, i.e., what do they natively understand and 2) how do they communicate about the problem.

The first item, #1, has do with understanding: do I understand the notion of alphabetizing?  Basically can I put things in order according to some rules.

The second item, #2, is a question of communication.  Certainly a I could understand the notion of ordering things but be unable to communicate effectively about that order.

This is similar to specifications for problems in engineering and software: do I understand what's needs to be done and can I send and receive communications about that effectively?

Often in the software industry the answer is no.  Particularly in the context of the keyhole problem I describe in "Through the Keyhole..."  I might easily delude myself - either as an instructor, or as someone specifying a project, or as a programmer that I understand what's required and I can communicate about it.

Today both education and software development has "gone off the rails" in this regard.

1 comment: