А каким IT-образование видите Вы?

в 18:11, , рубрики: Карьера в IT-индустрии, молодой преподаватель, образование 2.0, ООП головного мозга, Учебный процесс в IT

Студенты и преподаватели – люди совсем не похожие друг на друга. Одним хочется насладиться жизнью, а вторые постоянно этому мешают. Они заставляют каждые полгода вновь садиться, перечитывать лекции, не спать по несколько дней и вкалывать кофе внутривенно.

Конечно люди разные, тут скорее говорится о стереотипах. Когда я был студентом никогда не думал, что стану преподавать, да и не думал, что пойду учиться в аспирантуру и вообще много чего не предполагал. Но и сидеть на рабочем месте по 8 часов в день, а затем приходить домой и продавливать диван – слишком скучно. Так ведь вся жизнь пройдет за просмотром очередного сезона «Игры престолов» или партией в «дотку».

Мой стаж как преподавателя скромный – всего 2 года. Но за эти 2 года появился интересный опыт, которым захотелось поделиться. Статья получилась длинная и нетерпеливые могут заглянуть в самый конец, где приведен сухой остаток, полученный в результате проб и ошибок.

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

Программирование – это не Мат. Анализ. (Кэп где-то рядом). Математические науки – сфера куда более зрелая. Большинство законов уже известно. Открытых вопросов значительно меньше чем в программировании. Программирование — это очень динамичная сфера, здесь нет места привычкам. Стоит слишком прикипеть к чему-либо, и ты просто выпадешь из реальности.

Мне повезло, на 2 курсе, когда нам преподавали Объектно-ориентированное программирование нашу группу закрепили за молодым преподавателем. Он был активен, принципиален, перфекционист и достаточно грамотен в вопросах написания кода. Вместо того чтобы просто принимать лабы которые работают, он заставлял писать код, за который и сейчас не стыдно.

Если бы не он, все мы только на работе бы узнали о том, что такое «магические константы», почему в return надо возвращать переменную (а не заталкивать туда унарный оператор), почему нельзя в while писать здоровенные конструкции, как правильно работать с UI в Java, почему в C++ все должно передаваться по константному указателю. И вообще, что большинство примеров в интернете – редкостный быдлокод, который нельзя использовать в продакшене. И это нормально, ибо на то он и пример, чтобы максимально наглядно без усложнений показать работу кода.

И пусть мы не спали и всю ночь писали код в ночь с 30 на 31 января, а 31-го ехали сдавать лабы, это позволило нашей группе быть сильно впереди остального потока.

Это был не примитивный пересказ учебника, не безынициативное принятие лабораторных, это было прям то что нужно – Интересно, сложно, ты понимал, как сильно ты прокачиваешься. Ты чувствовал, что как на стероидах начинаешь набирать массу.

И вот став преподавателем, я решил перенять лучшее от всех и дополнить своей «фишкой».

Проба пера

Приходишь в школу и тебе говорят забудь все чуме тебя учили родители, приходишь в университет тебе говорят – забудь все чему тебя учили в школе, приходишь на работу, тебе говорят – забудь все чему тебя учили в университете.
Давайте вспомним чему же такому нас научили на работе после университета?

Вот список, который я примерно себе составил:

  1. Git
  2. JiraRedmineTrello
  3. Code review
  4. Dependency Injection
  5. Unit-тестирование
  6. CICD
  7. Работа с БД (нас учили писать запросы, но не использовать их в Java)
  8. Миграций БД
  9. ORM

Но это то что лежит на поверхности, а если копнуть глубже, то список расширится:

  1. Docker
  2. K8S
  3. Микро-сервисная архитектура

Что-то из этого рассказывали, а что-то и нет. Да, нам говорили, как устроен Post-запрос. На каком-то предмете рассказывали про Json. А на Java мы даже работали с сокетами. Но все было в отрыве от реальных задач. И рядовой студент привычным ему методом зубрил эти вещи, сдавал экзамен, а потом забывал, а потом снова вспоминал по кусочкам придя на работу.

Можно говорить, что студенты сами виноваты. Но тогда можно говорить, что программисты сами виноваты в багах. И вообще бить их кнутом и пусть сразу делают по-нормальному.

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

Еще один важный момент – энтузиазм преподавателя. Многие уже преподают по инерции. Они привыкли: из года в год происходит одно и то же. Но студенты это чувствуют. И потому без того слабая мотивация падает ниже 0 отметки. По мере приближения сессии эта планка начинает расти. Жаль, что не все студенты вовремя осознают всю глубину своего положения.

