Software Engineering Is Programming Integrated Over Time
The preface of Software Engineering at Google opens with this thesis:
One key insight we share in this book is that software engineering can be thought of as “programming integrated over time.”
The book goes on to illustrate this idea with an analogy.
Imagine that programming is like drawing square:
We can get really good at drawing squares: perfect corners, even lines, fast drawing, and so on. But if we want our squarse to last, we have to consider time, and the change it inevitably brings.
When we stretch programming across the time dimension, we get software engineering:
Platonic forms don’t exist, and neither do programs that last zero seconds. Every program lasts some length of time. At the very least, a one-off script has to exist until the computer finishes executing it.
THe need for software engineering increases fuzzily, as a program lasts longer amounts of time. Time brings changes, both to the program and its environment. And these changes require answers to questions such as:
- How can we store old versions of the program?
- How do we know our changes work?
- Will the program work with new version of its dependencies?
- Can the program handle increasing volumes of data?
- What is the program actually doing?
- Is the program still working, right now, at 3am on a sunday morning?
Many software engineering practices exist to help solve these questions:
- Version Control
- Repeatable Builds
- Continuous Integration
- Code Review
- Static Analysis
- Dependency Management
The longer your program lasts, and the more valuable it becomes, the more you will need software engineering practices.
If you’re interested in reading more, do check out Software Engineering at Google book. I really enjoyed it.
Go forth and engineer some software,
Make your development more pleasant with Boost Your Django DX.
One summary email a week, no spam, I pinky promise.