Разработка программного обеспечения: различия между версиями
AE (обсуждение | вклад) (Переработка страницы, начало) |
AE (обсуждение | вклад) (Оптимизация размера) |
||
Строка 42: | Строка 42: | ||
=== Кто участвует в разработке ПО === | === Кто участвует в разработке ПО === | ||
Набор необходимых специалистов отличается от проекта к проекту. Но можно выделить такие основные направления: | Набор необходимых специалистов отличается от проекта к проекту. Но можно выделить такие основные направления: | ||
* Менеджмент — отвечает за организацию процессов | |||
* Коммерсанты — отвечают за продажи и удержание клиентов | |||
* Аналитики — решают сложные проблемы | |||
* Разработчики — программируют | |||
* Тестировщики — тестируют | |||
* Сисадмины — обслуживают | |||
<div class="mw-collapsible mw-collapsed"> | |||
Пример структуры IT-компании среднего размера (нажмите «развернуть» справа): | |||
<div class="mw-collapsible-content"> | |||
'''Структура IT компаний может сильно различаться в зависимости от размера, предметной области работы, количества клиентов. Здесь показан пример усредненный продуктовой IT компании, то есть компании, самостоятельно разрабатывающей и обслуживающей приложения для решения определенных задач.''' | |||
* Ключевые директора (Executive team) | * Ключевые директора (Executive team) | ||
** Генеральный директор (Chief Executive Officer / CEO) | ** Генеральный директор (Chief Executive Officer / CEO) — главный босс | ||
** Операционный директор (Chief Operating Officer / COO) | ** Операционный директор (Chief Operating Officer / COO) — налаживает взаимодействие между отделами | ||
** Финансовый директор (Chief Financial Officer / CFO) | ** Финансовый директор (Chief Financial Officer / CFO) — отвечает за то, чтобы у компании не закончились внезапно деньги | ||
** Технический директор (Chief Technology Officer / CTO) | ** Технический директор (Chief Technology Officer / CTO) — главный по IT | ||
* Отдел развития бизнеса (Business development / BD) — глобальная стратегия и планы развития компании | * Отдел развития бизнеса (Business development / BD) — глобальная стратегия и планы развития компании | ||
** Бизнес-аналитика (Business Intelligence / BI) | ** Бизнес-аналитика (Business Intelligence / BI) | ||
Строка 66: | Строка 79: | ||
** Менеджер проекта (Project Manager / PM) — собирает команду для проекта и отвечает за его выполнение | ** Менеджер проекта (Project Manager / PM) — собирает команду для проекта и отвечает за его выполнение | ||
* Отдел разработки (Development) — отдел, где и работают разработчики (программисты) | * Отдел разработки (Development) — отдел, где и работают разработчики (программисты) | ||
** Руководитель отдела (Development Director) | ** Руководитель отдела разработки (Development Director) — начальник всех разработчиков | ||
** Системный архитектор (System Architect) — отвечает за базовую архитектуру программного обеспечения | ** Системный архитектор (System Architect) — отвечает за базовую архитектуру программного обеспечения | ||
** Тимлид (Development Team Lead) | ** Тимлид (Development Team Lead) — руководит командой разработчиков | ||
** Разработчик (Developer) | ** Разработчик (Developer) — тот кто непосредственно программирует | ||
* Обеспечение качества (Quality Assurance / QA) | * Обеспечение качества (Quality Assurance / QA) | ||
** Инженер по качеству (QA Engineer) | ** Инженер по качеству (QA Engineer) — отвечает за качество в целом | ||
** Тестировщик (Tester) | ** Тестировщик (Tester) — проверяет наличие багов | ||
** Инженер по автоматизации (Automation Engineer) | ** Инженер по автоматизации (Automation Engineer) — создает автотесты | ||
** Тестер по производительности (Performance Tester) | ** Тестер по производительности (Performance Tester) — проверяет, как хорошо приложения держат нагрузку | ||
** Тестер по информационной безопасности (Security Tester) | ** Тестер по информационной безопасности (Security Tester) — тестирует приложения на проблемы по ИБ | ||
* DevOps | * DevOps — связующее звено между разработкой (Dev) и обслуживанием (Ops) | ||
** | ** Инженер по инфраструктуре (Infrastructure Engineer) — из набора серверов, сетей и сервисов проектирует единую надежную систему | ||
** Инженер по надежности (Site Reliability Engineer / SRE) — отвечает за масштабируемость и высокую производительность приложений | |||
** Site Reliability Engineer | ** Девопс инженер (DevOps Engineer) — отвечает за автоматизацию процессов сборки и доставки приложений на сервера | ||
** | ** Инженер по конфигурации (Configuration Management Engineer) — работает с ПО для управления параметрами приложений | ||
** Configuration Management Engineer | ** Релиз инженер (Release Engineer) — непосредственно запускает приложения в продакшн | ||
** Monitoring and Logging Engineer | ** Инженер по мониторингу и логам (Monitoring and Logging Engineer) — работает с ПО для отслеживания показателей работы приложений | ||
* Эксплуатация (IT Operations) — обслуживание IT продукта, инфраструктуры и поддержка пользователей | * Эксплуатация (IT Operations) — обслуживание IT продукта, инфраструктуры и поддержка пользователей | ||
** Руководитель эксплуатации (IT Operations Manager) — руководитель направления. | ** Руководитель эксплуатации (IT Operations Manager) — руководитель направления. | ||
** | ** Менеджер внедрений (Implementation Manager) — отвечает за поставку продукта новым клиентам, первичную настройку и поддержку, обучение клиента | ||
** Специалист службы поддержки (Help Desk / Support Technician) — обработка входящих обращений от пользователей и решение простых проблем. | |||
** Технический аналитик (Technical Analyst) — решает сложные технические и технологические проблемы | |||
** Системное администрирование | ** Системное администрирование | ||
*** Системный администратор (System Administrator) — установка, настройка и обслуживание ПО. | *** Системный администратор (System Administrator) — установка, настройка и обслуживание ПО. | ||
Строка 101: | Строка 113: | ||
** Пентестер (Penetration Tester) — пытается всё сломать, чтобы проверить надежность | ** Пентестер (Penetration Tester) — пытается всё сломать, чтобы проверить надежность | ||
** Compliance Officer — следит за выполнением международных стандартов по ИБ (GDPR, PCI DSS, ISO 27001) | ** Compliance Officer — следит за выполнением международных стандартов по ИБ (GDPR, PCI DSS, ISO 27001) | ||
** Тренер по ИБ (Security Educator) | ** Тренер по ИБ (Security Educator) — обучает всех в компании, как не косячить по ИБ | ||
* Финансовый отдел (Finance) | * Финансовый отдел (Finance) — бухгалтеры, финансовые аналитики | ||
* Управление персоналом (Human Resources / HR) | * Юридический отдел (Legal department) — юристы | ||
* Управление персоналом (Human Resources / HR) — найм сотрудников и удержание уже нанятых | |||
</div> | |||
</div> | |||
Версия от 21:44, 10 февраля 2023
Разработка программного обеспечения — это производство программ для вычислительных устройств как продуктов полностью готовых к использованию. Могут предназначаться для внутреннего использования или для внешнего заказчика, для перепродажи или для бесплатного распространения.
Объясните простыми словами, пожалуйста
Почему программистов называют разработчиками? 🤔
Это слова часто используют вместе, но это не совсем одно и то же. В разработке современных качественных приложений только программирования недостаточно. Это сложный процесс и со стороны упрощенно выглядит так: несколько человек собираются вместе, начинают спорить и ругаться, а в перерывах стучат по клавиатурам. Это может длиться месяцами и годами. И в результате всего этого компьютеры начинают делать то, что раньше не делали, или начинают делать что-то лучше.
Название для этого странного процесса искали долго и по всему миру. В итоге нашлось хорошее, изначально французское слово «разворот», давно позаимствованное в английский и дополненное смыслами. 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) — извлекает из «бесполезных» данных полезный результат, который используется другими специалистами
- Другие отделы, отвечающие за стратегические партнерства, планирования, анализ процессов внутри компании
- Бизнес аналитики, менеджеры, координаторы — работают над тем, как сделать хорошо компании
- Бизнес-аналитика (Business Intelligence / BI)
- Коммерческий отдел (Commercial department) или — увеличение доходов, работа с клиентами
- Обслуживание клиентов (Customer Service)
- Аккаунт менеджер — индивидуальная работа с ключевыми клиентами
- Отдел продаж — поиск новых клиентов
- Маркетинг — продвижение бренда компании и его IT продуктов
- Обслуживание клиентов (Customer Service)
- Продуктовый отдел (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 — связующее звено между разработкой (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 образования подойдут мобильная разработка и разработка веб-приложений (frontend или backend). Не торопитесь на данном этапе, изучите каждое из трех направлений и выберите подходящее.
- Выберите один язык программирования по интересующему направлению. Рекомендуется JavaScript для фронтенд направления, Python для бэкенд, Kotlin / Swift для мобильной разработки.
- Начните изучение с бесплатных материалов и недорогих курсов. Если понимаете — «это оно», можно продолжать. Если идет «через силу», надо пробовать другие варианты.
- Изучите выбранный язык программирования, на уровне решения простых задач. Важно писать код алгоритмов самостоятельно «без копирования готовых решения из гугла».
- Освойте профессиональные инструменты работы. Минимальный набор — это инструменты работы с исходным кодом: git и IDE. Плюс у каждого направления разработки есть свои дополнительные.
- Выполните минимум один pet-проект (учебный проект) и выложите его код в открытый доступ.
- Разместите резюме и откликайтесь на вакансии стажера (подойдут бесплатное обучение или работа за минимальную зарплату). Остерегайтесь мошенников, обещающих высокие зарплаты без опыта работы.
- Пройдите собеседование и устройтесь на стажировку.
- Продолжайте искать работу, откликайтесь на вакансии младших (junior) разработчиков.
Важно! Если вам не интересно программировать, посмотрите в сторону других профессий в IT. Для начального уровня подойдут направления: тестировщики, аналитики, сотрудники технической поддержки.
Что вас ожидает дальше
Если вы стали разработчиком, вам придется продолжать всё время учиться для профессионального роста.
Название | Стажер | Junior | Middle | Senior |
---|---|---|---|---|
Высшее IT образование | Не требуется | Не требуется | Желательно | Очень желательно |
Как оценивает свои знания и навыки | Недооценивает | Часто переоценивает себя | Оценивает себя правильно | Недооценивает себя |
Опыт работы разработчиком | Нет | От 0 до 2х лет | Обычно больше 2х лет | Обычно больше 5 лет |
Самообучение | Учится постоянно | Учится постоянно | Учится постоянно | Учится постоянно |
Учит других | Нет | Обычно нет | Учит стажеров и младших разработчиков | Учит всех |
Ключевой софт-скилл | Обучаемость и инициативность | Работа в команде | Работа на результат | Ответственность |
Выполненные проекты | Небольшие учебные проекты | Небольшие проекты для себя | Небольшие бизнес проекты | Есть опыт запуска крупных проектов |
Участие в Open Source | Активное (имитация) | Нет времени | Нет времени | Нет времени, но надо |
Системный анализ (сбор требований) | Что это? | Нет | Обучение | Может принимать участие |
Участие в проектировании | Что это? | Нет | Обучение | Активная работа |
Сколько языков программирования знает | 0 | Один, но в резюме указывает больше | Обычно один хорошо и несколько хуже. Честно об этом говорит. | Понимает, что знает мало языков программирования. |
Знание языков программирования | Обучение | Знает и умеет писать код самостоятельно | Знает особенности и подводные камни | Следит за развитием языков программирования |
Программирование | Учебные задачи | Простые бизнес задачи | Все задачи | Может решать сложные задачи оптимальным способом |
Качество | Нет | Много багов | Мало багов | Мало багов |
Фреймворки | Обучение | Знает в теории | Активно использует | Экспертный уровень |
Шаблоны проектирования | Не понимает | Знает теорию | Умеет применять | Активно применяет |
Парадигмы программирования | Что это? | Нет | Обучение | Знает и понимает |
Методологии разработки | Что это? | Обучение | Соблюдает | Внедряет |
Автотесты | Что это? | Обучение | Умеет писать | Понимает почему надо писать |
Код-ревью | Что это? | Нет | Да, но немного | Перепроверяет чужого кода больше, чем пишет сам |
Документирование кода | Нет | Да | Да | Да |
Поддержка выпущенных продуктов | Нет | Простые багфиксы и доработки | Сложные багфиксы и доработки | Задачи по оптимизации, устранение технического долга |
Отношение к информационной безопасности | Нет | Зачем это всё? | Обучение на ошибках | Считает очень важным |
Отношение с проектными менеджерами | Кто это? | Обычно негативное | Нейтральное | Командная работа |