Привет, Хабр!
В этой статье поговорим о том, какие перспективы есть у питониста и куда ему можно податься.
Кому может быть полезна статья?
тем, кто сейчас активно изучает Python — вы можете добиться большего, если выберете конкретное направление, связанное с питоном, и не будете распыляться на всё подряд;
тем, кто наслышался "войти в айти" — посмотрите на реальные занятия, которые ждут, например, питониста и ответьте: «Надо ли вам оно?»;
тем, кто уже давно в теме и пишет питонячий код, но хочется попробовать чего-то другого примерно с тем же стеком;
ну и ещё неопределённому кругу лиц.
Attention: не стоит слепо поклоняться языкам или отдельным технологиям, как замечательно сказано в этой хабростатье. Программист — это чел, который повелевает технологиям, его воле повинуются и плюсы, и питон, и всеми любимый раст. Это я к тому, что не стоит превозносить Python и пытаться пихать его везде — в некоторых местах его нужно без сожаления выкинуть и заменить на более подходящий ЯП. Истина проста: «Не существует идеального ЯП, который покроет все задачи». Не нужно натягивать язык на задачу, нужно выбирать оптимальный для решения задачи язык. Или сменить задачу.
Перед тем, как перейти к разбору разных ответвлений, связанных с Python, давайте освежим азы — в них должен ориентироваться любой питонист. Итак, назвался грибом — полезай в кузовок, питонисту нужно знать всё это:
типы данных: числа, строки, списки, множества, кортежи
циклы while и for, условия, их комбинации
функции, область видимости, lambda, рекурсия, декораторы
генераторы
вычислительная сложность, операции над структурами данных
стандартная библиотека
работа с ошибками и исключениями, try-except, raise, assert
работа с файлами: чтение, запись, сериализация
концепции ООП: полиморфизм, наследование, инкапсуляция
Кстати, кто уверен, что хорошо знает питон — эти 2 хабростатьи бросают вам вызов: «100 вопросов для подготовки к собесу Python», «Кандидат сбежал в слезах»
Знание основ Python — это то, что объединяет разные специализации питонистов. Различает же их знание своих библиотек/фреймворков, владение дополнительными инструментами, круг задач и интересов. Ну и не только.
Питонист может работать на самых разных позициях. Мы рассмотрим следующие:
тестировщик ПО (QA-инженер)
data scientist, аналитик данных
ML-инженер
разработчик ПО, fullstack-разработчик, инженер ПО
системный администратор, DevOps
backend-разработчик
Кстати, если вам близка Data Science, для дата-сайнтистов в моём тг-канале есть море годноты — добро пожаловать. А вот отличная папка каналов по Python, Machine Learning, нейронным сетям и не только.
Тестировщик
Тестировщик, он же QA-инженер (Quality Assurance) — это специалист, который проверяет качество ПО и уровень его соответствия ожидаемым результатам. В своей работе он использует различные инструменты, стратегии тестирования, включается в SCRUM-команды и т.д. Вообще, сфере тестирования очень большая и тестировщики бывают разные: специалисты автоматизированного тестирования, тестировщики СУБД, аналитики тестирования, разработчики-тестировщики, тестировщики-DevOPs и проч. Всё зависит от того, какие скиллы соединяет в себе каждый конкретный специалист.
Если к сути: задача тестировщика — разрушать созданное программистами ПО самыми разными способами, проверяя границы допустимого.
Какие знания/навыки должен иметь тестировщик?
опыт технической поддержки — плотное изучение технологий в сжатые сроки, умение понимать проблемы и быстро сопоставлять их с причинами и путями решения + навыки документирования заявок
основы программирования — SQL, Python, знание других ЯП не помешает
знание методологии Agile, умение встроиться в микро-команды
основы Linux
основы архитектуры ПК
модель OSI и сети (базовое понимание, знание структуры заголовков пакетов и проч.). Практически сразу потребуется свободная работа с утилитой Wireshark
инструменты управления тестированием — Bugzilla, Jira или любой другой багтрекер
selenium — инструмент для автоматизации действий веб-браузера. Очень популярный инструмент тестирования
желательно — понимание стратегий тестирований чёрного, белого, серого ящиков и осознание того, где вы наиболее хорошо применимы как специалист
Также требуется умение проводить тестирование разных видов. Чаще всего ищут кандидатов с навыками функционального тестирования. Другие требования: опыт работы с системой контроля версий Git, умение составлять тест-кейсы.
Простые задачи тестировщика могут выглядеть так:
проверить функциональность логина в приложении и написать баг-репорт о найденных ошибках
протестировать платёжный сервис в интернет-магазине
проверить форму авторизации на сайте (на предмет XSS, SQL-инъекций и похожих штук)
понять, почему не работает «Добавить в корзину»: проблема на стороне клиента или сервера?
План действий тестировщика в целом примерно такой:
получаешь ПО
определяешь необходимый набор тестов
находишь косяки/баги
фиксишь, пока они не закроются
А это пара примеров свежих вакансий на тестировщика с Хабр.Карьеры:
Хабростатья человека, который начал путь в IT с тестировщика — «Как стать Python-разработчиком с нуля»
Подробнее о работе — «Профессия: тестировщик»
Data scientist, аналитик данных
Вообще, в сфере работы с данными есть довольно много всего. Мы рассмотрим из всех этих направлений 2: дата сайнтист и аналитик данных. В чём же между ними разница?
Успешный аналитик данных должен уметь преобразовать данные в удобный ему формат (если упрощённо). То есть он занимается скорее описательным анализом. Для этого желательно знание языков программирования. Де-факто Python, — впрочем, другие языки тоже могут сгодиться (например, R). Кроме того, данные часто содержатся в специализированных хранилищах и для их извлечения необходимо знать соответствующий язык запросов — например, SQL в случае реляционных баз данных. Для представления результатов своей работы используют BI-инструменты, такие как Tableau или DataLens. Ну и важно знать мат. статистику. Из софтов можно упомянуть коммуникабельность, умение презентовать свои выводы и грамотно объяснять сложные технические концепции людям без соответствующего бэкграунда. Если аналитик сделал важное открытие, но не смог его объяснить или убедить в его важности, толку от него мало. И конечно же, важно внимание к деталям и умение думать вне рамок.
Про дата-сайнтиста. DS-специалист занимается исследованием данных при помощи инструментов языка программирования и машинного обучения. Есть обширный класс задач, которые нецелесообразно поручать аналитику-человеку. Например, когда слишком много входных параметров. Или когда закономерность в данных слишком неочевидна, чтобы сходу сформулировать гипотезу (чем с математической точки зрения изображение котика отличается от изображения пёсика?).
Развитие Data Science строится на технологиях машинного обучения и высокопроизводительных статистических моделях. Эти системы помогают Data Scientist определять скрытые паттерны и с высокой точностью прогнозировать развитие событий. В отличие от аналитиков, такие эксперты не получают вопросы снаружи, а сами формируют гипотезы и проверяют полученные результаты. Они определяют неочевидные факторы, которые повлияют на текущую ситуацию.
В работе с данными аналитику данных или DS-специалисту могут пригодиться такие питоновские либы:
NumPy
SciPy
Pandas
StatsModels
Matplotlib/Seaborn/Plotly/Bokeh
Scikit-Learn
PyTorch/Tensorflow
А в решении реальных задач пригодится знание матана, теорвера, статистики, работы с временными рядами. Вот пара вопросов для проверки себя (больше вопросов тут):
Реальные кейсы в сфере Data Science могут выглядеть наподобие (больше кейсов тут)
Заказчик — кредитный отдел банка. Нужно разобраться, влияет ли семейное положение и количество детей клиента на факт погашения кредита в срок. Входные данные от банка — статистика о платёжеспособности клиентов. Результаты исследования будут учтены при построении модели кредитного скоринга — специальной системы, которая оценивает способность потенциального заёмщика вернуть кредит банку.
Вы аналитик компании «Мегалайн» — федерального оператора сотовой связи. Клиентам предлагают два тарифных плана: «Смарт» и «Ультра». Чтобы скорректировать рекламный бюджет, коммерческий департамент хочет понять, какой тариф приносит больше денег. Вам предстоит сделать предварительный анализ тарифов на небольшой выборке клиентов. В вашем распоряжении данные 500 пользователей «Мегалайна»: кто они, откуда, каким тарифом пользуются, сколько звонков и сообщений каждый отправил за 2018 год. Нужно проанализировать поведение клиентов и сделать вывод — какой тариф лучше.
Интервью с дата-сайнтистом — «Валерий Бабушкин - Data Science, карьерный путь, образование»
Несколько примеров вакансий на Data scientist с Хабр.Карьеры:
Заметки Дата Сайентиста: с чего начать и нужно ли оно?
ML-инженер
Ремарка: специалист по машинному обучению может существовать как часть команды Data Science, так и вполне себе отдельно. ML-инженер занимается автоматизацией процесса анализа и структурирования при помощи алгоритмов машинного обучения.
Инженер ML может не только заниматься кластеризацией, классификацией объектов или построением нейронных сетей, но и создавать одни программы с помощью других – например, через генетическое программирование, в ходе которого программы «выращиваются» за счёт отбора лучших для решения той или иной задачи «хромосом».
Машинное обучение применимо в самых разных сферах IT: от алгоритмов умной ленты соцсетей и рекомендаций в интернет-магазинах до систем типа «умный дом» и нейрокомпьютерных интерфейсов, которые позволяют программировать технику, управляемую силой мысли.
Кстати, вот реальный кейс — ML-мидлу сказали разработать приложение, которое:
обрабатывает фото одежды пользователей: очищает фон, улучшает качество изображения, преобразовывает плоское изображение в объемное, распознаёт тип одежды, цвет.
"надевает" одежду самого пользователя (обработанную в п.1) на цифровую модель (фото человека).
"надевает" одежду из интернет-магазинов на цифровую модель.
-
с учетом параметров пользователя: предпочтений, истории покупок, просмотров, введенных пользователем данных:
рекомендует подходящую к одежде пользователя одежду из интернет-магазинов
собирает готовые комбинации одежды из вещей самого пользователя
осуществляет поиск в интернет-магазинах по картинке
А вот подборка реальных применений Machine Learning. И не где-то там, а самом что ни на есть суровом производстве (полный список тут, есть и зарубежные предприятия):
поиск аномалий:
Росатом (Цифрум) — предиктивная аналитика на МСЗ. Иван Максимов [youtube], [medium]
Россети (Mail.ru) — разработка ML-решений: от постановки задачи до эксплуатации [youtube]
РКЦ «Прогресс» — интеллектуальный мониторинг технического состояния станков [youtube]
определение качества продукции:
Микрон и Уралхим (МТС) — как использовать данные на предприятии на примере Микрон и Уралхим. Михаил Матвеев [youtube]
разные другие кейсы:
РКЦ «Прогресс» — интеллектуальный мониторинг технического состояния станков [youtube]
ГПН — применение алгоритмов ML для подавления шумов по несуммированным сейсмическим данным. Даниил Сёмин [youtube]
ГПН (Сколтех) — применение ML для прогнозирования литологии в процессе бурения скважины. Никита Ключников [youtube]
Интервью про работу в сфере ML и нейронных сетей в целом, не с позиции питониста — «Машинное обучение и нейросети / Интервью с техническим директором Яндекс.Дзен»
Как-то вот так выглядят предложения в сфере ML (взято с Хабр.Карьеры):
Разработчик ПО (Software developer)
Alert: тут и далее под разработчиком ПО будем подразумевать Software developer.
Ну тут всё понятно — разработчики ПО воплощают идею программного продукта в жизнь, будь то небольшая утилита или целая корпоративная система. Они проектируют каждый компонент будущего решения и готовят демонстрационные модели для программистов, которые будут писать код. При необходимости разработчик может сам создать какие-то участки программы и протестировать результат. Впоследствии именно он будет следить за корректной работой новых версий ПО и предлагать заказчикам пути дальнейшего развития.
Помимо знания языков программирования, разработчику потребуются аналитические навыки и способность чётко переводить бизнес-задачи в технические материи — понятно, что это касается не джунов, а сеньоров и прочих высокоуровневых ребят.
К слову сказать, сейчас всё реже встречаются вакансии на разработку нативных приложений, всё чаще "Python-разработчик" становится синонимом "Бэкенд разработчик на Python". Оно и понятно: веб всё больше проникает в жизнь, постиндустриальная эпоха, все дела.
При этом Python всё же используется для создания нативных приложений. На питоне написаны такие известные десктопные программы, как BitTorrent, Blender и GIMP.
Разработчику ПО важно ориентироваться в следующем:
алгоритмы и структуры данных
архитектура, шаблоны проектирования
базы данных
параллельное выполнение и синхронизация работы процессов
основы производительности ПО
дебаг и логирование
Так выглядят предложения на рынке разработки десктопных/нативных приложений (с Хабр.Карьера):
Интервью «Lead software engineer Python — Юрий Зайцев»
Для Software developer понимание алгоритмов важно, вот неплохая статья в тему — «Пройти LeetCode за год»
С помощью Python и Flutter можно разрабатывать даже мобильные приложения, вот так — «Flutter на Python».
Или можно использовать фреймворк SimpleUI — «SimpleUI для быстрого создания бизнес приложений на Android».
DevOps
Какие навыки нужны? — Основы администрирования Linux, навыки работы с Docker и Kubernetes, Ansible. Ну и знать Python и Bash, работать с системой контроля версий Git.
Изначально DevOps («development and operations» – разработка и эксплуатация) — это методология взаимодействия разработчиков программного обеспечения, с одной стороны, и системных администраторов — с другой.
В целом, DevOps можно рассматривать, как логическое развитие системного администрирования.
DevOps-инженер решает проблему «развёртывания» ПО, т.е. применения новых программ, предоставленных разработчиками, на конкретных серверах клиента. Также он внедряет системы модернизации, обслуживания, мониторинга и тестирования ПО, определяя оптимальный путь к цели и подбирая необходимые средства. DevOps-специалист призван отвечать за стабильность работы всего программного и аппаратного, именно он должен гарантировать отсутствие простоя персонала и 100% доступность всех сервисов, нужных для коммерческой деятельности. Любой простой, любая дыра в безопасности — это потеря времени и денег компанией, а это никому не нравится. И никто не постесняется среагировать на сбой и потрепать нервы админу. Ладно, не будем о грустном, ведь в целом перед DevOps-инженером стоят интересные задачи. Их список постоянно растёт, вместе с этим повышается ценность профессии.
Простые задания для DevOps-инженера могут звучать так (больше заданий тут)
описать конфигурацию Nginx, где он будет выполнять роль балансировщика c использованием upstream
написать bash скрипт, который будет создавать PostgreSQL бэкап. Для автоматического запуска скрипта создаём запись в Cron
написать скрипт, который будет выполнять проверку состояния диска и, если места меньше чем 85%, то высылать алерт на почту. Для отправки писем прямиком из консоли можно использовать ssmtp клиент
поднять Kubernetes cluster из трёх нод. Сделать первичную конфигурацию и задеплоить в него контейнер
Кстати, вот так выглядит стек DevOps, если мы говорим про основные инструменты и технологии (pdf-версия):
Интервью с DevOps инженером — «DevOps здорового человека / Все пути ведут в кубернетес / интервью с Дмитрием Столяровым»
Вакансии на DevOps-инженера выглядят как-то так (взято с Хабр.Карьера):
Backend-разработчик
Сегодня вся наша жизнь построена на веб-приложениях: мы общаемся с друзьями в соцсетях, переводим деньги через онлайн-банки, находим новую музыку в рекомендательных сервисах. Крупные корпорации создают порталы услуг и даже государственные органы медленно, но верно переходят на цифровые рельсы. Все эти программы нужно кому-то писать, поэтому хорошие веб-разработчики не сидят без дела.
В веб-разработку входит фронтенд и бэкенд, на Python можно делать и то, и другое, но сейчас я всё чаще встречаю, когда на питоне делается только бэк, а за фронт отвечает React.
Бэкенд-разработчик — это программист, который отвечает за внутреннюю и вычислительную логику веб-сайта или веб-приложения, а также иного программного обеспечения и информационных систем. Другими словами, бэкендеры разрабатывают всё то, что не видит и напрямую не трогает пользователь.
Например, красивая форма ввода данных или корзина интернет-магазина — это фронтенд, а хранение данных в СУБД, связка полей формы регистрации и корзины, интеграция с платёжным шлюзом, автоматические письма, подгрузка и обновление контента — это всё бэкенд.
Какие скиллы ожидаются от бэкендера?
знание Python, раз мы говорим о питонистах. А вообще, в бэкенде смогут найти себя любители массы ЯП, бэкенд делается на: PHP, Go, ASP.NET, C/C++, Ruby, Java
понимание азов фронтенда, ведь фронтенд и бэкенд должны образовывать цельный продукт
знание SQL для работы с базами данных, умение проектировать БД
-
знание популярных веб-фреймворков (Django, Flask, CherryPy, Pyramid, FastAPI и других ❋)
❋ некоторые из этих фреймворков морально устарели, но могут встретиться в реальных проектах как легаси
понимание работы сети, знание основ сетевой безопасности
навыки написания юнит-тестов
понимание азов работы серверов Apache, NGINX, IIS и иже с ними
Какие задачи стоят перед бэкендером?
интеграции с разными внешними сервисами
разработка API
создание основной логики работы приложения, его алгоритмов
поддерживание корректной вычислительной логики сайта
работа с базами данных с помощью СУБД
Кстати, вот неплохой план изучения бэкенд-разработки, о нём рассказывается в этом ролике:
Предложения на рынке в сфере бэкенда таковы (с Хабр.Карьера):
Хабростатья в тему — «Python — серьезный язык для разработки backend»
А вот классный пошаговый туториал — «Практическое руководство по разработке бэкенд-сервиса на Python»
Подробная хабростатья о бэкенде изнутри — «Профессия: бэкенд-разработчик»
Полная дорожная карта, чтобы стать лучшим разработчиком Python в 2024 году
The end
Что ж, на этом всё, мы обсудили несколько важных направлений IT, где один из пунктов в описании вакансии — знание Python. Питонист может работать:
тестировщиком ПО
в сфере анализа данных
как ML-инженер
в качестве разработчика нативных/десктопных приложений
как DevOps-инженер
как бэкенд-разработчик
Некоторые из этих направлений более перспективны, но выбирать нужно в первую очередь из собственных предпочтений, послушав нескольких работающих в сфере людей и составив общую картину.
Поделитесь в комментах, кто в какой сфере работает, какие плюсы/минусы в этой области вы нашли, какие направления Python-разработки загнутся через пару лет. Всё это будет интересно почитать, а начинающим должно быть полезно.
Кстати, если вам близка Data Science, для дата-сайнтистов в моём тг-канале есть море годноты — добро пожаловать. А вот отличная подборка каналов по Machine Learning и не только, и ещё. А это полезный канал по Python и Django.