- PVSM.RU - https://www.pvsm.ru -

Кто ты по професии: Разница между «Programmer», «Software Engineer» и «Computer Scientist»

Как только сегодня ни называют программистов, особенно в зарубежных СМИ. Да и у нас, в частности, при поиске работы, можно встретить абсолютно разные описания должностных обязанностей.

Меняется ли от этого суть работы? Мы в 1cloud [1] попробовали разобраться в том, какую работу подразумевают такие специализации как «Programmer», «Software Engineer» и «Computer Scientist».

Кто ты по професии: Разница между «Programmer», «Software Engineer» и «Computer Scientist» - 1 [2]
/ фото hackNY.org [3] CC [4]

Терминология

Изучение сути вопроса логично начать с понимания терминов. Самым понятным является «Programmer», который в Оксфордском словаре определяется [5] как человек, ответственный за написание программы. И с переводом все просто: программист – он и в Африке программист. И даже в России. Сложности начинаются дальше.

«Software Engineer» (SE) (согласно статье [6] в webopedia) — это дипломированный профессиональный инженер, имеющий достаточно знаний и навыков для применения инженерных дисциплин при создании программного обеспечения. Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода. На русский название должности переводится как «инженер-программист» или просто «программист».

Теперь разберемся с тем, кто такой «Computer Scientist» (CS). Если верить словарю [7], то речь идет о работе в области теории вычислений и проектирования компьютеров. Разные словари дают разный перевод [8] на русский: «учёный, работающий в области теории вычислительных машин и систем (в области ВТ, в области компьютерных наук)» или «программист».

Итого, имеем три очень разных определения в английском и три «программиста» в русском.

Как сами программисты понимают эту разницу

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

Для обеспечения полноценной разработки ПО/кода программист должен быть сконцентрирован на своей работе и обеспечить последующее использование и интеграцию программных компонентов друг с другом. Энтони Щерба (Anthony Scherba), президент и основатель студии разработки Yeti, сравнивает [9] этот процесс с решением сложной алгебраической задачи.

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

Необязательные компетенции: математический анализ, коммуникативные навыки и умение работать в команде — подробнее в блоге [10] Алана Скоркина (Alan Skorkin).

Работа «Software Engineer» подразумевает комплексный подход и иногда ее можно сравнить даже с процессом создания произведения искусства, которое программист старается постоянно усовершенствовать. Так считает [11] и Дэниел Каплан (Daniel Kaplan), опытный программист и сотрудник Pivotal Labs.

Инженер должен видеть всю картину с двух сторон: проект в соответствии с общим планом и отдельные задачи, необходимые для его осуществления. Он должен уметь находить верные комплексные решения, понимать требования клиентов, прогнозировать возможные последствия и распределять задачи по программированию (в команде).

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

«Computer Scientist» — математик и технический специалист в равной степени. Он обладает [10] математическими знаниями и объясняет, как и почему работает тот или иной инструмент, решение или алгоритм. Его работа имеет большое значение для развития программирования в целом. Также CS свойственна специализация в одной или нескольких сферах — ИИ, нейронные сети, теория языков программирования, базы данных.

Представления профессионалов в принципе соотносятся со словарными статьями, что естественно: на то они и профессионалы, чтобы разбираться в своей работе. Сбой в коммуникации и подмена понятий явно происходит на каком-то другом уровне, но на каком?

Какую разницу видят учебные заведения и работодатели

Начнем опять с «программиста». Еще одно его важное отличие от всех остальных: как правило, отучившись в профильном ВУЗе, вчерашний студент становится не просто «программистом», а «инженером/бакалавром/магистром по специальности/направлению…».

Для западной образовательной системы это тоже характерно — взгляните [12], к примеру, на разнообразие специальностей в направлении «Software Development and Programming» Сиднейского Технологического Университета. Ни одна из них не содержит в своем названии слова «programmer» или «programming».

Нет, конечно, многие университеты предлагают курсы по программированию (даже бесплатные), но редко когда в дипломе написано просто «программист». А что хотят видеть работодатели?

