Transcription
Всем привет!
Меня зовут Валерия. Я Python разработчик компании VAB, и в этом видео мы поговорим про основные навыки и скилы, которыми необходимо обладать, чтобы претендовать на позицию Junior Python разработчика.
Это видео мы поделим на несколько основных разделов и поговорим про каждый поподробнее.
Сначала поговорим про основные хард скилы, которые необходимы каждому джуну. После этого также поговорим про дополнительные навыки для джуна. Затронем такие темы, в которых не ожидается глубокого понимания, но о которых часто хорошо было бы иметь представление, обладать ими хотя бы на базовом уровне.
В третьей части перейдём к софт скилам. Обсудим, какими софт скилами надо обладать, какие могут возникать проблемы, подводные камни в работе в команде, и также как их преодолевать.
Предварительно хочу сказать, что от Junior разработчика обычно не ожидается очень большого опыта. На этом этапе очень важную роль играет написание проектов, прохождение всяких учебных курсов, умение читать документацию и разбираться с новыми задачами. В целом важно обладать мотивированностью и заинтересованностью, а также желанием погружаться в разработку и умением быстро учиться, задавать правильные вопросы.
А теперь перейдём к основным разделам.
Итак, начнём с основных знаний и технологий. Конечно, самое первое, что нужно освоить Junior разработчику, - это сам язык Python. Это очень обширная тема, но на собеседованиях джуниоров часто проверяют на базовое понимание устройства языка.
Задают вопросы про типы данных, базовые конструкции языка. А сюда могут попасть очень разные, но довольно типовые вопросы, как, например, вопрос про декораторы, про контекстные менеджеры или про понимание Python в целом, как, например, что такое GIL или как в Python работает память.
Любят вопросы про нотацию и так далее. Перечислить все возможные варианты, наверное, довольно проблематично, поэтому на экране вы видите ссылку с перечнем часто встречающихся вопросов на собеседованиях для джуниоров.
В принципе, при подготовке и изучении языка можно в том числе прямо по пунктам проходить по вопросам и ссылкам и разбираться с темами отдельно. Также в этой теме я бы, наверное, отметила ещё и ООП. Эту тему очень любят спрашивать.
Какие вы знаете основные принципы объектно-ориентированного программирования, что они означают, как используются. Да и в целом эта тема полезная, и хорошо бы в ней разобраться.
Также часто может встретиться такая тема, как принципы SOLID, поэтому хорошо бы уметь их перечислить, рассказать поподробнее о каждом.
Также ещё один навык, довольно основной для Junior разработчика, - это работа с API. Эта тема довольно широкая и включает много подтем, таких как, например, REST, то есть стандарты и принципы REST архитектуры API, как их проектировать в соответствии с этими стандартами.
Также это протокол HTTP, то есть понятное дело, это методы, за что отвечает, что такое idempotent, что такое безопасность и так далее. Сюда же попадает и умение обрабатывать запросы, валидировать данные, настраивать ответы в соответствии с кодами состояния HTTP и также правильная обработка исключений.
Всё это на самом деле, конечно, звучит как обширная тема для изучения. Ну и в целом так и есть, но это нужный навык, и точно стоит потратить своё время и ресурсы для того, чтобы углубиться в эту тему.
Здесь главное, наверное, начать нарабатывать опыт, а с каждым написанным эндпоинтом эта тема будет раскрываться и становиться интереснее и проще.
Также следующий очень полезный для джуна навык, если говорить о веб-разработке, - это, конечно, умение работать хотя бы с одним из популярных фреймворков. А выбор при изучении зависит, конечно, от ваших личных предпочтений.
Из самых популярных выбор может пасть, например, на Django или на Flask. В целом, выбирая между фреймворками, важно просто учитывать различные цели, для которых они чаще используются.
Django - это очень популярный фреймворк, в котором большое количество инструментов поставляется прямо из коробки, и он прямо огромный. В этот фреймворк уже включена панель администрирования, поставляется структура каталогов, модели и многое-многое другое.
И, конечно, за счёт большого количества инструментов этот фреймворк часто используется на больших проектах. То есть правильно, конечно, писать на нём свои небольшие подпроекты для того, чтобы изучить и понять его, но стоит просто держать в уме, что его возможности значительно больше, и он хорошо, так сказать, на вырост.
У Django есть много плагинов и модулей. Один из самых известных, кстати, это также Django REST Framework, который используется для разработки API и также обладает довольно широким функционалом.
В целом, наверное, если вы погружаетесь в Django, то этот фреймворк тоже было бы интересно зацепить и разобраться в нём.
А другой вариант из тех, по крайней мере, который я перечисляла, это Flask. Это относительно новый фреймворк, его бы даже можно было назвать микро-фреймворком.
В отличие от Django, он, наверное, не обладает столь широкими возможностями, но у него есть и свои достоинства. Он очень гибкий, он очень производительный, и его просто разворачивать и довольно легко осваивать.
Также этот фреймворк даёт преимущество в виде асинхронности, потому что он полностью асинхронный, и его также часто используют для разработки микросервисов.
Выбор фреймворка зависит полностью от вас. Стоит сказать, что, наверное, освоив хотя бы один, погружение в остальные будет даваться значительно проще.
Также среди, наверное, основных скилов нужно отметить умение работать с базами данных и SQL-запросами. Конечно, от джуна также ожидается знание, умение работать хотя бы с одной системой управления баз данных.
Из самых популярных здесь можно выделить PostgreSQL или MySQL, а также понимание, что такое нормализация, какие бывают нормальные формы.
Что касается работы с данными, про работу с данными два таких обширных пункта. Первый - это, конечно, хорошо бы уметь работать с сырыми SQL-запросами, то есть умение написать сырой запрос на этом языке.
Обычно всё-таки от джуни разработчика ожидается, что он умеет составлять такие запросы, знает отличия между JOIN, может на практике применять эти знания, умеет использовать группировки, знает, как получать уникальные значения или наборы конкретных значений, как JOIN-таблицы.
А для изучения есть достаточно много материалов в интернете, есть сайты с задачами, встроенной проверкой результатов ваших запросов, дополнительными материалами для изучения.
В общем, ссылку на несколько таких туториалов я тоже прикладываю. Также существуют и готовые базы данных, которые можно локально у себя развернуть и использовать для тренировки написания SQL-запросов.
Но помимо SQL есть также, конечно, ORM. Более простыми словами, это навык, который обеспечивает вам возможность писать запросы с использованием такой прослойки, которая будет связывать базу данных с объектами в языке программирования.
Ну и, конечно, если говорить о ORM, то требуется понимание такого встроенного инструмента Django, как Django ORM. Хорошо будет разобраться, как писать запросы с использованием ORM, научиться описывать модели, работать с миграциями, то есть там создавать, накатывать, откатывать миграции.
Ещё хорошо было бы разобраться с отличиями разных видов связей в базе между таблицами, например, One to Many или Many to Many. В чём их отличие, для чего они используются. Вопросы про Many to Many в целом очень любят спрашивать, так что классно посмотреть, как эта связь реализуется в БД.
В случае с Flask и FastAPI, в том числе, чаще всего используется SQLAlchemy и, соответственно, инструмент для миграции Alembic. Если вы делаете свой выбор в пользу Flask, то также важно освоить эти инструменты.
Здесь в целом рекомендации, наверное, будут такими же, как при использовании инструментов другого фреймворка. И для Django, кстати, и для SQLAlchemy существуют очень подробные документации, которые можно использовать при изучении.
Если говорить про SQLAlchemy, то, возможно, там документация даже слишком подробная, по крайней мере, для начала. Поэтому в целом в начале может также быть полезна документация Flask, в ней много примеров использования, и ссылки я также прикладываю.
А также помимо умения работать с фреймворками реляционными, с большим плюсом, конечно, будет умение работать с NoSQL или нереляционными базами данных. Это базы данных, в которых, в отличие от традиционных СУБД типа PostgreSQL, нет определённой схемы взаимодействия между данными.
И за счёт этого они становятся более адаптивными. Здесь, наверное, стоит выделить такие NoSQL базы, как Redis и MongoDB. В данном случае хорошо точно также уметь работать с данными: записать, прочитать, изменить данные, настроить какое-то кэширование и очистку данных через какой-то процесс времени.
Наверное, на первом этапе мы закончим, перейдём к следующему пункту.
Следующая наша тема - это дополнительные навыки и технологии, которые не являются прямо самыми основными для Junior разработчика, но иметь представление о которых нужно, и чем больше вы о них знаете, тем, конечно, лучше.
Среди таких, наверное, самое первое, я бы выделила это асинхронное программирование. По этой теме хорошо было бы почитать, попытаться разобраться с такими темами, как мультипроцессорность, асинхронность, также разобраться, что такое Event Loop, причём здесь GIL, понимать, какой подход применим для CPU Bound и IO Bound операций.
Наверное, ещё одна технология, которая иногда встречается в требованиях на позицию джуниора, - это Celery и брокеры сообщений, в частности RabbitMQ. И опять же стоит сказать, что не стоит обладать прямо очень глубокими знаниями по теме, но иметь общее представление о таком мощном инструменте - это классно.
Инструмент, который используется для периодических фоновых заданий. Соответственно, умение написать таск и запустить её выполнение в фоновом режиме - это уже очень большой плюс на любом собеседовании и в целом очень удобный навык.
А задач для её реализации достаточно много, даже в рамках ПД проектов, например, периодическая рассылка уведомлений на почту или выгрузка отчётов.
Ещё один скилл - это умение работать с Git. Git - это очень важный инструмент управления версиями, и это инструмент, который очень значим при командной разработке.
От джуна обычно всё-таки уже ожидается, что он умеет использовать этот инструмент на достаточном уровне. Ну, под достаточным уровнем я здесь имею в виду умение работать в разных ветках, стягивать изменения, коммитить и писать комментарии, менять эти комментарии, создавать реквесты.
Ну и, конечно, решать конфликты. Наверное, это основные навыки, которые прямо нужны при работе в команде. И здесь также существует довольно неплохой тренажёр, туториал, поэтому ссылку оставлю на презентации.
Ещё среди важных скилов надо упомянуть, конечно, тестирование, то есть умение покрывать свой код тестами. Здесь среди самых популярных инструментов для написания тестов на Python стоит упомянуть, наверное, pytest.
Вообще самое главное в тестировании - это, наверное, умение понять принципы тестирования, понять, что это такое. Ну и, собственно, как писать тесты, интеграционные тесты.
А сам инструмент, опять же, на усмотрение разработчика. Умея оперировать одним, вы, наверное, без уже такого большого труда сможете переключиться на другой.
Также, наверное, из двух таких последних, но немаловажных пунктов, это, наверное, упомяну умение работать с Docker. Ну, как минимум, умение развернуть проект локально, начать разработку, описать, возможно, Dockerfile.
Это полезная тема, она в любом случае будет всплывать и пригодится вам на вашем пути.
И самое последнее и очень важное - это стараться учиться писать чистый и понятный код, то есть документировать его, оставлять понятные комментарии, использовать аннотации типов, линтеры, избегать антипаттернов.
Потому что, когда над проектом работают несколько разработчиков, то очень важно всего этого избегать. Я имею в виду антипаттерны и писать код так, чтобы другой разработчик впоследствии смог без труда работать с вашим кодом.
По чистому коду много книг и статей. Наверное, одна из самых популярных, которую можно было бы порекомендовать, это "Чистый код" Роберта Мартина.
Ну и в целом просто писать больше кода и стараться становиться лучше, и этот навык будет постепенно также нарабатываться.
Наверное, на этой теме мы закончим обзор по хард скилам и перейдём к софт скилам.
Софт скилы - это также навыки, которые необходимо прокачивать наравне с хард скилами, потому что современная разработка предполагает работу в команде. Причём это работа не только в команде разработчиков, это также взаимодействие с заказчиком, с командами тестирования, аналитики, бизнеса.
В общем, это постоянная коммуникация и взаимодействие. Конечно, в процессе любого взаимодействия могут возникать некоторые нюансы, какое-нибудь недопонимание, надвигающиеся дедлайны, изменяющиеся ТЗ.
В общем, наверное, самый главный пункт, который я бы здесь выделила, - это просто умение вежливо и спокойно реагировать на различные ситуации. Ситуации будут разные, но здесь очень важно просто сохранять холодную голову.
Также важный момент - это уметь принимать аргументированную критику, как, например, в процессе прохождения код-ревью. Потому что код-ревью - это очень мощный способ прокачать свои скилы.
В процессе код-ревью можно узнать какие-то новые подходы. Также это один из собственных способов научиться свою точку зрения аргументировать и отстаивать.
Если, например, вы с чем-то не согласны или у вас есть какое-то своё видение, вы можете объяснить, почему вы используете здесь такие, а не другие подходы. В общем, уметь принимать критику и уметь спокойно на всё это реагировать, и иногда заступаться за свою точку зрения - постепенно это будет приходить.
Мне также кажется, что на позиции Junior разработчика очень важный навык - это умение найти какой-то определённый баланс в работе. То есть с одной стороны, конечно, будут возникать новые задачи, с которыми, вероятно, вы ещё никогда не сталкивались.
А новые задачи - это, конечно, стресс. С другой стороны, это также и желание засесть и побыстрее освоить как можно больше скилов, не спать ночами.
Но это довольно опасный путь, потому что бояться браться за новые задачи - это, конечно, неправильно. Именно так мы развиваемся.
С другой стороны, не спать ночами, пытаясь решить какую-то очередную таску, в которой вы уже ничего не можете разобрать просто в силу усталости - это, наверное, не путь к обучению, а путь к выгоранию.
Мотивация - это классно, но иногда требуется признать, что вот эта технология вам на данный момент мало знакома, и попросить совета у старшего разработчика. Скорее всего, никто не откажет вам в том, чтобы где-то помочь, объяснить это.
И софт скилл прокачивает, и хард скилл прокачивает.
Ну и главное - не сидеть до последнего, ломая голову, не дотягивать до дедлайна и не заработать себе лишний какой-нибудь выгорание, которое никому абсолютно не нужно. То есть сохранять баланс.
И ещё, наверное, последний очень важный скилл для всех, но особенно для джуна - это умение задавать правильные вопросы. Это очень важно.
И для этого, конечно, нужно уметь читать и вникать в техническое задание, потому что в разработке время - это ценный ресурс, причём как ваше время, так и время ваших коллег.
Поэтому полезно развивать умение проанализировать задачу и заранее сформулировать вопросы.
Ну и оценить возможные проблемы, и при наличии вопросов уже не затягивать задачу, опять же, до дедлайна. Также понимать, какие именно вопросы надо обсудить, идти с этими вопросами к коллегам, правильно их формулировать, и таким образом взаимодействие в команде будет максимально эффективно и комфортно для всех.
Ну, в целом, на этом, наверное, всё. Спасибо за внимание! Если остались какие-то вопросы, то буду рада ответить на них в комментариях. Пока!