Overarching Themes of the Class
OK, I'm not entirely these are "overarching" themes, but look for these
themes in the papers you read.
- Problems of scale
- Competitive pressures and ambitions lead to large software
- Tensions between parallel work and consistency, speed and accuracy
- Learning through failure
- Failure is in the definition of ambitious, at least learn from it
- Conceptual integrity: to achieve parallel work and consistency
- Problem decomposition: to cope with scale
- Phases/aspects, architecture, modules, layers, incrementality
- Requires simple abstractions to ease integration
- Modelling: analytical and constructive of software and world
- Focuses in a few crucial issues to gain analytical leverage
- Simpler is better
- Things should be as simple as possible, but no simpler
- False complexity created by misunderstandings, ego, inconsistency
- ``Reuse'': avoiding NIH
- Methods, tools, libraries, designs, algorithms, experience
- Fundamentally challenged by innovation introduced through
competition
- Inevitability of change
- Caused by misunderstanding of requirements, competitive pressures,
technology changes
- Costly due to rippling through phases, inappropriate design, changes
in design, program understanding
- Software is built for people, by people
- Listen to and work with the experts
- Create environments and attitudes where people can work effectively
- No silver bullet
- Software lives in world, must adapt to change, difficulty of
problem, economic limitations