Итого есть 2 глобальные проблемы:

  1. Проблема мотивации
  2. Неактуальностьразрозненность предоставляемых знаний

Будем решать! Не все удалось в той мере, как и планировалось, но в конечном счете получилось.

Придя на первое занятие, я заставил всех зарегистрироваться на bitbucket. На тот момент это был первый курс. Предмет назывался “Информатика”. Лектор сам говорил о том, что мы можем рассказывать про все, что перекликается с этим словом.

Предмет предполагал выполнение небольших лабораторных на *nix shell. Студенты долго плевались над тем как пользоваться гитом. Особенно консольным гитом. Но как мне показалось к концу семестра загорелись.

Мы создали чатик в ВК, туда я сбрасывал статьи по тематике, отвечал на вопросы. И это реально удобно. Не надо повторять по 100500 раз. А если человек не удосужился прочитать просто переотправляешь ему сообщение.

На предмете я решил немного рассказать про CICD, Unit-тестирование, Code review. Было сложно, приходилось по 1000 раз задавать один вопрос – вы это поняли? Приходилось руководствоваться взглядами. Ибо ответ всегда был «Да». А вот в глазах читалось полное отсутствие понимания.

Пары, на которых я садился за комп и наглядно что-то показывал, заходили куда лучше. Вроде бы написал небольшую команду на PowerShell, которая закрывает Chrome. Мелочь, а для первокурсника выглядит как магия. В такие моменты ребятам становилось интересно.

Еще одно условие лектора – необходимо было выступить с презентациями. Растягивать это на весь семестр с кучей записей о том, кто сдал, а кто нет, мне лично не хотелось.

От меня последовало предложение сделать сдачу презентаций централизованной. Выбираем время, когда всем удобно, бронируем кабинет на всю субботупятницу, с меня пиццатортикичай кофе, с ребят презентации. Удивительно, но женщина с которой я договаривался о брони кабинета была не против. Такой формат ребятам особо зашел. Потратить раз в полгода 2-3 тысячи не великие деньги, а ребята запомнили навсегда.

Набиваем шишки

После окончания первого курса от меня последовало предложение для ребят попробовать само организоваться и написать какую-нибудь игрушку. И тут ребятам тоже эта идея зашла. А вот реализация, к сожалению, нет. Для реализации задуманного был выбран движок «Unreal Engine». Аргумент простой – он использует синтаксис очень близкий к C++, а поскольку ребята должны были изучать его в следующем семестре, то если уж не напишут чего-нибудь стоящего, то по крайней мере это поможет им в следующем семестре.

Я предложил устроить небольшие лекции по С++ в онлайн формате, а затем приступить к реализации. Проблема в том, что сам я разрабатываю на .Net и сильно подзабыл С++. Пришлось вспоминать, на это ушло время. Скажу честно, изучить Unreal тоже не хватало времени. А ведь это лето, многие ребята, которые откликнулись, сами постепенно начали сливаться. Но и меня затянула рутина: ремонт в загородном доме у родителей, желание насладится летом, смена компании тоже совпала с этим периодом, отпуск. В общем получилось так, что всю свою энергию я тратил на другие не менее важные дела. В итоге получилось несколько скудных лекций, пара-тройка строк мертво лежащего кода, в который и палочкой уже тыкать не захочешь.

Сказывалась и распределенность команды. Все доступны в разное время, кто-то просто игнорирует сообщения и т.д. В общем для того чтобы мотивировать людей по интернету нужны: во-первых, другие средства, во-вторых опыт работы с распределенной командой (которого у меня нет), и в-третьих куда больше энтузиазма. Что ж, отсутствие результата – тоже результат. Со своей стороны, хочу сказать спасибо ребятам, вы молодцы, а я сделал выводы и постараюсь не повторять ошибок.

И все-таки информатика — это не совсем тот предмет, который я бы хотел вести. Позиция лектора и деканата очень лояльная, хоть бы студент чего-нибудь поделал, на пары походил. В целом это правильно, предметы не все одинаково важны. И важность зависит от специальности. Странно было бы считать, что культура речи столь же важна для программистов как Мат. Анализ или ООП. Или заставлять студентов гуманитариев сутками сдавать лабы по физике. Но мне хотелось более ответственной роли.

Набираем обороты

