Направо пойдёшь — тестировщиком станешь, налево пойдёшь — ˂...˃: куда податься питонисту?

Привет, Хабр!

В этой статье поговорим о том, какие перспективы есть у питониста и куда ему можно податься.

Кому может быть полезна статья?

  1. тем, кто сейчас активно изучает Python — вы можете добиться большего, если выберете конкретное направление, связанное с питоном, и не будете распыляться на всё подряд

  2. тем, кто наслышался «войти в айти» — посмотрите на реальные занятия, которые ждут, например, питониста и ответьте: «Надо ли вам оно?»

  3. тем, кто уже давно в теме и пишет питонячий код, но хочется попробовать чего-то другого примерно с тем же стеком

  4. ну и ещё неопределённому кругу лиц

Attention: не стоит слепо поклоняться языкам или отдельным технологиям, как замечательно сказано в этой хабростатье. Программист — это чел, который повелевает технологиям, его воле повинуются и плюсы, и питон, и всеми любимый раст. Это я к тому, что не стоит превозносить Python и пытаться пихать его везде — в некоторых местах его нужно без сожаления выкинуть и заменить на более подходящий ЯП. Истина проста:»Не существует идеального ЯП, который покроет все задачи». Не нужно натягивать язык на задачу, нужно выбирать оптимальный для решения задачи язык. Или сменить задачу.

Перед тем, как перейти к разбору разных ответвлений, связанных с Python, давайте освежим азы — в них должен ориентироваться любой питонист. Итак, назвался грибом — полезай в кузовок, питонисту нужно знать всё это:

  • типы данных: числа, строки, списки, множества, кортежи

  • циклы while и for, условия, их комбинации

  • функции, область видимости, lambda, рекурсия, декораторы

  • генераторы

  • вычислительная сложность, операции над структурами данных

  • стандартная библиотека

  • работа с ошибками и исключениями, try-except, raise, assert

  • работа с файлами: чтение, запись, сериализация

  • концепции ООП: полиморфизм, наследование, инкапсуляция

Кстати, кто уверен, что хорошо знает питон — эти 2 хабростатьи бросают вам вызов:»100 вопросов для подготовки к собесу Python», «Кандидат сбежал в слезах»

Знание основ Python — это то, что объединяет разные специализации питонистов. Различает же их знание своих библиотек/фреймворков, владение дополнительными инструментами, круг задач и интересов. Ну и не только.

Питонист может работать на самых разных позициях. Мы рассмотрим следующие:

  • тестировщик ПО (QA-инженер)

  • data scientist, аналитик данных

  • ML-инженер

  • разработчик ПО, fullstack-разработчик, инженер ПО

  • системный администратор, DevOps

  • backend-разработчик

Кстати, если вам близка Data Science, для дата-сайнтистов в моём тг-канале есть море годноты — добро пожаловать. А вот отличная подборка каналов по Machine Learning и не только, и ещё. А это полезный канал по Django.

Тестировщик

03328edb4424130afd55d9f88b369bb8.png

Тестировщик, он же QA-инженер (Quality Assurance) — это специалист, который проверяет качество ПО и уровень его соответствия ожидаемым результатам. В своей работе он использует различные инструменты, стратегии тестирования, включается в SCRUM-команды и т.д. Вообще, сфере тестирования очень большая и тестировщики бывают разные: специалисты автоматизированного тестирования, тестировщики СУБД, аналитики тестирования, разработчики-тестировщики, тестировщики-DevOPs и проч. Всё зависит от того, какие скиллы соединяет в себе каждый конкретный специалист.

Если к сути: задача тестировщика — разрушать созданное программистами ПО самыми разными способами, проверяя границы допустимого.

Какие знания/навыки должен иметь тестировщик?

  • опыт технической поддержки — плотное изучение технологий в сжатые сроки, умение понимать проблемы и быстро сопоставлять их с причинами и путями решения + навыки документирования заявок

  • основы программирования — SQL, Python, знание других ЯП не помешает

  • знание методологии Agile, умение встроиться в микро-команды

  • основы Linux

  • основы архитектуры ПК

  • модель OSI и сети (базовое понимание, знание структуры заголовков пакетов и проч.). Практически сразу потребуется свободная работа с утилитой Wireshark

  • инструменты управления тестированием — Bugzilla, Jira или любой другой багтрекер

  • selenium — инструмент для автоматизации действий веб-браузера. Очень популярный инструмент тестирования

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

