Understanding Software Develepment
An Algorithm is a well defined set of instructions which are deterministic.
A Heuristic is a mental shortcut or “rule of thumb” that gives some guidance on how to do a task, but it does not guarantee solutions consistently.
A Metaphor describes the software development process and act as heuristics.
- Metaphors useful as an aid to understanding.
- Map something we know well to something new and/or challenging.
- Not all metaphors are created equal.
- Good metaphors are simple, relate to other relevant metaphors, and explain experimental evidence and observed phenomena.
Writing As A Metaphor For Software Development
- There are some parallels between the two
- Grew out of the expression “writing code”.
- We often talk about program readability.
- Doesn’t describe software development fully or adequately.
- Writing is usually a one-person activity; software projects are usually teams.
- Writing isn’t subject to constant revision once it can been published (~ 2/3 occurs after release).
- Implies that the software process relies on expensive trial and error rather than careful planning and design.
Farming As A Metaphor For Software Development
- Sounds odd but illustrates some of the aspects of software development well.
- Like planting seeds and growing crops you design a piece, code a piece, test a piece, add it to the system a bit at a time (incremental technique).
- Incremental technique provides a valuable lesson but farming is a bad metaphor and is hard to extend further– so much of farming has nothing to do with software development.
Accretion (Oysters) As A Metaphor For Software Development
Accretion: a growth or increase in size by a gradual external addition or inclusion.
- As opposed to growing, more accurately illustrates the incremental nature of software development.
- Oysters use accretion to make a pearl by gradually adding small amounts of calcium carbonate.
- Parallels with software development; you start with a skeleton, work towards a MVP, add dummy input, later use real input, etc.
Construction As A Metaphor For Software Development
- Image of building software is more useful than that of writing or growing it.
- Compatible with the idea of software accretion.
- Implies various stages of planning, preparation and execution.
- Involves groups and various field of expertise.
- Involves maintenance.
- Demonstrates consequences of poor design.