I teach the third required introductory course at CS. In one of my homework assignments, students are asked to speed up the code they wrote for the previous assignment. A factor of ten accelerations is commonplace; 100 or 1000 factors are not unheard of. (To speed up 1000 times, you had to make rookie mistakes with malloc ().)
Programs are improved with a sequence of small changes. I ask students to record and describe each change and corresponding improvement.
While you improve the program, it can also be broken. Would it be nice to back off?
You can see where I am going: my students will benefit from version control. But there are some caveats:
- Our computing environment is locked. Everything that depends on the central repository is suspicious.
- Our students are incredibly overloaded. Not just classes, but jobs, sports, music, you name it. To use the new tool, it must be incredibly lightweight and have obvious advantages.
- Our students most of all work in pairs. Bit problems between accounts are problematic. Can this problem also be solved with distributed version control?
- Complexity is the enemy. I know that creating a CVS repository is too difficult. I still have problems because I only do this once a year. I was told that SVN is even more complicated.
Here are my comments on existing systems:
- I believe that central version control (CVS or SVN) is excluded due to the fact that our students do not have the administrative rights necessary to create a repository that they can share with one other student. (We are stuck with Unix file permissions.) Also, configuring on CVS or SVN is too complicated.
- darcs is easy to set up, but it’s not obvious how you share things. darcs send (sending patches via email) seems promising, but it’s not clear how to configure it.
- The introductory documentation for git is not for beginners. Like installing CVS, I have problems with.
I am asking for suggestions about which source control to use for beginner students. I suspect that we can find resources to place thin veneers on top of the existing system and simplify existing documentation. We probably don't have the resources to write new documentation.
So, what is really easy to set up , commit , roll back and share changes with a partner , but don't you need to easily integrate or work on a scale?
A key limitation is that programming pairs must be able to exchange with each other and only with each other , and pairs change every week . Our infrastructure is Linux, Solaris, and Windows with the netapp filter. I doubt that the IT staff wants to create a Unix group for each pair of students. Is there an easier solution that I skipped?
(Thanks for the accepted answer, which outperforms the rest due to its excellent link to Git Magic , as well as useful comments.)
version-control darcs
Norman Ramsey Nov 28 '08 at 18:52 2008-11-28 18:52
source share