Также требуется умение проводить тестирование разных видов. Чаще всего ищут кандидатов с навыками функционального тестирования. Другие требования: опыт работы с системой контроля версий Git, умение составлять тест-кейсы.

Простые задачи тестировщика могут выглядеть так:

  • проверить функциональность логина в приложении и написать баг-репорт о найденных ошибках

  • протестировать платёжный сервис в интернет-магазине

  • проверить форму авторизации на сайте (на предмет XSS, SQL-инъекций и похожих штук)

  • понять, почему не работает «Добавить в корзину»: проблема на стороне клиента или сервера?

План действий тестировщика в целом примерно такой:

  • получаешь ПО

  • определяешь необходимый набор тестов

  • находишь косяки/баги

  • фиксишь, пока они не закроются

А это пара примеров свежих вакансий на тестировщика с Хабр.Карьеры:

035724ba1eeb6aa42ed547c23bc09218.png

Хабростатья человека, который начал путь в IT с тестировщика — «Как стать Python-разработчиком с нуля»

Подробнее о работе — «Профессия: тестировщик»

Data scientist, аналитик данных

Вообще, в сфере работы с данными есть довольно много всего. Мы рассмотрим из всех этих направлений 2: дата сайнтист и аналитик данных. В чём же между ними разница?

Успешный аналитик данных должен уметь преобразовать данные в удобный ему формат (если упрощённо). То есть он занимается скорее описательным анализом. Для этого желательно знание языков программирования. Де-факто Python, — впрочем, другие языки тоже могут сгодиться (например, R). Кроме того, данные часто содержатся в специализированных хранилищах и для их извлечения необходимо знать соответствующий язык запросов — например, SQL в случае реляционных баз данных. Для представления результатов своей работы используют BI-инструменты, такие как Tableau или DataLens. Ну и важно знать мат. статистику. Из софтов можно упомянуть коммуникабельность, умение презентовать свои выводы и грамотно объяснять сложные технические концепции людям без соответствующего бэкграунда. Если аналитик сделал важное открытие, но не смог его объяснить или убедить в его важности, толку от него мало. И конечно же, важно внимание к деталям и умение думать вне рамок.

Про дата-сайнтиста. DS-специалист занимается исследованием данных при помощи инструментов языка программирования и машинного обучения. Есть обширный класс задач, которые нецелесообразно поручать аналитику-человеку. Например, когда слишком много входных параметров. Или когда закономерность в данных слишком неочевидна, чтобы сходу сформулировать гипотезу (чем с математической точки зрения изображение котика отличается от изображения пёсика?).

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

В работе с данными аналитику данных или DS-специалисту могут пригодиться такие питоновские либы:

А в решении реальных задач пригодится знание матана, теорвера, статистики, работы с временными рядами. Вот пара вопросов для проверки себя (больше вопросов тут):

fzt5vssca9slwxhxt9jcq8qhj8i.jpegy27q8n7v5dmcrylpnj-piuib0ik.pngbm65ji7owkvfatroyqe2ittmdhq.png79umr_xkc64cgntnlqdsnwlljpg.png

Реальные кейсы в сфере Data Science могут выглядеть наподобие (больше кейсов тут)

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

  • Вы аналитик компании «Мегалайн» — федерального оператора сотовой связи. Клиентам предлагают два тарифных плана: «Смарт» и «Ультра». Чтобы скорректировать рекламный бюджет, коммерческий департамент хочет понять, какой тариф приносит больше денег. Вам предстоит сделать предварительный анализ тарифов на небольшой выборке клиентов. В вашем распоряжении данные 500 пользователей «Мегалайна»: кто они, откуда, каким тарифом пользуются, сколько звонков и сообщений каждый отправил за 2018 год. Нужно проанализировать поведение клиентов и сделать вывод — какой тариф лучше.

