Отзыв о программе «Яндекс Практикум мидл Python-разработчик»

от автора

Год назад я решил пройти курс Яндекс Практикум «Расширенный курс мидл Python-разработчик» (11 месяцев). В этом отзыве расскажу, как проходило обучение, чему я научился и совпали ли мои ожидания с реальностью.

Но в начале надо проговорить несколько важных моментов:

  1. На сайте Яндекс Практикум программы на 11 месяцев больше нет. Текущий курс «Мидл Python-разработчик» длится 6 месяцев и охватывает меньше тем. Процесс обучения на 6-месячной программе отличается длиной спринта, что может повлиять на учебную нагрузку.

  2. Я говорю только про программу «Расширенный курс мидл Python-разработчик» и людей с которыми столкнулся во время обучения. На других программах всё может быть совсем по другому.

  3. Отзыв может быть эффектом выжившего — начинало нас 15 — 20 человек, а закончивших я видел только троих (все из команды). Кто-то вероятно защитил диплом раньше, кто-то возможно позже, но многие бросили обучение.

Ещё мне кажется важным обозначить точку отсчета — кто я и зачем шёл учиться, чтобы в конце сказать достиг ли я желаемых целей.

И так…
Мне 40++ лет ) Я никогда не работал в найме разработчиком. Но я и не из тех кто решил в эти самые айти залететь наслушавшись из каждого утюга, что только закончив курсы по python выстроится очередь работодателей желающих платить 200к.

В этом самом айти я без малого 20 лет. 

Я из того поколения ребят у которых в 2005-2010 появился быстрый интернет (64 кб/сек) и они начали пробовать в нём зарабатывать. 

Началось всё банально со статьи Greenwood про создание дорвеев 🙂 Есть такой факт в биографии. Иногда вполне успешно, а дальше было много сео, арбитража, лидогенерации и т.д. и т.п. 

В разные периоды я работал в одиночку, в партнерстве, платил ЗП разработчикам и др сотрудникам.

Создал, наверное под сотню сайтов в разных тематиках из которых выстрелило около 10. 

Лет двенадцать  назад ходил на курсы php, mysql, верстки, лет 8 назад на курсы python чтобы создавать свои нейронные сети, потом были курсы ML и быстрое понимание, что это не мой уровень. Дернуть метод из библиотеки типа scikit-learn, написать классификатор или матчинг некоторых товаров это я могу, но объяснить какая за этим стоит математика я не могу.

Придумывать проект, разбирать его на кирпичики, писать подробное ТЗ — в этом я себя чувствую хорошо.

Посмотреть в свободное время доклад Григория Петрова @grigoryvp, Никиты Соболева@sobolevnили что-то с конференции Highload это мне нравилось всегда. Мало, что понимал правда )

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

Платить ЗП разработчику я больше не мог и пришлось вспоминать python.

Напомню, Python я изучал для задач машинного обучения, а заниматься пришлось веб-разработкой. Долго выбирал между Django и Flask. Но в задаче, которая горела была MongoDB, а так как сердце Django это всё таки встроенный ORM и для работы с MongoDB пришлось бы что-то изобретать — победил Flask. О чем не жалею до сих пор и очень люблю этот микро-фреймворк, как и MongoDB.

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

Именно эту цель я и ставил перед собой, когда шел учиться.

Возможно проще было бы пойти попробовать устроиться в найм. Но коммон — дядьке 40+ лет, опыт коммерческой разработки в найме нулевой. Да и я больше бизнесовый человек — мне нравится придумывать и реализовывать проекты.

И так я записался на курсы «Расширенный курс мидл Python-разработчик» (11 месяцев).
Были разные программы обучения на 6, 9 и 11 месяцев, но Kubernetes был только в самой долгой. Выбор был очевиден!

Процесс обучения построен следующим образом.

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

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

Домашняя работа

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

