A refrain we use quite often here at Global Nerdy is that Microsoft’s consumer offerings make you feel as though you’re dining from the table scraps from the dumpsters of the customers they really love: corporate drones running Office, Exchange and SQL Server. However, there are a couple of bright spots in their more recent consumer items:
The XBox 360, which despite the “red ring of death” issue, has proven to be a great console for the hardcore gamer,
This move isn’t just uncharacteristic of Microsoft, but in light of the recent Appledickery — that is, Apple’s war against its own fans — it’s downright inspired:
The iPhone’s “early adopter tax” — dropping the price of the 8GB iPhone a mere two months after its initial release and Steve Jobs’ initial brush-off of angry users with the line “That’s what happens with technology”.
Twenty years ago, the portable music player of the time — the Walkman — could only be a Walkman since it was a single-purpose hardware whose sole task was to play cassette tapes. That era’s video players, cellular phones and handheld electronic games also faced the same mechanical limitation — each device could only perform its intended task. Under the hood, each of these device types was quite different.
These days, there isn’t much that separates music players, video players, phones and handheld electronic games. While the user interfaces are different, they’re all just general-purpose computers that vary in processing power and memory. This fact is not lost on the vendors, but many are hoping that consumers are still stuck on the mechanical-era “upgrade treadmill” mindset. Apple seems to be thinking this way, but Microsoft apparently isn’t. Kudos to Microsoft for treating their early adopters properly.
As you can see, this is the Japanese version of the game. Note that while all the mushrooms’ dialogue bubbles are in Japanese, the Princess’ “Help!” dialogue bubble (as well as her yelling) is in English.
Suppose it’s your job to maintain a handbook for a particular division of your company. One day a different division asks you for the same handbook– but with a few parts modified specifically for them, as they do things slightly differently.
What do you do in this situation? You do the obvious thing: you make a second copy of your document, and begin maintaining the two copies separately. As each department asks you to make small changes, you incorporate them into one copy or the other. But you often find yourself wanting to make the same change to both copies. For example, if you discover a typo in the first copy, it’s very likely that the same typo exists in the second copy. The two documents are almost the same, after all; they only differ in small, specific ways.
This is the basic concept of a branch — a line of development that exists independently of another line, yet still shares a common history. A branch always begins life as a copy of something, and moves on from there, generating its own history.
If branching reminds you of parallel universes, you’re not alone. Parallel universes are a staple of science fiction and geek literature, from the Star Trek episode where Spock has a Fu Manchu-style beard to that oddball Gwyneth Paltrow movie to the out-of-continuity comics like Marvel’s What If… and DC’s Elseworlds series. Jeff finds “parallel universes” to be a handy analogy for explaining branching. (He also cites some comic book classics featuring parallel universes for geek bonus points.)
He lists a number of approaches to branching (or “branching patterns”, if you prefer), complete with diagrams. I’ve gathered the diagrams and placed them into a single graphic below — he describes each in a little more detail.
Branching is tricky, but if you’re not making use of it, you’re missing out on one of version control’s most important benefits. As Jeff puts it:
Still, I urge developers to make an effort to understand branching– really understand it– and explore using branching strategies where appropriate on their projects. Done right, the mental cost of the branching tax pales in comparison to the benefits of concurrent development it enables. Embrace the idea of parallel universes in your code, and you may find that you can get more done, with less risk. Just try to avoid a crisis on infinite codebases while you’re at it.