В индустрии разработки термины “разработчик” (software developer) и “инженер” (software engineer) используются взаимозаменяемо. Если вы устраиваетесь на роль разработчика, вы, вероятно, будете проходить собеседование для обеих ролей.
Путаница тут возникает в нескольких ключевых областях — когда использовать название, кто пишет код и кто занимается сборкой, как лучше всего различить две роли и являются ли инженеры программного обеспечения “настоящими” инженерами, а также имеет ли что-то из этого вообще значение.
Почему название имеет значение?
Для новичков это может размыть границы при поиске работы. А это большой пул должностей: сейчас в Австралии доступно 1,200 объявлений для должности разработчика и 1500 объявлений для должности инженера.
Если у вас уже есть работа, и вы пытаетесь подняться выше или построить карьеру в программировании, это тоже важно для оценки доступного плана действий.
Вокруг этого вопроса ведется много дискуссий, а в этом посте на Reddit ответы отличаются от “никакой разницы” до более активных действий по изменению названия своей должности. Как написал один пользователь:
В моем письме о приеме на работу была указана должность “Разработчик ПО”, но однажды я изменил свою должность на сайте на “Инженер”. Это было два года назад, и никто до сих пор ничего не заметил.
И ничего изменится в скором времени. С развитием программного обеспечения количество должностей в технологии и инженерии будет только расти, поэтому мы решили, что пришло время поискать ответы.
Что говорят работодатели
Мы решили поговорить с двумя лидерами, чтобы обсудить тему и получить мнения с обеих сторон. Мы поговорили с Аароном Семпфом, главой отдела технологии в Tribal Melbourne, и Бреттом Рейвеном, CTO Big Red Group.
Аарон — инженер с опытом в структурированных системах и разработке. Он создавал свою команду и исследовал, какие роли предлагают компании. При общении с рекрутерами он обнаружил недостаток понимания различий ролей инженера и разработчика.
Бретт присоединился к RedBalloon в начале 2017, чтобы помочь в изменении продукта и создании плана технического развития. Затем он перешел в Big Red Group и руководит с технической стороны Redii и другими компаниями. Бретт изучал информатику в университете (поэтому он не инженер), но у него сильные команды инженеров в Lux Group и RedBalloon.
Разработчик или инженер
“Существует фундаментальная разница между ролями разработчика и инженера”.
Аарон: Хотя я обычно согласен с тем, что должности ничего не значат, существует фундаментальная разница между ролям разработчика и инженера.
Инженер
Разница между должностями легко прослеживается на примере их ролей и задач в цикле разработки. Однако в постоянно развивающейся творческой среде, в которой границы доступного сдвигаются всего-лишь при помощи JS-фреймворков, Markup-препроцессоров, фреймворков для языков и приложений, разницу между инженером и разработчиком становится сложнее различить.
Обычно инженер в любой сфере — это человек, который компетентен благодаря своему фундаментальному образованию и может применять научные методы для анализа и поиска решения инженерных проблем. Это означает, что у инженеров есть образование в принципах инженерии, и они создают решения, применяя инженерные концепции.
Разработчик
С другой стороны, разработчик мыслит более творчески и применяет паттерны и методы, о которых узнает в процессе самообразования, на работе, в книгах и блогах или курсах, посвященных более конкретным аспектам цикла разработки, а не научным методам или инженерным принципам.
Хотя пока я говорил только о разнице в образовании и методах инженеров и разработчиков, их роль в команде также отличается. Черты, которые я ищу в инженерах и разработчиках, могут немного отличаться, и хотя я даю им одни и те же задания, оцениваю я их по-разному.
Технические вопросы — это простой способ получить базовое представление об уровне и области знаний кандидата, но технические задачи и неоднозначные вопросы могут помочь отличить разработчика от инженера. Мой любимый неоднозначный вопрос — это простое математическое задание 6÷2(1+2)=?. Человек должен предоставить ответ и пояснение к нему.
Эта задача показывает образование кандидатов. Два самых распространенных ответа — это 1 и 9, но пояснение от кандидата показывает больше всего. Но действительно выявить кандидата с математическим или научным образование можно при помощи третьего, менее распространенного ответа.
“Уравнение нельзя решить из-за неопределенности”. Дискуссия с таким человеком показывает, что они хотят не просто предоставить немедленный ответ, но понять все на более высоком уровне. В инженерных задачах и математике высокого уровня неопределенности может не быть, но понимать цель уравнения и потенциальный эффект — это важно.
Настоящая креативность разработчика проявляется в технических задачах, например, в тесте, где кандидаты должны написать логику, которая примет входные данные и предоставит ожидаемые выходные данные. В таком тесте навыки разработчика проявляются при использовании паттернов в создании такой логики.
Не существует верного или неверного ответа — если решение работает, то оценка касается способности человека превращать инструкцию в работающую программу. Если человек демонстрирует способность мыслить творчески и придумывать логические решения модульных проблем, его или её можно назвать разработчиком.
Но если кто-то демонстрирует, что может применять научные и инженерные методы для создания всеобъемлющего решения на высоком уровне, а не только описывать работу многих модулей, этот человек — инженер.
Разработчик как инженер
“Я предпочитаю использовать категории junior, mid и senior, а разработчик и инженер — это одно и то же”.
Бретт: Мне тоже кажется, что должности ничего не значат, а границы между ними размываются. Все мы слышали, как термины “разработчик”, “программист”, “инженер” и “кодер” используются на равных.
Традиционные определения размываются и исчезают. Количество людей, которые пишут код или платят за него, увеличилось за последние годы, так что в какой-то степени мы все недалеко ушли от “разработчиков”.
Другой тип категорий
Я думаю, что различия между разработчиками и инженерами лежат в области горизонтального мышления, находящегося между задачами, целями и бизнес-проблемами. Я предпочитаю использовать категории junior, mid и senior, а разработчик и инженер использую в качестве равнозначных понятий.
Я ожидаю от senior-разработчика целостного подхода. Они должны применять научный или инженерный метод во всем, что делают, и учитывать побочные эффекты своей работы. Junior-разработчики должны выполнять данные им задачи и концентрироваться на том, что они знают, а не пытаться знать все. Mid-разработчики должны переходить к более широкому видению влияния их кода, выполнять данные задачи, но начинать думать об архитектуре и бизнес-задачах более глубоко.
Для меня это вопрос профессионального развития, которое требует понимания ширины и деталей задачи, а не подробного описания каждой роли. Это касается людей и их способностей, а не традиционного описания работы.
Разница во мнениях
Аарон подводит итог своему мнению: “Разработчики внедряют. Они применяют свои таланты в определенной области или в конкретной среде, а не смотрят на картину в общем. Инженер создает архитектуру и всегда смотри на общую картину. Инженер может выполнять роль разработчика, но их главный фокус лежит в архитектуре, планировании и создании. На простой аналогии это можно показать так: работа в механике не делает человека инженером-механиком, а написание кода не делает человека инженером программного обеспечения”.
Бретт несогласен: “Аналогию механика и инженера лучше заменить журналистами и редакторами. Редакторы могут применять на работе больше навыков, полученных за годы работы. У механиков обычно нет возможности изучить необходимые дисциплины (математику, физику, материаловедение и так далее), чтобы создавать машины, которые они чинят”.
Заключение
Честно говоря, этому сложно подвести итог. Сложно понять, что означает каждая роль без информации о человеке, который размещает вакансию.
Почти все ответы говорят о том, что названия мало что значат. Лучше всего подвести итог может совет от Джейсона Руса, инженера по программному обеспечению в Sony Interactive Entertainment, который говорит, что все зависит от того, во что вы верите сами:
Термин “инженер” обычно означает создателя, процесс работы которого методичен и включает тщательное применение установленных паттернов и принципов.
Определенно существуют разработчики, которые подходят под этот термин, однако на деле формальное название ничего не значит. Инженер программного обеспечения — это не лицензируемая профессия, и компании часто эксплуатируют этот факт, предлагая его как преимущество для своих разработчиков, которое не зависит от работы самих разработчиков.
Я не считаю себя инженером, потому что работодатель говорит мне, что я такой. Я считаю себя инженером, потому что я себя таким полагаю. Я делаю так, потому что уважаю значение термина и каждый день пытаюсь жить согласно этому смыслу.
Если кто-то считает так же, то и он или она — это инженер.
Если вы думаете, что ваша текущая должность некорректна, работодатели наверняка с этим согласятся. Если это важно, можете поговорить со своим начальником и договориться об изменении названия. А если вы ищете новую работу, убедитесь, в какую категорию вы хотите попасть и потом задавайте вопросы человеку, который разместил объявление, чтобы узнать, что требуется на данной роли.