Не успел сдать домашнюю работу — велик шанс, что предложат отдохнуть и перевестись в другую когорту (поток, который начал учиться позже). Таким образом вместо 11 учеба продлится 12 месяцев (мой случай).

Решение о переводе как и все переговоры проходят через кураторов.

Кураторы

Кураторы вероятно должны проявлять максимальное дружелюбие и вовлеченность.

Это я решил, что потяну сразу две учебы и пошёл ещё на курс React однако быстро понял, что просчитался… Написал куратору и получил вот такой ответ.

Это я решил, что потяну сразу две учебы и пошёл ещё на курс React однако быстро понял, что просчитался… Написал куратору и получил вот такой ответ.

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

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

При этом к девушкам (юношей кураторов не встречал) нет вопросов — они крайне полезны, у них тяжелая и стрессовая работа. Видимо из-за этого каждые 2-3 месяца кураторы на нашем потоке менялись.

А ещё кураторы ничего не знают про эти ваши программирования. Они только про организационные вопросы. За программирование отвечают наставники.

Наставники

Наставники люди с большим опытом (опыт можно посмотреть на странице)

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

Я понимаю, что в идеальном мире нужно вцепиться в опытного человека и тащить из него всё, что можешь достать (что я и делал последние месяца два обучения), но когда ты учишься год, так не получается.

Я общался с двумя наставниками. Оба прекрасные ребята! 

Забегая вперед — все из команды создания и сопровождения с кем удалось пообщаться напрямую либо через ревью люди с горящими глазами. Это очень вдохновляет!

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

Наставник это единственный “живой” человек с которым общаешься из команды Яндекс Практикум в процессе обучения. 

Код домашнего задания наставник не проверяет. Для этого есть ещё одна сущность — ревьюеры.

Ревьюеры

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

Откровенно говоря я и шёл то на учёбу, чтобы мой код смотрели и критиковали, учили как правильно, а за неправильно били по рукам. Можно предположить, что просто мой код был идеален и поэтому ревью часто было мягким, но нет… я видел другие работы и там конечно даже я бы нашел что написать (типа ETL из PostgreSQL в Elasticsearch сделанный в одну функцию).
А так список стандартных замечаний от ревьюера — открытые порты в docker-compose.yml, print-ы в коде и не убранные закомментированные фрагменты кода.

Один раз я напросился и получил ревью от человека, который запустил наш код. Да, кажется ревьюеры не так, чтобы часто запускают код.
До сих пор то ревью вспоминаю с благодарностью хотя в моменте хотелось конечно высказаться (очень тяжелый спринт был и мы три недели безвылазно делали домашку и на это легло ещё такое ревью). Если бы каждое ревью было таким уверен взять от учёбы удалось бы куда больше.

Командная работа

В начале мы учились в одиночном режиме — задания были индивидуальные.

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

Я выбирал команду дважды. 

Первый раз мне достался парень Егор, который хотел быть тимлидом в нашей паре (кажется, чем моложе молодой человек, тем он больше хочет быть тимлидом… это нормально )) Егор сказал, что ему всё даётся очень легко поэтому он всё делает в последний момент. Ну, ок… Когда за неделю до сдачи я начал говорить Егору, что в домашке есть зависимые друг от друга подзадачи он сказал, что посмотрит, что с этим сделать и… пропал. Больше его на курсах не было. Надеюсь с ним всё хорошо. 

Я остался “на второй год” — дождался когорту, которая стартовала позже. И там мы познакомились с Артемом. Уж, не помню кто из нас был тимлид, но знакомство с Артемом одно из главных приобретений этого курса. Как-то мы ментально совпали несмотря на разницу в возрасте.

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

Может показаться, что я всех считаю хорошими? Нет, люди разные. На курсе были и пассажиры (цель — поменьше делать, побольше получать) и с такими ребятами лично мне было бы сложновато. 

