Привет! Это команда курса «Python-разработчик». Недавно мы провели рефакторинг — большое обновление программы. Для этого мы изучили фидбек студентов, выявили точки роста и актуализировали набор технологий исходя из запросов рынка. В этом материале мы расскажем, какие изменения внесли, почему рефакторинг никогда не заканчивается и какая работа нам ещё предстоит впереди. Материал может быть полезен тем, кто хочет узнать больше о том, как устроено онлайн-образование в IT, и всем, кто думает об обучении Python в Практикуме.

В написании статьи участвовали:

  • Антон Машкин — автор курса «Python-разработчик»

  • Евгений Бартенев — автор и техлид курса «Python-разработчик»

Оглавление

Создали сюжет и добавили больше проектов

В программе появились цельные истории — теперь студент работает над конкретными задачами, как настоящий разработчик, а менторами у него выступают персонажи, которые общаются с ним так, как общались бы коллеги в рабочих чатах или за обедом. Так мы объясняем сложные вещи простым языком, а потом помогаем студенту закрепить знания на практике — например, когда «менторы» предлагают ему написать игру «Крестики-нолики». Те же персонажи дают подсказки: говорят, с чего начать и какие инструменты из пройденных тем применить, чтобы всё получилось.

Теперь студента сопровождают виртуальные профессионалы, которые через простые диалоги объясняют сложные моменты и показывают, как применить знания на практике. Студенты уже оценили новый формат — говорят, что так понятнее и интереснее.

Примеры диалогов в сюжетах
Примеры диалогов в сюжетах

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

Автоматических тестов, как и заданий, стало больше. Они стали учитывать вариативность решения и давать больше информации — если раньше после проверки студент просто видел, что код работает неправильно, то теперь он получает больше подробностей. Например, если объект не создаётся нужным нам образом или с нужными нам свойствами, то студент увидит сообщение, на какие моменты стоит обратить внимание.

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

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

Сократили часть с алгоритмами — оставили только важное

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

Пример фрагмента урока по алгоритмам из предыдущей версии курса
Пример фрагмента урока по алгоритмам из предыдущей версии курса

Студентам было сложно. «Отправили в океан с надувным кругом» — один из самых сдержанных комментариев, который мы получали к этому блоку.

Студенты сложные задачи не оценили
Студенты сложные задачи не оценили

Мы написали новый блок по алгоритмам, а ещё переместили их ближе к началу курса. Раньше тема шла после Django — получалось, что студенты только погружались в Python, несколько месяцев занимались фреймворком, а потом будто возвращались к началу, рассматривая конструкции с базовым синтаксисом. 

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

Но самое главное — разобраться с задачами стало проще.

Фидбек изменился на положительный
Фидбек изменился на положительный

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

Обновили весь контент по Django и перешли на версию 3.2

Изначально, выбирая фреймворк для курса, мы ориентировались на требования работодателей. Наши последние исследования показали, что несмотря на востребованность, например, FastAPI, лидером по упоминанию в вакансиях остаётся Django. Также есть компании, которым важно, чтобы кандидат знал любой фреймворк — в этом случае Django тоже подойдёт. Поэтому мы не стали менять или дополнять набор изучаемых инструментов, но зато полностью переработали блок по Django.

FastAPI и Flask осваивают студенты программы «Python-разработчик плюс» — она длится уже не девять, а 14 месяцев. В программу входит расширенный набор фреймворков, а также другие темы, например парсинг или асинхронное программирование.

Мы пересобрали структуру и переписали все уроки и задачи, чтобы сделать материал понятнее, — фидбек от студентов показывал, что некоторые моменты давались им сложно.

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

Также мы «подняли» версию Django с 2.2 до 3.2. Это не самая новая, но актуальная версия фреймворка — её используют во многих компаниях, а при необходимости перейти с третьей на четвёртую студент сможет самостоятельно.

Добавили теорию по Pytest

В Python есть два основных тестовых фреймворка для проверки кода — Unittest и Pytest. Раньше мы учили Unittest, потому что на нём написана встроенная тестовая часть Django, и это казалось логичным. Но со временем знание Pytest стали чаще спрашивать работодатели. Кроме того, он также подходит для тестов Django и, по мнению многих разработчиков, он удобнее. Например, если в Unittest для теста нужно создать класс, в Pytest достаточно функции. Под Pytest сделано много плагинов, там более удобная система фикстур.

Теперь студенты изучают и встроенный в Django Unittest, и Pytest, и могут использовать любой из них.

Обновили блок про инфраструктуру

