Your next iteration
One of the things I like about “tech” are the frameworks we have to think about systems.
Programmers often use the term “iteration”. As the dictionary definition below shows, this word can cover a few different concepts.
Someone who works with data can iterate through a list, processing each element one-by-one.
Someone who works on computations can use iterative procedures that are proven to converge to a desired value.
And we can call each new release a new iteration on a product.
One of the handy tools we have to organize our releases is called Semantic Versioning. You may have seen it when looking at your phone’s OS version.
<Major>.<Minor>.<Patch>
These values refer to numbers. For example, the current version of the Python programming language is 3.13.1. The ‘major’ version is ‘3’, the ‘minor’ version is ‘13’, and the ‘patch’ is ‘1’. We can use semantic versioning for everything from programming languages, APIs, operating systems, libraries, games, and more.
A patch number is incremented for a release that has some bug fixes, security updates, or small features. Updates in a patch don’t require programmers to change their code, but they may change the way code is run internally. An example of this would be a program that swaps out a dependent math library for another one that is more performant (like one that can use GPUs or Apple Silicon to speed up a calculation). You can see some examples of security fixes in Python’s release notes for 3.13.1.
A minor number is updated when sets of new features are released. Naturally, the previous versions will not have access to these new features, so it marks a significant change. You can see some examples of new features in Python’s release notes for the 3.13 series. Significant changes in minor patches have been things like adding color by default to output in error messages, more concise ways to generate async lists, assignment expressions via the walrus operator, etc. These are new improvements that previous versions don’t have, but their addition generally doesn’t break existing code.
A major number is updated when fundamental changes are made that cause breaks in backwards compatibility. An example of a breaking change between Python 2.x.x and Python 3.x.x was changing Print
from a programmatic statement
into a proper programmatic function
. There were also massive changes in the way unicode encoded text was handled.
## This works in Python 2.x.x and is an error in Python 3.x.x
print "The code executed successfully"
## This is the only way to print() in Python 3.x.x
print("The code executed successfully")
This is an example of a breaking change because code that was written for Python 2.x.x may not even be able to run with Python 3.x.x. An update in major version means that our ways of doing things have changed. What worked before might not work anymore. We have to think differently now.
Our Personal Iterations
Before software is released, we start with a major version of 0.
So when we are born we may be at version 0.0.1 of ourselves. As we pick up new abilities, such as the ability to sit up, crawl, and then the big jump to walking and speaking, that is probably our big launch. Our 1.0.0 moment.
At that point, we are learning quickly, and once we are able to read and learn things on our own, that may be our 2.0.0 moment.
I am sure we can all think of different milestones in our lives where we have changed in some fundamental ways.
I clearly remember one such moment as an 18 year old. It was a few days after graduating from Bellevue College. I drove to the roof of the empty parking garage, stood outside my car, and took a solid hour or two to watch the sun set over Seattle. In those two years of being able to drive, I had built up a successful piano teaching practice (with over 25 students), figured out how to pass college courses, saw a ton of concerts, learned to longboard, and thought that I had achieved a good mental model of what the world was like.
But in that moment of thinking, I knew that everything would soon change. And that while I had figured out how to make a life that I liked given one set of conditions, I really had no idea what the next few years would be like.
The New Year is a great time to take stock and think about the next year. I recently got married. Despite already spending most of my time with my wife for a few years, we recently talked about what a big change in life it is to be married.
With a new Administration and massive cultural shift, the US once again iterates to the next point.
With widespread AI seeming to accelerate everything, we are iterating quicker than ever before. And part of iterating is figuring out what new things are not backwards compatible with how they were before. Some of our programs and ways of thinking that worked well a year ago already won’t serve us well for 2025.