Другая жизнь вне обучения на курсе не завелась. Слышал, что на более начальных курсах люди активно общаются, в нашей же Пачке (мессенджер аля slack) несмотря на все попытки команды Практикум тишина. Это понятно: большинство студентов — уже работающие разработчики, у которых есть и семья, и другие дела.

При командной работе ревьюер не смотрит где ваш код, а где код вашего сокомандника.  Даёт общую обратную связь — это можно лучше, а то нужно исправить. 

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

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

На скрине не только учеба, но и личные проекты, но большая часть учеба. Май я вспоминаю до сих пор ))

На скрине не только учеба, но и личные проекты, но большая часть учеба.
Май я вспоминаю до сих пор ))

Итоги

Кратко — оно того стоило.

Я совершенно точно вырос, как разработчик. Потрогал много разных технологий, уложил в голове некоторые концепции.

Спасибо за это команде Яндекс Практикум. 

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

Я сейчас часто возвращаюсь к темам, которые хочется освежить в памяти и вижу, что материал меняется.

А чему я научился?

Дипломный проект.

Дипломный проект это задание подразумевающее написание несколько сервисов в микросервисной архитектуре. Есть список стандартных тем, но можно в рамках легенды (весь период обучения и все задания крутится вокруг создания онлайн кинотеатра) предложить свою идею.

Спасибо команде, что согласилась и вписалась в некоторую авантюру сделать — “AI-ассистент онлайн-кинотеатра [реализация RAG системы]”

Кому интересно посмотреть на код велком в репу.

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

Кратко опишу, что сделали, какие технологии использовали и как оно работало.

Примерная схема сервисов и их взаимодействий в дипломном проекте.

Примерная схема сервисов и их взаимодействий в дипломном проекте.

Реализовали:

  1. Auth сервис аутентификацией и авторизацией пользователей на JWT токенах. Логиниться можно напрямую, через соответствующий endpoint или через OAuth 2.0 Yandex или Google.
    Сделан на FastAPI и PostgreSQL, SQlAlchemy и миграции на Alembic

  2. Assistant service
    Сервис «AI-Ассистент» — единая точка входа для пользователей по всем вопросам онлайн кинотеатра.
    Так же сделан на FastAPI, но для БД выбрана MongoDB.

    Внутри сервиса же готовятся промпты для обращения к LLM моделям.
    Общение к LLM сервису и Text Vector сервису происходит по grpc. В учебном курсе grpc не особо разбирали. Мы на нём ничего не делали. Но было любопытно попробовать, что же это за технология такая.

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

    Выбор пал на grpc по нескольким причинам:

    • снижение сетевой межсервисной нагрузки (протокол байтовый и занимает меньше места, чем json при rest api)

    • передавать большие фрагменты (промпты) которые содержат символы, которые нужно экранировать не удобно.

    • производительность

    • и главная — любопытство)

  3. Text Vector Service — сервис для работы с текстом как вектором.
    Реализация сервер gRPC, база Qdrant, TextEncoder

    Для RAG было решено использовать векторную базу данных Qdrant (не проходили), нашли рейтинг энкодеров encodechka. Попробовал я на своей 1080Ti замахнуться на энкодеры с размерностью 1024, но преобразование одного текстового фрагмента в вектор занимало около 1 секунды, пришло брать модель попроще. Для задачи STS выбор пал на intfloat/multilingual-e5-small (осторожно, если будете запускать диплом начнется скачивание модели с Huggingface)
    В сервисе несколько “ручек”, но основная получает на вход фрагмент текста и возвращает похожие фрагменты из базы.

  4. LLM Service
    Реализация — сервер gRPC, aiohttp

    Изначально была идея попробовать, что-то локальное типа Llama, а это бы потребовало GPU и исходя из этого логики вынесли это в отдельный сервис.
    Но не успели попробовать и остались обычный api запросы. Писали так, что можно любые api использовать, но из-за нехватки времени выбор пал на API OpenAI по которым был некоторый опыт. По очевидным причинам использовать напрямую API от OpenAI было затруднительно поэтому воспользовались сервисом ProxyAPI благо можно было только поменять base_url, а все endpoint полностью зеркалятся с официальным API.

    Тестировали разные модели, но самая “умная” ожидаемо оказалась gpt-4o, gpt-4o-mini также сносно работала, но иногда не правильно определяла интент.
    С учетом всех посредников один запрос пользователя (2 запроса к LLM) выходили в 4-5 руб. На своём железе думаю можно было бы получить и меньше 1 рубля (если экономика количество запросов — стоимость аренды сервера сходилась бы)

  5. В базу Qdrant нужно было что-то положить, чтобы проверить нашу RAG и приняли решение взять данных из Википедии.
    Для этого написали парсер на scrapy, который собирал данные в SQLite.
    Парсили сначала категории верхнего уровня “Категория:Кинематограф” и собирали с них уже страницы.
    Нагружать api не хотелось и мы поставили лимит 1 запрос в секунду. Спустя трое суток парсинг остановили т.к. конца и края ему было не видно )
    Написали простой etl из dump wiki в SQLite.

