Strongly Emergent

What comes from combining humans, computers, and narrative

Sharpening My Saw: Version Control

There are several software components that are pretty universally found on the toolbelts of professional programmers. For example, it’s normal to have a favorite IDE/text editor. It doesn’t entirely matter whether you like the visphere, Eclipse, Visual Studio, or emacs - it matters that you’ve put some thought into mastering a serious tool that enables high-level work. As a programmer, there isn’t really an alternative: other things held equal, someone who’s spent the time to get good at (for example) Eclipse will be more productive than you if you haven’t gotten good at such a tool. The things on the toolbelt are all like that, they make massively increased productivity possible.

Such a tool is version control. By now we’re all used to saving documents. Version control is like the superpowers version of saving a document: you save the way it was at a specific time, in a continuum of ways it was, and the system nearly coerces you into leaving behind a reason for why you saved it at that time and in that state.

Distributed version control - the current flagbearers are Git, Mercurial, and Bazaar - ups the ante even further by making it much easier for lots of people to work on a project at once and still have that superpower saving. The difference that the toolkit makes is even more important in group contexts: there are a lot of big projects that we rely on, invisibly, in just using the Internet and living our lives, that would be impossible without version control.

I’m using Git and Mercurial now, gaining proficiency with them, and I’ve used a bit of Subversion, a non-distributed version control system. Part of my mission for 2010 is to assemble a toolbelt. Right now, it’s looking like it’ll be emacs, Mercurial, FogBugz, Firefox/Firebug, SysInternals' ProcMon/ProcExp/Autoruns, Stack Overflow (and its siblings), bash and a little PowerShell, Ethereal/Wireshark, and by the way, yes, the toolbelt gets crowded. That’s part of why learning to use it well is so important: all of those tools matter to your productivity as a programmer. I should note that the sysadmin side of my brain is going to end up using a lot of those tools, too.