• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Сергей Шершаков о роли программного инженера

Сергей Шершаков о роли программного инженера

ФКН

Мы поговорили с Сергеем Шершаковым, заместителем руководителя департамента программной инженерии и академическим руководителем магистратуры «Системная и программная инженерия», о том, кто такой программный инженер и чем он отличается от других «технарей», что такое инженерная культура и каким должно быть развитие ПИ на ФКН:

Кто такой программный инженер? 

В моем представлении программный инженер — это квалифицированный ИТ-специалист, который применяет инженерные методы и подходы для решения сложных ИТ-задач. Если человек делает это профессионально (зарабатывает этим деньги), то скорее всего его задачи будут индустриальными. Но ИТ-инженеры часто применяют имеющиеся навыки и для решения бытовых задач, и для хобби (пет-проектов). 

Мне кажется, что инженера инженером делают следующие качества: во-первых, это инженерная смекалка, то есть способность прийти к решению поставленной задачи любыми способами.  Во-вторых, это инженерная культура – особое мироощущение, которое появляется у человека с приобретением определенных навыков и опыта. И, наконец, я бы упомянул глубокое знание технологических и математических вопросов. А еще инженера определяет его «титул»: не зря в западной традиции его выносят вместе с более редкой докторской степенью и пишут имена в формате prof. dr. ir. van der Aalst. 

Что такое инженерная культура?

Инженерная культура уходит корнями в точные и естественные науки — математику, физику и информатику, но у каждой из этих областей культура есть собственная. Например, математики работают в мире «идеального»: разработанная ими модель ценна тем, что она точна и определена. Она не обязана принимать во внимание сложности или особенности, которые возникнут при ее реализации. Если мы говорим о компьютерной программе, то с точки зрения математической культуры мы будем оценивать только ее точность, и не будем обращать внимание на затрачиваемые ей ресурсы или необходимость внедрения или поддержки. 

В то же время, эти вопросы – основные для инженера. Как заставить свою модель работать в реальном мире с учетом несовершенства технологий? Все, что математик может придумать только в теории, инженер сможет воплотить в жизнь на практике. 

Что должно входить в инженерную подготовку? 

Одна из важнейших задач инженерного образования – это научить будущего инженера «чувствовать технологию». Что это значит? С одной стороны, инженер опирается на точные методы, свойственные математике. С другой — эти методы находят свое воплощение в виде технологий, которые, в отличие от математических методов, имеют свой жизненный цикл, включающий зарождение и забвение. Кроме того, нужно учитывать, что какие-то технологии живут дольше, какие-то меньше. Особенно это касается ИТ, где среднее время жизни той или иной технологии в последнее время стало особенно коротким, и оценивается периодом в пару лет. Это означает, что программный инженер вынужден постоянно изучать новые технологии, если он хочет поддерживать свои знания и сферы интересов актуальными. 

Скажу крамольную вещь: совершенно необязательно, чтобы поставленная задача вообще была решаемой в своей изначальной формулировке. Например, мы можем поставить задачу «полететь на Луну на летающей тарелке», а можем расширить ее до простого «полететь на Луну». Именно на тарелке мы пока не умеем, но на ракете вполне сможем долететь. 

Особенность инженерного подхода заключается в том, что иногда путем некоторого отступления от первоначальной задумки, решение удается существенно упростить и сделать его менее ресурсозатратным. Более того, именно в таких условиях и происходит рождение новых технологий. Да и вообще, уровень технологий растет – они усложняются, и для их грамотного применения требуются высококвалифицированные инженерные кадры с хорошей математической подготовкой. У них должно быть много практики на том стеке технологий, который можно считать актуальным на момент получения образования. Но самое главное, хороший специалист должен научиться учиться. Самостоятельно, быстро, прицельно и тщательно. И делать это в течение всей своей активной профессиональной жизни. 

Какие у программного инженера типовые задачи? 

Я бы сказал, что программный инженер — это инженер, владеющий информационными технологиями и умеющий эффективно применять их для решения задач. Если говорить в общем смысле, то все это — задачи по превращению существующей потребности в программный продукт. К ним можно отнести: сбор и классификацию требований; выделение ограничений; аудит существующих решений; выбор технологий и инструментов реализации; разработку архитектуры решения и ее имплементацию; тестирование и управление качеством продукта; внедрение, интеграцию, поддержку и др. 

Эти задачи программный инженер решает в тесной кооперации с другими специалистами — менеджерами проектов и продуктов, дизайнерами интерфейсов, аналитиками, заказчиками. Кроме того, часть задач лежит на границе областей ответственности, и в их реализации участвуют несколько разных специалистов. В качестве примера можно привести проектирование пользовательских интерфейсов и управление программными рисками. Первое включает в себя не только инженерные вопросы проектирования интерфейсов, но и их удобство, восприятие человеком, все то, что называют UX (User eXperience)  — и в этом много от психологии. А управление (программными) рисками очень тесно связано с классическим менеджментом. В целом можно сказать, что программный инженер — это специалист очень широкого профиля, и на практике, обычно, каждый выбирает себе более конкретную и более узкую специализацию. 