Некоторые примеры ответов RAG системы.

Q. «кто главные герои мультфильма Ну погоди»

A. Главными героями мультфильма «Ну, погоди!» являются Волк и Заяц.

Based on:
«Волк, Клара Румянова — Заяц»
«Анатолий Папанов — Волк, Клара Румянова — Заяц»

Q. «в каком фильме 31 декабря ходят в баню»

A. В фильме «Ирония судьбы, или С лёгким паром!» 31 декабря герои по традиции ходят в баню.

Based on:
«Заголовок страницы: Ирония судьбы, или С лёгким паром!. Начало фрагмента: Фильм начинается… куда по традиции они ходят дружеской компанией каждый год 31 декабря.»

Q. «когда вышел мультфильм про домовенка кузю»

A. Мультфильм про Домовёнка Кузю начал выходить в 1984 году. Первая серия по сюжету была названа «Дом для Кузьки». Далее вышли серии: «Приключения домовёнка» в 1985 году, «Сказка для Наташи» в 1986 году и «Возвращение домовёнка» в 1987 году.

Based on:
«Важно отметить, что серия «Дом для Кузьки», вышедшая первой по времени, по сюжету оказалась всего лишь второй. Между тем первая часть оригинальной трилогии Татьяны Александровой заканчивается тем…»
«Продолжение не заставило себя долго ждать, и в 1985 году вышла вторая серия «Приключения домовёнка», сценарий для которой был написан…»
«В этом же году вышла третья серия мультфильма — «Сказка для Наташи», а через год и последняя — «Возвращение домовёнка».»

В репозитории есть полный json вопросов-ответов, а также dump sqlite и Qdrant, если кто-то захочет запустить.

Мне сложно объективно оценить проект на сложность и соответствует ли он уровню middle python разработчика (рынок решит), но то, что год назад такой проект мне (говорю только за себя) за 4 недели не удалось сделать бы это 100%.

Документы

После защиты диплома выдаются документы. В зависимости от наличия у вас диплома о высшем образование документы разные (но это лучше уточнять у Яндекс Практикум)

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

Вот далеко неполный алфавитный список технологий:
Alembic, CI/CD, Clickhouse, Django, Docker, Elasticsearch, FastAPI, Flask, Jaeger, Kafka, Kubernetes, MinIO, MongoDB, Ngnix, PostgreSQL, RabbitMQ, Sentry, SQLAlchemy, ZooKeeper

А как это выглядит в дипломе?

Сервис UGC говорите? Ладно, я же не за корочкой сюда приходил…

Ещё раз спасибо команде, которая сделала этот курс. Спасибо за знания и уверенность в собственных профессиональных силах.
Я получил ровно то, что и хотел.


ссылка на оригинал статьи https://habr.com/ru/articles/862228/


Комментарии

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

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