Небольшая преамбула: собственно, с чего вдруг возник такой вопрос.
Наверное, многие из тех, кому приходилось заниматься подготовкой вновь приходивших сотрудников сразу из студенческой среды, согласятся, что студенты, не имевшие во время учебы приличной практики в како-нибудь софтверной компании, долгое время пишут программы как лабораторные работы: без тестов, без комментариев, не используя контроль версий (или долго к нему привыкая), с некоторым трудом привыкая к тому, что необходимо учитывать, что над проектом работаешь не один. Т.е. студенты выходят из стен ВУЗа не имея представления и навыков так называемой prodaction разработки.
Другая большая проблема - отсутсвие навыков работы с чужим кодом. Сюда я отношу и умение быстро разбираться с чужим кодом, искать в нем ошибки, перенимать предложенный стиль, разбираться в алгоритме и нюансах поведения и т.д.
И первая и вторая задача, по большому счету, решается просто набором опыта, “набиванием рук”, однако на это, конечно же, нужно время, причем, чем больше, тем лучше. Кроме того, мне кажется, что для данных областей в принципе бессмысленно преподавать отдельные курсы (например, что-то вроде курса “Технологии разработки”, который читается на специальности 22.04, сейчас это 22.03.05) - нужно элементы организации процессов разработки включать в большинство курсов по разработке, причем в таком виде, когда работа уже организована, и студенты просто подключаются к какому-то большому проекту, а в качестве лабораторной работы делают некоторую небольшую часть, причем в отдельном branch, где ничего сломать не смогут.
Собственно идея.
Думаю, основная идея как решить приведенные мною проблемы уже ясна, но для полноты я все-таки ее еще раз сформулирую.
Итак, за основу для выполнения лабораторных и практических работ берутся не отдельные независимые задачи, а задачи по доработке (очень ограниченной, конечно же, т.е. объем работ практически не меняется по сравнению с лабораторными!) или модификации частей какаого-то большого общего проекта.
Для работы разворачивается сервер хранения версий, который позволяет делать отдельные независимые ветви всего проекта или отдельных его частей. Для каждого студента (группы студентов) создается отдельный branch (на основную ветку, еонечно же, у них нет прав), который они и могут дорабатывать. Далее эту ветку они могут копировать локально к себе или работать непосредственно с центральным репозиторием - это уже детали.
Перед защитой своей работы все изменения должны быть внесены в их ветку проекта. Обязательными условиями, для выполнения работ являются:
Думаю, понятно, что от такого подхода могут выиграть студенты, это я уже писал.
Для преподавателей здесь полезным может быть, например:
Конечно же, у такого подхода есть много “но”. Вот самые очевидные:
Увы, любая ломка устоев требует больших усилий, и, если говорить, например, про кафедру ПО в ИжГТУ, то, я боюсь, на подобные изменения согласятся, дай бог, 2-3 преподавателя. Остальных и текущий вариант вполне устраивает.
наверняка еще что-то, чего с ходу не видно ….
В общем, основные вопросы в каких курсах и какие проекты можно было бы использовать. Начнем с проектов:
Теперь, для каких курсов можно попробовать подобный подход. Если двигаться по определению типа проекта, то, например:
Первые два вообще можно считать идельными: их и достаточно просто разделить на отдельные задания и модульные тесты для них писать очень просто. С последним сложнее, но тоже можно выкрутиться.
Собственно, вопросы, коллеги.
Ну, во-первых, как вы считаете, существуют ли вообще описанные мною проблемы или это мне только кажется?
Как вам предложенный метод в целом? Будет ли он полезен (даже если проблемы нет), стоит ли вообще заморачиваться на этот счет?
Какие еще вы видите варианты развития этой идеи, ее плюсы и минусы?
На каких курсах можно было бы практиковать подобный подход (если Вы заканчивали 22.04, то назовите просто курс, а если нет, то в паре слов о чем он), и в каком виде (какие проекты, задания, как организовать процесс)?
В общем, буду рад любым разумным дополнениям/критике.
Дополнение: Хочу обратить внимание, что под “проектами” подразумеваются некоммерческие программные разработки с открытыми исходными кодами. А вот должны ли это быть внешние (по отношение к университету) или внутренние проекты как раз вопрос на проработку.


Как мы и