Основа любого программирования на… пазлах

Приветствую, Хабровчане!

В этой статье я хочу рассказать о своем опыте работы преподавателем программирования на C++ в колледже при техническом университете. Это был уникальный опыт в жизни, который многому меня научил. Когда речь заходит об интересных фактах из личного прошлого — этот отрывок из жизни приходит на ум одним из первых.
Поехали.

Сначала немного о себе.
В 2016 году я окончил институт с красным дипломом по специальности «Информационная безопасность автоматизированных систем». За время обучения мне неоднократно удавалось реализовывать свой потенциал в написании научных статей, участии в конкурсах и грандах. В 2015 году мне довелось стать победителем всероссийского конкурса молодых учёных «УМНИК». В 2016 году до окончания обучения уже был устроен в крупную организацию города на должность «Специалиста по информационной безопасности, криптографии и шифрованию».
Вкратце как-то так. Можно представить, что о программировании я, все же, имел представление.

И вот 2017 год. Аспирантура. Меня попросили на протяжении семестра преподавать в колледже C++, за что мне сулили хорошие бонусы по облегчению бремени аспиранта и больше ничего.

Честно говоря, мне было искренне интересно попробовать себя в этом кредо.

Первая пара
Сентябрь. Первая учебная неделя. Ко мне пришли студенты. «Самая непослушная группа» — так их называли.
23 человека. «Программисты».

Как полагается, для начала я представился. Рассказал им сдержанно содержание части «Сначала немного о себе»…
Дальше началось страшное. На вопрос «Что вы умеете?» студенты (будем отныне называть их так) ответили, что умеют они чуть больше, чем совсем ничего (ну это означало, что некоторые из них знали, как выглядит MS VS и могли создать проект «Hello world»)… Программисты. Последний курс…

Далее они подробно, «в красках» пояснили, что ничему их не научили и что вообще они в программировании разочаровались…

Почти все дни до следующего занятия у меня прошли вот так:
Основа любого программирования на… пазлах

… но за день до него возникла идея приложить силы к исправлению сложившейся ситуации в умах и сознаниях этой молодёжи. И тогда «Остапа понесло».

Введение в программирование
На следующее занятие я принес… пазл.
Да-да. Пазл. «Как приручить дракона». Правила были простыми. Группа была разделена на 3 команды. Каждая команда собирала свою часть. Одни — лес, другие — землю, третьи — дракона в центре картинки. Пока они всю пару собирали пазл, я рассказывал, что сбор пазла — это тоже программирование, что программисты часто используют чужой код, что в каждом проекте есть несколько разных команд, фич, модулей…
Постепенно к процессу подключились и самые вялые студенты.
Когда я закончил втирать про идею программирования в концепции бизнеса, процессов и… пазлов, настало время установить правила обучения.
На каждое занятие каждый студент должен был выписать в тетрадь по 10 терминов из IT. Любых. У каждого свои. Смысл в том, что я брал тетрадь одного студента, находил среди всех терминов максимально прикладные и спрашивал по ним другого студента. Когда другой студент говорит «Я этого термина не записал», это не было наказуемым (в силу здравого смысла), но тот студент должен был выписать «недостающие» термины (как и все, у кого их не было) и найти их значения к следующему занятию.

Так мы и поступили. Каждое занятие начиналось с бодренького рандома в отношении двух-трех студентов. Ребята имели задор к этому процессу.

Темы занятий
Приступая к обучению очень важно дать обучающимся хорошую литературу. На мой взгляд идеальным пособием была книга:
Основа любого программирования на… пазлах

В своё время мне пришлось вкрадчиво прочесть её в обнимку с Microsoft Visual Studio. Тогда удалось понять программирование практически с нуля. Идеальный вариант.

Заходишь скромно к студентам и говоришь: «Чтобы стать программистами, вам надо всего-то навсего прочесть и попробовать все то, что в этой книге», и бросаешь книгу на стол. Главное — не перепутать книги в своем рюкзаке…

Перед каждой темой мне, безусловно, приходилось основательно готовился. Читал того-же Лафоре и еще несколько интересных источников из Сети.
Объяснять проходилось чуть ли не с азов. Причем понять, где у студентов обрыв базовых знаний следовало дедуктивно.
Массивы -> Работа с памятью (конструкторы) -> Ссылки -> Как работает память -> Накопители -> Что такое физический накопитель -> Двоичное представление данных…
Основа любого программирования на… пазлах

Очень неслабый краш-тест знаний фундаментальных фактов о программировании. Я уже не программист, я — историк!

И вот, значит, идут исторические баталии несколько пар подряд. Однажды к нам заглядывает в кабинет секретарь с кафедры и увидев группу, вытаращивает глаза, вглядывается и закрывает дверь. Как мне сообщили позднее, она была в шоке, что ЭТА группа сидела так тихо и так внимательно меня слушала… Тьхе, изи.

