Найти в Дзене

Несколько полезных кейсов использования GitHub в обучении

Оглавление

В статье «4 причины, почему веб-сервис GitHub нужно использовать при обучении студентов программированию» я кратко рассказал о том, для чего я приучаю студентов именно к этому сервису. Теперь же мы посмотрим на GitHub как на инструмент, который в своей работе часто используют программисты.

Кейс, связанный с форками (с «ответвлениями» в череде изменений какого-либо проекта)

Начну с того, что репозитории с заданиями можно создавать в своем аккаунте, не добавляя туда учеников. Это делается так:

  • Создаете репозиторий с названием задания;
  • Затем добавляете это задание в README.md (первом файле, который нужно читать, когда получаете доступ к проекту на GitHub) и пишете ученикам подробную инструкцию о том, что и как им нужно будет сделать. При этом обязательно обращайте внимание, как именно вы создаете запрос на слияние (pull request) с вашим исходным репозиторием (подробнее с этим вы можете ознакомиться тут: ДЗ по Qt);
-2
  • Далее сообщаете студентам задание, отправляя им ссылку на нужный репозиторий, и ждете его выполнения, а именно когда будет создан запрос на слияние;
-3
  • А потом проверяете, как ученики справились с задачей, и оставляете комментарии либо ко всей работе целиком, либо к ее отдельным частям.

Плюсы и минусы данного кейса

Плюсы:

  • Студентов не нужно добавлять в аккаунт организации или делать соразработчиками репозитория;
  • Задания можно рассылать любому количеству учеников из разных групп и разных учебных заведений.

Минусы:

  • Необходимо следить за тем, чтобы студенты не применили свои изменения в основном репозитории;
  • Нужно подробно им объяснять, что такое форк и как делать запрос на слияние (чаще всего именно эти моменты вызывают затруднения у учащихся).

С точки зрения преподавателя отмечу, что бывает сложно отследить, когда ученики ошибаются и делают слияние кода. Тогда в репозитории отображается не только задание, но и код решения.

Конечно, вы можете добавить под каждого студента свою ветку. Но это может привести к большим временным затратам.

Далее рассмотрим ситуацию, когда над проектом трудится целая команда людей, но при этом не создается огромное количество репозиториев и веток:

  • В этом случае понадобится аккаунт организации, в который будут добавлены студенты;
  • Затем нужно будет создать репозиторий и в README.md добавить текст задания (не забудьте, что предварительно репозиторий надо наполнить файлами, необходимыми для выполнения этого задания);
  • Далее создаются ветви, где будет вестись основная разработка, проверка всех фич и устранение багов;
-6
  • Студенты, получив задания (через issues или другие сервисы вроде Kanban или Scrum), делают ответвления от последнего коммита (то есть создают «изолированную» копию для написания, изменения или дополнения программы), решают поставленные задачи и создают запрос на слияние;
  • После этого вы проверяете, как ученики справились с работой, и оставляете комментарии или к ней в целом, или к отдельным ее частям.
-8

Плюсы и минусы данного кейса

Плюсы:

  • Данный кейс моделирует более-менее реальный проект разработки ПО;
  • Можно назначать студентов ревьюерами даже преподавательского кода. Я, например, специально делаю в коде явные и неявные ошибки, чтобы ученики находили их и исправляли.

Минусы:

  • Нужно создавать отдельный аккаунт для организации;
  • Подробно объяснять учащимся, как работать с ветками.

И последний интересный кейс, рассказывающий про командную работу с несколькими репозиториями.

Это наиболее реальный проект разработки ПО из всех вышеперечисленных, когда в рамках реализации одной программы возникают подпроекты, и над ними трудятся разные команды в разных репозиториях. В этой ситуации часть действий повторяется из предыдущего кейса:

  • Создается аккаунт организации, в который добавляются студенты;
  • Затем создается репозиторий, и в README.md добавляется текст задания. Не забудьте, что предварительно репозиторий нужно будет наполнить файлами, которые требуются для выполнения этого задания. После, как и в вышеуказанном случае, создаются ветки (dev или develop);
-10
  • Ученики, получив задание, клонируют репозиторий себе на локальные машины (то есть к себе на компьютеры);
  • Вслед за этим выявляются подпроекты, для каждого из которых создаются команды и репозиторий с предварительным наполнением. Задания можно выдавать как через issues, так и через сервисы Kanban или Scrum;
  • Далее студенты создают запрос на слияние;
-13
  • А вы проверяете, как ученики справились с работой, и оставляете комментарий или к ней целиком, или к отдельным ее частям;
  • Следующий этап — создание релизов. Готовые DLL (динамические библиотеки, позволяющие многократное использование различных программных приложений), которые берутся из этих релизов, подключаются в основной проект;
-15
  • И чтобы при подключении и использовании DLL не было проблем, в каждой команде обязательно ведется техдокументация.
-16

Сразу расскажу о нескольких полезных моментах, которые помогут при решении данного кейса:

  • Вы можете связать репозиторий с Kanban- или Scrum-сервисом, чтобы выдача заданий фиксировалась в карточках на досках;
  • И создавать не отдельные репозитории для каждого подпроекта, а использовать git submodules (подмодули).

Плюсы и минусы кейса

Плюсы:

  • Как уже отметил ранее, это наиболее реальный проект разработки ПО;
  • Можно назначать учащихся в качестве ревьюеров даже преподавательского кода. Опять-таки в этом случае я намеренно делаю в коде явные и неявные ошибки, чтобы студенты могли потренировать свое внимание;
  • Развивается навык работы в команде, когда ученики совместно разрабатывают один большой проект.

Минусы:

  • Нужно создавать отдельный аккаунт для организации;
  • Следить, как студенты работают с ветками;
  • Объяснять им, что такое релиз и как происходит версионирование (отделение версий ПО друг от друга);
  • Подробно рассказывать, как и для чего пишется техдокументация.

Автор статьи: Андрей Старинин