Блог пользователя alexfox

Автор alexfox, 3 года назад, По-русски

Всем привет!

В данном посте я расскажу про то, как студенты учатся азам программирования. Этот курс несколько лет используется на ФИИТ УрФУ, а с 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 минут программируют в парах (как друг с другом, так и с сотрудниками Контура) и решают одну и ту же задачу. Каждую сессию пары перемешиваются, а для задачи вводятся новые ограничения и установки. В перерывах и после сессий мы показываем ребятам офис, кормим их вкусняшками, играем в настолки и не только.

  • Проголосовать: нравится
  • +2
  • Проголосовать: не нравится