За время изучения Python в GeekUniversity Максим Столпасов успел пройти практику в Австрии и трудоустроиться. Рассылать резюме не пришлось — на стажировку, а затем и постоянную работу его пригласил преподаватель курса Django. Своей историей, впечатлениями от учебы и рекомендациями новичкам Максим поделился в интервью.
— Привет! Расскажи, пожалуйста, чем ты занимался до GU? Был ли опыт с Python и почему решил изучать Django?
— До GeekUniversity я 10 лет занимался автоматизацией: внедрял ERP-систему и поддерживал ее работоспособность на предприятии клиента.
Функции системы можно было расширять с помощью внутреннего языка программирования, но обычно настройка сводилась к расстановке галочек в интерфейсе.
Когда в 2008 году я устраивался в ту компанию, не знал ни одного ЯП. Но в среде хороших специалистов программирование меня быстро увлекло. Я начал заниматься самостоятельно, плюс выдергивал коллег после работы и готов был с ними часами говорить о коде.
В 2012 году понадобилось создать для нашего продукта среду разработки. Мы взяли текстовый редактор Sublime и стали писать к нему плагины. Так я познакомился с Python. Тут же влюбился в этот язык — гибкий, понятный, с близким мне подходом к программированию.
Шесть лет я изучал Python самостоятельно. В 2018 решил сменить работу и подобрать что-то связанное с «питоном». Достаточного опыта не было, фундаментальной теоретической подготовки тоже, а без этого никуда не брали.
Один друг показал мне тесты по Python на сайте GeekBrains. Я знаком с темой подготовки учебных материалов и мог оценить качество тестов. Оно мне очень понравилось. Подумал: если так составлены тесты, учебная программа должна соответствовать. И не ошибся.
— Что показали тесты?
— Начальный уровень я прошел без ошибок, а из среднего не знал ничего. Представил, насколько круто будет, если со временем я смогу с легкостью ответить на все эти вопросы. Захотелось развиваться, и я купил обучение в GeekUniversity.
— Как тебе учеба?
— За первые два месяца мы освоили все, что я до этого учил шесть лет! Для меня это был шок.
Занимался я всерьез: выполнял все домашние задания, читал методички и дополнительные материалы, старался сделать чуть больше, чем требовалось для оценки «отлично».
Курс Django 1 у нас вел Максим Данилов — очень рекомендую его как преподавателя! Мы общались не только на занятиях, но и в WhatsApp. Обсуждали домашние задания, подходы к решению задач. По окончании курса Максим предложил пройти практику в его фирме в Австрии. Надо было выйти из зоны комфорта: на месяц уехать в другую страну от семьи, детей. Со старой работы я тогда еще не уволился, пришлось договариваться. Но в итоге ради практики я смог все уладить и поехал.
Австрия, Ландек. Вид из окна офиса. Фото: Максим Столпасов
— Учебу на это время пришлось прервать?
— Нет. Практика совпала с периодом командной разработки в GU. Мои одногруппники делали очень классный проект: систему тестирования EasyTest. Я за ним следил, анализировал рекомендации преподавателей. Максим тоже шел навстречу — выделял мне время для учебы.
По возвращении я отчитался преподавателю по командной разработке — Сергею Кручинину, — что я делал, как взаимодействовал с коллегами и применял полученные в GU знания. Этот опыт мне засчитали за командный проект.
— Над чем ты работал во время практики? Насколько хватало знаний, чему удалось научиться?
— Пригодились общие знания Python и все, что мы изучали на курсе Django. Особенно полезным оказалось умение сокращать объем потребляемой памяти в Python и работать с классами Django.
Максим Данилов — кладезь знаний, и мы с ним по вечерам обсуждали вещи за рамками учебного плана. Ведь программа занятий GeekUniversity не резиновая — всего туда не впихнешь.
Приходилось узнавать на ходу и лучшие практики, которые мы еще не успели разобрать в GU. Максим показывал мне их на реальных примерах: хороших и плохих. Причем он объяснял, почему здравая на первый взгляд идея на деле плохо работает. Было очень интересно.
— А что за продукт вы делали и в чем была твоя роль?
— Продукт называется winePad Der Digitale Sommelier — это система автоматизации продаж вин. В приложении не нужно заводить номенклатуру — в него встроена одна из лучших баз данных по винам Европы, с фото и описаниями.
Винотека в офисе. Фото: Максим Столпасов
Теперь о задачах. Продукт использовал библиотеку, которая перестала обновляться, и от нее нужно было избавиться. Для этого предстояло написать модуль с похожими функциями.
В частности, надо было реализовать проверку формата загружаемых пользователем картинок. Бывает, люди вместо конвертации файла просто переименовывают его. И в файле с расширением .png на деле оказывается, допустим, GIF-изображение.
Мне поручили написать код, который определял бы реальный формат по сигнатуре файла и при необходимости автоматически менял расширение на правильное. Все это должно происходить во время загрузки картинки на сервер.
Я нашел библиотеку, которая обеспечивала похожие функции, но она была написана на Python 3. Мне пришлось править ее для совместимости с Python 2.7.
— Ты говоришь, что учился взаимодействию с коллегами. Команда большая, интернациональная?
— Небольшая, но из русских в ней — только мы с Максимом. Большинство составляют австрийцы, немцы, итальянцы. Без хорошего английского было тяжко местами, но я все равно участвовал в совещаниях и благодаря поддержке Максима ориентировался в происходящем.
— Где именно в Австрии находился офис? И насколько жизнь компании отличалась от того, к чему ты привык в России?
— Я жил в городе Ландек в Тироле. Что сильно отличалось — это корпоративы. В российских компаниях, где я работал, при организации корпоративов ставка делалась на развлечение. Кроме застолья всегда были встречи со знаменитостями, разные выступления. В Австрии я впервые попал на корпоратив, полностью нацеленный на удовольствие от еды! Меня впечатлил подбор вин и угощений.
В компании невозможно вести «сухой» образ жизни, то есть совсем не пить. Практически каждый вечер мы участвовали в дегустации вин. И еще я попал на два торжественных мероприятия: открытие нового офиса с участием мэра города и рождественский корпоратив.
Один из совладельцев бизнеса — сомелье мирового уровня — раскрывал нам секреты вин. Я не большой их любитель, но был ошеломлен.
Нам наливают вино, сомелье о нем рассказывает (Максим мне переводит), затем предлагает понюхать и попробовать. Что ж, хорошее вкусное вино. «Поставьте его на пять минут», — говорит он и опять рассказывает. Через пять минут вино продышалось, пробуем снова — вкус абсолютно другой. Оставляем еще на пять минут — вкус третий. И так шесть раз! Плюс были всякие интересные закуски.
На открытии офиса. Фото: Максим Столпасов
Если говорить о рабочем процессе, больших отличий я не заметил — тот же Agile. Но в компании принято работать стоя! Компьютеры — на специальных столах с регулируемой высотой. Сначала было непривычно, но через неделю я уже мог спокойно стоять весь день. По моим ощущениям, это было даже полезно.
Работа строилась так. Утром Максим подходил ко мне обсудить текущие задачи. В течение дня он спрашивал, не нужна ли помощь, а в конце я отчитывался о своем прогрессе.
Для меня все это было ожидаемо: примерно так, как нам рассказывали на курсе командной разработки GU.
— В этом курсе помимо практики дают теорию?
— На первом этапе. Сначала нас организовали в команды, рассказали, как выбрать, что мы будем разрабатывать. Когда студенты определились с проектом, надо было рассчитать его целевую аудиторию. Во всем этом я участвовал, и только практическую часть выполнял отдельно.
Еще нам объясняли, как работает распределенная команда, как правильно относиться к задачам и взаимодействовать. Рекомендации я брал на вооружение, польза их подтвердилась.
— Сейчас ты продолжаешь работать у Максима, но уже удаленно?
— Да. Когда я ехал в Австрию, не рассчитывал на последующее трудоустройство. Моей целью было погрузиться в практическую разработку на Python и Django, получить месяц опыта.
Я наслаждался процессом, и впервые ничто не отвлекало. Вечером после работы я читал о задачах, которыми занимался: какие есть варианты решений и библиотеки. Утром бежал обратно на работу, чтобы скорей опробовать подходы, о которых прочел. И так весь месяц без остановки!
Я был поглощен делом и не ждал большего. Но под католическое Рождество (25 декабря) Максим предложил сотрудничать на удаленной основе. Два раза в год я должен приезжать на месяц в Австрию, чтобы скорректировать планы на полугодие.
По перспективам, деньгам, удобству и всему остальному это предложение было идеальным — просто рождественская сказка!
Раньше мне приходилось каждый день ездить на работу через всю Москву: с севера области на юг. На дорогу в одну сторону уходило в среднем 2–2,5 часа. Сейчас я снял себе коворкинг и работаю в двадцати минутах от дома. Зарплата чуть выше прежней. И главное — перспективы. Компания оплатила мне курсы английского, чтобы я мог лучше взаимодействовать с командой.
Работа мечты, по-другому назвать не могу!
Альпы. Вид из офиса. Фото: Максим Столпасов
— И ее не пришлось искать.
— Кстати, когда я записывался в GeekUniversity, обратил внимание на гарантию трудоустройства. При высоком качестве обучения это вполне реально, а увиденные тесты и вебинары внушали доверие.
В итоге получилось еще проще: я полностью сконцентрировался на занятиях, а работа нашлась сама в процессе обучения.
— Какие проекты ты реализовал в GU?
— Пока я продолжаю учиться и за плечами один «сквозной» проект, который мы дорабатывали в ходе каждого учебного курса — это интернет-магазин на Django. Мы начинали с верстки (курс HTML & CSS), затем нам показали, как увязать сайт с базой данных и фреймворком Django.
Мы научились выносить повторяющуюся информацию в контексты и выводить данные из базы. Дальше — оптимизировали хранение данных, разобрались, как строятся индексы в базе, как правильно спроектировать модель магазина, исходя из реляционной структуры БД. Попутно научились работать с системой контроля версий — все изменения фиксировались в git.
Мы привязали к сайту систему перевода страниц на другие языки. Дальше начался более продвинутый курс Django 2, по итогам которого мы реализовали для магазина авторизацию через соцсети.
Мы также научились пользоваться встроенными в Django тестами: провели нагрузочное, функциональное и unit-тестирование.
Прелесть «сквозного» проекта в том, что теперь я умею делать и frontend, и backend — все, кроме дизайна. Полноценный интернет-магазин уже есть, его можно дорабатывать. У меня появились идеи, как прикрутить к нему telegram-бота.
— Зачастую в GU и GB фронтендеры кооперируются с бэкендерами и делают курсовые проекты вместе. А вы, получается, — мастера на все руки.
— Нас готовят как Middle fullstack-разработчиков, поэтому учат всему.
Кстати, неожиданно Frontend меня очень зацепил! Этот курс у нас вел Алексей Кадочников — шикарный преподаватель. Он так заинтересовал нас этим HTML: я ночами не спал — изучал дальше. Потом Алексей посоветовал мне, в какие темы углубиться дополнительно.
— Что из проектов у тебя впереди по учебному плану?
— В середине марта у нас начинается разработка мессенджера на Python. После этого научимся использовать PyQt для взаимодействия с базой данных.
— Сейчас ты занимаешься вебом, но в принципе ты ведь «питонист широкого профиля». Есть планы освоить новые направления Python-разработки?
— Машинное обучение — обязательно. За ним будущее! Я заинтересовался этой темой в первые же месяцы учебы в GU.
Тогда, еще на старой моей работе, надо было оптимизировать распределение задач в отделе. Для начала их нужно было классифицировать, и вот на этом примере я впервые «пощупал» machine learning. Разобрался, как построить вектор по заголовку и описанию задачи. Удалось довести правильность распределения задач до 90 %.
Дальше все это нужно было интегрировать с системой контроля доступа, которая фиксировала отпуска, больничные и т.д. Мне на это не выделили достаточно времени, и пришлось доработку свернуть. Но интерес остался, и я жду возможности развиваться в данном направлении.
Мы уже обсуждали с Максимом возможность прикрутить машинное обучение к проекту WinePad. Выяснились интересные моменты. Я раньше не представлял, как модель обучения может взаимодействовать с Django.
— Вроде бы, готовую модель можно использовать не только с Python, но и с кодом на других языках программирования.
— Прикольно. Я пока в этом не разобрался, нужно будет вникнуть.
— В завершение беседы поделись, пожалуйста, опытом. Что ты посоветуешь поступающим на ту же специальность?
— Мой совет: помните, что в программе обучения GU нет ничего лишнего. Вам дают самый необходимый минимум, который обязательно пригодится в работе. Берите этот объем знаний целиком. Домашние задания — наше всё! Смотрите занятия онлайн, пересматривайте, читайте методички, в ДЗ обязательно делайте все задачи со звездочками и еще что-нибудь сверху. Вы оцените результат.
Когда Максим приходит ко мне с новой задачей, я думаю: «Где-то такое уже было!» — и сразу вспоминаю, в какую методичку смотреть и какой код поднимать.
— При твоей увлеченности и мотивации, что тебе задачи со звездочками… 🙂 Думаю, секрет в этом.
— Не всегда. Мотивация — штука непостоянная! То она пропадает, то объективно времени нет и приходится сидеть ночами. Надо себя заставлять и не сдаваться! Домашнее задание — оно маленькое, примерно на два часа. Это время надо по-честному полностью уделять занятиям.
— Максим, огромное тебе спасибо за разговор. Пусть карьера и дальше складывается так же удачно, ты многое для этого делаешь. А от читателей ждем комментариев и вопросов.