A version control system is a way to store code and track changes over time. Programmers use version control to work on software projects because it can be very important to see a history of changes when working with code.
You can think of version control like the change history in a word document. Except that it is stores the history for many files together in a project, and this is called a repository.
Have you ever emailed a word document back and forth a bunch of times and kept appending v2 or draft3, ...FINAL.doc to the end of it, or even worse ..FINAL_FINAL.doc 😀? Well programmers never have to do stuff like that because we use version control software to track and store changes automatically.
Using and understanding version control is a fundamental tool for software engineering. All professional software producing organizations should be using version control.
If you encounter a candidate that cannot explain to you what version control is, that is a big red flag that they are probably not yet ready to work as a professional in the industry. At the very least, they will not be getting past the interview process at most places.
Storing a history of changes is great even for a single developer. I often write code and then come back to it a year later, forgetting what it does or why I did it. Many software projects can last a decade or more so being able to read old messages and a log of changes is crucial.
You can often make better decisions by looking at how a piece of code has changed over time.
Version control is even more useful when working with multiple developers on a team because it helps facilitate collaboration but at the same time prevents a team from stepping on each other's toes.
Git is a version control system developed by Linus Torvalds. Of all the types of version control I will talk about here it is the newest and most complex.
Git is a distributed system and changes are resolved between remote servers and local copies. What does that mean? When you work with git you clone down a copy of the entire repository of code (and all of the history), and you push changes back up the server as you work. These changes have to be merged with work other developers have pushed up before you can push your own work up.
Git has a reputation of being very daunting for beginners to learn. But it is extremely powerful and flexible.
Git is complicated and I can't really explain it adequately in this blog post but I will go over some jargon you might encounter:
Git is the underlying technology that powers Github. You can think of Github as just a user interface and some APIs on top of a big git server hosted by the folks at github.
SVN (or Subversion) is a version control system that is centralized and works off of changes to single files.
SVN was probably the most popular open source system before git and github came along. SVN is an open source project maintained by the Apache Foundation
TFS (Team Foundation Server for short) is a microsoft product and centralized version control system. As you may have learned Microsoft makes their own version of everything. They actually give you the option of using git with TFS but they also have a system called "Team Foundation Version Control".
TFS does a lot more than just version control though: it includes reporting, project management, testing and release management (among other things). It is a little bit like a private github system but it has more features than that. It integrates with Visual Studio, which is the code editor that Microsoft makes.
Mercurial is another open source distributed version control system. The launch of the git project and Mercurial actually ocurred within a few days of each other, and there was some contention over which would eventually be used to manage the linux project. Both had a very similar design and goals but eventually git won, and is now the dominant version control system used in open source.
Mercurial is still preferred by some and known to be used internally at Facebook.
CVS was the first big open source version control system (originally developed in 1986). It still is used some places but has many limitations in terms of dealing with issues encountered during collaboration on teams. The last official release was in 2008, so it is probably safe to say that there will be no more active development on CVS.
Git is a version control system. It is just software, but you need to host your git server somewhere to use it. Github is a website for hosting git projects and has a sort of social network layered on top. Git is the underlying software, it is separate from Github.
Bitbucket, Gitlab, and other similar sites: these are competitors to Github. They provide hosting for git projects. You don't have to use any of these products to just use git by itself. In fact you could host a git server on your own infrastructure if you really wanted to. Github just has so many useful additional tools, people tend to really love using it.
Version control systems are a fundamental part of modern software engineering. Unfortunately using version control systems is still not taught as part of many university level computer science degrees and it is often one of the many skill gaps that fresh graduates face when entering the industry. git in particular can be confusing to new users and has a somewhat steep learning curve.
As a recruiter, if your candidate does not know any version control systems that may be a sign they are new to the industry. When dealing with hiring managers, they may not mention anything about version control because most people assume you are using something (likely git) but if they are not using version control that is a huge red flag and you might have trouble placing candidates there.
Okay, I'll wrap this up with a version control meme that you might get now!
By the way, I wrote a post about package managers, which are still things for sharing code but they are different from version control. I would suggest reading that next.