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

Версия от 15:33, 5 февраля 2023; AE (обсуждение | вклад) (Переработка страницы, начало)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Ключевые директора (Executive team)
    • Генеральный директор (Chief Executive Officer / CEO)
    • Операционный директор (Chief Operating Officer / COO)
    • Финансовый директор (Chief Financial Officer / CFO)
    • Технический директор (Chief Technology Officer / CTO)
  • Отдел развития бизнеса (Business development / BD) — глобальная стратегия и планы развития компании
    • Бизнес-аналитика (Business Intelligence / BI)
      • Аналитик данных (Data Analyst) — извлекает из «бесполезных» данных полезный результат, который используется другими специалистами
    • Другие отделы, отвечающие за стратегические партнерства, планирования, анализ процессов внутри компании
      • Бизнес аналитики, менеджеры, координаторы — работают над тем, как сделать хорошо компании
  • Коммерческий отдел (Commercial department) или — увеличение доходов, работа с клиентами
    • Обслуживание клиентов (Customer Service)
      • Аккаунт менеджер — индивидуальная работа с ключевыми клиентами
    • Отдел продаж — поиск новых клиентов
    • Маркетинг — продвижение бренда компании и его IT продуктов
  • Продуктовый отдел (Product Management) — рост компании через улучшение выпускаемых IT продуктов и разработку новых
    • Менеджер продукта (Product Manager) — отвечает за работу продуктовой команды и определяет стратегию развития продукта
    • Продуктовый аналитик (Product Analyst / PA) — думает, как сделать хорошо пользователям продукта
    • Системный аналитик (Systems Analyst) — формализует требования, пишет технические задания.
    • UI / UX Дизайнер — создает визуальные прототипы продукта и сценарии взаимодействия
    • Владелец продукта (Product owner) — собирает итоговые задачи и приоритеты, делит их на проекты, передает их в работу в рамках методологии 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
    • DevOps Engineer
    • Release Engineer
    • Site Reliability Engineer (SRE)
    • Infrastructure Engineer
    • Configuration Management Engineer
    • Monitoring and Logging Engineer
  • Эксплуатация (IT Operations) — обслуживание IT продукта, инфраструктуры и поддержка пользователей
    • Руководитель эксплуатации (IT Operations Manager) — руководитель направления.
    • Отдел внедрений (Implementation Department) — отвечает за поставку продукта новым клиентам, первичную настройку и поддержку, обучение клиента
    • Служба поддержки
      • Специалист службы поддержки (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)
  • Управление персоналом (Human Resources / HR)



Как стать разработчиком

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

Для того, чтобы стать разработчиком необходимо:

  1. Проверьте, что вам нравится программировать. Начать можно с компьютерных игр про программирование. Ищете, выбирайте, пробуйте. Если вам это интересно и это «затягивает», можно двигаться дальше.
  2. Выберите интересное для вас направление. Для новичков без IT образования подойдут мобильная разработка и разработка веб-приложений (frontend или backend). Не торопитесь на данном этапе, изучите каждое из трех направлений и выберите подходящее.
  3. Выберите один язык программирования по интересующему направлению. Рекомендуется JavaScript для фронтенд направления, Python для бэкенд, Kotlin / Swift для мобильной разработки.
  4. Начните изучение с бесплатных материалов и недорогих курсов. Если понимаете — «это оно», можно продолжать. Если идет «через силу», надо пробовать другие варианты.
  5. Изучите выбранный язык программирования, на уровне решения простых задач. Важно писать код алгоритмов самостоятельно «без копирования готовых решения из гугла».
  6. Освойте профессиональные инструменты работы. Минимальный набор — это инструменты работы с исходным кодом: git и IDE. Плюс у каждого направления разработки есть свои дополнительные.
  7. Выполните минимум один pet-проект (учебный проект) и выложите его код в открытый доступ.
  8. Разместите резюме и откликайтесь на вакансии стажера (подойдут бесплатное обучение или работа за минимальную зарплату). Остерегайтесь мошенников, обещающих высокие зарплаты без опыта работы.
  9. Пройдите собеседование и устройтесь на стажировку.
  10. Продолжайте искать работу, откликайтесь на вакансии младших (junior) разработчиков.

Важно! Если вам не интересно программировать, посмотрите в сторону других профессий в IT. Для начального уровня подойдут направления: тестировщики, аналитики, сотрудники технической поддержки.

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

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

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