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/
