Version Control System: The One Computer Skill

Updated 2016-09-30

The first thing we should teach about driving a vehicle is where the brakes are. I believe that the same reasoning applies to computers. Before teaching any sort of programming or web editing, wouldn’t it be reasonable to teach how to save your work?

There is something essential that could be taught first hand and which I believe to be the number one skill that will remain invaluable for the rest of your life as a computer user: version control systems (VCS).

From Wikipedia:

Version control […] is the management of changes to documents, computer programs, large web sites, and other collections of information.

A concrete and straightforward example would the history of a Wikipedia page.

A VCS is:

Are you a book or a blog author? A scientist? An administrator? A accountant? If you find yourself writing and maybe collaborating with text documents of any form, a VCS will be your best friend.

When computer users are not aware of the existence of VCSes, it brings them to use poor tools for the sole purpose of saving and collaborating which yields to a lot of frustration. A common example would be exchanging files via e-mail:

A few free, decentralized and popular VCS include:

A VCS will hold much of your project information:

Thus the VCS metadata should be stored in an open format, that is, in a format that is open for viewing and editing at any time in the future. Should the VCS become un-maintained, the OS support be dropped, or any other catastrophe occur, the project information can be recovered.

VCSes should be decentralized. See this Tech Talk: Linux Torvalds on git for a rationale.

Other features:

“User-friendly” sharing tools like Dropbox have the terrible drawback of hiding the syncing operations: when offline, if you change the content then go online again, what happens? Will Dropbox discard the changes or upload them? What if there is a conflict, i.e. some file got changed in the Dropbox repository in the meantime?

If you care about the content of your files, do not use such tools. It is essential to have full control over every VCS operation.

There is one pitfall with VCSes: once you have started working in a team, the VCS cannot (or at least not so easily) be changed. And everybody has to abide by the choice of the VCS. It is the only tool that team-members are forced using. Which is why a dedicated VCS is great: it leaves freedom to the user to use his/her own favorite tools for the rest. This as opposed to, say, Google Documents where the full tool-suite is bundled into one service: the web profile, the VCS, the document processor, the editor, etc.

Not all computer data is “versionable” though. Everything (pictures, videos, music) can be uploaded to a VCS server, but to make the best out of your VCS the content should be in text format, so that the VCS can display the differences between versions. Besides, it is far more efficient filesystem-wise and will save on bandwidth.

Avoid *Office documents: they are archived-files, a VCS will treat them as raw data, it won’t be able to “see” the content.

For book or blog authoring, prefer text formats such as Markdown and LaTeX.

Text-formats can have some more exotic use:

Last but not least, a VCS can be somewhat technical and challenging to master. Which is why I believe a proper introductory course to be necessary.