As job-hunting season comes closer, I find it important to brush up on skills I would need for getting my foot in the door and succeeding at interviews. One of the skills I go over today is something incredibly useful, and can be applicable towards many different things, although generally it is more heavily and catered towards group programming projects.
Version control is a tool that keeps track of many different versions of a group of files. The tool is almost like a time machine- if you mess up one of your files you can go back in time and find a time where the file is not messed up and change it back to that version. For this reason, it is helpful to sometimes keep track of your own files with version control, so you do not have to worry as much about accidentally deleting a file that you needed. However, the main usage of version control is through group projects.
Have you ever tried to work on a project together with other people and found that each and every single time someone updated something, they would have to either put it in an electronic dropbox or save spot online (or email every group member the new copy) and each person without the newest copy would have to redownload the file? Version control eliminates this process. It designates a shared spot for the project called a repository. This repository is put on a server and released onto the Internet, where each group member can access it. The project then can be downloaded from the Internet into a designated location on someone’s computer used specifically for this project. This usually can be anywhere on the computer, as long as the person lets the version control tool know that this location is where the project is supposed to be located. Now, whenever someone updates the project, this person can tell the tool that they want to update the shared copy on the server to match their personal copy, and upload the changes. Depending on the tool, the tool may inform everyone else who has the project that someone has made changes to the shared copy and that they may want to update their personal copy. Alternatively, the tool may wait till a person asks to update their personal copy, and then inform them of the changes made. Either way, each change creates a new version of the project, and each version is saved in the repository. So if someone makes a faulty update to the shared copy, the group members can undo this by reverting the shared copy to a previous version of the project.
There are many other fancy cool things you can do with version control, such as reversing changes for only certain files in the project or labeling each version with a comment on what was changed or updated. But some of these things can vary based on which version control tool you use. Most version control tools that are free to use also are highly public. In other words, if you do not want your project to be available to the rest of the Internet, these free tools may not be a good thing to use. The two free version control tools I know about are GitHub and Google Code. Not many version control tools are free because maintaining a server for the shared space on the Internet that groups use costs money- not charging a fee would usually result in a loss of money. For personal usage, where a server is not required and when one would only want to use version control to keep different versions of their files, the tools are usually free- the ones I know of are Subversion, Git, and Perforce. The version control systems I have used for work (where costs are covered by the company) are TortoiseSVN, Team Foundation Server, and Rational ClearCase.
I leave it up to the reader to decide which version control tool is better and if it is even worth the trouble to learn the mechanisms of the tool to keep their project in version control. And in many cases, even if one member wants to use version control, it is difficult to have all members try to learn the tool. However, the time saved trying to download different project items all the time, as well as the reduced risk of corrupting the project without a previous version to fall back on often makes version control essential for every job that is related to programming. Which is why it is often attractive for a person applying for a programming-related position to have prior version control knowledge. I highly encourage any aspiring computer programmers/testers/developers/engineers to learn how to use this tool. For all others, I hope that this tool may come in handy- it may be interesting to see how the tool keeps different versions of an image file or movie file. 😉
Here are some links to version control tools, for those who are interested:
Tortoise SVN http://tortoisesvn.net/
Team Foundation Server http://msdn.microsoft.com/en-us/vstudio/ff637362.aspx