Интервью с дата-сайнтистом — «Валерий Бабушкин — Data Science, карьерный путь, образование»

72012a89c6b56f6cbd8a01229545f099.png

Несколько примеров вакансий на Data scientist с Хабр.Карьеры:

a4530ea566b5d09c8fe8a2b9eaed0206.png

Заметки Дата Сайентиста: с чего начать и нужно ли оно?

ML-инженер

fa827939577005264e2638e7ca3f46c7.jpeg

Ремарка: специалист по машинному обучению может существовать как часть команды Data Science, так и вполне себе отдельно. ML-инженер занимается автоматизацией процесса анализа и структурирования при помощи алгоритмов машинного обучения.

Инженер ML может не только заниматься кластеризацией, классификацией объектов или построением нейронных сетей, но и создавать одни программы с помощью других — например, через генетическое программирование, в ходе которого программы «выращиваются» за счёт отбора лучших для решения той или иной задачи «хромосом».

Машинное обучение применимо в самых разных сферах IT: от алгоритмов умной ленты соцсетей и рекомендаций в интернет-магазинах до систем типа «умный дом» и нейрокомпьютерных интерфейсов, которые позволяют программировать технику, управляемую силой мысли.

Кстати, вот реальный кейс — ML-мидлу сказали разработать приложение, которое:

  1. обрабатывает фото одежды пользователей: очищает фон, улучшает качество изображения, преобразовывает плоское изображение в объемное, распознаёт тип одежды, цвет.

  2. «надевает» одежду самого пользователя (обработанную в п.1) на цифровую модель (фото человека).

  3. «надевает» одежду из интернет-магазинов на цифровую модель.

  4. с учетом параметров пользователя: предпочтений, истории покупок, просмотров, введенных пользователем данных:

    • рекомендует подходящую к одежде пользователя одежду из интернет-магазинов

    • собирает готовые комбинации одежды из вещей самого пользователя

    • осуществляет поиск в интернет-магазинах по картинке

А вот подборка реальных применений Machine Learning. И не где-то там, а самом что ни на есть суровом производстве (полный список тут, есть и зарубежные предприятия):

поиск аномалий:

  • Росатом (Цифрум) — предиктивная аналитика на МСЗ. Иван Максимов [youtube], [medium]

  • Россети (Mail.ru) — разработка ML-решений: от постановки задачи до эксплуатации [youtube]

  • РКЦ «Прогресс» — интеллектуальный мониторинг технического состояния станков [youtube]

определение качества продукции:

  • Микрон и Уралхим (МТС) — как использовать данные на предприятии на примере Микрон и Уралхим. Михаил Матвеев [youtube]

разные другие кейсы:

  • РКЦ «Прогресс» — интеллектуальный мониторинг технического состояния станков [youtube]

  • ГПН — применение алгоритмов ML для подавления шумов по несуммированным сейсмическим данным. Даниил Сёмин [youtube]

  • ГПН (Сколтех) — применение ML для прогнозирования литологии в процессе бурения скважины. Никита Ключников [youtube]

Интервью про работу в сфере ML и нейронных сетей в целом, не с позиции питониста — «Машинное обучение и нейросети / Интервью с техническим директором Яндекс.Дзен»

30288cd1867679d906883ed614145abe.png

Как-то вот так выглядят предложения в сфере ML (взято с Хабр.Карьеры):

28c45ab7668596e9b8a592347ac49966.png

Разработчик ПО (Software developer)

Alert: тут и далее под разработчиком ПО будем подразумевать Software developer.

Ну тут всё понятно — разработчики ПО воплощают идею программного продукта в жизнь, будь то небольшая утилита или целая корпоративная система. Они проектируют каждый компонент будущего решения и готовят демонстрационные модели для программистов, которые будут писать код. При необходимости разработчик может сам создать какие-то участки программы и протестировать результат. Впоследствии именно он будет следить за корректной работой новых версий ПО и предлагать заказчикам пути дальнейшего развития.

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

