<p>There are quite a few solutions which allow you to make a VCS part of your teaching.</p>

<p>For example, <a href="https://classroom.github.com/#" rel="noreferrer">GitHub Classroom</a> allows you to create assignments with some starter code, then invite your students to work on it and submit their changes through Git. They provide a promotional video <a href="https://www.youtube.com/watch?v=ChA_zph7aao" rel="noreferrer">here</a>, which shows the workflow with it.</p>

<p><a href="http://ksiresearch.org/seke/dms16paper/dms16paper_36.pdf" rel="noreferrer"><em>Scaffolding Version Control into the Computer Science Curriculum</em></a> states:</p>

<blockquote>
  <p>VCS and other professional tools are often introduced
  later in the educational curriculum, possibly in a software
  engineering course, generally a second-year or later course,
  and may not be reinforced through repetition and application
  in later classes. This is unfortunate, because powerful
  tools such as VCS can also be difficult for new users and
  especially those new to programming and software in general.
  The power and flexibility of new distributed VCS can
  make them especially challenging, unfriendly, and distracting
  for students already fully engaged in developing core
  competencies required in the computer science curriculum.</p>
</blockquote>

<p>They propose <a href="http://gitsubmit.com/#/" rel="noreferrer">GitSubmit</a> as a helpful solution here, describing it as "A Custom Environment for Introducing
VCS to Novice Developers". Clearly, it's helpful here to introduce VCS as soon as possible, to avoid the issues described later in the paper, where higher level students have virtually no experience of using a VCS, despite its importance in industry.</p>

<p>For the pedagogical challenges, the presentation <a href="https://pdfs.semanticscholar.org/47c2/856f9333536e5827c59193e68200d8635c89.pdf" rel="noreferrer"><em>Challenges and Confusions in Learning Version
Control with Git</em></a> seems interesting. They conclude:</p>

<blockquote>
  <ul>
  <li>Introduce authentic/relevant use cases to motivate the use and
  learning of the system</li>
  <li>Authentic practical courses cause students to see the value of
  VCSs</li>
  <li>However, use VCSs throughout the curriculum, as, for instance,
  limited resources available during authentic project courses may
  limit how the system is adopted</li>
  </ul>
</blockquote>

