Программные инженеры чем занимаются
Программные инженеры: IT-специалисты, которые могут всё
Студенты и преподаватели о бакалавриате «Программная инженерия» факультета компьютерных наук ВШЭ
Каждый год около двухсот студентов приходят в Высшую школу экономики учиться на программных инженеров. За четыре года в бакалавриате кто-то сходит с дистанции, но те, кто добираются до финиша, становятся универсальными IT-специалистами, которые знают всю кухню создания проектов изнутри: от написания кода и дизайна до юридических тонкостей и ГОСТов. Руководитель программы Валерий Шилов и студенты Программной инженерии рассказывают о том, как устроена подготовка специалистов, которые могут все.
От программирования, до патентного права
«Когда я поступала, я не знала, что такое программная инженерия — шла на программу с самым красивым названием и с самым высоким проходным баллом в России (в 2018 проходной балл здесь был 296)», — рассказывает бывшая студентка департамента Екатерина Береснева, которая сейчас учится там же в магистратуре и сама преподает.
Студентов, которые до конца не понимают, что скрывается за внушительным названием, на первый курс приходит немало. «Родители школьников спрашивают меня: “Что такое программная инженерия? Это программирование?”. В том числе и программирование, но программный инженер занимается далеко не только им. Он занимается всеми стадиями производства продукта», — объясняет академический руководитель программы Валерий Шилов.
Тем не менее, все начинается с программирования и изучения большого количества языков. Если не хватает основных C#, Java, C++ и Python, есть факультативы, где можно брать и другие, например, Swift или Kotlin. Знания подкрепляются опытом: со второго курса начинается практика, в том числе в крупных компаниях, и стартует проектная работа. По мере изучения материала студенты берут все этапы создания проекта в свои руки: занимаются дизайном, вопросами авторского права, контролируют соблюдение ГОСТов, готовят документацию. Иногда приходится вести официальные переговоры. Например, студент четвертого курса Александр Плесовских в качестве дипломного проекта разрабатывает приложение-пропуск, используя технологию NFC. Проблема в том, что Apple крайне неохотно дает доступ к этой технологии на своих устройствах, и сейчас студент сам от лица университета убеждает представителей компании сделать для ВШЭ исключение.
Программный инженер совмещает в себе множество функций, и поэтому в учебный план включают не только математику и разработку
«Работа с требованиями заказчика, тестирование продукта, работа с документацией, экономика, принципы управления программными проектами. Студентов учат, как организовывать взаимодействие, как налаживать связи, как выстраивать отношения между разными группам и людьми в них, — по словам Валерия Шилова, программа отвечает запросам современности. — Мы стремимся к тому, чтобы у нас было больше преподавателей, работающих в индустрии».
Фольклор инженеров
Расслабиться при таком количестве разных дисциплин едва ли получится.
«На первом курсе сложно было научиться потреблять информацию в таких объемах, — рассказывает Мария Горденко, которая продолжает учиться программной инженерии в магистратуре. — Программирование я знала очень плохо, но на факультете его преподают практически с нуля, и все можно подтянуть. Для этого, правда, нужно много работать самому, а если человек трудиться не хочет, он просто не сможет продолжать обучение. У нас на курсе были и те, кто изначально умел программировать, но я не уверена, что им в этом плане повезло: пока читают базовый курс, они расслабляются, и им потом трудно снова набрать темп».
Если недостаточно серьезно отнестись к подготовке, то есть шансы попасть в список на отчисление. «Не все выдерживают нагрузки. У нас сейчас был экзамен по программированию, из ста восьмидесяти человек сто отправились на пересдачу», — уточняет Екатерина.
О том, как непросто приходится во время сессии, студенты снимали короткометражки, самодельные триллеры с кадрами лекций и эпические детективы в стиле «Ангелов и демонов» Дэна Брауна.
Это не считая коллажей и стихов о страхе перед неотвратимым — экзаменами:
MSDN, C#, Подбельский,
Бессмысленный и тусклый свет.
Настигнет всех призыв апрельский.
Все будет так. Исхода нет.
Завалишь — всё начнёшь сначала,
Пока не превратишься в тлен:
Ночь, литра кофе уже мало,
Подбел, C#, MSDN.
Что получится, если все пережить
Вакансии на должность программного инженера встречаются редко, но это вопрос терминологии. Программные инженеры могут выбрать любое направление в IT, которые им понравилось, могут заниматься менеджментом, программированием, дизайном, и тем, и другим и третьим вместе или уйти в computer science.
Наши выпускники становятся мощными руководителями проектов, которые не просто выросли из кодировщиков, а понимают все стадии развития проекта
Екатерина Береснева и Мария Горденко остались в науке. Например, Мария ищет метод решения задачи китайского почтальона. Цель задачи — пройти по всем улицам в городе по максимально короткому маршруту, чтобы не проходить по одному и тому же месту по несколько раз. Такие расчеты, например, пригодились бы снегоуборочным машинам, чтобы они не чистили уже очищенные улицы, а скорее отправлялись к нетронутым завалам. Но пока, несмотря на то, что маршрут рассчитывают компьютеры, их решение отклоняется от оптимального на 10-20 процентов.
«Мы пытаемся сократить этот разрыв, и отчасти нам это удалось», — уточнила Мария. В свободное от науки и преподавания время она работает аналитиком в Москва-Сити. Впервые работать в таком качестве она попробовала во время учебной практики в S7, и ей понравилось.
«Программный инженер — это и аналитик в том числе, — объясняет Мария. — Но, как правило, выпускники становятся программистами с разными компетенциями, что особенно хорошо для Agile-команд, где каждый должен обладать компетенциями другого».
Выпускники работают в очень разных сферах. Одни занимаются сложным программированием с тяжелой математикой, другие стали проджект-менеджерами, кто-то системным архитектором, кто-то занимается разработкой в бекенде, кто-то во фронтенде — люди, которые знают и умеют если не все, то очень многое, нужны в каждом большом проекте.
В 2018 году учебная программа получила аккредитацию ABET — самой авторитетной в мире профессиональной организации, занимающейся оценкой качества программ в области инженерных наук и компьютерных технологий. Так что, выпускники стали обладать еще большими преимуществами для международных компаний. Диплом, одобренный организацией, которая собирает лучшие образовательные программы компьютерных и инженерных технологий, — это знак качества подготовки молодого специалиста, не требующий дополнительного подтверждения.
Кто ты по професии: Разница между «Programmer», «Software Engineer» и «Computer Scientist»
Как только сегодня ни называют программистов, особенно в зарубежных СМИ. Да и у нас, в частности, при поиске работы, можно встретить абсолютно разные описания должностных обязанностей.
Меняется ли от этого суть работы? Мы в 1cloud попробовали разобраться в том, какую работу подразумевают такие специализации как «Programmer», «Software Engineer» и «Computer Scientist».
Терминология
Изучение сути вопроса логично начать с понимания терминов. Самым понятным является «Programmer», который в Оксфордском словаре определяется как человек, ответственный за написание программы. И с переводом все просто: программист – он и в Африке программист. И даже в России. Сложности начинаются дальше.
«Software Engineer» (SE) (согласно статье в webopedia) — это дипломированный профессиональный инженер, имеющий достаточно знаний и навыков для применения инженерных дисциплин при создании программного обеспечения. Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода. На русский название должности переводится как «инженер-программист» или просто «программист».
Теперь разберемся с тем, кто такой «Computer Scientist» (CS). Если верить словарю, то речь идет о работе в области теории вычислений и проектирования компьютеров. Разные словари дают разный перевод на русский: «учёный, работающий в области теории вычислительных машин и систем (в области ВТ, в области компьютерных наук)» или «программист».
Итого, имеем три очень разных определения в английском и три «программиста» в русском.
Как сами программисты понимают эту разницу
Западный подход довольно четко разграничивает все три должности. Но у нас часто возникает путаница, и все три понятия используются как взаимозаменяемые. Поэтому лучше обратиться к мнению самих программистов и посмотреть, как они описывают свою деятельность.
Для обеспечения полноценной разработки ПО/кода программист должен быть сконцентрирован на своей работе и обеспечить последующее использование и интеграцию программных компонентов друг с другом. Энтони Щерба (Anthony Scherba), президент и основатель студии разработки Yeti, сравнивает этот процесс с решением сложной алгебраической задачи.
Так, по мнению эксперта, в обязанности программиста входит создание, упрощение, документирование кода и написание тестов. Поскольку он занимается практической реализацией поставленных задач, программист должен разбираться в особенностях языка (языков) программирования, с которыми работает, а также в теории алгоритмов.
Необязательные компетенции: математический анализ, коммуникативные навыки и умение работать в команде — подробнее в блоге Алана Скоркина (Alan Skorkin).
Работа «Software Engineer» подразумевает комплексный подход и иногда ее можно сравнить даже с процессом создания произведения искусства, которое программист старается постоянно усовершенствовать. Так считает и Дэниел Каплан (Daniel Kaplan), опытный программист и сотрудник Pivotal Labs.
Инженер должен видеть всю картину с двух сторон: проект в соответствии с общим планом и отдельные задачи, необходимые для его осуществления. Он должен уметь находить верные комплексные решения, понимать требования клиентов, прогнозировать возможные последствия и распределять задачи по программированию (в команде).
Его работа особенно важна во время разработки новых версий или функциональных возможностей продукта или, например, когда клиент меняет свои требования. Таким образом, инженер-программист отвечает не просто за написание кода, а за весь проект.
«Computer Scientist» — математик и технический специалист в равной степени. Он обладает математическими знаниями и объясняет, как и почему работает тот или иной инструмент, решение или алгоритм. Его работа имеет большое значение для развития программирования в целом. Также CS свойственна специализация в одной или нескольких сферах — ИИ, нейронные сети, теория языков программирования, базы данных.
Представления профессионалов в принципе соотносятся со словарными статьями, что естественно: на то они и профессионалы, чтобы разбираться в своей работе. Сбой в коммуникации и подмена понятий явно происходит на каком-то другом уровне, но на каком?
Какую разницу видят учебные заведения и работодатели
Начнем опять с «программиста». Еще одно его важное отличие от всех остальных: как правило, отучившись в профильном ВУЗе, вчерашний студент становится не просто «программистом», а «инженером/бакалавром/магистром по специальности/направлению…».
Для западной образовательной системы это тоже характерно — взгляните, к примеру, на разнообразие специальностей в направлении «Software Development and Programming» Сиднейского Технологического Университета. Ни одна из них не содержит в своем названии слова «programmer» или «programming».
Нет, конечно, многие университеты предлагают курсы по программированию (даже бесплатные), но редко когда в дипломе написано просто «программист». А что хотят видеть работодатели?
Помимо знания разных языков и/или опыта работы на разных мобильных платформах/ опыта веб-программирования/ администрирования, программисту нельзя обойтись без коммуникативных навыков (примеры тут и тут). В приведенных примерах вакансий требуется навык работы в команде, предполагается общение с вендорами, сотрудничество с другими отделами компании и техническим директором. Ну и организаторские и управленческие способности будут нелишними. А в ряде случаев нужны еще и достаточно глубокие знания математики.
Требования на российском рынке отличаются не сильно и включают разработку проектов, работу в команде, понимание принципов информационной безопасности (и всё те же навыки, отмеченные в абзаце выше). Таким образом, работодатели хотят видеть в программисте универсального (и творчески мыслящего) специалиста, а не просто человека, который пишет и тестирует код на определенном языке, решая кем-то поставленную задачу. Получается, что работодатель (как на Западе, так и у нас) под «программистом» очень часто понимает то, что словари обозначают как минимум как «Software Engineer».
Образовательные программы по профилю «Software Engineering» подразумевают, подход к разработке ПО с научной и инженерной точки зрения, разработку собственных проектов, аналитическую и управленческую деятельность. Помните, в предыдущем разделе эксперты говорили, что SE должен уметь реагировать на изменяющиеся требования? На магистерской программе помимо этого объясняют, как укладываться в бюджет и сроки.
В университете Глазго учат определять технические характеристики, проектировать, создавать и верифицировать крупные программные системы. При этом список предметов включает программирование на разных языках, проектирование баз данных, изучение алгоритмов, то есть все те знания, которые необходимы и для работы «классического программиста».
Что касается точки зрения работодателей, то по их мнению в обязанности инженера-программиста входит написание кода, проверка технической реализации UI/UX, оптимизация работы приложений, разработка внутренней методологии и стандартов, контроль и управление требованиями. Кроме того, соискатель должен обладать лидерскими качествами. Технические требования не сильно отличаются от требований к «обычным» программистам: их примеры можно посмотреть тут: 1, 2 и 3.
Университетские программы по направлению «Computer Science» включают больше математических предметов, изучение теории алгоритмов, а также такие темы как машинное обучение, нейронные сети и облачные вычисления. Студенты изучают больше теории, но должны успешно применять на практике полученные математические знания, выявлять, формулировать и решать инженерные проблемы. Таким образом, у этого типа специалистов формируется наибольшая «широта взглядов» — в теории он может работать и программистом, и SE, и непосредственно по специальности.
Это не означает, что полученных знаний ему «за глаза» хватит для успешного старта карьеры в любой из областей и больше ничему учиться не придется. Например, чтобы построить успешную карьеру разработчика, такому выпускнику явно понадобится «подтянуть» практические навыки по написанию кода — но не придется изучать программирование «с нуля».
Идеальный соискатель на должность «Computer Scientist» должен обладать знаниями по теоретической информатике, теории алгоритмов, проектированию баз данных, компьютерному моделированию, при необходимости выполнять задачи аналитика и проводить исследования, знать весь процесс от проектирования до внедрения ПО… Список можно продолжать долго (подробнее читайте тут и тут).
Работодатели хотят видеть профессионала, который не ограничен применением навыков в сугубо научной сфере. Кстати, русскоязычные работодатели тоже ищут таких специалистов и предлагают свои названия профессии: ведущий алгоритмист и инженер-исследователь. На этих примерах прослеживается та самая специализация, о которой мы упоминали в прошлом разделе.
Что в итоге
Да, действительно программисты, SE и CS — специальности близкие, но не одинаковые, и готовят таких профессионалов на разных университетских специальностях. Наибольшую путаницу в трактовке терминов вносят работодатели – для них, например, разница между «программистом» и Software Engineer может быть совершенно не очевидна.
Судя по требованиям работодателей, от «просто программиста» ждут творческого подхода, универсальных знаний и soft skills, а «computer scientist» может решать важные, но при этом сугубо прикладные, узконаправленные задачи — говорить о том, что одна специальность «по умолчанию» лучше или «сильнее» другой тут не приходится.
О чем еще мы пишем в блоге 1cloud на Хабре:
Инженер-программист
Инженер-программист – специалист, занимающийся созданием программного обеспечения, предназначенного для операционных систем вычислительных машин. Профессия относится к типу «человек-знаковая система», подойдет для абитуриентов, которые любят изучать информатику и математику. Кстати, в 2021 году центр профориентации ПрофГид разработал точный тест на профориентацию. Он сам расскажет вам, какие профессии вам подходят, даст заключение о вашем типе личности и интеллекте.
Краткое описание
На сегодняшний день профессии, которые так или иначе связаны с программированием, являются самыми высокооплачиваемыми и популярными. Инженеры-программисты несут ответственность за разработку, проектирование, производство и тестирование разнообразных программных продуктов. Инженеру необходимо высшее образование, выпускникам профильных ссузов присваивается квалификация «техник-программист».
Особенности профессии
Инженеры-программисты необходимы в разных сегментах, ведь в них заинтересованы промышленные предприятия, производители бытовой техники и инноваций, а также компании, занимающиеся созданием IT-продуктов для бизнеса. В обязанности инженера-программиста входят следующие работы:
Это лишь малая часть обязанностей, профессия связана с постоянной аналитикой, технической работой, требует глубоких знаний в области математики, информатики и смежных дисциплин. Инженеры должны знать несколько языков программирования, а также английский на уровне Independent User (B1, B2) и выше. Иностранный язык необходим для ведения профессиональной деятельности. Он понадобится для самообразования, ведь новой научной и технической литературы, переведенной на русский язык, не слишком много.
Инженер-программист использует методы математического моделирования, алгоритмизацию, разные виды типизации, реляционные модели и базы данных, SQL, СУБД. Профессия подойдет для мужчин и женщин любого возраста, однако эту сферу не стоит выбирать людям, которые страдают от проблем со зрением (снижение остроты, катаракта и другие).
Плюсы и минусы профессии
Плюсы
Минусы
Важные личные качества
Инженер-программист отличается повышенной концентрацией внимания, точностью. К работе относится ответственно и скрупулезно, требователен к себе и окружающим. Инженеры-программисты имеют аналитическое мышление, склонны к самообучению, могут быть немного замкнутыми людьми со средним уровнем коммуникабельности.
Обучение на инженера-программиста
Стать инженером-программистом можно только после окончания вуза. Выбор направлений подготовки огромный, рассмотрим некоторые из них:
Во многих технических вузах реализуются программы двух дипломов, позволяющие параллельно получать образование в российском и зарубежном учебном учреждении. При поступлении необходимо сдавать ЕГЭ по профильной математике, а также по физике, информатике, химии или иностранному языку. Эти специальности престижные и пользуются популярностью у абитуриентов, поэтому к вступительной кампании необходимо очень хорошо подготовиться.
Не каждый программист может так себя назвать: кто такой Software Engineer и как им стать
Редактор в Highload
Навыки и технологии в IT-сфере постоянно меняют нашу жизнь, а спрос на них постоянно растет. Еще 35 лет назад компьютер считался непонятной диковинкой. Сегодня многие люди не могут представить себе жизнь без ноутбука и смартфона. И попробуй только не оплати счет за интернет — точно наступит конец света.
Немного о Software Engineer
Редакция Highload публикует перевод материала.
Информационные технологии просачиваются во все сферы нашей жизни. К примеру, представьте себе электронную торговлю или доставку еды без гаджетов и интернета. Нереально же, правда? Заказать блюда из любимого ресторана сегодня проще простого: открыли приложение доставки еды, один клик — и через полчаса заказ уже будет у вас на столе.
Действительно, сфера IT затронула почти все — от каршеринга до оплаты счетов, от онлайн-развлечений — до медицины и машиностроения. Кроме того, благодаря этому постоянно расширяется список профессий, по которым можно работать на удаленке.
Скорость развития информационных технологий также связана с относительно низким барьером входа. Кто угодно может изучить основы, освоить один из языков программирования и создать революционную программу, которую быстро подхватят пользователи.
Если взять, к примеру, машиностроение, там довольно трудно создать нечто грандиозное, не имея за плечами многолетнего практического опыта и технического образования.
Когда речь заходит о работе в IT-сфере — вариантов уйма. Мы решили рассмотреть одно из самых популярных направлений. Инженер ПО или Software Engineer работает над созданием программ и приложений.
И самое интересное — далеко не каждый, кто занимается программированием, может сказать, что он инженер.
Карьерная лестница Software Engineer
Прежде всего нужно прояснить один вопрос. Многие не понимают разницы между инженером ПО и программистом. Люди путаются в этих определениях, и в итоге всех айтишников называют «программистами». Разберемся, в чем же разница:
Добравшись до уровня сеньор, можно стать архитектором или тимлидом. Архитекторы, как и инженеры, тоже решают проблемы, но на более высоком уровне. Они работают над внутренней структурой и внешним интерфейсом программного комплекса. Найдя сложное архитектурное решение, они передают задание инженерам.
Специализация и обязанности Software Engineer
Теперь рассмотрим основные обязанности инженера ПО на разных уровнях.
Два состояния каждого программиста: «я — бог» и «я не имею представления, что делаю»
Начальный уровень
Когда вы делаете первые шаги в инжиниринге ПО, вам предложат тестирование, чтобы оценить ваши умения. А дальше, в зависимости от результатов, вас нанимают и определяют конкретные обязанности.
Ваши задачи могут быть какими угодно, но все они будут направлены на то, чтобы вы могли учиться и приобретать опыт. Очень часто придется работать с более опытными сотрудниками, которые будут следить за вашим прогрессом и делиться с вами знаниями. Имейте в виду: чем лучше будете выполнять задания, тем больше возможностей у вас появится в будущем!
Джуниор и мидл
Обычно при найме Junior Software Engineer главное требование — опыт. Для этого уровня наличие опыта — не столько бонус, сколько обязательное условие. На собеседовании вас первым делом спросят о том, есть ли у вас опыт работы на аналогичной должности или в этой сфере.
Тем не менее работа — не единственный способ набраться опыта. У вас могут быть и личные, и групповые проекты. Не лишними окажутся и семинары или курсы. Закончили школу инжиниринга ПО — тоже хорошо.
Помимо опыта, джуниор должен уметь работать автономно, без постоянного надзора более продвинутых специалистов.
Работодатель предполагает, что у вас есть базовые знания в сфере разработки ПО. У вас должно быть достаточно навыков, чтобы свободно работать со всеми инструментами, которые используются в программном инжиниринге.
То же самое касается и мидл-уровня, но с одним нюансом. На Middle Software Engineer возлагают больше обязанностей, и навыков у него должно быть больше (как технических, так и коммуникационных). Такой эксперт уже может выступать ментором для разработчиков начального и младшего уровней.
Сеньор
Как и большинство опытных специалистов, Senior Software Engineer должен выполнять свои непосредственные обязанности, а также вести и поддерживать команду. Здесь потребуются еще и коммуникационные, и управленческие навыки. Плюс умение активно слушать, хотя с этим связана не каждая должность в этой сфере. С другой стороны, вам доверят самые важные и сложные задания, поэтому и уровень ответственности значительно возрастет. Если вы доросли до сеньора, значит карьера в этой сфере у вас вполне сложилась.
Архитектор
Архитектор платформ должен сделать так, чтобы платформа выглядела простой и понятной для внешних пользователей. А чтобы этого добиться, можно воспользоваться, к примеру, интерфейсом прикладного программирования (API). В таком случае помимо организации процесса, вы будете участвовать еще и в проектировании API.
Честно говоря, с такими навыками уже можно запросто открывать свой стартап.
Все, что нужно знать о начальном уровне Software Engineer
А теперь посмотрим, какие профессиональные навыки потребуются инженеру на начальном уровне.
Требования к навыкам здесь довольно непритязательны: наличие диплома бакалавра компьютерных наук, разработки приложений или ПО. На самом деле, любое образование, связанное с компьютерами, уже позволит вам претендовать на должность Software Engineer. Не лишним также будет желание учиться и расти.
Профильное образование тоже имеет большое значение. В некоторых областях здесь могут работать и самоучки (или те, кто закончил онлайн-курсы), но для программного инжиниринга этого мало. Разумеется, здесь тоже попадаются специалисты, которые до всего дошли своим умом, но для этого требуется особый тип мышления, настойчивость и огромное желание развиваться. В общем и целом это довольно нетипичная карьерная стезя.
Что же касается технических требований, то начинающий инженер должен мыслить логически и уметь анализировать, хорошо знать математику и компьютерные технологии, уметь документировать свои рабочие процессы.
И хотя это только начальный уровень, вам все равно понадобятся базовые навыки и знания. И помните, что при наличии приличного портфолио проектов у вас будет куда больше шансов устроиться в хорошую компанию.
Чего ждать: будущее профессии
У IT-сферы большое будущее. Можно даже сказать, что это будущее всего человечества. И разработка ПО — большая часть этой истории.
«Я всегда мечтал увидеть будущее»
Большинство экспертов уверены, что у этой сферы большое и светлое будущее.
Примеры должностей
Давайте посмотрим, какие должности могут быть востребованы в этой сфере:
Теперь у вас есть полная картина, и вы будете знать, с чем доведется столкнуться в мире разработки ПО, если вы решите двигаться в этом направлении.