Мы полностью переработали блок, посвящённый инфраструктуре. Главное техническое обновление связано с серверами для проектов. Раньше студентам нужно было зарегистрироваться в Yandex Cloud и активировать промокод, сумма которого покрывала использование сервиса в рамках курса. У этого подхода были недостатки: например, студенты из других стран не могли привязать зарубежные карты.

Теперь мы даём студентам преднастроенные виртуальные машины, которые работают до конца сдачи всех работ. Перед тем как их выключить, даём возможность сохранить все наработки. Больше в организационной части вопросов не возникает — студент открывает спринт, сразу получает доступ к машине и может работать.

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

Теперь студенты получают уже готовую фронтенд-часть. Они запаковывают веб-приложение в контейнеры и делают деплой на удалённый сервер — и разработанные ими сервисы становятся доступны всем желающим.

Фронтенд-часть одного из проектов курса
Фронтенд-часть одного из проектов курса

А ещё практики стало больше. Один спринт мы убрали, но раньше студенты делали один проект, а теперь два.

Актуализировали дипломный проект

Рефакторинг дипломного проекта включил два этапа:

  • первый — работа над основными замечаниями студентов (этот этап мы уже прошли),

  • второй — переработка задания и методов проверки (выводим новый вариант как раз в момент выхода статьи).

Как и раньше, студенты получают подготовленную нами фронтенд-часть проекта — готовый интерфейс, через который пользователи будут взаимодействовать с сайтом. Задание — написать к этому интерфейсу всю логику, всю бэкенд-часть.

Фронтенд-часть Foodgram — дипломного проекта курса
Фронтенд-часть Foodgram — дипломного проекта курса

Если раньше от студента требовалось написать несколько страниц кода с функциями или классами, чтобы всё заработало, то сейчас мы изменили подход — и постарались сделать задание таким, чтобы оно включало все темы из курса, включая алгоритмы, инфраструктуру, Django. При этом задание не стало сложнее — скорее, разнообразнее и интереснее.

Диплом — это не проверочная работа по всем темам курса. Это новое, непохожее на предыдущие задание, но которое при этом подразумевает, что студент воспользуется всеми знаниями, полученными на курсе.

Мы постарались добавить в диплом не выдуманные, а вполне прикладные задачи, с которыми разработчик может столкнуться в работе. Также задание стало современнее. В IT всё достаточно быстро меняется, и те проекты, что могли вызвать вау-эффект пару лет назад, уже кажутся обычными. Например, заходишь на Google или Facebook, и видишь, как выглядят современные веб-приложения, какие функции у них есть. А потом переключаешься к своему дипломному проекту — и замечаешь разницу, вроде делаешь что-то полезное, но всё равно, это совсем не то.

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

Также изменили подход к проверке. Код дипломной работы по-прежнему просматривают ревьюеры. Но мы не требуем применять какую-то конкретную техническую реализацию, а студенты к концу курса могут выполнить одно и то же задание разными способами. Автоматические тесты также не сужают вариативность выбора решения. Но некоторые проверки мы всё-таки добавили.

Теперь дипломные работы студентов проходят тест на соответствие PEP 8 — стандарту написания кода на Python. Пока программа не будет написана по принятым в отрасли нормам, она не попадёт к ревьюеру.

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

Задача может быть реализована огромным количеством способов и даже разными фреймворками. Поэтому мы проверяем результат автоматическими тестами, но не ограничиваем выбор инструментов.

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

Продолжаем работу — обновляем базовую теорию по Python

Когда мы изучили фидбек студентов по первому блоку, посвящённому базовому Python, увидели, что на старте им часто бывает сложно. А ведь это самое важное — если человек что-то не понял в начале, значит, дальше он с большей вероятностью может споткнуться о другие темы. Мы провели исследование, чтобы выяснить, в какой последовательности давать знания, где стоит добавить примеры и задачи, а где расписать что-то подробнее.

Прямо сейчас мы перерабатываем материал, исходя из результатов исследования. Допустим, материал по объектно-ориентированному программированию, по словам студентов, был изложен слишком лаконично. Многие осваивали теорию, решали задачи, но не понимали суть темы концептуально. Поэтому мы объясняем её подробнее, приводим аналогии из жизни, добавляем новые проекты. И так со всеми проблемными моментами. 

Другое важное изменение касается бесплатной вводной части курса с длительностью 20–40 часов. Раньше мы исходили из того, что все студенты проходят сначала её, а уже потом покупают курс. Поэтому в блоке с базой Python могло не быть каких-то самых элементарных вещей — и мы отправляли новых студентов пройти бесплатную часть курса, прежде чем переходить к основной программе. Из-за этого кто-то тратил больше времени на старте и мог отстать от группы.

