Только web, только хардкор

в 9:02, , рубрики: Блог компании Mail.Ru Group, разработка, Учебный процесс в IT

Только web, только хардкор

На Хабре уже есть несколько статей про Технопарк Mail.Ru. Сегодня я хочу рассказать о том, с чего начинался курс «Web-технологии», который входит в его программу.

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


Разработать с нуля программу подготовки архитекторов программных систем — задача не из легких. Мы решили начать с того, что сами умеем делать очень хорошо: с разработки web-приложений и разумного-доброго-вечного — курса по алгоритмам и структурам данных.

Полный энтузиазма, я приступил к составлению программы курса «Web-технологии». Первая проблема возникла незамедлительно: а что нужно рассказывать-то? В отличие от алгоритмов или, например, баз данных, по web-технологиям не существует сколь бы то ни было устоявшихся учебных программ. Грубо говоря, web-разработке у нас никто не обучает, это то ремесло, которое все изучают сами, на практике. Поэтому взять и адаптировать готовую программу не было возможности, нужно было определиться с тем, о чем рассказывать, а что оставить за рамками курса. Брать за основу книгу из серии «Программируем на PHP/Perl/Python/HTML/CSS/JavaScript» было просто несерьезно, такую литературу каждый может прочитать самостоятельно. Кроме того, важно было произвести хорошее впечатление на студентов, ведь курс читается в первом семестре, фактически с него начиналось знакомство студентов с Технопарком.

Мы взвесили все «за» и «против», и было решено:

  1. Составляем так называемый обзорный курс. Он станет своего рода планом всего обучения в Технопарке: объяснит, как работает web-приложение средних размеров — от базы данных до интерфейса пользователя.
  2. Никакой конкретный язык программирования детально изучать не будем, студенты МГТУ вполне способны разобраться с этим самостоятельно в свободное время.
  3. Добавляем практические занятия, на которых студенты «играют» с изучаемыми технологиями и решают задачки.

В качестве основного языка для разработки и сниппетов выбрали Python. Почему? Python простой. Сниппеты легко читать даже тем, кто впервые видит код на этом языке. Также мы исходили из того, что Python наиболее прост для самостоятельного изучения.

Курс получился довольно общим. В него вошли сетевые протоколы, http-серверы, собственно backend-разработка, работа с базами данных, frontend-разработка и немного информационной безопасности.

Итак, курс составлен, первая партия студентов приступает к изучению. Но картинка складывается довольно безрадостная: студенты активно «забивают» на лекции и семинары, на последний из которых явилось около 5 студентов из 60 набранных. На экзамен пришли многие, однако глубокого понимания предмета не показали, отвечали зазубренными фразами. В общем, стало очевидно, что студенты воспринимают наш курс как обычную университетскую дисциплину, по принципу «выучим все за ночь перед экзаменом» и «лишь бы сдать». Однако тут студентов ожидал сюрприз: материала много, литература сильно разрознена, а методичек нет. Как результат — после первого семестра было отчислено (из Технопарка, конечно) почти 50% студентов. Весьма печально, потому что в первый набор попали самые инициативные и энергичные.

Решение проблемы нашлось благодаря самим же студентам: после опроса выяснилось, что им очень а) хочется практики и б) часто непонятно, что же нужно делать. Поэтому во втором семестре мы добавили домашние задания. Теперь перед каждым семинаром студенты стали выполнять четко сформулированное задание и получать за него баллы, без которых нельзя прийти на экзамен. И это сразу положительно сказалось на посещении семинаров!

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

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

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

Еще одну идею по улучшению курса неожиданно подкинул учебный отдел. Из-за особенностей расписания нам пришлось проводить семинары до лекций, то есть фактически студентам нужно было выполнять домашние задания с технологиями, которые им еще никто не объяснял! И это дало интересный результат: выросла посещаемость лекций и активность студентов на этих самых лекциях. В общем, все логично: столкнулись с проблемами — появились вопросы.

Один из способов заработать баллы во время курса — сделать на лекции доклад на интересную тему. Делаешь интересный доклад — получаешь баллы. Особо предприимчивые студенты стимулировали интерес к своим докладам с помощью деривативов: обещанные им баллы они стали раздавать за хорошие вопросы к докладу.

И результаты третьего семестра нас, наконец, порадовали по полной. Несмотря на то, что до конца семестра добралось опять лишь 50% студентов, их уровень знаний и мотивация стали намного выше. Это были те самые «лучшие из лучших из лучших» с отличием, сэр!

На данный момент у нас учится четвертый поток студентов, и сам курс сильно изменился: мы вынесли фронтенд-разработку в отдельный курс, а остальные дисциплины немного сократили. Фактически курс перестал быть обзорным и превратился в специальный курс по backend-разработке. Будет ли так и дальше пока неясно, время покажет.

Я считаю, что три с половиной семестра — не очень большой срок, но для себя я уже, естественно, некоторые важные выводы сделал. Возможно, они окажутся полезными для тех, кто преподает или работает со студентами. Итак, вот они:

  1. Практика необходима, причем в большом количестве. Именно практические задания «цепляют» студентов, мотивируют их к изучению и действию. А теория нужна для расстановки приоритетов и расширения кругозора в технологиях.
  2. Точные технические задания отлично помогают. И нет, они не убивают креативность. Те, кому это дано, в любом случае сделают все по-своему (и, возможно, лучше). Зато остальные не потеряются в теме и усвоят больший объем информации.
  3. Теория после практики — отличная идея, мы доказали это на собственном примере.
  4. Лучше перегрузить студентов, чем недогрузить.

Завершить статью хочу вопросом в зал: коллеги web-разработчики, о чем, по вашему мнению, нужно рассказывать на курсе по web? Для простоты анализа можно отвечать в формате тэгов: mvc, orm, безопасность. Называйте то, что НЕ было вам очевидным, а пришло только с опытом и изменило ваше представление о web. Надеюсь, это поможет сделать курс интереснее и лучше подготовить наших будущих коллег!

Автор: mialinx

Источник

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js