Всем привет!
В данном посте я расскажу про то, как студенты учатся азам программирования. Этот курс несколько лет используется на ФИИТ УрФУ, а с 2023 года будет использоваться для базовой группы в новом алгоритмическом бакалавриате, в продвинутой группе мы ожидаем абитуриентов, которые уже уверенно программируют и знают такие базовые алгоритмы, как бин.поиск/bfs/dfs/Дейкстру.
Что за курс?
«Основы программирования» были сделаны Контуром для ФИИТ в 2013 году. Это большой курс на ulearn.me, рассчитанный на весь первый год обучения. Для удобства он разбит на две части (один семестр — одна часть) по 15 и 13 тем соответственно.
Чтобы привести всех студентов к одному уровню, курс начинается с азов — типов данных, условных операторов, циклов — и постепенно доходит до многопоточного и динамического программирования.
Курс ведется в подгруппах по 12-15 человек, преподаватели — действующие разработчики Контура, которые пишут код в реальной жизни и могут рассказать про хитрые особенности языка и конструкций в нем.
Почему курс на C#?
С течением времени инструменты C# и .NET становятся все более актуальными и универсальными. Это уже давно не разработка под Windows, а полноценные кроссплатформенные инструменты, позволяющие заниматься самыми разноплановыми задачами — от бэкенда до разработки игр. К тому же, Контур исторически пишет в экосистеме C#. Логично делать курс про то, в чем очень хорошо разбираешься :)
Структура курса
Курс состоит из пяти видов активностей с разными типами задач:
- Домашка:
- лекции
- упражнения
- вопросы для самопроверки
- большие задачи на программирование
- Семинары:
- задачи на семинар
- Семинары для олимпиадников
- Практики
- дополнительные задачи
- Командный проект
- Экзамен
Ниже подробнее расскажу обо всех активностях и приведу примеры задач.
Лекции
Все лекции курса записаны заранее и находятся на ulearn.me. Каждую неделю студенты смотрят их перед тем, как приступить к решению задач или пойти на семинар/практику. Формат видеолекций очень удобен: они всегда под рукой, их можно смотреть быстрее или медленнее; непонятный кусок можно пересмотреть несколько раз. Правда, задать вопрос лектору и мгновенно получить на него ответ не получится, придется ждать встречи с преподавателем на семинаре или практике.
Упражнения
После просмотра лекций студенты делают упражнения. Это тесты из нескольких вопросов на понимание темы или задачи, в которых нужно написать немного кода прямо в браузере. Упражнения проверяются автоматически, баллы за них учитываются в итоговой ведомости. Обычно в одной теме 2-3 теста и 3-5 небольших задач.
Пример теста: тема «Ветвления»
Пример задачи: тема «Циклы»
Вопросы для самопроверки
Проверить, хорошо ли они разбираются в теме, студенты могут с помощью карточек самопроверки. За них не ставятся баллы, карточки сделаны для самоконтроля ребят.
Пример вопроса для самопроверки: тема «Ошибки»
После собственного ответа на вопрос можно посмотреть правильный и оценить, насколько ты был близок к нему:
Большие домашние задачи
После того, как студенты послушали лекции и потренировались на тестах и упражнениях, они приступают к решению больших домашних задач, которые называются практиками (но решаются все-таки дома).
Практика — это задача, для решения которой нужно скачать заранее заготовленный проект с ulearn.me, написать в нем несколько методов или даже классов, а затем загрузить нужные файлы в онлайн-систему, которая автоматически прогонит решение студента на различных тестах и выдаст вердикт. Но прохождение тестов на сайте — лишь половина дела. Работающие решения отправляются на код-ревью к преподавателю, который оставляет замечания и помогает довести каждое решение до совершенства. Это в точности код-ревью, через которое проходит код при промышленной разработке в командах, поэтому, с одной стороны, получается удобное взаимодействие и получение обратной связи, а с другой, происходит подготовка студентов к реальной промышленной разработке.
После ревью преподавателя студент исправляет все ошибки и отправляет код на повторную проверку.
В каждой теме студенты решают по 2-4 практики. В итоговой ведомости курса учитываются только практики, сданные на максимальный балл, т.е. сделанные вовремя и прошедшие код-ревью. Задачи с неполными баллами не считаются сданными.
Пример практики: тема «Коллекции, строки, файлы»
Семинары
Семинары — это очные групповые занятия, на которых студенты могут задать вопросы по текущей теме, а преподаватель — дополнить лекции своим материалом (так происходит довольно часто, потому что преподаватели — действующие программисты и рассказывают о том, чем пользуются прямо сейчас). Также на семинарах проводят небольшие письменные или устные опросы по теме и придумывают способы решения задач на применение алгоритмов и структур данных. Никакого написания кода на бумажке или доске, семинары — это про программирование и придумывание идей, а не про написание кода. Семинары проводятся раз в неделю, за решение задач на них можно заработать дополнительные баллы.
Пример задач на семинар: тема «Массивы»
Семинары для олимпиадников
Более продвинутые студенты могут ходить на семинары для олимпиадников. Они проводятся 1-2 раза в неделю (в зависимости от семестра и учебного плана) в офисе Контура. Каждый студент заранее получает от преподавателя задачу с Тимуса, решает ее и на семинаре рассказывает решение остальным ребятам. Темы задач могут быть любыми: сортировка и поиск, графы, динамическое программирование, вычислительная геометрия, строки, структуры данных.
Когда студент решает задачу и выступает с ней на семинаре, он получает один балл и может попросить у преподавателя другую задачу. За каждую задачу студент получает один балл, в конце семестра баллы суммируются.
Иногда на семинарах выступает и сам преподаватель. Он рассказывает теорию, разбирает примеры задач и затем дает похожие задачи для самостоятельного решения.
Практики
Практики — занятия, на которых студенты могут, сидя перед компьютером, обсудить с преподавателем подходы к решению домашних задач или задать любые вопросы, о которых удобнее говорить с кодом перед глазами. Проводятся раз в неделю.
Во время практик можно доделывать домашки, а можно решать хитрые задачки за дополнительные баллы — обычно преподаватель на каждую пару придумывает нетривиальную задачу, сделать и сдать которую можно только здесь и сейчас. В открытом доступе таких задач нет.
Самое интересное — командный проект
В конце второго семестра студенты объединяются в команды и с нуля разрабатывают собственную компьютерную игру: придумывают идею, воплощают ее в коде и реализуют дизайн. На разработку дается 10 недель, после которых команда отправляется на предзащиту, где рассказывает, о чем игра, показывает геймплей и основные фишки. По итогам предзащиты лучшие команды проходят в финал и представляют свои игры перед экспертами игровой индустрии. Подробнее о том, как проходит разработка и защита проектов, можно почитать здесь.
Экзамен
Студенты, которые за семестр набрали определенное количество баллов (вовремя сдавали домашки и решали упражнения, активничали на семинарах), получают автомат. Остальные ребята отправляются на экзамен.
Экзамен проводится в письменной форме (да, студенты сдают экзамен по программированию при помощи бумажки и ручки!) и состоит примерно из 10 заданий. В одних заданиях нужно указать тип выражения, в других — оценить временную сложность алгоритма или нарисовать карту памяти; есть задания на знание определений, написание кода или поиск ошибок.
Пример задания: экзамен первого семестра 2019-2020 учебного года
Поощряем лучших студентов
По итогам первого семестра лучшие студенты курса приглашаются в Контур на Code Retreat. Во время этого мероприятия ребята 4 сессии по 45 минут программируют в парах (как друг с другом, так и с сотрудниками Контура) и решают одну и ту же задачу. Каждую сессию пары перемешиваются, а для задачи вводятся новые ограничения и установки. В перерывах и после сессий мы показываем ребятам офис, кормим их вкусняшками, играем в настолки и не только.