Бесплатная часть курса «Python-разработчик»
Бесплатная часть курса «Python-разработчик»

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

Информация при этом почти не дублируется. Да, и в бесплатной части, и в коммерческом курсе мы начнём, например, с переменных. Но если в первом случае студент получит сжатую информацию о базовых действиях, то в коммерческом курсе погрузится глубже — узнает, как при присвоении значения переменной создаётся ячейка в памяти и что на эту ячейку могут ссылаться другие переменные.

Планируем новые изменения

Рефакторинг никогда не заканчивается, мы постоянно что-то дорабатываем. Прямо сейчас вносим изменения по базе Python, дальше в планах — добавить теорию про асинхронный подход.

Новый материал доступен не только нынешним студентам, но и выпускникам, которые могут повторить уроки уже в обновлённом виде.

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

Внутренние исследования показали, что стало лучше — студенты оценили обновлённые спринты выше.

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

У нас нет тем, которые написаны, и мы их не трогаем. Глобальные изменения мы вносим чуть реже, а вот небольшие — ежедневно.

Комментарии (5)


  1. IvanZaycev0717
    15.12.2023 16:21

    Также мы «подняли» версию Django с 2.2 до 3.2

    О, может лет через пять и до 4ой версии дорастут, учитывая, что уже и пятая вышла


    1. pr0l
      15.12.2023 16:21

      Яндекс судя по движухе, хоть слышит студентов и что-то обновляет. Я до сих пор с дрожью вспоминаю курс «DevOps практики и инструменты» от Отуса который написали в 2018 году и все еще преподают. Сначала ты борешься с домашкой, чтоб она заработала. А потом борешься с тестами когда пытаешься сдать, тк старые тесты делались под старые версии софта, которые уже не работают. Каждый курс мучается, сообщает им в обратной связи, но ничего не меняется. С курса на курс переходит человек 5-6, тк устают бороться и забивают.

      Все познается в сравнении.


    1. bartenev_ev Автор
      15.12.2023 16:21

      Это очень хорошее замечание. Проблемы перевести курс на 4 или 5 версию Django нет, однако мы осознанно не делаем это. Дело в том, что в большинстве реализованных Django-проектов сейчас используется версия фреймворка 3.2. Если на работе вам достанется Django-проект, то с большой вероятностью его версия будет ниже или равна 3.2.

      При выходе новой версии фреймворка разработчики, как правило, не пытаются сразу перевести свои проекты на неё:

      • зачастую это технически сложная задача, которая стоит времени и денег,

      • переводить работающий проект на новую версию фреймворка бывает нерационально: добавленные возможности не стоят затрат, которых потребует переход на новую версию.

      И это относится не только к фреймворкам, а, например, и к версии интерпретатора. Вы удивитесь, но довольно много проектов всё ещё разрабатываются на Python второй версии.

      Поэтому мы учим наших студентов не на старой, а на актуальной версии Django, на которой они скорее всего и будут работать.


  1. LunarBirdMYT
    15.12.2023 16:21

    А фронтед часть для диплома так же подается, как и ранее - кот Шрёдингера? Имею в виду, что вся фронт часть была чем-то непонятным для студента. Что-то делаю, вроде работает как надо, делаю что-то другое - не работает, но оба варианта, по сути, не понятны. Проблема в понимании взаимосвязи фронта и бэка. Не считаю, что нужно подавать информацию словно для фулстека, но было бы полезно в простом варианте до диплома это дополнить. На момент обучения у многих возникали сложности из-за этого. Тогда я это воспринимал как api(для своего понимания), типа оно там как-то это обрабатывает, а я тут просто что-то отправляю. Не планируется ли хотя бы статейка в курсе о том, "фронт читает бэк"?


    1. bartenev_ev Автор
      15.12.2023 16:21

      Да, это важное уточнение. Действительно, ранее было недостаточно уделено внимания объяснению того, каким вообще может быть фронтенд, как можно с ним взаимодействовать и что происходит под капотом такого взаимодействия. Мы учли этот момент и дополнили теорию новыми уроками и темами, в которых на простом и понятном учебном проекте теперь подробно разбираем что такое SPA и как взаимодействует фронтенд и бэкенд через API. Более того, для диплома была специально создана и добавлена в прекод коллекция Postman, в которой уже есть примеры всех необходимых запросов к API бэкенда.
      Если Вы уже закончили курс, то все изменения должны быть Вам доступны. Будет здорово, если получится перепройти новые уроки и оставить нам обратную связь.