Лабораторные работы
Первые прикладные сведения — первые «лабы». Всего за семестр группа сдала 10 лабораторных работ. В первых они делали простейшие консольные a+b, а в последних — писали, пусть и консольные, но достаточно интересные приложения, такие, как вычисление значения интеграла некоторой произвольно заданной функции одним из трех методов — примерно такие же задачи были на итоговой аттестации — курсовой работе.

Вот только подход приёмки не был привычным. Всю учебу в институте я сталкивался с тем, что быть умным и уметь сдавать отчетные работы — это не одно и то же. Меня это в корне не устраивало.

— Ребят, я тут подумал. Давайте выстроим «понятийные» отношения. Если кто из вас считает, что программирование ему не нужно — дверь вон там. Я преподаю вам бесплатно. Мне хочется видеть здесь только любопытных, неравнодушных и небезразличных энтузиастов. Всех остальных прошу не тратить общее время — произнес я в первый день приема лабораторных работ. После этого 5 человек сразу перестало посещать занятия. Это было логично и ожидаемо. С остальными попытаться сделать что-то вразумительное было можно.

— … мне не интересно смотреть, как вам кто-то сделал работу, лишь бы сдать. Вы можете не быть программистами, но людьми вам на моих занятиях быть придется.

Выглядело это так:

case отличник

Садится ко мне студент сдавать работу.
— Сам делал?
— Да.
— Вот это что такое?
— *отвечает правильно*.
*Спрашиваю еще по паре моментов. Отвечает верно*
— принято. Отлично.

case болтун

— Сам делал?
— Да.
— Вот это что такое?
— *отвечает НЕправильно / не отвечает*.
*Спрашиваю еще по паре моментов. Тот же результат*
— НЕ принято. НЕУД. Жду на пересдачу.

case хорошист

— Сам делал?
— Да.
— Вот это что такое?
— *отвечает верно, но не уверенно, плавает*.
*Спрашиваю еще по паре моментов. Тот же результат*
— принято. Хорошо.

case ровныйТроечник

— Сам делал?
— Нет.
— Почему?
— Трудно. Мне помогал… *честно называет студента-отличника из группы*
— Разбирался?
— Да, почти все понял.

— Вот это что такое?
— *отвечает правильно*.
*Спрашиваю еще по паре моментов. Отвечает более-менее верно, иногда полностью мимо, пусть даже на 50 на 50 верных и неверных*
— принято. Хорошо.

Все остальные случаи описывать не имеет смысла. Да, «хорошист» может быть недоволен, что «троечник» получает такую же оценку, выезжая на честности. Вот тогда все зависит от настроения. Либо я прошу «хорошиста» посмотреть на пол, ведь «сейчас я оброню щепотку мудрости», а затем расскажу суть подхода, опишу, что в жизни имеет бОльшую ценность и поясню, что «троечнику» было гораздо труднее сдать, чем ему, «хорошисту», и т.д…
… либо, как в своё время, мой преподаватель, нарисую маленький зуб в клетке журнала напротив этого недовольного и в следующий раз персонально для него дополню лабораторную работу. Просто так. Чтоб не «гасил» товарищей.

Основа любого программирования на… пазлах

Оценки
Учебный процесс, как и весь мир, буквально утопает в ценниках и оценках.
Студенты — тоже люди, однако «рамки», на мой взгляд, надо было «пошатать» и тут.
В течение семестра всем была дана бонусная задача. Зарегистрироваться на github.com, залить туда пустой проект на C++, сделать 2 апдейта, закоммитить их и запушить. За эти действия было назначено 15. Да-да, не 4, не 5, а 15. Трое разобрались. Психотипу студента это было еще как-то понятно, однако дальше был другой случай.
Как-то раз нашу пару перенесли так, что она стала последней, так еще и через пару-окно. Однако на нее все-равно пришло 15 человек. Объяснять новую тему в честь такого героизма мне не хотелось, так как мы чисто по темам уже достаточно хорошо продвинулись + следующая тема была не очень простой для уставших мозгов (моих и учащихся). Тогда я решил поговорить о философии.

— Объявляю аттракцион невиданной щедрости. Все мне говорят, какую оценку поставить ему за сегодняшнюю пару.
Все захотели по «пятёрке».
— считайте, уже есть, — сказал я. Все обрадовались.
Тишина.
— а почему никто не захотел 7-ку или 10-ку?
Все вылупили глаза и начали глупо улыбаться.
— А Вы разве поставите? В журнал?! — раздался голос с задней парты.
— Да легко! — сказал я, — объявляю блиц по терминам, кто ответит на 10 моих вопросов — ставлю 20-ку в журнал, без подвоха, кто не ответит — тому -10 (минус десять).

