Introducing version control early in your programming career is really important. It needs to become part of how you code, and using it correctly helps you learn faster, experiment easily, and collaboratively build knowledge. For a student, apart from partying and drinking too much, this is what you are supposed to be doing during your semester. So let me tell you my story of discovering version control and why it is indeed needed.
The Young Novice
Back in the day, shortly after the dot-com bubble, I entered college and discovered computing wasn't just Call of Duty. I ended up building a website in Dreamweaver with two other friends for a project. It even had flash components, most specifically a "math monkey" that would dance across the page and help users solve sums. Cutting edge stuff!
With 3 people working on the project we made out a very comprehensive plan, didn't follow it, and ended up putting in a 48 hour straight session in a computer lab in a mad panic to get it in on time. Just as the 3 separately built parts of the site came together and duly didn't work, one team member cried, one stormed out of the building, and the whole thing took on a surreal level of derangement. A quick search showed each of us had used a different file path locally, and boom, every single thing didn't link. This was of course before I learned bash scripting and Python so I manually changed all the broken links high on skittles and that intense focus a lack of sleep and a deadline brings on.
I assume things have progressed and students are a little more clued in now, but back then version control systems were not very well known. Git and Mercurial hadn't been invented. Subversion was only 2 years old and not on my radar, and CVS was probably buried deep in the computer science building's post-grad department.
Discovering Version Control
After University I ended up working with Cisco, and was suddenly introduced to version control, checking in, and checking out. This seemed like a good idea, and I learned it pretty quickly, but it was annoying when I had a few bugs to close and someone had a file checked out, took off on PTO, and left me with no clue what they were doing with the file. Where they closing the same bug? Was I wasting my time?
Version control plays a vital role in the world of professional programming, and building big software projects across multiple teams and time zones is impossible without it. The concept of version control is easy to understand: you are simply saving a file in various states until you figure out what works best, and in theory you share these with your colleagues so that they can build their work on what you have done, take ideas, make them better, and visa versa.
Version control systems bring tools, structure, and control to this work flow. They help speed up the process, allow for better work management, let colleagues share and develop faster, and enable quick back tracking when something goes haywire.
There is an art to using version control systems properly, and like all arts, it has to be practiced and refined for you to benefit from it. Once you gain those skills and absorb the philosophy behind implementing them correctly you won't ever look back. The problem is that these skills are not intuitive, and the need for them is not automatically present if you are just coding alone, or working on a project that is only going to be jammed together at the last minute and you'll deal with any issues then, theoretically without drama.
RhodeCode Enterprise allows me to introduce proper version control systems to my students so that it is easily absorbed and becomes part of how they code ~ Tal Moran IDC Herzliya
Version control systems have advanced significantly over the last 6 years, with both Git and Mercurial representing a new conceptual approach to working in large teams. No longer are files checked in and checked out, but they are pulled, pushed, forked, and merged. Version control systems have moved beyond the step by step approach taken by Subversion to a more fluid work flow that emphasises greater flexibility, rapid iteration, and constant experimentation. Internally I imagine Subversion as building a staircase step by step whereas Git and Mercurial are more like creating a road network.
One current problem in many universities is that version control is still no where on the curriculum, or if it is, it is a crammer course but never becomes part of how the student develops their skills set. Proper version control is not something you can study, pass a test on, and forget. It needs to become part of how you code, a way of thinking, and the manner in which you share projects and ideas with colleagues. This requires daily application, and because it is a means of doing something rather than an end goal in itself, acquiring it can simply be built into a process and learning the correct procedure comes from trial and error, and eventually mastery.
Why Version Control is Important
When students finish university and start out on the daunting task of beginning a new job, very often they are confronted with tools, procedures, and concepts that they are completely unprepared for. The siloed, individualistic, approach they acquired in university is not used and they are completely unused to working in a fluid dynamic team environment where their mistakes are exposed on a daily basis and refined in the open to produce a better product, and in the end a more rounded person capable of working in a team and dealing with making mistakes in public, and taking guidance from more experienced professionals.
It can be a steep learning curve, but those students who enter the working world aware of this, and practiced in the correct forms of version control and collaboration are at an advantage. Their learning accelerates in their new role because instead of focussing on both what to do, and how to do it, they can easily adjust their workflow to match their colleagues and jump straight into problem solving, getting their job done, absorbing feedback, and as a result they become more confident in their approach to new tasks.
This confidence breeds success, and like any virtuous cycle, more confidence begets more success, and more success builds your reputation faster giving you more clout. Universities that give this base knowledge to their students set them up for success.
Great user interface and stability. Easy to set up and run. Lots of interesting features like graphlog and notifications. A great asset to our organisation ~ Paulo Cabral University of Minho)
The best way for universities to introduce version control would be to adopt one of the version control systems available and have students create and submit projects using it. This basic step can be further expanded, because once you realise that introducing version control for the students is a good idea, then an additional layer for permissions management, code inspection and commenting, and progress tracking would also be useful for lecturers too.
The ability to set up a system like this, and easily allow everyone involved to adopt such a work flow so that it becomes part of how they work would benefit everyone greatly. Technology has not stopped advancing yet and the new lessons needed to stay abreast of it are not just for students, but professors, and system adminstrators working in university too.
Distributed version control is great until you have to manage hundreds or thousands of repositories. With RhodeCode Enterprise it is still great. And getting even better. ~Jussi Talaskivi University of Jyväskylä
The ability to collaborate, manage, secure, and contribute to a fluid dynamic system that promotes learning and experimentation is exactly what university is meant to be. The integration of proper version control systems and the refining of the philosophy behind it in education is a logical match that needs to be embraced. Only great things will follow.
Brian