Главная » Хабрахабр » [Из песочницы] А каким IT-образование видите Вы?

[Из песочницы] А каким IT-образование видите Вы?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Киберпреступники пять месяцев контролировали ASUS Live Update

Злоумышленники разместили на сервере вредоносный файл с бэкдором, подписанный валидным сертификатом ASUS. Как сообщает «Лаборатория Касперского», хакеры из APT-группировки ShadowHammer 5 месяцев контролировали сервис обновлений ASUS Live Update и заразили более полумиллиона компьютеров по всему миру.Исследователи из «Лаборатории Касперского» обнаружили, ...

Kubernetes 1.14: обзор основных новшеств

14. Этой ночью состоится очередной релиз Kubernetes — 1. По сложившейся для нашего блога традиции, рассказываем о ключевых изменениях в новой версии этого замечательного Open Source-продукта. 14 и сооветствующих issues, pull requests, Kubernetes Enhancement Proposals (KEP). Информация, использованная для подготовки ...