Разработка программного обеспечения

Материал из Изи Вики
Версия от 23:14, 10 февраля 2023; AE (обсуждение | вклад) (Как устроиться на работу)

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

Объясните простыми словами, пожалуйста

Разработчики выкатывают приложение в продакшн

Почему программистов называют разработчиками? 🤔

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

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

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

Что объединяет журналистов и разработчиков программ?

  • ⚒️ Они должны использовать профессиональные инструменты индивидуальной и командной работы.
  • 🚯 Они должны соблюдать производственные стандарты.
  • 👪 Они должны эффективно работать в команде по правилам (методологиям).
  • 📅 Они должны понимать, что делает и зачем. Работать на результат и соблюдать сроки.
  • 💎 Они должны писать качественно, простым понятным языком.
  • 🚑 Они должны помогать коллегам.
  • 🫡 Они должны выполнять требования редактора (руководителя проекта).

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

А если серьезно

Из чего состоит разработка ПО

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

  • Идея — с чего всё начинается. Обычно это предложение по решению конкретной проблемы.
  • Продуктовый анализ — это проверка идеи на адекватность: анализ конкурентов, опросы пользователей, оценка экономических показателей (затраты, прибыль и т.п.).
  • Системный анализ — сбор требований и их документирование в виде технического задания.
  • Проектирование — один из важнейших этапов, здесь происходит выбор технологий и инструментов. Прорабатываются модели процессов и модели данных.
  • Планирование — оценка трудозатрат и календарных сроков.
  • Программирование — написание исходного кода программ на определенных языках программирования.
  • Код-ревью (code review) — проверка исходного кода программы другим более опытным разработчиком.
  • Тестирование — проверка, что программа удовлетворяет требованиям. В крупных компаниях, тестирование является частью отдельного направления контроля качества (QA)
  • Документирование — состоит из документирования исходного кода, документирования API (описания того как программа будет взаимодействовать с другими программами), подготовки документации для пользователей
  • Релиз (release) — «запуск в печать». Доставка приложения или результатов его работы конечным пользователям.
  • Сопровождение — исправление багов и доработки.

Кто участвует в разработке ПО

Набор необходимых специалистов отличается от проекта к проекту. Но можно выделить такие основные направления:

  • Менеджмент — отвечает за организацию процессов
  • Коммерсанты — отвечают за продажи и удержание клиентов
  • Аналитики — решают сложные проблемы
  • Разработчики — программируют
  • Тестировщики — тестируют
  • Сисадмины — обслуживают

