Кто такой программист? И кто такой разработчик?
Прежде чем начать, давайте определимся с терминами. Чем вообще отличается программист от разработчика?
Спросите десятерых - получите десять ответов, и каждый будет уверен в своем. В моей среде чаще всего слышу такое разделение: программист - это тот, кто работает по четкому ТЗ, делает ровно то, что написано. А разработчик - свободная творческая душа: сам придумывает, сам проектирует, умеет все и даже немножко больше. По этой логике «разработчик» звучит солиднее, и многие обижаются, когда их называют «просто программистом».
Есть и другие версии, я специально прошелся по статьям и форумам, чтобы не пересказывать только свое мнение. Вот что пишут:
- «Программист кодит, разработчик создает продукт». Самая популярная формулировка. Программист пишет код в рамках поставленной задачи, его дело - чтобы работало. А разработчик ведет продукт от идеи до поддержки: анализирует требования, проектирует, пишет спецификации, иногда еще и координирует команду. То есть разработчик - это «программист плюс ответственность за результат».
- «Разработчик - это про бизнес-задачу». Программист отвечает за код, а разработчик - за то, насколько продукт решает задачу заказчика. Разное мышление: один фокусируется на исполнении, другой на концепции и стратегии.
- «Разработчик - творец и идеолог». В этой версии разработчик не просто кодер, а вдохновитель команды, исследователь, новатор, проектировщик интерфейсов и архитектур. Программист на этом фоне выглядит ремесленником.
- А вот англоязычный мир строит иерархию: coder - programmer - developer - software engineer. Кодер просто пишет код по указке, программист уже думает над алгоритмами, разработчик отвечает за фичу или продукт целиком, а инженер мыслит архитектурой системы и работает по стандартам (те самые ISO/IEC). И ровно так же спорят, где между ступеньками настоящая граница, а где просто красивая надпись на визитке.
- И, наконец, версия «да это просто синонимы». Немалая часть людей говорит: не выдумывайте, на рынке слова взаимозаменяемы, «разработчик» - это маркетинг, потому что звучит солиднее и под него легче просить зарплату побольше.
И вот что характерно. Почти в каждой такой статье, перечислив все отличия, в самом конце честно добавляют приписку: «впрочем, в каждой компании эти должности понимают по-своему, и часто названия используют как синонимы». То есть сами авторы, только что объяснявшие разницу, тут же признают, что четкой границы нет.
И это не случайность. Ни одно из определений не получается довести до конца. Стоит сформулировать критерий - тут же находится контрпример: вот «программист», который сам проектирует и общается с заказчиком, а вот «разработчик», которому прилетает готовое ТЗ. Граница все время расплывается. Чистый холивар вроде «табы или пробелы»: спорить можно бесконечно, а объективного ответа как будто и нет.
Так есть он, объективный ответ, или нет? Оказывается, есть. Просто искать его надо не в холиварах, а там, где профессии описаны официально - в профессиональном стандарте. И ответ этот вас, возможно, удивит. Но прежде чем я к нему перейду, расскажу, как меня вообще занесло в профстандарты.
Зачем я вообще полез в профстандарты
Я, как и все, что-то слышал про профессиональные стандарты. Их разрабатывает государство, штука вроде бы полезная, описывает профессию. Есть такие и для ИТ. Но руки дойти до них все не доходили - пока не прижало.
Я привык работать самостоятельно: сам выбираю задачи, часто сам же их себе и ставлю. И вот в организации, где я работал, эффективные менеджеры решили сделать «как лучше» - ввели жесткие планы, которые задели в том числе и мою работу. Мне это не понравилось. Обсудил ситуацию со старшими товарищами, и они дали дельный совет: посмотри стандарт. Оценка задач и планирование работы - это наверняка там есть.
Я открыл гугл. Удивительно, но первые ссылки на профстандарты ведут вовсе не на официальные ресурсы. Но я справился, нашел то, что надо. И окунулся в мир канцелярита.
Дам определение из Трудового кодекса РФ (ст. 195.1):
Профессиональный стандарт - характеристика квалификации, необходимой работнику для осуществления определенного вида профессиональной деятельности, в том числе выполнения определенной трудовой функции.
(ну зачем меня сюда понесло, прочитайте эту тарабарщину - не то что наш простой, понятный, любимый код на 1С, правда?)
По-простому: профстандарт описывает профессию. Что в нее входит, какие у работника обязанности, что он должен делать. И, по умолчанию, чего делать не должен - напрямую это, конечно, не пишут, но подразумевают.
Где найти профстандарты
Штука государственного значения, а государство у нас одно из самых цифровизированных в мире (без шуток). Поэтому все, что посвящено профстандартам, лежит на сайте profstandart.rosmintrud.ru.