Чем занимаются программные инженеры в науке и чем в индустрии? 

Мы уже поговорили о задачах программного инженера в индустрии. А программный инженер в науке — это всегда индивидуальное явление и требует особого рассмотрения. Дело в том, что наука и исследования — это всегда поиск нового. Про инженера можно сказать, что он работает с конкретными технологиями для решения конкретных задач, и обнаружение чего-то «нового» в процессе такой работы во многих случаях скорее тревожный признак, чем некоторая интересная «находка». Иногда такое «новшество» вырастает из попыток обойти технологические ограничения при решении задачи, и тогда может родиться новая технология или новый подход. Но это также будет означать, что потребуются дополнительные ресурсы и время для решения исходной задачи, что для индустриальных проектов явление негативное. 

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

Также отдельно можно упомянуть такое относительно новое течение как программная инженерия для исследователей. Появляются даже образовательные программы, посвященные этой теме: как научить профессиональных исследователей, сопровождающих свои исследования написанием софта, делать это профессионально? В большинстве случаев, услышав выражение «академический софт», сразу рождается образ какой-то запутанной и попросту плохо структурированной и поддерживаемой программы, написанной исследователем как «proof of concept» – аппендикса к своему рисечу. При этом такая программа может работать «хорошо» с той точки зрения, что она выполняет поставленную задачу. Как правило, интерес автора к такой поделке заканчивается одновременно с окончанием одного исследования и перехода к другому, особенно если их программные реализации особо не пересекаются. Так вот программная инженерия для ученого — это в общем смысле инициатива по культивированию грамотного инженерного подхода при осуществлении исследовательской работы и разработки сопровождающего ее ПО. 

Какие навыки нужно развивать программному инженеру? 

Их много, но мне хотелось бы остановиться на следующих двух. Во-первых, это внимание к деталям. Инженерное дело не терпит суеты. Конечно, иногда можно «на коленке» сделать прототип, чтобы быстро протестировать какую-то идею. Однако нужно понимать, что такой макет нельзя применять как полноценный инженерный продукт в силу его ненадежности и непроработанности. Все-таки инженерный продукт от поделки отличается в первую очередь именно степенью проработки. 

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

Как заинтересовать программной инженерией и кому она подходит?

Легко представить этот вопрос из уст родителя абитуриента, которые наслышаны, что в ИТ хорошо платят, поэтому надо бы заинтересовать чадо заниматься этим. Считаю, что специально «переинтересовывать» молодого человека на «модные специальности» не нужно, если вы не хотите добавить ему дополнительных психотравм. 

Я определенно полагаю, что, если студенту не интересно заниматься по тому направлению обучения, на которое он почему-то попал, ему нужно задуматься о смене специальности, а не насиловать себя в поисках методик по конверсии интересов: природу не обманешь. 

Как ФКН поощряет занятия ПИ? 

На ФКН есть действительно много способов для поддержки, развития и углубления навыков программной инженерии. Помимо непосредственно основных образовательных программ, это стажировки в крупнейших ИТ-компаниях, летние и зимние школы, в некоторой степени — участие в хакатонах. Наконец, у нас есть группа робототехники и специализированные курсы, такие, как, например, НИС «Создание киберфизических систем»,
«IoT Ecosystems», где студент может погрузиться на более низкий уровень стека технологий, увидеть своими глазами, как оживает разрабатываемое им ПО.

Самый лучший способ оставаться в актуальной повестке — подписаться на информационные ресурсы ФКН: группы в соцсетях и телеграме, а также время от времени заглядывать к нам на сайт — там тоже появляется много интересного. Например, совсем недавно закончилось мероприятие по геймдеву GameJam, организованное департаментом программной инженерии и колледжем IThub. Из ближайших крупных мероприятий также можно отметить школу по программной инженерии, которая планируется в феврале и состоится уже во второй раз. В прошлом году школа собрала большое число участников со всего мира, которые оставили самые хорошие отзывы. 

Как на ПИ происходит взаимодействие с партнерами?

Это может быть и партнерство на уровне подразделения ДПИ, и на уровне образовательных программ. Например, фирма 1С является одним из ключевых индустриальных партнеров, который очень помогает с преподавателями. Сотрудники компании делятся со студентами своим богатым практическим опытом. Также сейчас совместно с 1С открывается новая индустриальная магистратура, «Разработка и внедрение комплексных бизнес-систем». В качестве другого примера приведу академического партнера — Институт системного программирования им. В. П. Иванникова РАН, при активном участии которого в бакалавриате ПИ в прошлом году открылся новый поток «Системное программирование», а также уже много лет существует и пользуется спросом одноименная магистерская программа