Пример структуры IT-компании среднего размера:

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

  • Ключевые директора (Executive team)
    • Генеральный директор (Chief Executive Officer / CEO) — главный босс
    • Операционный директор (Chief Operating Officer / COO) — налаживает взаимодействие между отделами
    • Финансовый директор (Chief Financial Officer / CFO) — отвечает за то, чтобы у компании не закончились внезапно деньги
    • Технический директор (Chief Technology Officer / CTO) — главный по IT
  • Отдел развития бизнеса (Business development / BD) — глобальная стратегия и планы развития компании
    • Бизнес-аналитика (Business Intelligence / BI)
      • Аналитик данных (Data Analyst) — извлекает из «бесполезных» данных полезный результат, который используется другими специалистами
    • Другие отделы, отвечающие за стратегические партнерства, планирования, анализ процессов внутри компании
      • Бизнес аналитики, координаторы и прочие менеджеры — делают компанию лучше и эффективнее
  • Коммерческий отдел (Commercial department) или — увеличение доходов, работа с клиентами
    • Обслуживание клиентов (Customer Service) — работа на удержание клиентов
      • Аккаунт менеджер (Account manager) — индивидуальная работа с ключевыми клиентами
    • Отдел продаж (Sales)— поиск новых клиентов
    • Маркетинг (Marketing) — продвижение бренда компании и его IT продуктов
  • Продуктовый отдел (Product Management) — рост компании через улучшение выпускаемых IT продуктов и разработку новых
    • Менеджер продукта (Product Manager) — отвечает за работу продуктовой команды и определяет стратегию развития продукта
    • Продуктовый аналитик (Product Analyst / PA) — думает, как сделать хорошо пользователям продукта
    • Системный аналитик (Systems Analyst) — формализует требования, пишет технические задания.
    • UI / UX Дизайнер (User Interface / User Experience Designer) — создает визуальные прототипы продукта и сценарии взаимодействия
    • Владелец продукта (Product owner / PO) — собирает итоговые задачи и приоритеты, делит их на проекты, передает их в работу в рамках методологии Agile
    • Менеджер проекта (Project Manager / PM) — собирает команду для проекта и отвечает за его выполнение
  • Отдел разработки (Development) — отдел, где и работают разработчики (программисты)
    • Руководитель отдела разработки (Development Director) — начальник всех разработчиков
    • Системный архитектор (System Architect) — отвечает за базовую архитектуру программного обеспечения
    • Тимлид (Development Team Lead) — руководит командой разработчиков
    • Разработчик (Developer) — тот кто непосредственно программирует
  • Обеспечение качества (Quality Assurance / QA)
    • Инженер по качеству (QA Engineer) — отвечает за качество в целом
    • Тестировщик (Tester) — проверяет наличие багов
    • Инженер по автоматизации (Automation Engineer) — создает автотесты
    • Тестер по производительности (Performance Tester) — проверяет, как хорошо приложения держат нагрузку
    • Тестер по информационной безопасности (Security Tester) — тестирует приложения на проблемы по ИБ
  • DevOps — связующее звено между разработкой (Dev) и обслуживанием (Ops)
    • Инженер по инфраструктуре (Infrastructure Engineer) — из набора серверов, сетей и сервисов проектирует единую надежную систему
    • Инженер по надежности (Site Reliability Engineer / SRE) — отвечает за масштабируемость и высокую производительность приложений
    • Девопс инженер (DevOps Engineer) — отвечает за автоматизацию процессов сборки и доставки приложений на сервера
    • Инженер по конфигурации (Configuration Management Engineer) — работает с ПО для управления параметрами приложений
    • Релиз инженер (Release Engineer) — непосредственно запускает приложения в продакшн
    • Инженер по мониторингу и логам (Monitoring and Logging Engineer) — работает с ПО для отслеживания показателей работы приложений
  • Эксплуатация (IT Operations) — обслуживание IT продукта, инфраструктуры и поддержка пользователей
    • Руководитель эксплуатации (IT Operations Manager) — руководитель направления.
    • Менеджер внедрений (Implementation Manager) — отвечает за поставку продукта новым клиентам, первичную настройку и поддержку, обучение клиента
    • Специалист службы поддержки (Help Desk / Support Technician) — обработка входящих обращений от пользователей и решение простых проблем.
    • Технический аналитик (Technical Analyst) — решает сложные технические и технологические проблемы
    • Системное администрирование
      • Системный администратор (System Administrator) — установка, настройка и обслуживание ПО.
      • Сетевой администратор (Network Administrator) — отвечает за сетевую инфраструктуру.
      • Администратор баз данных (Database Administrator / DBA) — отвечает за работу баз данных.
      • BC/DR Специалист (Disaster Recovery / Business Continuity Specialist) — готовит планы аварийного восстановления и отвечает за бэкапы (резервные копии).
  • Информационная безопасность (InfoSec) — защита от взломов и утечек данных
    • Директор по ИБ (Chief Information Security Officer / CISO) — руководитель направления.
    • Архитектор ИБ (Security Architect) — отвечает за стратегию, политики, процедуры.
    • Инженер ИБ (Security Engineer) — отвечает за внедрение инструментов обеспечения ИБ (сетевые экраны, антивирусы, системы обнаружения вторжений, системы шифрования данных)
    • Аналитик ИБ (Security Analyst) — следит за ситуаций, документирует и разбирает инциденты
    • Пентестер (Penetration Tester) — пытается всё сломать, чтобы проверить надежность
    • Комплаенс офицер (Compliance Officer) — контролирует выполнение международных стандартов по ИБ (GDPR, PCI DSS, ISO 27001)
    • Тренер по ИБ (Security Educator) — обучает всех в компании, как не косячить по ИБ
  • Финансовый отдел (Finance) — бухгалтеры, финансовые аналитики
  • Юридический отдел (Legal department) — юристы
  • Управление персоналом (Human Resources / HR) — найм сотрудников и удержание уже нанятых

