Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
14 ноября CS центр в третий раз запускает онлайн-программы «Алгоритмы и эффективные вычисления», «Математика для разработчиков» и «Разработка на C++, Java и Haskell». Они созданы, чтобы помочь погрузиться в новую область и заложить фундамент для обучения и работы в IT.
Чтобы поступить, вам нужно будет погрузиться в атмосферу обучения и сдать вступительный экзамен. Подробнее о программе, экзамене и стоимости читайте на code.stepik.org.
А пока ассистенты преподавателей и куратор программ прошлого запуска расскажут, как организовано обучение, кто приходит учиться, как и зачем ассистенты делают код-ревью во время учёбы и чему их научило участие в программах.
В CS центре есть три онлайн-программы на платформе Stepik: «Алгоритмы и эффективные вычисления», «Математика для разработчиков» и «Разработка на C++, Java и Haskell». Каждая программа состоит из двух частей. Это курсы, подготовленные опытными преподавателями и учёными:
А также дополнительные активности, например, код-ревью, решение теоретических задач на доказательства, консультации с ассистентами и преподавателями. Их сложно масштабировать, поэтому обучение проходит в небольших группах. Активности помогают глубже разобраться в теме и получить качественную обратную связь.
Артемий Пестрецов, ассистент преподавателя: «Мне кажется, что код-ревью — главная отличительная особенность онлайн-программ по языкам и алгоритмам. Чтобы найти ответ на свой вопрос, можно просто погуглить. Это тяжело и долго, но возможно. А вот код-ревью гугл не сделает, поэтому это очень ценно».
Каждый курс внутри программы идёт примерно два месяца. В финале студенты должны сдать экзамен или получить зачёты по всем курсам.
Студенты онлайн-программ:
Артемий Пестрецов: «У нас был студент, мужчина в самом расцвете сил, который работал в нефтегазовой компании и взял отсрочку по дедлайнам, потому что поехал в командировку на скважину. Прикольно, что люди с совершенно разным опытом видят, что IT-технологии и математика набрали обороты. Это состоявшиеся люди, которые могут и так прекрасно жить, но пытаются узнать что-то новое, хотят развиваться в других областях».
Михаил Веселов, vmatm: «Уровень у всех разный: кто-то не до конца разбирается с базовыми вещами в языке, а кто-то приходит программистом на Java или Python, и с ним можно поддерживать разговор в духе «как сделать лучше». Главное, ориентироваться не на лучших из лучших, а на средний уровень, чтобы курс оказался полезен всем».
Несколько инструментов помогают организаторам и преподавателям строить процесс.
Переписка в почте. Для важных и формальных объявлений.
Чат с преподавателями и организаторами. Ребята часто начинают помогать друг другу в чате ещё до того, как преподаватель или ассистент увидят вопрос.
YouTrack. Для вопросов и сдачи задач преподавателям и ассистентам. Здесь можно задавать приватные вопросы и обсуждать решение один на один: делиться решениями друг с другом студенты, конечно, не могут.
Организаторы общаются со студентами и стараются быстро решать проблемы. Кристина Смольникова: «Если несколько студентов спрашивают одно и то же, значит, это общая проблема и надо рассказать о ней всем».
Код-ревью
Студенты программ сдают домашние задания, а ассистенты проверяют, насколько их код чист и оптимален. Вот как ребята организовали ревью в прошлый раз.
Артемий Пестрецов старался отвечать на вопросы в течение 12 часов, потому что студенты сдавали задачи в разное время. Читал код, находил проблемы с точки зрения стандартов, общих практик программирования, докапывался до мелочей, просил оптимизировать, подсказывал, какие имена переменных надо исправить.
«Все по-разному пишут код, у людей разный опыт. Были студенты, которые взяли и написали с первого раза. Мне всё нравится, это прекрасно работает и проверка занимает 25 секунд, потому что всё идеально. А бывает, что сидишь и в течение часа пытаешься понять, зачем человек написал такой код. Это абсолютно адекватный учебный процесс. Когда в жизни проводишь код-ревью, примерно так и бывает».
Михаил старался построить процесс независимо для каждого студента, чтобы не было ситуации «Я это уже кому-то объяснял, спроси у него». Давал подробный первый комментарий к задаче, затем студент задавал уточняющие вопросы и обновлял решение. Последовательным приближением они получали результат, который устраивал по качеству и наставника, и студента.
«В первые одну-две недели обучения люди пишут не очень аккуратный код. Им нужно заботливо напомнить про стандарты, которые есть и в Python, и в Java, рассказать про автоматические анализаторы кода на предмет очевидных ошибок и недочётов, чтобы потом на это не отвлекаться и чтобы весь семестр не доставать человека тем, что у него переносы неправильно сделаны или запятая не там стоит».
Советы тем, кто хочет проводить учебные code review
1. Если студент написал проблемный код, не надо просить переделывать его заново. Важно, чтобы он понял, в чём проблема именно этого кода.
2. Не стоит врать студентам. Лучше честно сказать «я не знаю», если нет возможности разобраться в вопросе. Артемий: «У меня был студент, который копал гораздо глубже программы, спускался на уровень железа, потом снова поднимался и мы с ним постоянно катались на этом лифте абстракций. Мне приходилось вспоминать какие-то вещи, но с ходу сформулировать было очень тяжело.»
3. Не надо заострять внимание на том, что студент начинающий: когда человек что-то делает впервые, он серьёзнее относится к критике, совсем не знает, как это делают обычно, и что у него получается, а что нет. Лучше аккуратно говорить только про код, а не про минусы студента.
4. Здорово научиться отвечать на вопросы в «образовательной» манере. Задача — ответить не прямо, а сделать так, чтобы студент действительно понял и сам дошел до ответа. Артемий: «В 99% случаев я мог сходу ответить на вопрос студента, но не часто мог тут же взять и написать ответ, потому что надо многое взвешивать. Написал пятьдесят строчек, стёр, снова написал. Я ответственен за репутацию курсов и знания студентов, и это непростая работа. Очень крутое чувство возникает, когда студент говорит: «О, у меня озарение!» И я тоже такой: «У него озарение!».
5. Важно быть внимательным и не критиковать сильно. Вдохновлять, но не слишком, чтобы студент не думал, что делает всё шикарно. Здесь придётся научиться грамотно управлять уровнем своих эмоций.
6. Полезно коллекционировать общие замечания и однотипные ошибки, чтобы экономить время. Можно записать первое такое сообщение, а потом просто копировать и добавлять детали в ответ другим на такой же вопрос.
7. Из-за разницы в знаниях и опыте некоторые вещи кажутся очевидными, поэтому первое время ассистенты не расшифровывают их в комментариях для студентов. Помогает просто перечитать написанное и дописать то, что казалось банальным. Михаил: «Мне кажется, чем дольше я помогаю с проверкой решений, тем понятнее я студентам нового курса с самого начала. Первые комментарии к коду я бы сейчас прочитал и сказал: «Надо было аккуратнее, подробнее».
Мы попросили ребят рассказать, какой полезный опыт они получили, пока проводили код-ревью и общались со студентами.
Артемий: «Главное, чему я научился, — такому, преподавательскому, терпению. Это абсолютно новый навык, я осваиваю для себя совершенно новые, не технические области. Думаю, что преподавание очень поможет, когда я буду выступать на конференциях, в разговоре с коллегами или презентации проектов на митинге. Советую всем попробовать!»
Михаил: «Этот опыт помог чуть терпимее относиться к тому, что кто-то пишет код не так, как я. Особенно, когда только начинаешь смотреть на решение. Курсы по Python и по Java я проходил сам и похожие задачки решал иначе. По-другому называл переменные и функции. И решения ребят все немного другие, потому что в программировании не бывает эталонного решения. И вот тут нужно некоторое терпение, чтобы не сказать: “Надо было делать только так!” Это помогло потом на работе обсуждать плюсы и минусы конкретных решений, а не плюсы и минусы того, что это сделал не я».
Подробнее про онлайн-программы и отзывы выпускников
Чтобы поступить, вам нужно будет погрузиться в атмосферу обучения и сдать вступительный экзамен. Подробнее о программе, экзамене и стоимости читайте на code.stepik.org.
А пока ассистенты преподавателей и куратор программ прошлого запуска расскажут, как организовано обучение, кто приходит учиться, как и зачем ассистенты делают код-ревью во время учёбы и чему их научило участие в программах.
Как устроены программы
В CS центре есть три онлайн-программы на платформе Stepik: «Алгоритмы и эффективные вычисления», «Математика для разработчиков» и «Разработка на C++, Java и Haskell». Каждая программа состоит из двух частей. Это курсы, подготовленные опытными преподавателями и учёными:
- Алгоритмы и теоретическая информатика в составе программы по алгоритмам.
- Матанализ, дискретная математика, линейная алгебра и теория вероятностей в программе по математике для разработчиков.
- Курсы по C++, Java и Haskell в онлайн-программе по языкам программирования.
А также дополнительные активности, например, код-ревью, решение теоретических задач на доказательства, консультации с ассистентами и преподавателями. Их сложно масштабировать, поэтому обучение проходит в небольших группах. Активности помогают глубже разобраться в теме и получить качественную обратную связь.
Артемий Пестрецов, ассистент преподавателя: «Мне кажется, что код-ревью — главная отличительная особенность онлайн-программ по языкам и алгоритмам. Чтобы найти ответ на свой вопрос, можно просто погуглить. Это тяжело и долго, но возможно. А вот код-ревью гугл не сделает, поэтому это очень ценно».
Каждый курс внутри программы идёт примерно два месяца. В финале студенты должны сдать экзамен или получить зачёты по всем курсам.
Кто наши студенты
Студенты онлайн-программ:
- Хотят заполнить пробелы в математике или программировании. Например, опытные разработчики, которые хотят подтянуть математическую базу.
- Начинают знакомиться с программированием и включают программы центра в свой самообразовательный план.
- Готовятся к поступлению в магистратуру или CS центр.
- Студенты с другим профильным образованием, которые решили кардинально сменить направление. Например, химики или педагоги.
Артемий Пестрецов: «У нас был студент, мужчина в самом расцвете сил, который работал в нефтегазовой компании и взял отсрочку по дедлайнам, потому что поехал в командировку на скважину. Прикольно, что люди с совершенно разным опытом видят, что IT-технологии и математика набрали обороты. Это состоявшиеся люди, которые могут и так прекрасно жить, но пытаются узнать что-то новое, хотят развиваться в других областях».
Михаил Веселов, vmatm: «Уровень у всех разный: кто-то не до конца разбирается с базовыми вещами в языке, а кто-то приходит программистом на Java или Python, и с ним можно поддерживать разговор в духе «как сделать лучше». Главное, ориентироваться не на лучших из лучших, а на средний уровень, чтобы курс оказался полезен всем».
Как организовано обучение
Несколько инструментов помогают организаторам и преподавателям строить процесс.
Переписка в почте. Для важных и формальных объявлений.
Чат с преподавателями и организаторами. Ребята часто начинают помогать друг другу в чате ещё до того, как преподаватель или ассистент увидят вопрос.
YouTrack. Для вопросов и сдачи задач преподавателям и ассистентам. Здесь можно задавать приватные вопросы и обсуждать решение один на один: делиться решениями друг с другом студенты, конечно, не могут.
Организаторы общаются со студентами и стараются быстро решать проблемы. Кристина Смольникова: «Если несколько студентов спрашивают одно и то же, значит, это общая проблема и надо рассказать о ней всем».
Как помогают ассистенты
Код-ревью
Студенты программ сдают домашние задания, а ассистенты проверяют, насколько их код чист и оптимален. Вот как ребята организовали ревью в прошлый раз.
Артемий Пестрецов старался отвечать на вопросы в течение 12 часов, потому что студенты сдавали задачи в разное время. Читал код, находил проблемы с точки зрения стандартов, общих практик программирования, докапывался до мелочей, просил оптимизировать, подсказывал, какие имена переменных надо исправить.
«Все по-разному пишут код, у людей разный опыт. Были студенты, которые взяли и написали с первого раза. Мне всё нравится, это прекрасно работает и проверка занимает 25 секунд, потому что всё идеально. А бывает, что сидишь и в течение часа пытаешься понять, зачем человек написал такой код. Это абсолютно адекватный учебный процесс. Когда в жизни проводишь код-ревью, примерно так и бывает».
Михаил старался построить процесс независимо для каждого студента, чтобы не было ситуации «Я это уже кому-то объяснял, спроси у него». Давал подробный первый комментарий к задаче, затем студент задавал уточняющие вопросы и обновлял решение. Последовательным приближением они получали результат, который устраивал по качеству и наставника, и студента.
«В первые одну-две недели обучения люди пишут не очень аккуратный код. Им нужно заботливо напомнить про стандарты, которые есть и в Python, и в Java, рассказать про автоматические анализаторы кода на предмет очевидных ошибок и недочётов, чтобы потом на это не отвлекаться и чтобы весь семестр не доставать человека тем, что у него переносы неправильно сделаны или запятая не там стоит».
Советы тем, кто хочет проводить учебные code review
1. Если студент написал проблемный код, не надо просить переделывать его заново. Важно, чтобы он понял, в чём проблема именно этого кода.
2. Не стоит врать студентам. Лучше честно сказать «я не знаю», если нет возможности разобраться в вопросе. Артемий: «У меня был студент, который копал гораздо глубже программы, спускался на уровень железа, потом снова поднимался и мы с ним постоянно катались на этом лифте абстракций. Мне приходилось вспоминать какие-то вещи, но с ходу сформулировать было очень тяжело.»
3. Не надо заострять внимание на том, что студент начинающий: когда человек что-то делает впервые, он серьёзнее относится к критике, совсем не знает, как это делают обычно, и что у него получается, а что нет. Лучше аккуратно говорить только про код, а не про минусы студента.
4. Здорово научиться отвечать на вопросы в «образовательной» манере. Задача — ответить не прямо, а сделать так, чтобы студент действительно понял и сам дошел до ответа. Артемий: «В 99% случаев я мог сходу ответить на вопрос студента, но не часто мог тут же взять и написать ответ, потому что надо многое взвешивать. Написал пятьдесят строчек, стёр, снова написал. Я ответственен за репутацию курсов и знания студентов, и это непростая работа. Очень крутое чувство возникает, когда студент говорит: «О, у меня озарение!» И я тоже такой: «У него озарение!».
5. Важно быть внимательным и не критиковать сильно. Вдохновлять, но не слишком, чтобы студент не думал, что делает всё шикарно. Здесь придётся научиться грамотно управлять уровнем своих эмоций.
6. Полезно коллекционировать общие замечания и однотипные ошибки, чтобы экономить время. Можно записать первое такое сообщение, а потом просто копировать и добавлять детали в ответ другим на такой же вопрос.
7. Из-за разницы в знаниях и опыте некоторые вещи кажутся очевидными, поэтому первое время ассистенты не расшифровывают их в комментариях для студентов. Помогает просто перечитать написанное и дописать то, что казалось банальным. Михаил: «Мне кажется, чем дольше я помогаю с проверкой решений, тем понятнее я студентам нового курса с самого начала. Первые комментарии к коду я бы сейчас прочитал и сказал: «Надо было аккуратнее, подробнее».
Преподавать и ассистировать — классно
Мы попросили ребят рассказать, какой полезный опыт они получили, пока проводили код-ревью и общались со студентами.
Артемий: «Главное, чему я научился, — такому, преподавательскому, терпению. Это абсолютно новый навык, я осваиваю для себя совершенно новые, не технические области. Думаю, что преподавание очень поможет, когда я буду выступать на конференциях, в разговоре с коллегами или презентации проектов на митинге. Советую всем попробовать!»
Михаил: «Этот опыт помог чуть терпимее относиться к тому, что кто-то пишет код не так, как я. Особенно, когда только начинаешь смотреть на решение. Курсы по Python и по Java я проходил сам и похожие задачки решал иначе. По-другому называл переменные и функции. И решения ребят все немного другие, потому что в программировании не бывает эталонного решения. И вот тут нужно некоторое терпение, чтобы не сказать: “Надо было делать только так!” Это помогло потом на работе обсуждать плюсы и минусы конкретных решений, а не плюсы и минусы того, что это сделал не я».
Подробнее про онлайн-программы и отзывы выпускников