Помимо знания разных языков и/или опыта работы на разных мобильных платформах/ опыта веб-программирования/ администрирования, программисту нельзя обойтись без коммуникативных навыков (примеры тут [13] и тут [14]). В приведенных примерах вакансий требуется навык работы в команде, предполагается общение с вендорами, сотрудничество с другими отделами компании и техническим директором. Ну и организаторские и управленческие способности будут нелишними. А в ряде случаев нужны еще и достаточно глубокие знания математики.

Требования на российском рынке отличаются не сильно и включают разработку проектов, работу в команде, понимание принципов информационной безопасности (и всё те же навыки, отмеченные в абзаце выше). Таким образом, работодатели хотят видеть в программисте универсального (и творчески мыслящего) специалиста, а не просто человека, который пишет и тестирует код на определенном языке, решая кем-то поставленную задачу. Получается, что работодатель (как на Западе, так и у нас) под «программистом» очень часто понимает то, что словари обозначают как минимум как «Software Engineer».

Образовательные программы по профилю «Software Engineering» подразумевают [15], подход к разработке ПО с научной и инженерной точки зрения, разработку собственных проектов, аналитическую и управленческую деятельность. Помните, в предыдущем разделе эксперты говорили, что SE должен уметь реагировать на изменяющиеся требования? На магистерской программе помимо этого объясняют, как укладываться в бюджет и сроки.

В университете Глазго учат [16] определять технические характеристики, проектировать, создавать и верифицировать крупные программные системы. При этом список предметов включает программирование на разных языках, проектирование баз данных, изучение алгоритмов, то есть все те знания, которые необходимы и для работы «классического программиста».

Что касается точки зрения работодателей, то по их мнению в обязанности инженера-программиста входит написание кода, проверка технической реализации UI/UX, оптимизация работы приложений, разработка внутренней методологии и стандартов, контроль и управление требованиями. Кроме того, соискатель должен обладать лидерскими качествами. Технические требования не сильно отличаются от требований к «обычным» программистам: их примеры можно посмотреть тут: 1 [17], 2 [18] и 3 [19].

Университетские программы по направлению «Computer Science» включают [20] больше математических предметов, изучение теории алгоритмов, а также такие темы как машинное обучение, нейронные сети и облачные вычисления. Студенты изучают больше теории, но должны успешно применять на практике полученные математические знания, выявлять, формулировать и решать инженерные проблемы. Таким образом, у этого типа специалистов формируется наибольшая «широта взглядов» — в теории он может работать и программистом, и SE, и непосредственно по специальности.

Это не означает, что полученных знаний ему «за глаза» хватит для успешного старта карьеры в любой из областей и больше ничему учиться не придется. Например, чтобы построить успешную карьеру разработчика, такому выпускнику явно понадобится «подтянуть» практические навыки по написанию кода — но не придется изучать программирование «с нуля».

Идеальный соискатель на должность «Computer Scientist» должен обладать знаниями по теоретической информатике, теории алгоритмов, проектированию баз данных, компьютерному моделированию, при необходимости выполнять задачи аналитика и проводить исследования, знать весь процесс от проектирования до внедрения ПО… Список можно продолжать долго (подробнее читайте тут [21] и тут [22]).

Работодатели хотят видеть профессионала, который не ограничен применением навыков в сугубо научной сфере. Кстати, русскоязычные работодатели тоже ищут таких специалистов и предлагают свои названия профессии: ведущий алгоритмист [23] и инженер-исследователь [24]. На этих примерах прослеживается та самая специализация, о которой мы упоминали в прошлом разделе.

Что в итоге

Да, действительно программисты, SE и CS — специальности близкие, но не одинаковые, и готовят таких профессионалов на разных университетских специальностях. Наибольшую путаницу в трактовке терминов вносят работодатели – для них, например, разница между «программистом» и Software Engineer может быть совершенно не очевидна.

Судя по требованиям работодателей, от «просто программиста» ждут творческого подхода, универсальных знаний и soft skills, а «computer scientist» может решать важные, но при этом сугубо прикладные, узконаправленные задачи — говорить о том, что одна специальность «по умолчанию» лучше или «сильнее» другой тут не приходится.

О чем еще мы пишем в блоге 1cloud [1] на Хабре:

Автор: 1cloud.ru

Источник [28]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/210081

Ссылки в тексте:

