кто такой разработчик?

Разработчик — специалист, который создает программы разного назначения: сайты, мобильные приложения, сервисы, игры, программы для обработки данных — всё, с чем мы с вами сталкиваемся в digital-пространстве каждый день.
Обычно в задачи разработчика входит:
  • Участие в создании структуры приложения/программы/продукта, его возможностей и функций.
  • Создание интерфейса (внешний вид) и настройка внутренней логики.
  • Написание кода на одном из языков программирования.
  • Поиск и исправление ошибок, обновление программ.
  • Подготовка технической документации для других специалистов и пользователей.
Внутри профессии разработчика существует много направлений, мы выделили основные. У каждого есть свой стек — набор технологий, на основе которых разработчик создаёт проект или продукт. В зависимости от компании и продукта стек может меняться, мы указали базовый набор.
Frontend-разработчики

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

базовый стек
  • Языки: CSS, HTML, JavaScript
  • JavaScript библиотека React
  • Сборщик модулей Webpack
  • Препроцессоры SASS/LESS
Backend-разработчики

Отвечают за «внутреннюю» — серверную, программно-административную часть, которую не видит пользователь. Например, когда вы регистрируетесь на каком-либо сайте, ваши данные попадают в базу — сам процесс вы не видите, но теперь знаете, что за него отвечают backend-разработчики.

базовый стек
  • Языки: Python, Java, Go, Ruby, C++, PHP
  • Базы данных: MySQl, PostgreSQL и NoSQL
  • Фреймворк: Node.js
Full-Stack разработчики

Это те, кто изучает обе «стороны» проекта, полный цикл. Такой разработчик владеет разными языками программирования и технологиями и может в одиночку создать сайт.

Мобильные разработчики

Те, которые делают приложения для мобильных устройств: для телефонов, GPS-навигаторов, умных часов, электронных книг. В крупных компаниях мобильная разработка внутри также делится на Backend и Frontend. Но в большинстве случаев мобильные разработчики изучают полный цикл создания приложения и могут работать с любой частью проекта — и с интерфейсом, и с внутренней логикой приложения.

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

Занимаются приложениями для мобильных устройств под управлением ОС Android.

базовый стек

Java, Kotlin, OpenGL, Android SDK

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

Занимаются приложениями для мобильных устройств под iOS (ОС для устройств Apple).

базовый стек

Objective-C, Swift, CoreData, CoreGraphics, OpenGL, Cocoa Touch

Стек для создания кроссплатформенных мобильных приложений — то есть как на Android, так и на iOS:
  • React Native, Redux
  • Flutter, Dart
DevOps-инженер

DevOps — это методика повышения качества программного обеспечения, а DevOps-инженер использует ее для синхронизации всех этапов создания ИТ-продукта и совмещает в себе разработчика, тестировщика, менеджера и сисадмина. Он контролирует и автоматизирует работу разработчиков и других ИТ-специалистов, которые связаны с продуктом.

базовый стек
  • Языки: Perl, Ruby, Python, С++
  • Cloud Automation: Azure, GCP, Alibaba
  • ПО для автоматизации: Docker, Jenkins, Puppet
Разработчики баз данных

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

Самые популярные системы учета в России и СНГ — это продукты компании «1С». Поэтому выделяют отдельное направление разработчиков — программистов 1С, которые внедряют и сопровождают программы 1С в организациях, устанавливают и настраивают, дорабатывают и обновляют их.

Базовый стек для программиста 1С
  • Типовые и нестандартные конфигурации 1С, конфигурации программы в компании («Предприятие», «Управление торговлей», «Бухгалтерия», «Зарплаты и кадры» и другие.)
  • Язык запросов 1С, SQL
  • Базы данных T-SQL
Разработчики видеоигр

Те, кто занимаются разработкой игр с нуля, а также поддержкой, исправлением багов и другими обновлениями. Обычно Game-разработчики делятся на специализации: разработка десктопных, мобильных игр и MMORPG (ролевых онлайн-игр, где много пользователей).

базовый стек
  • Языки: C/С++, С#, Java
  • Движки для отрисовки графики Open GL/DirectX
  • Игровые движки: Unity, Unreal Engine, Torque
T-shaped специалист.
Необязательно выбирать и погружаться с головой только в одно направление — можно развиваться сразу в нескольких. Так вы станете T-shaped специалистом.
Концепция Т-образных навыков — это метафора для описания способностей ИТ-специалистов разного профиля. Вертикальная черта на букве T представляет собой глубокую, но узкую экспертизу в одной из областей разработки. Тогда как горизонтальная линия — это черта дженералиста. Это значит, что вы глубоко погружены в одно направление, но при этом обладаете базовыми навыками других направлений — например, вы frontend-разработчик с навыками тестирования. Такой подход к развитию сотрудников применяем мы в QIWI — помогаем осваивать навыки разных направлений и растим Продуктовых разработчиков.

Продуктовый разработчик — пример T-shaped специалиста