К слову сказать, сейчас всё реже встречаются вакансии на разработку нативных приложений, всё чаще «Python-разработчик» становится синонимом «Бэкенд разработчик на Python». Оно и понятно: веб всё больше проникает в жизнь, постиндустриальная эпоха, все дела.

6ed38898626887b3545ef57fa759b185.png

При этом Python всё же используется для создания нативных приложений. На питоне написаны такие известные десктопные программы, как BitTorrent, Blender и GIMP.

Разработчику ПО важно ориентироваться в следующем:

  • алгоритмы и структуры данных

  • архитектура, шаблоны проектирования

  • базы данных

  • параллельное выполнение и синхронизация работы процессов

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

  • дебаг и логирование

Так выглядят предложения на рынке разработки десктопных/нативных приложений (с Хабр.Карьера):

e60ca946a7beed340a57a00f8bf60035.png

Интервью «Lead software engineer Python — Юрий Зайцев»

9ea8f81227b63808b3825a312e335150.png

Для 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-версия):

a62cb7e28f49f9f8f4be2df98c0fd36c.png

Интервью с DevOps инженером — «DevOps здорового человека / Все пути ведут в кубернетес / интервью с Дмитрием Столяровым»

db965c45a7600e1883a04997af287106.png

Вакансии на DevOps-инженера выглядят как-то так (взято с Хабр.Карьера):

5583547674df93befa372c6ebb50d1e5.png

Backend-разработчик

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

В веб-разработку входит фронтенд и бэкенд, на Python можно делать и то, и другое, но сейчас я всё чаще встречаю, когда на питоне делается только бэк, а за фронт отвечает React.

Бэкенд-разработчик — это программист, который отвечает за внутреннюю и вычислительную логику веб-сайта или веб-приложения, а также иного программного обеспечения и информационных систем. Другими словами, бэкендеры разрабатывают всё то, что не видит и напрямую не трогает пользователь.

0727103526c0c86689698e093858ae5a.jpg

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

Какие скиллы ожидаются от бэкендера?

  • знание Python, раз мы говорим о питонистах. А вообще, в бэкенде смогут найти себя любители массы ЯП, бэкенд делается на: PHP, Go, ASP.NET, C/C++, Ruby, Java

  • понимание азов фронтенда, ведь фронтенд и бэкенд должны образовывать цельный продукт

  • знание SQL для работы с базами данных, умение проектировать БД

  • знание популярных веб-фреймворков (Django, Flask, CherryPy, Pyramid, FastAPI и других ❋)

    некоторые из этих фреймворков морально устарели, но могут встретиться в реальных проектах как легаси

  • понимание работы сети, знание основ сетевой безопасности

  • навыки написания юнит-тестов

  • понимание азов работы серверов Apache, NGINX, IIS и иже с ними

Какие задачи стоят перед бэкендером?

  • интеграции с разными внешними сервисами

  • разработка API

  • создание основной логики работы приложения, его алгоритмов

  • поддерживание корректной вычислительной логики сайта

  • работа с базами данных с помощью СУБД

Кстати, вот неплохой план изучения бэкенд-разработки, о нём рассказывается в этом ролике:

f8a011f4c3e5681c691c93c046899688.png

Предложения на рынке в сфере бэкенда таковы (с Хабр.Карьера):

6a55feb709a6763f95e217c18e78fcb1.png

Хабростатья в тему — «Python — серьезный язык для разработки backend»

А вот классный пошаговый туториал — «Практическое руководство по разработке бэкенд-сервиса на Python»

Подробная хабростатья о бэкенде изнутри — «Профессия: бэкенд-разработчик»

The end

Что ж, на этом всё, мы обсудили несколько важных направлений IT, где один из пунктов в описании вакансии — знание Python. Питонист может работать:

  • тестировщиком ПО

  • в сфере анализа данных

  • как ML-инженер

  • в качестве разработчика нативных/десктопных приложений

  • как DevOps-инженер

  • как бэкенд-разработчик

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

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

Кстати, если вам близка Data Science, для дата-сайнтистов в моём тг-канале есть море годноты — добро пожаловать. А вот отличная подборка каналов по Machine Learning и не только, и ещё. А это полезный канал по Django.

© Habrahabr.ru