«Команда оживилась, началась полемика», у всех были честно заработанные оценки. Двое вызвались. С небольшими неточностями они по очереди выдержали по 10 вопросов про стек, очередь, конструктор, деструктор, сборщик мусора, инкапсуляцию, полиморфизм, хэш-функции…
Каждому в журнал была нарисована 20-ка… но важность журнала и оценок упала в глазах каждого. Сейчас я жалею, что не спросил, не хотят ли они «поделиться» своей оценкой с кем-нибудь. Мне кажется, поделились бы… Отныне каждый сдавал «лабу» знаниями и честностью.

С этого момента появился еще один тип сдачи лабы:


case честноНеЕгоНоОнПытался

— Сам делал?
— Нет.
— Почему?
— Трудно. Мне помогал… *честно называет студента-отличника из группы*
— Разбирался?
— Сергей Николаевич, вот честно — ничего не понимаю, вот сам комментарии написал напротив каждой строчки — ну не моё это, я буду трактористом
— Вот это что такое?
— *читает комментарий напротив строчки*.
— …
— …
— Чем отличается Беларус МТЗ от Дон 500 и от К700?
— ??!.. Первый — колесный трактор Минского производства, часто используемый на легких и средних типах сельскохозяйственного производства. У него еще спереди маленькие, а сзади — большие колёса. Дон 500 — это, в основном уборочный комбайн, а К-700 «Кировец» — советский колёсный трактор общего назначения повышенной проходимости, тяговый класс 5.
— принято. Хорошо (!!!).
— Спасибо, Сергей Николаевич!!!

На моей родине пообщаться за тракторА — это почти как тут за SOLID.

Гений
Был у меня в группе Гений. Студент с самой первой пары сильно опоздал и не стал вместе со всеми собирать тот пазл. Тогда я попросил его сделать то, что для всех планировал на следующее занятие — написать на листке про себя, чем он увлекается, что ему интересно. По результатам у «Гения» было 2-3 строчки: что-то типа «познаю тщетность бытия»…

… О, Боже, у меня в группе в одном лице одновременно вторые Лао Цзы и Кодзима …
Основа любого программирования на… пазлах

К моему удивлению на первых двух парах он действительно блестяще отвечал на вопросы про термины, однако эффект длился недолго. «Гений» перестал посещать занятия и в следующий раз пришел только на сдачу первой лабораторной работы, которую успешно не сдал по объективным причинам. Затем из-за прогулов у него закономерно накопились долги, которые, как он считал, я был просто обязан ему засчитать, так сказать, «по-братски».
Непосещение пар + завышенное ЧСВ противоречило установленным принципам посещения моих занятий. У «Гения» было только 2 выхода из ситуации — реабилитироваться (ожидаемый путь) или забить на пары и надеяться на «тройку», поставленную деканатом, чтобы избавиться от бездельника.
Ну это же «Гений»… тут же надо поступить «гениально». Этот молодой человек не нашел ничего лучше, как написать в общем диалоге в ВК (где был я и все студенты этой группы) гневную тираду с ругательствами и оскорблениями в мой адрес.

Мда… Разочарование.
Больше всего поразило, что, перед завершением процесса карательной операции со стороны управления колледжем, он решил извиниться передо мной. За что? — мне искренне непонятно. На тот момент я был уже давно независим от критики, тем более такой, откровенно, глупой. Моя личность задета не была, а вот процессы — есть процессы, как преподаватель я не мог не сообщить об этом. Как оказалось, на него за время учебы накопилось уже столько жалоб, что этот случай оказался последним. Его отчислили. С последнего курса пту колледжа.
Быть может он уже давно наблюдает за мной в прицел снайперской винтовки, но мне, если честно, все-равно.
Эх, гениальность, бессердечная же ты…

Эпилог
Лично для меня опыт преподавания был одним из самых поучительных. Мне это помогло закрепить фундаментальные знания по программированию после учебы в институте. Я почувствовал в себе уверенность в выбранной специальности (спектра доступных специальностей). Особую важность составляет то, что «самая непослушная группа» прониклась ко мне уважением и дружелюбием — это дорогого стоит. Я сумел найти путь к их внутренним новаторам, постарался привить реальность, а не эти шаблонные приоритеты. Жаль, что мы не дошли до «пазлов» в кодинге — когда каждый должен был бы сделать часть кода, и, соединив все части в одну, мы бы получили большую рабочую программу…
Надеюсь, когда-то каждый из них почувствует это… а пока что ниже собраны скрины с отзывами нескольких студентов спустя 2 года.

Основа любого программирования на… пазлах

Делать выводы об успешности карьеры программиста у кого-либо из них пока что рано, ведь сейчас бОльшая часть этой группы обучается в ВУЗе. Время покажет.

Надеюсь, статья была полезной. Спасибо за внимание!
Творческих успехов и позитивного настроения, коллеги!

Источник: habr.com

Добавить комментарий