Итак, начались занятия по ООП. Как и в случае с информатикой, студенты регистрировались на Bitbucket. Но была еще парочка нововведений.

Теперь ребята создавали Pull-request’ы и получали в ответ комментарии по коду. И да им пришлось 2 месяца сдавать первую лабу, пока она не стала удовлетворять минимальным требованиям к оформлению кода

Мы завели Trello, под каждую задачу, своя борда (их было 5), название задачи – ФИО студента. В итоге получилось наглядно, и теперь ребята имеют представление о трекере задач, и канбан досках.

На парах основной акцент делался не просто на том как написать свой класс. Наоборот, на том как сделать такую архитектуру чтобы она легко расширялась. Много внимания уделялось принципам ООП, SOLID принципам. Несколько раз пришлось повторить принцип работы виртуальных функций.

В начале пары – небольшой тест по предыдущим темам. Оценки я не ставил. Это необходимо для мотивации. Ведь если студент спишет, велика вероятность что он вспомнить, поймет, и отложит в голове это. Тут мне помогал тот факт, что сам не так давно был на их месте и помню, как это все работает. В общем 5-ти минутки дело хорошее, и для меня это скорее мотивация нежели способ контроля.

В какой-то момент мои знания стали заканчиваться, а рассказывать что-то необходимо — было чувство что еще много всего недосказано.

Окей Google, вопросы для собеседования на С++. Выбираем список для Junior. Читаем вопрос-ответы. Вуаля, прокачались сами, прокачали студентов.

Из-за работы, некоторое число пар было пропущено. Восстанавливать их было необходимо, ибо и так затянулись сдачи. На помощь пришел все тот же прием с пиццей. Договорились о том, что выберем место и время засядем, закажем еду, будем прогать весь день тем самым восстановим пропуски, а студенты в теории должны были получить по +1 к сданным лабам. Я помогал, отвечал на вопросы.

В итоге получилось не совсем так, весь день выделить стало проблематично, взяли 2 по 0.5. Тоже неплохо, правда я ожидал, что драйва будет больше. Но тем не менее, оно было и было неплохо для 1-2 раза. Ведь не у всех первые разы получается хорошо, правда? Ок, еще один маленький опыт.

Попутно заставил ребят за +1 бал разобраться с Dependency Injection в C++. Надо сказать, некоторые разобрались. Вообще студенты молодцы. Двое даже сделали очень крутые игрушки с GUI интерфейсом и неплохой архитектурой. И один даже разобрался с Qt. В конечном счете удалось дожать всех студентов и заставить их сдать все что нужно для допуска к экзаменам. Статистика получилась неплохая.

Начался новый семестр и начался он с пары в формате митапа. Первая задача от лектора была для затравки. Примитивный парсер файла и вывод в формате CSV.

Пришли, включили проектор, вместе на коленке за 1.5 часа накидали решение, в котором осталось еще чего подкрутить, но в целом каркас был готов. По-моему, студенты должны видеть, как оно работает, как примерно надо рассуждать и т.д. Формат митапа это то что надо. Именно поэтому студенты первокурсники с таким интересом наблюдали как закрывается браузер после очередной команды в консольке. Это наглядно и это интересно. Как по мне, такой формат стоит развивать.

Подведем итоги

Это исключительно мое видение, оно может быть не верным, но оно понравилось студентам:

  1. Применяем Git и заставляем работать с ветками, Pull-реквестами и т.д.
  2. Создаем Trello и отслеживаем задачи там. Приучаем студентов двигать задачу в CR, иначе ее не будут смотреть.
  3. Проводим 5-ти минутки, они мотивируют студентов вспоминать, то чего не знали. Думать не всем приятно, а для некоторых даже больно, но лучше приучать к этому в течении семестра.
  4. Вопросы для подготовки == вопросы для собеседования на Junior позицию
  5. Заставляем разбираться с Dependency Injection, Unit-тестами и прочими реалиями современной разработки
  6. Проводим митапы на парах. Пусть студенты повторяют за семинаристом, прежде чем нарисовать шедевр, художник должен нарисовать то, что другие рисовали сотни раз.
  7. Устраиваем мини хакатоны, покупаем немного пиццы/соков и приучаем студентов к прекрасному
  8. В общем стараемся делать все как в жизни.

Примерно так, я себе представляю обучение разработке. А как вы думаете? Всегда открыт для новых идей, давайте сделаем это еще лучше!

Автор: TemaTre

Источник

* - обязательные к заполнению поля