::scr Touchy Feely?

Andy Wardley scr@thegestalt.org
Thu, 24 Oct 2002 10:16:24 +0100


Simon Kinahan wrote:
> Abstraction is absolutely essential in programming [...] most
> people are not very good at it. And that includes most programmers. 

Indeed.

Abstraction is an artifact of pattern matching.  It is perhaps the most
important functionality of the grey matter in our heads with regard to
higher reasoning - that which gives us the ability to recognise common 
constructs and put a conceptual label on them.

Hmm, white and black blobby thing eating grass and farting... it's a COW!

> Anyone who has ever written a real
> system knows that the "Aircraft" class in a air traffic control system is
> totally different from that in an airline's parts management system. 

Absolutely.  And in the Real World, us humans are very flexible about
having "fluid" concepts that share the same semantic label but have very
different characteristics, all depending on context.  

Computers are so much dumber.  They need everything spelt out in nitty 
gritty detail and won't talk to each other unless they can first agree
about exactly what they're going to talk about and how they're going to
say it.

> Creating or understanding new abstractions is really quite hard,
> especially when they're as ephemeral as software is. 

Yes, and I think it's also something that comes from experience.  The 
more you see, and the more angles you approach something from, the more
likely you are to start recognising common shapes.

Too many programmers work like peephole optimisers.  They focus on one
section of a program, solve the immediate problem with a few lines of 
codes, but too infrequently step back and take a look at the bigger 
picture.

> Most of the time, we try to pull more
> and more information into thinking about something. To think at an abstract
> level, you need to be very selective about what you pull into the thinking
> process.

That's why I think the Design Patterns book was so important.  I've heard 
people say "Well they're just stating the obvious - that's all common best 
practice", but sometimes the obvious is the hardest thing to state clearly 
in a way that most people agree on as being, well, obvious.  

For me at least, it has helped to formalise some concepts in my head, 
some of which I had seen or used before, but many of which I didn't have 
names for.  Now I find I can build high-level systems in my head by 
connecting these words together without the baggage of loading the actual
algorithms and all their inherent noise into my limited brain space.

  "Right, we'll have a request passing through chain of command to 
   generate a response.  Hmmm... wait, how are these slots going to 
   share the mumble data?  Oh ok, we'll build a hand-waving model, that 
   can be a singleton, and each slot can have a different view on it... 
   Might need to attach some observers to the doodah nodes, maybe
   need some controllers too, yes that works..."

Anyway, enough rambling.  I've got patterns to match and concepts to 
abstract...

A