[1] 1cloud: https://1cloud.ru

[2] Image: https://habrahabr.ru/company/1cloud/blog/315230/

[3] hackNY.org: https://www.flickr.com/photos/hackny/

[4] CC: https://creativecommons.org/licenses/by-sa/2.0/

[5] определяется: http://www.oxfordreference.com/view/10.1093/acref/9780199688975.001.0001/acref-9780199688975-e-4157?rskey=oBDbhw&result=4561

[6] статье: http://www.webopedia.com/TERM/S/software_engineer.html

[7] словарю: http://www.thefreedictionary.com/computer+scientist

[8] перевод: http://translate.academic.ru/computer%20scientist/en/ru/

[9] сравнивает: http://www.huffingtonpost.com/young-entrepreneur-council/the-difference-between-ha_b_7943218.html

[10] блоге: http://www.skorks.com/2010/03/the-difference-between-a-developer-a-programmer-and-a-computer-scientist/

[11] считает: http://www.sleepeasysoftware.com/coder-vs-programmer-vs-software-engineer-vs-architect-vs/

[12] взгляните: http://www.uts.edu.au/future-students/information-technology/software-development-and-programming

[13] тут: https://www.linkedin.com/jobs/view/201204686?trkInfo=searchKeywordString%253AProgrammer%252CsearchLocationString%253ALos%252BAngeles%25252C%252BCA%252Cvertical%253Ajobs%252CpageNum%253A2%252Cposition%253A21%252CMSRPsearchId%253A505071564_1477399834524&refId=505071564_1477399834524&trk=jobs_jserp_job_listing_text

[14] тут: https://www.linkedin.com/jobs/view/202568813?trkInfo=searchKeywordString%3AProgrammer%2CsearchLocationString%3ALos%2BAngeles%252C%2BCA%2Cvertical%3Ajobs%2CpageNum%3A1%2Cposition%3A16%2CMSRPsearchId%3A505071564_1477399801381&refId=505071564_1477399801381&trk=jobs_jserp_job_listing_text

[15] подразумевают: https://www.cs.ox.ac.uk/softeng/programme/index.html

[16] учат: http://www.gla.ac.uk/undergraduate/degrees/softwareengineering/#/programmestructure

[17] 1: https://boards.greenhouse.io/headspace/jobs/83105#.WA9Z7eCLShc-Computer Scientisthttps://boards.greenhouse.io/headspace/jobs/83105%23.WA9Z7eCLShc-Computer%20Scientist

[18] 2: https://www.linkedin.com/jobs/view/208247692?trkInfo=searchKeywordString%3AProgrammer%2CsearchLocationString%3ALos%2BAngeles%252C%2BCA%2Cvertical%3Ajobs%2CpageNum%3A1%2Cposition%3A14%2CMSRPsearchId%3A505071564_1477398954871&refId=505071564_1477398954871&trk=jobs_jserp_job_listing_text

[19] 3: https://hh.ru/vacancy/16596855

[20] включают: https://www.cs.uchicago.edu/page/bsms-program-sample-schedules

[21] тут: https://uspto.usajobs.gov/GetJob/ViewDetails/453908600/

[22] тут: https://www.linkedin.com/jobs/view/197649756?trkInfo=searchKeywordString%3AComputer%2BScientist%2CsearchLocationString%3A%252C%2B%2Cvertical%3Ajobs%2CpageNum%3A1%2Cposition%3A3%2CMSRPsearchId%3A505071564_1477402654715&refId=505071564_1477402654715&trk=jobs_jserp_job_listing_text

[23] ведущий алгоритмист: https://spb.hh.ru/vacancy/15278709

[24] инженер-исследователь: https://spb.hh.ru/vacancy/13023145

[25] Подборка материалов об облаках, дата-центрах и разработке сервисов: https://habrahabr.ru/company/1cloud/blog/309510/

[26] Как сделать виртуальную инфраструктуру доступнее: https://habrahabr.ru/company/1cloud/blog/314022/

[27] «Нельзя просто так взять и объяснить непрограммисту…»: https://habrahabr.ru/company/1cloud/blog/314980/

[28] Источник: https://habrahabr.ru/post/315230/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best