Продуктовый разработчик (ПР) находится посередине между программистом и продакт-менеджером (это специалист, который управляет работой команды разработки, следит за метриками и делает всё, чтобы сам продукт и результаты стали лучше).
Работа ПР не заканчивается на написании кода. Он также заботится и о пользовательском опыте — предлагает гипотезы, как можно сделать условное приложение еще удобнее и эффективнее.
То есть он настолько хорошо понимает продукт, что может с технической точки зрения помогать продактам достигать целей и предлагать варианты, как проверить гипотезу минимальными средствами. А после проверки, если гипотеза подтвердилась, обновляет продукт и внедряет фичи.

Здесь к базовому стеку добавляются другие навыки:
  1. Анализ и сбор обратной связи от аудитории продукта (CustDev)
  2. Проверка гипотез и проведение тестирования (A/B и A/A тестирование)
  3. Планирование работы команды и приоритизация задач
Так, выбрав работу разработчиком в QIWI, вы будете не только исполнителем, но и полноценным создателем продукта — сможете напрямую влиять на его развитие.

Куда расти

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

Карьеру по вертикали можно разделить на 4 основных уровня. Важно не забывать, что срок перехода с уровня на уровень индивидуален и условен. То, насколько быстро вы будете развиваться, сильно зависит в первую очередь от вас самих, а также от компании и способов определения уровня внутри неё.

Опыт работы: без практического опыта

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

Как идти дальше

Самый простой способ перейти отсюда на следующий уровень — пройти стажировку. Многие ИТ-компании регулярно набирают к себе студентов и выпускников, чтобы «вырастить» крутых специалистов.
Либо второй вариант — работать над личным pet-проектом, который можно будет добавить в портфолио

Опыт работы: ≈1 год

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

Пример задачи

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

Как идти дальше

Не бояться брать на себя больше ответственности, обращаться к наставнику в компании или внешнему ментору.

Опыт работы: ≈3 года

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

Пример задачи

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

Как идти дальше

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

Опыт работы: 5+ лет

Синьор — это программист высшей квалификации. Он глубоко понимает структуру проекта, фреймворков и инструментов разработки. Может заранее предвидеть, как в будущем изменится проект и как его оптимально поддерживать. Выполняет всё, что делает мидл, только быстрее и «чище», и разрабатывает архитектуру новой программы или сайта.

Пример задачи

Разработать и запустить новое мобильное приложение. Для того чтобы это приложение было создано, потребуются и другие специалисты, поэтому синьор должен обладать навыками руководителя: видеть цель, объяснять её подчинённым и вдохновлять их, обучать и проконтролировать, проводить работу над ошибками.

А что дальше?

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

Если двигаться в сторону руководителя
Тимлид

Лидер команды разработки. Пocтoяннo oбщaeтcя c paзpaбoтчикaми, мeнeджepaми и кoллeгaми из дpyгиx oтдeлoв. Необходим, ecли в кoмaнде проектов бoльшe 5 чeлoвeк, oт кoтopыx нужны эффeктивнocть и пpoдyктивнocть.

CTO

Отвечает за стратегию технологического развития компании и руководит всем техническим блоком

Если двигаться в сторону эксперта
Техлид

Один из самых опытных сотрудников, отвечающий за «чистоту» кода. Он нe тoлькo caм пишeт его, нo и зaнимaeтcя пpopaбoткoй pиcкoв и oбyчaeт дpyгиx coтpyдникoв.

ИТ-архитектор

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

Горизонтальный рост

Первый вариант — двигаться внутри разработки, меняя направления

Frontend
Backend
Веб-разработка
Мобильная разработка
Android
iOS

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

Отдельно хочется выделить переход из Front/Back/Mobile в Game-разработку. Здесь всё сложнее. Работа с игровыми движками и движками для графики сильно отличается от работы в вебе или мобильной разработки.

Второй вариант — смена профессии
Здесь представлены специалисты, с которыми вы уже будете работать в команде, будучи разработчиком. В эти сферы легче всего перейти из разработки.

Product-менеджер
Project-менеджер
Дизайнер

Скиллы

Харды для джуна
  • Знание одного из основных языков программирования на базовом уровне (циклы, условия, типы данных, объекты, массивы, примитивы, аргументы)
  • Базовое знание фреймворка у изучаемого ЯП
  • Понимание принципов ООП (объектно-ориентированного программирования) и паттернов проектирования
  • Понимание основных алгоритмов и структур данных
  • Умение работать с Linux, HTTP и REST API на базовом уровне
  • Знание баз данных и понимание запросов к ним
  • Знание основ использования Git (инициализация репозитория, индексация файлов, создание коммитов, пушей, веток)
  • Навык писать чистый код, передавать его на ревью и исправлять ошибки
  • Базовое владение английским языком
  • Умение решать алгоритмические задачи (Leetcode, Codewars, TopCoder/Codeforces, Project Euler) без использования среды разработки
  • Понимание принципов создания баз данных и знание SQL