CC BY-SA 3.0
2017-05-24T05:07:12.617Z
[Harvard's use of Github](https://github.com/blog/2322-how-cs50-at-harvard-uses-github-to-teach-computer-science) for CS50 is worth investigating.
Miles
CC BY-SA 3.0
2017-05-23T17:28:40.273Z
2017-05-23T17:28:40.273Z
Aurora0001
<p>(1) We start out by using a repository for dissemination.  That is, students retrieve projects via the version control system.  This familiarizes them with basic tool interaction helps get the kinks out in a low-stakes way.</p>

<p>(2) Then we introduce the use of version control for saving incremental stages of a project.  The motivation is straightforward once students realize they can "back out" changes they've made.  Students also seem to like seeing "differences" between versions.</p>

<p>(3) Having established that foundation, students use the version control system to facilitate work on projects in groups.  We establish a few conventions to ease the transition, such as "check in often" and "never break the build".  Groups are typically of size 3 in my single semester intro course.  (Students have already programmed in pairs prior to group work; but that was done in "pair programming" style using single systems.)</p>

<p>We have had good success using the <a href="http://bluej.org" rel="noreferrer">BlueJ</a> integrated learning/development environment which incorporates support for both Git and Subversion.</p>

CC BY-SA 3.0
2017-05-23T23:29:34.030Z
2017-05-23T23:29:34.030Z
Joat
<p>In the words of Andrew Clay Shafer, “In software development, version control is the foundation of every other Agile technical practice.” (Allspaw &amp; Robbins, <a href="http://rads.stackoverflow.com/amzn/click/1449377440" rel="noreferrer">2010</a>).  Yet, 57% of CS curricula does not provide practical exposure to it. (<a href="https://www.youtube.com/watch?v=TFfVrdDTuHM" rel="noreferrer">Betz</a>)</p>

<p>How can I teach the use of source code control as part of an introductory CS class?  </p>

<p>To put it another way: How can we introduce source code control early in the curriculum?</p>

CC BY-SA 3.0
2017-09-12T22:23:25.723Z
@ctrl-alt-delor Wikipedia says that they are the same thing: https://en.wikipedia.org/wiki/Version_control
Kevin Workman
CC BY-SA 3.0
2017-09-12T23:03:23.523Z
An introductory class may be the only exposure some students ever get to CS. There are so many interesting, inspiring and cross-subject topics to cover in such little time. If a student doesn't end up sticking with CS, was investing time in a specific VCS worth it?
Tim
CC BY-SA 3.0
2017-09-13T07:40:22.467Z
@KevinWorkman Wikipedia is good, real good. However is is not **always** correct. There is a difference, but in seems that most people do not make it. Like the difference between noise and sound, or heat and temperature. No one else on this site, is making the distinction, so I would not worry too much.
ctrl-alt-delor
CC BY-SA 3.0
2017-09-13T07:45:14.217Z
As revision control is useful for **everyone**, not just CS students. It could be introduced outside of a programming context, very early on. see also https://cseducators.stackexchange.com/a/3601/204
ctrl-alt-delor
CC BY-SA 3.0
2017-09-13T16:18:05.353Z
@ctrl-alt-delor In that case it sounds like one of those arbitrary distinctions that doesn't actually impact the real world. In fact, [tag:version-control] is marked as a synonym of [tag:revision-control].
Kevin Workman
CC BY-SA 3.0
2017-09-13T17:08:14.977Z
@KevinWorkman Depends what you are doing in the word (Medical device manufacturers have to have version control, but do not have to use revision control (US FDE, EU medical device directive )). Version control is being able to identify the version of a binary, and then recreate it from source. But the distinction is probably not important for most people.
ctrl-alt-delor
CC BY-SA 3.0
2017-09-13T17:10:45.167Z
@ctrl-alt-delor Then why mention it at all? :p
Kevin Workman
CC BY-SA 3.0
2017-05-28T22:53:25.553Z
Note you are asking about revision-control not version-control. Yes they are different things.
ctrl-alt-delor
<revision-control>
How can I integrate teaching source code control (Git/Mercurial/etc) into my introductory CS class?
# How can I integrate teaching source code control (Git/Mercurial/etc) into my introductory CS class?

(Asked by: username_0 on 2017-05-23)

In the words of Andrew Clay Shafer, “In software development, version control is the foundation of every other Agile technical practice.” (Allspaw & Robbins, [2010](http://rads.stackoverflow.com/amzn/click/1449377440)). Yet, 57% of CS curricula does not provide practical exposure to it. ([Betz](https://www.youtube.com/watch?v=TFfVrdDTuHM))

How can I teach the use of source code control as part of an introductory CS class?

To put it another way: How can we introduce source code control early in the curriculum?

**Tags:** revision-control

> **Comments:**
> **username_3**: Note you are asking about revision-control not version-control. Yes they are different things.  
> **username_1**: @username_3 Wikipedia says that they are the same thing: https://en.wikipedia.org/wiki/Version_control  
> **username_2**: An introductory class may be the only exposure some students ever get to CS. There are so many interesting, inspiring and cross-subject topics to cover in such little time. If a student doesn't end up sticking with CS, was investing time in a specific VCS worth it?  
> **username_3**: @KevinWorkman Wikipedia is good, real good. However is is not **always** correct. There is a difference, but in seems that most people do not make it. Like the difference between noise and sound, or heat and temperature. No one else on this site, is making the distinction, so I would not worry too much.  
> **username_3**: As revision control is useful for **everyone**, not just CS students. It could be introduced outside of a programming context, very early on. see also https://cseducators.stackexchange.com/a/3601/204  
> **username_1**: @username_3 In that case it sounds like one of those arbitrary distinctions that doesn't actually impact the real world. In fact, [tag:version-control] is marked as a synonym of [tag:revision-control].  
> **username_3**: @KevinWorkman Depends what you are doing in the word (Medical device manufacturers have to have version control, but do not have to use revision control (US FDE, EU medical device directive )). Version control is being able to identify the version of a binary, and then recreate it from source. But the distinction is probably not important for most people.  
> **username_1**: @username_3 Then why mention it at all? :p  

---

## 2 answers

### Answer by username_4 on 2017-05-23. Score: 10

There are quite a few solutions which allow you to make a VCS part of your teaching.

For example, [GitHub Classroom](https://classroom.github.com/#) allows you to create assignments with some starter code, then invite your students to work on it and submit their changes through Git. They provide a promotional video [here](https://www.youtube.com/watch?v=ChA_zph7aao), which shows the workflow with it.

[*Scaffolding Version Control into the Computer Science Curriculum*](http://ksiresearch.org/seke/dms16paper/dms16paper_36.pdf) states:

> VCS and other professional tools are often introduced
> later in the educational curriculum, possibly in a software
> engineering course, generally a second-year or later course,
> and may not be reinforced through repetition and application
> in later classes. This is unfortunate, because powerful
> tools such as VCS can also be difficult for new users and
> especially those new to programming and software in general.
> The power and flexibility of new distributed VCS can
> make them especially challenging, unfriendly, and distracting
> for students already fully engaged in developing core
> competencies required in the computer science curriculum.

They propose [GitSubmit](http://gitsubmit.com/#/) as a helpful solution here, describing it as "A Custom Environment for Introducing
VCS to Novice Developers". Clearly, it's helpful here to introduce VCS as soon as possible, to avoid the issues described later in the paper, where higher level students have virtually no experience of using a VCS, despite its importance in industry.

For the pedagogical challenges, the presentation [*Challenges and Confusions in Learning Version
Control with Git*](https://pdfs.semanticscholar.org/47c2/856f9333536e5827c59193e68200d8635c89.pdf) seems interesting. They conclude:

> * Introduce authentic/relevant use cases to motivate the use and
>   learning of the system
> * Authentic practical courses cause students to see the value of
>   VCSs
> * However, use VCSs throughout the curriculum, as, for instance,
>   limited resources available during authentic project courses may
>   limit how the system is adopted

> **Comments:**
> **username_5**: [Harvard's use of Github](https://github.com/blog/2322-how-cs50-at-harvard-uses-github-to-teach-computer-science) for CS50 is worth investigating.  

---

### Answer by username_6 on 2017-05-23. Score: 5

(1) We start out by using a repository for dissemination. That is, students retrieve projects via the version control system. This familiarizes them with basic tool interaction helps get the kinks out in a low-stakes way.

(2) Then we introduce the use of version control for saving incremental stages of a project. The motivation is straightforward once students realize they can "back out" changes they've made. Students also seem to like seeing "differences" between versions.

(3) Having established that foundation, students use the version control system to facilitate work on projects in groups. We establish a few conventions to ease the transition, such as "check in often" and "never break the build". Groups are typically of size 3 in my single semester intro course. (Students have already programmed in pairs prior to group work; but that was done in "pair programming" style using single systems.)

We have had good success using the [BlueJ](http://bluej.org) integrated learning/development environment which incorporates support for both Git and Subversion.


---

