Привет, Хабр!
В этой статье поговорим о том, какие перспективы есть у питониста и куда ему можно податься.
Кому может быть полезна статья?
- тем, кто сейчас активно изучает 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.
 
          