Софты для джуна
Софт скилы не связаны с конкретной профессией, но позволяют выстраивать успешную карьеру — эффективно общаться, решать конфликты, работать в команде. Вот такие «гибкие навыки» требуются junior-разработчику, чтобы преуспеть:
Умение работать с информацией
В эпоху доступности интернета, многознание теряет свою самоценность. Кроме того, знания быстро устаревают. Гораздо важнее уметь быстро находить информацию, анализировать ее, выбирать самое главное и делать выводы. Джуниор сталкивается на работе с огромным потоком новой информации, умение ей оперировать быстро и эффективно — очень важный навык.
Коммуникативные навыки
На первых порах джуниор требует пристального внимания ментора, у которого, к тому же, есть и другие рабочие задачи. Джуниору важно уметь «разговаривать» — задавать правильные вопросы, вовремя сообщать о возникающих проблемах, аргументировать свою точку зрения.
Работа в команде
В российском ИТ долгое время существовал романтический образ индивидуального контрибьютора, человека, который взял и «запилил все сам». Действительно, некоторые проекты создаются талантливыми одиночками. Большинство же компаний уже признают важность и силу командной работы. В слаженной команде рождается синергия, команда — это больше, чем сумма входящих в нее людей. Крутые команды создают крутые продукты.

Словарик разработчика

Фича
Дополнительная функция или особенность продукта
Скоуп
Набор фич, закрепленный за отдельной командой.
Флоу
Порядок действий при работе над какой-либо задачей.
Баг
Проблема, из-за которой программа зависает или выдает неверный результат. Большинство багов появляется из-за ошибок в коде.
Дебажить
Находить и исправлять ошибки в коде.
Код ревью (Code Review)
Проверка кода на ошибки (баги) и общий стиль программирования — стиль и оформление кода определяется самой компанией. Ревью обычно делает коллега более старшего уровня.
Стек
Набор технологий, который использует команда для разработки продукта.
Фреймворк
Готовая модель для быстрой разработки, на основе которой можно дописать собственный код.
Фреймворк задает структуру, определяет правила и предоставляет необходимый набор инструментов для создания проекта. В основном фреймворки используются в веб-разработке.
Легаси (legacy)
Устаревший код, который достался команде разработки «по наследству». Его используют, но не обновляют.
Спринт

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

Основные этапы спринта:

  • Совместное определение задач и целей
  • Фиксация задач в бэклоге
  • Ежедневные стендапы команды, работа с поставленными задачами
  • Релиз, тестирование и ревью того, что релизнули
  • Обзор итогов
  • Ретроспектива — анализ возникших за время этого спринта проблем и планирование следующих шагов
Бэклог
Упорядоченный и постоянно обновляемый список всего, что планируется сделать для создания и улучшения продукта.
Дейли
Регулярные короткие встречи команды, на которых делятся результатами выполнения задач и рассказывают про ближайшие планы.
Архитектура
Скелет и многоуровневая инфраструктура внутреннего устройства программной системы.
Код-стайл
Общий стиль написания в компании, который соблюдается всеми разработчиками.
Open source
Программное обеспечение с открытым исходным кодом.
CI/CD
Непрерывная интеграция (Continuous Integration) и непрерывная поставка (Continuous Delivery) представляют собой набор принципов и практик, который позволяет разработчикам чаще и надежнее развертывать изменения программного обеспечения.
Документация
Набор инструкций и правил — кто за что в команде отвечает, какие инструменты используются и как.
ЯП
Сокращение от «язык программирования»
ПМ
Сокращение от «продакт-менеджер»
ПР
Сокращение от «продуктовый разработчик»

Плюсы и минусы работы

плюсы
  • Востребованность
  • Высокая оплата
  • Удалённая работа и выгодные условия от компаний (необходимая техника как минимум)
минусы
  • Высокая конкуренция на старте после обучения
  • Достаточно рутинный процесс работы
  • Знания и навыки быстро устаревают, так как сфера постоянно меняется
  • Работа «за кадром», итог работы презентуют другие специалисты
  • Сложно глобально влиять на продукт и стратегию его развития, пока занимаешься операционной работой (если вы не продуктовый разработчик)
Вам здорово подойдёт профессия, если
  • У вас аналитический склад ума
  • Вы усидчивы и не боитесь рутины, хотя при этом готовы искать новые неочевидные решения
  • Постоянно изменяющиеся условия и необходимость постоянно учиться новому для вас скорее плюс, чем минус

Полезные ресурсы для развития в профессии

книги
5
Чистый код
Чистый код
Роберт Мартин
Изучаем Python
Изучаем Python
Марк Лутц
Введение в системы баз данных
Введение в системы баз данных
Кристофер Дейт
PHP 7
PHP 7
Дмитрий Котеров
JavaScript для профессионалов
JavaScript для профессионалов
Джон Резиг
блоги и статьи
3
подкасты
6
workfreshgameyoufirestarcomp
софт
Бесплатный онлайн-курс для студентов любых направлений о том, как начать карьеру в ИТ.
Хочу в #софткомьюнити