Вот так он выглядит. Как будто на 1С версии 8.5 написан, правда? Разреженность и воздушность интерфейса - как в лучших домах. Обратите внимание: стандарты курирует Минтруд России, а конкретно ВНИИ Труда (что бы это ни значило).
Давайте уже найдем профстандарт программиста.

И… ни на первой, ни на второй странице мы не найдем того, чего ищем.

Какие-то трудовые функции…
Но вам повезло. Я изучил сайт и дам готовый рецепт доступа к нужному профстандарту.
Заходим в реестр профессиональных стандартов. Жмем Развернуть - тут имеется в виду развернуть фильтр. В поле названия пишем искомое слово.

И вот оно.

Видим, что профстандарт «Программист» имеет регистрационный номер 4 - то есть разрабатывался одним из первых, - а его код 06.001. И разрабатывал его сам ВНИИ Труда Минтруда.
Немного отступим в сторону и найдем стандарт архитектора.

Есть!
И сразу замечу: все стандарты, начинающиеся на 06., связаны с информационными технологиями.
А теперь вопрос. Стандарт 06.001 - программист, 06.003 - архитектор программного обеспечения. Как вы думаете, кому посвящен стандарт 06.002?
Структура документа
У документа есть шапка.

Основные таблицы с описаниями трудовых функций.

И сведения об организациях-разработчиках стандарта.

Сразу обратите внимание на строку номер 3. Эта организация нам смутно знакома… И сразу делайте вывод о применимости стандарта именно к нашей с вами деятельности. Это не описание какого-то идеального программиста в вакууме - стандарт писали люди, которые понимают, чем мы занимаемся.
Но вернемся к шапке. В правом верхнем углу есть фраза:
УТВЕРЖДЕН приказом Министерства труда и социальной защиты Российской Федерации от 20.07.2022 № 424н
Давайте поищем этот приказ.

