Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-24T05:07:12.617Z
Answers.Text: [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.
Answers.UserDisplayName: Miles
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-23T17:28:40.273Z
Answers.LastActivityDate: 2017-05-23T17:28:40.273Z
Answers.UserDisplayName: Aurora0001
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-23T23:29:34.030Z
Answers.LastActivityDate: 2017-05-23T23:29:34.030Z
Answers.UserDisplayName: Joat
Body: <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>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-12T22:23:25.723Z
Comments.Text: @ctrl-alt-delor Wikipedia says that they are the same thing: https://en.wikipedia.org/wiki/Version_control
Comments.UserDisplayName: Kevin Workman
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-12T23:03:23.523Z
Comments.Text: 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?
Comments.UserDisplayName: Tim
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T07:40:22.467Z
Comments.Text: @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.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T07:45:14.217Z
Comments.Text: 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
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T16:18:05.353Z
Comments.Text: @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].
Comments.UserDisplayName: Kevin Workman
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T17:08:14.977Z
Comments.Text: @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.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T17:10:45.167Z
Comments.Text: @ctrl-alt-delor Then why mention it at all? :p
Comments.UserDisplayName: Kevin Workman
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-28T22:53:25.553Z
Comments.Text: Note you are asking about revision-control not version-control. Yes they are different things.
Comments.UserDisplayName: ctrl-alt-delor
Tags: <revision-control>
Title: How can I integrate teaching source code control (Git/Mercurial/etc) into my introductory CS class?
ThreadText: # 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**: @username_1 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**: @username_1 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.
  
  
  ---
  
  