Как устроиться на работу в IT компанию

Рекомендации:

  1. Определите интересные для вас предметные области: например финансы, туризм, компьютерные игры.
  2. Определите интересные и подходящие для вас направления работы: программирование, тестирование, аналитика, менеджмент и т.п.
  3. Найдите вакансии IT компаний, которые соответствуют вашим навыкам, интересам и опыту, изучите требования.
  4. Пройдите базовое или дополнительное обучение по выбранному направлению, самостоятельно или с помощью курсов.
  5. Налаживайте полезные связи — общайтесь на форумах и чатах. Посещайте тематические мероприятия.
  6. Обновите свое резюме, чтобы оно соответствовало требованиям интересующих вас IT-компаний, укажите свой опыт и навыки.
  7. Разместите свое резюме на сайтах поисков работы и откликайтесь на вакансии. Обязательно заполняйте к отклику сопроводительное письмо.
  8. Подготовьтесь к собеседованию: изучите информацию о компании, попрактикуйтесь в ответах на общие вопросы, будьте готовы ответить на технические вопросы.
  9. Пройдите собеседование и получите предложение о трудоустройстве.
  10. Продолжайте обучаться для дальнейшего карьерного роста.

Что вас ожидает дальше

Если вы стали разработчиком, вам придется продолжать всё время учиться для профессионального роста.

Профессиональные уровни разработчиков (грейды)
Название Стажер Junior Middle Senior
Высшее IT образование Не требуется Не требуется Желательно Очень желательно
Как оценивает свои знания и навыки Недооценивает Часто переоценивает себя Оценивает себя правильно Недооценивает себя
Опыт работы разработчиком Нет От 0 до 2х лет Обычно больше 2х лет Обычно больше 5 лет
Самообучение Учится постоянно Учится постоянно Учится постоянно Учится постоянно
Учит других Нет Обычно нет Учит стажеров и младших разработчиков Учит всех
Ключевой софт-скилл Обучаемость и инициативность Работа в команде Работа на результат Ответственность
Выполненные проекты Небольшие учебные проекты Небольшие проекты для себя Небольшие бизнес проекты Есть опыт запуска крупных проектов
Участие в Open Source Активное (имитация) Нет времени Нет времени Нет времени, но надо
Системный анализ (сбор требований) Что это? Нет Обучение Может принимать участие
Участие в проектировании Что это? Нет Обучение Активная работа
Сколько языков программирования знает 0 Один, но в резюме указывает больше Обычно один хорошо и несколько хуже. Честно об этом говорит. Понимает, что знает мало языков программирования.
Знание языков программирования Обучение Знает и умеет писать код самостоятельно Знает особенности и подводные камни Следит за развитием языков программирования
Программирование Учебные задачи Простые бизнес задачи Все задачи Может решать сложные задачи оптимальным способом
Качество Нет Много багов Мало багов Мало багов
Фреймворки Обучение Знает в теории Активно использует Экспертный уровень
Шаблоны проектирования Не понимает Знает теорию Умеет применять Активно применяет
Парадигмы программирования Что это? Нет Обучение Знает и понимает
Методологии разработки Что это? Обучение Соблюдает Внедряет
Автотесты Что это? Обучение Умеет писать Понимает почему надо писать
Код-ревью Что это? Нет Да, но немного Перепроверяет чужого кода больше, чем пишет сам
Документирование кода Нет Да Да Да
Поддержка выпущенных продуктов Нет Простые багфиксы и доработки Сложные багфиксы и доработки Задачи по оптимизации, устранение технического долга
Отношение к информационной безопасности Нет Зачем это всё? Обучение на ошибках Считает очень важным
Отношение с проектными менеджерами Кто это? Обычно негативное Нейтральное Командная работа