Я преподаю третий необходимый вступительный курс в отделе CS. В одном из моих домашних заданий ученикам предлагается ускорить код, который они написали для предыдущего задания. Фактор десяти ускорений является обычным делом; факторы 100 или 1000 не являются неслыханными. (Для ускорения 1000 раз вы должны были совершить ошибки новобранец с помощью malloc().)
Программы улучшаются с помощью последовательности небольших изменений. Я прошу учащихся записать и описать каждое изменение и соответствующее улучшение.
Пока вы улучшаете программу, ее также можно разбить. Было бы неплохо отступить?
Вы можете увидеть, где я собираюсь: мои ученики выиграют от контроля версий. Но есть некоторые оговорки:
- Наша вычислительная среда заблокирована. Все, что зависит от центрального хранилища, является подозрительным.
- Наши студенты невероятно перегружены. Не просто классы, но рабочие места, спорт, музыка, вы называете это. Чтобы использовать новый инструмент, он должен быть невероятно легким и иметь очевидные преимущества.
- Наши студенты больше всего работают парами. Проблемы с битами между учетными записями являются проблематичными. Может ли эта проблема также быть решена с помощью распределенного контроля версий?
- Сложность - это враг. Я знаю, что создание репозитория CVS слишком затруднительно. У меня все еще есть проблемы, потому что я делаю это только один раз в год. Мне сказали, что SVN еще сложнее.
Вот мои комментарии к существующим системам:
- Я считаю, что центральный контроль версий (CVS или SVN) исключается из-за того, что наши ученики не имеют административных прав, необходимых для создания репозитория, который они могут разделить с одним другим учеником. (Мы застряли с разрешениями файлов Unix.) Кроме того, настройка на CVS или SVN слишком сложна.
- darcs легко настраивается, но не очевидно, как вы делитесь вещами. darcs send (отправлять патчи по электронной почте) кажется многообещающим, но не ясно, как его настроить.
- Вводная документация для git не для начинающих. Как и установка CVS, у меня есть проблемы с.
Я запрашиваю предложения относительно того, какой источник-контроль использовать для начинающих учеников. Я подозреваю, что мы можем найти ресурсы, чтобы поместить тонкий шпон поверх существующей системы и упростить существующую документацию. У нас, вероятно, нет ресурсов для написания новой документации.
Итак, что действительно легко настроить, зафиксировать, вернуть и поделиться изменениями с партнером, но не нужно легко объединять или работать в масштабе?
Ключевое ограничение состоит в том, что пары программирования должны иметь возможность обмениваться друг с другом и только друг с другом, а пары меняются каждую неделю. Наша инфраструктура - Linux, Solaris и Windows с фильтром netapp. Я сомневаюсь, что ИТ-персонал хочет создать группу Unix для каждой пары студентов. Есть ли более легкое решение, которое я пропустил?
(Спасибо за принятый ответ, который превосходит остальных из-за его отличной ссылки на Git Magic, а также полезные комментарии.)