Чем занимаются выпускники? Какими историями выпускников вы особенно гордитесь? 

У подавляющего числа выпускников ПИ проблем с трудоустройством нет. Весьма большое число студентов начинает работать по специальности довольно рано, и часто даже раньше, чем нам этого хотелось бы. Как правило, на начальных этапах их карьеры речь идет о разработке ПО; то, что раньше называлось «инженер-программист», а сейчас может называться как угодно.

В конце второго курса студенты проходят летнюю производственную практику, часто в крупных ИТ-компаниях, и многие задерживаются там надолго. Это одновременно и хорошо, и нехорошо. Понятно, что такая практико-ориентированная специальность, как ПИ, немыслима без практической тренировки на реальных проектах. Но уходя на работу full-time, студент обкрадывает сам себя в главном: он недополучает фундаментального образования, не проходит полноценно весь базовый цикл в его классическом академическом виде, а значит — лишается одного из фундаментальных навыков — умения учиться. 

Есть у меня в практике только один единственный пример недоучившегося до диплома бакалавра студента, который, кажется, высшее образование в итоге так и не получил, и неплохо чувствует себя в индустрии — разработчиком. Но это пример непедагогичный, и мы, понятное дело, отметем его с негодованием (смеется). И все же, отвечая на вопрос, чем я горжусь — горжусь ребятами, которые после окончания обучения приходят к нам преподавать. Есть в этом неблагодарном деле элемент «малого подвига», и очень важно, чтобы таких героев у нас было больше, так как без этого воспроизводимость педагогических кадров невозможна. 

Какой вы хотите видеть программную инженерию через пять лет? 

Это непростой вопрос. Я не люблю делать прогнозы, но мне бы хотелось увидеть программу современной, актуальной тому уровню технологий, которые будут востребованы через пять лет, но с опорой на фундаментальные вневременные знания. Мне хотелось бы, чтобы уровень выпускаемых нами специалистов оставался высоким, но в некоторых аспектах появилась большая «рельефность» и «глубина». Сейчас огромная востребованность ИТ-специалистов позволяет вполне успешно устраиваться даже не самым, скажем так, высококвалифицированным специалистам. В то же время им предстоит работать в таких критических областях, как разработка медицинского оборудования, авионики, комплексов управления опасными технологическими производствами и др. Хочется, чтобы наши выпускники были способны предоставлять качественные решения для всех этих областей. 

Как и почему вы сами пришли в программную инженерию?

Я вырос в семье инженеров: мой отец — инженер-приборист в авиации, мама — инженер-программист. Для меня с детства было естественным обитать в инженерной среде и самому однажды стать инженером. Моими любимыми игрушками были различные классные приборы с кнопочками, выключателями, стрелочками и лампочками, и в детском саду мои соратники мне завидовали, когда я приносил их с собой. Я взял паяльник в руки лет в 6-7 и не выпускаю его до сих пор. Но главной моей детской мечтой был компьютер. 

С довольно раннего возраста я периодически имел доступ к разным компьютерам, но мне долго не удавалось заиметь свой собственный. Моим первым персональным (в смысле моим-моим) был так называемый «бытовой компьютер» Sinclair ZX Spectrum, вернее, один из его клонов, а еще вернее — самоделка, собранная из отдельных блоков старшим товарищем. Он же мне его и подарил с целой коробкой дисков 5,25" с различным софтом и играми, а также стопкой книг по программированию на бейсике, ассемблере и описанием компьютерных игрушек. Это было «вау»! В это крутое время я по книжкам писал первые простейшие программки, которые вырвиглазными цветными переливами вылезали из телевизора, к которому надо было подключать Spectrum. Я еще раз вернусь к вопросам «кому заниматься и как заинтересовать» в их инвертированной форме и отвечу так: «если занятия этим не вызывает у вас «вау-эффекта», лучше все же податься в условные стоматологи». Через год мой Spectrum, увы, сломался. А затем у меня появился полноценный IBM PC, и моя профессиональная траектория была предрешена. 

Для меня никогда не возникал вопрос, кем быть, «когда я вырасту». Это была моя большая детская мечта, которая со временем в полной мере воплотилась в жизнь и, в общем-то, никогда меня не разочаровывала. Я никогда не задумывался, насколько «успешной» окажется эта профессия, и поступал в институт на ту специальность, которая для меня была интересной. А потом вдруг получилось так, что ИТ-шник — самая востребованная профессия нашего времени. Что ж, должен признать, что с этим мне просто очень-очень повезло.