Из интересного: приказ устанавливает срок действия с 1 марта 2023 по 1 марта 2029 года. Что будет дальше - стандарт обновят? Поживем - увидим.
Теперь к таблицам с трудовыми функциями. Слева - так называемая обобщенная трудовая функция, справа - относящиеся к ней конкретные трудовые функции. И у каждой есть квалификационный уровень.
Квалификация: а образование-то не обязательно
С квалификацией все просто: у каждой трудовой функции указан квалификационный уровень, который с ней справится. В нашем стандарте задействованы уровни с 3-го по 6-й, но приведу описание всех для полноты. И вот что любопытно: особого образования, чтобы работать программистом, не требуется. На 6-м уровне достаточно бакалавриата.
| Уровень | Что означает |
|---|---|
| 1 | Работа под руководством более квалифицированного персонала. Требования к образованию минимальны. Стандартные операции. |
| 2 | Нужны специальные знания. Работа под руководством, но можно выбрать способ действия - в пределах инструкции. |
| 3 | Стандартные задачи, но решения могут приниматься на основе опыта. Нужны специальные знания (срок обучения - до 1 года). |
| 4 | Среднее профобразование по специальности. Способен решать практические задачи и работать с информацией. |
| 5 | Среднее образование. Может принимать решения, контролировать и оценивать работу подчиненных, отвечать за работу подразделения. |
| 6 | Бакалавриат. Работает самостоятельно, ставит цели себе и подчиненным, отвечает за результаты на уровне подразделения или компании. |
| 7 | Магистратура / специалитет. Ответственность за результаты отделов или предприятий, стратегическое планирование, новые методы работы. |
| 8 | Исследовательские и проектные задачи, управление производственными процессами. Ответственность за деятельность предприятия или отрасли. |
| 9 | Аспирантура / ординатура. Ответственность на общероссийском или международном уровне, управление крупными техносистемами. |
Основные трудовые функции
Я призываю вас прочитать профстандарт самостоятельно - это правда интересно. А пока перечислю обобщенные трудовые функции (в скобках - квалификационный уровень):
- Разработка и отладка программного кода (уровень 3);
- Проверка работоспособности и рефакторинг кода (уровень 4);
- Интеграция программных модулей и проверка работоспособности выпусков продукта (уровень 5);
- Разработка требований и проектирование программного обеспечения (уровень 6).
Логика простая: чем выше уровень - тем сложнее задачи, а потом и процессы. Сначала - чистое программирование, то самое «разработка по ТЗ». Дальше - рефакторинг, то есть изменение существующего кода, и проверка работоспособности (тесты). На следующем уровне - сборка релизов. А на вершине для программиста - разработка требований и проектирование.
Это были обобщенные трудовые функции. К каждой из них присоединены конкретные функции. Вот, например, трудовая функция «Формализация и алгоритмизация поставленных задач для разработки программного кода» из «Разработки и отладки кода»:

