Bjorn,

> There is much inherent complexity is software, which is due to increasing
> size, interdependencies, concurrency, crosscutting concerns, and more.
> An important programming skill is the ability to recognize and deal with
> unnecessary complexity.

There is complexity in software but increasing size is not
a certainty.  Two reasons, new (old?) technology that enables a
shrinking of the space required for current functionality (e.g. ORIGIN,
cf. http://www.180sw.com/) and use of higher-level languages that enable
the expression of solution at a level of abstraction appropriate for
the reasoning that is happening.

Concurrency is perhaps the most interesting of the issues you raise.
Individual programs are now increasingly multi-threaded systems (cf.
Java where all GUI-based systems have at least three threads even if
the programmer doesn't use threads at all) and yet most people are still
thinking in terms of sequential algorithms.  Also of course the control
mechanisms for concurrency are still not really properly worked out.

Managing complexity, as measured by the flow graph, is the most
important skill.  Minimization, use of symmetry principles and use of
aesthetic judgements about code all help to create simpler code that is
more functional.  For most quality programmers this is a set of skills
and knowledge that are hard learnt.  Patterns are helping to bring much
of the knowledge together but still there is a need for better notations
to write down the implementation of systems.

Russel.

========================================================================

Prof Russel Winder              Professor of Computing Science
Head of Department
Department of Computer Science  Phone: +44 20 7848 2679
King's College London           Fax:   +44 20 7848 2851/+44 20 7848 2913
Strand, London WC2R 2LS         [EMAIL PROTECTED]
UK                              http://www.dcs.kcl.ac.uk/staff/russel/

Reply via email to