Software development and optimisation
Software development is about many things. It is a combination of architecture, engineering, science, craftsmanship and art.
- Architecture creates well-structured software which is entirely suitable for the task at hand.
- Engineering creates a solid design capable of withstanding the rigours of use and able to handle whatever is thrown at it.
- Science and mathematics make abstract transformations into reality and include complex graphics, statistics, analysis and artificial intelligence.
- Craftsmanship makes it solidly constructed, polished and with everything properly nailed down.
- Art makes it appealing, satisfying and a pleasure to use, both as a user and a maintainer.
When any of these aren't done well, it tends to show.
- Badly architected software won't do everything it's supposed to and will often seem or feel incomplete.
- Badly engineered software will buckle under load or won't handle all possible inputs.
- Bad science means the bits that are supposed to be clever appear wrong or dumb.
- Software that is badly crafted shows its rough edges, and occasionally the wheels fall off (metaphorically speaking) and it will need to be restarted.
- Bad art means plain, boring and ugly.
The pictures on the right might help make my point.
The small cardboard house is obviously badly crafted. It's held together with string. It's had a bad paint job. The windows are poorly cut out, and the only reason we know that the door handle is a door handle is not because of its shape, but because it's in the place where we'd expect to find a door handle.
The pile of stones is, as the caption says, very zen. It's very neat, very clean. The stones are well polished and the colours all match. I'd never rest anything valuable on it because any sort of knock will bring the structure down immediately.
The wristwatch movement though, there's another story. Everything fits together perfectly. Although it's not necessary for the function, all the components are well finished. It's obviously designed to be taken apart and put back together because of all the easy-to-access screws. It has also been designed to be simply adjusted and the adjustment is well labelled. There's no sense of anything having been jammed in. It's compact, but not cramped. If my software had a real-world equivalent, this is what I'd like it to be.
Optimisation
When we think about optimisation, it's not just about making the software go fast. It's about architecture, engineering, science, craftsmanship and art coming together, and when they do in a software project, optimal design and optimal code tends to be a natural consequence.
And that's what we're talking about, aren't we?