Внутри - разделы «Трудовые действия», «Необходимые умения», «Необходимые знания». Вот тут и начинается самое интересное.
Что меня зацепило в стандарте
Оценка сроков - обязанность программиста, а не менеджера. Почти в каждой трудовой функции среди трудовых действий есть фраза «Оценка и согласование сроков выполнения поставленных задач». Даже для начального уровня, для того, кто работает строго по ТЗ («в соответствии с требованиями технического задания или внутренних документов организации»). И это логично: кто, как не непосредственный исполнитель, знает, сколько займет задача. А менеджеры тем временем привыкли ставить свои «вакуумные» сроки. Налицо конфликт интересов - и стандарт прямо встает на сторону программиста.
Справиться с этим конфликтом помогает другое необходимое умение, которое тоже встречается почти везде, - «Осуществлять коммуникации с заинтересованными сторонами». Выходит, любимая позиция многих программистов - «я в домике, не трогайте меня, я программирую, не хочу и не буду ни с кем разговаривать» - в корне неверная. Нет, красиво разговаривать от программиста никто не требует. Но «осуществлять коммуникации» - обязан.
Нет версионирования - вон из профессии. Дальше я наткнулся на трудовую функцию «Работа с системой управления версиями программного кода» - и это, заметьте, для начального уровня. Система управления версиями - это, конечно, git. Но не только: наше родное 1С-ное хранилище - это тоже система управления версиями. И получается занятная вещь. Пользуешься git или хранилищем - ты программист. А вот если ты клепаешь внешние обработки и нигде их не версионируешь - извини, формально ты не программист. (Внешние обработки и расширения тоже можно выгружать в git).
Техжурнал должен читать каждый. Еще одна находка для начального уровня. Трудовая функция «Проверка и отладка программного кода», необходимое умение - «Интерпретировать сообщения об ошибках, предупреждения, записи технологических журналов». Это же про наш техжурнал! А ведь принято считать, что техжурнал - удел архитекторов и специалистов по производительности. Нет. Хотя бы настраивать его рядовому программисту, может, и не нужно, но читать и понимать - обязан. И мне такое ожидание нравится. Да, не каждый знакомый мне программист умеет читать техжурнал. Но я хотел бы, чтобы умел каждый. Это не сверхсложное тайное знание, а пользы от него - масса: многое становится проще, когда ты видишь, что происходит внутри.
Программист 6-го уровня - это уже почти руководитель. Каждая трудовая функция достойна отдельного обсуждения, но расскажу еще про одну - из высшего для программиста, 6-го уровня, из обобщенной «Разработка требований и проектирование ПО». Сама функция называется «Разработка технических спецификаций на программные компоненты и их взаимодействие». Смотрите, какие там трудовые действия:
- разработка и согласование с архитектором ПО технических спецификаций на программные компоненты и их взаимодействие;
- распределение заданий между программистами в соответствии с техническими спецификациями;
- осуществление контроля выполнения заданий;
- осуществление обучения и наставничества;
- формирование и предоставление отчетности по установленным регламентам;
- оценка и согласование сроков выполнения поставленных задач.
Явно перекликается с работой руководителя группы. И вот ради чего я, собственно, в стандарт и полез: да, я имею право распределять задания (сам себе - уж точно). Профстандарт со мной согласен.
И еще интересный момент: обучение и наставничество стоят в одной группе с распределением задач. А я чаще вижу другую картину: опытный программист, дорос до того, чтобы обучать джунов, но до распределения задач еще не дорос. Надеюсь, стандарт эту логику поправит.
Чего я в стандарте не нашел
Спешу вас расстроить (или обрадовать): починка чайников и замена картриджей в профессиональный стандарт программиста не входят. Хотя кто знает - помните, текущий стандарт действует до 2029 года? Может, к тому времени и допишут что-нибудь такое.
Так кто же круче - программист или разработчик?
А никто. И вот почему: вопрос поставлен неправильно.
Вернемся к тому, с чего начали. Программист работает по четкому ТЗ, а разработчик - свободная творческая душа, которая умеет все? Так вот, эти определения ничего не стоят. Это красивые слова, которые мы сами себе придумали, чтобы было о чем поспорить. Никакого объективного основания под ними нет - попробуйте провести границу, и она тут же расплывется.
И стандарт это доказывает. Стандарта на «разработчика» не существует. Есть только на «программиста» - и все. Раз профессия одна, значит, и суть одна. А этот единственный программист, по мнению государства, должен уметь не только программировать, но и проверять результат своей работы, оценивать сроки, общаться с заказчиком, версионировать код, читать техжурнал, проектировать ПО и распределять задачи. То есть быть ровно той самой «творческой душой, которая умеет все» - только называется он при этом программистом.
Так что в следующий раз, когда кто-нибудь гордо поправит вас - «я не программист, я разработчик», - можете спокойно улыбнуться. Разницы нет. Вы оба делаете одну работу, и официально вы оба программисты. «Разработчик» - это просто слово посолиднее.
Что дальше
Файл со стандартом я прикрепил к статье - можете скачать и тем самым поддержать автора. А можете просто изучить стандарт прямо на сайте, ссылки ниже.
И обязательно напишите в комментариях: а что интересного вы вычитали в профстандарте «Программист»? Уверен, каждый найдет там что-то свое.
P.S. Не судите по заголовку
Заголовок я сделал нарочно провокационным - иначе на профстандарт никто не взглянет, тема скучная. Но статья не про то, что «разработчики - пустое место». Совсем наоборот: про то, что под двумя разными словами скрывается одна большая и интересная профессия, описанная государством подробнее, чем многие думают.
Так что если вы дочитали до этого места и все равно не согласны - отлично, я только за. Но давайте договоримся - не молчаливый минус по заголовку, а аргумент в комментариях. В чем, по-вашему, между программистом и разработчиком все-таки есть разница? Где проходит граница? Сформулируете критерий, который выдержит все примеры, и я первый поставлю вам плюс. Тема интересная, спор тут полезнее кнопки «минус».
Ссылки
- Профстандарт «Программист» на сайте Минтруда: profstandart.rosmintrud.ru
- Приказ Минтруда от 20.07.2022 № 424н на КонсультантПлюс: consultant.ru
- Аналитика по профстандартам на Инфостарте (осторожно, 2018 год): infostart.ru/journal/analytics/918404