Как выглядит успех в программной инженерии и какие качества необходимы для его достижения? О роли программной инженерии в современной IT-индустрии и об отличиях направления в Вышке от программ в других вузах и странах рассказывает Ольга Максименкова, заместитель руководителя департамента программной инженерии ФКН.
— Почему вы в начале 2000-х решили поступать на прикладную математику?
— Такие решения не принимаются в одночасье. Прикладная математика — непростое направление, к поступлению в большинстве случаев необходимо готовиться. Я сфокусировалась на поступлении в девятом классе. Пришлось серьезно подтягивать знания по математике и физике, чтобы перейти из обычной школы в лицей информационных технологий. Два года в лицее дали, во-первых, достойный уровень подготовки для поступления и дальнейшей учебы в вузе, а во-вторых, окончательное понимание того, что именно на прикладную математику и следует пойти.
Для меня было важно заниматься сложными задачами и быть в мире IT. И того и другого на прикладной математике с избытком. IT-направления в тот период не были такими модными, как сейчас, поэтому я с уверенностью могу сказать, что это решение принималось по любви и велению сердца, а не было данью моде.
— Как вы узнали о программной инженерии? Как менялось ваше представление об этой области знания?
— Немного поясню. Я училась в то время, когда еще не во всех университетах существовало разделение на бакалавриат и магистратуру. В частности, на прикладной математике в МИЭМ тогда был специалитет и программа на пять с половиной лет обучения: пять лет учишься и еще полгода сдаешь государственные экзамены и готовишь диплом. Собственно, именно поэтому мой выпуск из университета в 2006-м пришелся на появление первого в России образовательного стандарта по программной инженерии и первых образовательных программ по этому направлению подготовки в Вышке.
На четвертом курсе я пришла работать над дипломом к профессору Вадиму Подбельскому (1937-2021). Он впоследствии стал первым сотрудником, принятым на кафедру управления разработкой программного обеспечения (УРПО) отделения программной инженерии ВШЭ. Поскольку мы регулярно встречались по вопросам диплома, то часть документов по открытию направления «Программная инженерия» была «надолблена» моими руками под диктовку Вадима Валериевича на компьютере кафедры математического обеспечения систем обработки информации и управления факультета прикладной математики МИЭМ, в корпусе в Большом Трехсвятительском переулке, где теперь сидят наши правоведы.
Мне тогда программная инженерия казалась чем-то непривычно инженерным, то есть гораздо больше связанным с реальной жизнью, чем прикладная математика. Больше всего меня зацепила ярко выраженная системность направления: программная инженерия — это прежде всего системный подход к созданию программного обеспечения любого масштаба.
— Как складывалась ваша карьера после окончания МИЭМ?
— На старших курсах я уже работала в школе учителем информатики. По окончании университета почти сразу оставила школу и перешла работать программистом. Не могу сказать, что было интересно. Достаточно быстро я поняла, что «общаться» с одним только программным кодом, не решая новых и сложных задач, — это не мое. Мне очень не хватало академической среды.
Поскольку дипломная работа меня сильно захватила, Вадим Валериевич Подбельский поручил мне разработку системы педагогического тестирования для проверки знаний по программированию с возможностью валидации открытых ответов с кодом. На гребне интереса я начала выступать на студенческих конференциях, позже перешла на взрослые. Вадим Валериевич настойчиво учил меня работать с текстом: читать, править, переструктурировать.
После выпуска мы регулярно созванивались с Подбельским, обсуждали, что можно было бы интересного сделать и исследовать дальше, но долгое время без результатов. Все-таки научная работа «без отрыва от производства», на котором у тебя совсем другие обязанности и задачи, — это очень сложно и в основном непродуктивно.
В итоге в 2008 году Подбельский предложил мне вести за ним практические занятия по дисциплине «Информатика и программирование», прародительнице дисциплины «Программирование на C#», которую помнит не одно поколение студентов ПИшников на ФКН, и пригласил меня на собеседование с руководителем отделения программной инженерии Сергеем Авдошиным. Так я познакомилась с отцом-основателем «Программной инженерии» в Вышке и в сентябре того же года начала совмещать занятость в коммерческой компании с работой в ВШЭ. Фирма, где я работала программистом, той же зимой внезапно закрылась, и в 2009-м я с чистой совестью перешла на кафедру управления разработкой программного обеспечения отделения программной инженерии факультета бизнес-информатики.
Мне посчастливилось почти сразу попасть в коллектив авторов учебных пособий издательства «Просвещение» и поработать непосредственно с Авдошиным и его заместителем Риммой Ахметсафиной. Собственно, она меня и пригласила поучаствовать. Мы вместе разработали семь учебных пособий для 9-х и 11-х классов для подготовки к ГИА и ЕГЭ. Не каждому молодому специалисту так везет! К сожалению, в 2022 году Риммы Закиевны не стало, и сейчас нам очень не хватает ее мудрости и колоссального административного опыта, но мы помним ее и ценим и, надеюсь, не роняем планку.
В Вышке я уже серьезно занялась вопросами разработки и проектирования программных средств учебного назначения, то есть несколько расширила свои интересы от автоматизации педагогического тестирования до более широкого спектра задач. Сейчас я понимаю, что многим обязана программной инженерии, потому что именно работа в коллективе специалистов в этой области позволила мне по-новому взглянуть на свои научные интересы, подтолкнула к более серьезному погружению в системную инженерию.
В 2018 году я защитила кандидатскую диссертацию по техническим наукам, и у меня начался новый период искания себя. Я и магистерской программой «Цифровая трансформация образования» соруководила, и лабораторию геймдева (game development) в Колледже информационных и креативных технологий (IThub) возглавляла, и заместителем директора Центра стратегической аналитики и больших данных ИСИЭЗ Вышки успела потрудиться. Это был интересный и важный опыт, и на этом я закрыла для себя вопросы, связанные с программным обеспечением для образования. Иногда я возвращаюсь к ним, но скорее с запросом «интересно, а что у вас там новенького», чем по велению души и сердца.
Со школьным образованием, тем не менее, я никогда не разрывала. Департамент программной инженерии много лет проводил школу по разработке мобильных приложений, которую какое-то время мне посчастливилось возглавлять. В основу школы был положен проектный программно-инженерный подход. Идеальная траектория выглядела так: абитуриент — студент (наш ассистент на школе) — выпускник (лидер треков). Пару лет назад школа пережила новое рождение и стала Летней школой по программной инженерии (ЛШПИ). Мы сохранили тот же подход, но отказались от узкой специализации на мобильных приложениях. С 2024 года коллеги из отдела по работе с абитуриентами, студентами и выпускниками ФКН привлекли департамент программной инженерии к разработке мероприятий для школьных учителей. Сейчас мы выстраиваем проектную школу для учителей информатики, основанную на принципах гибкой разработки. Кажется, опыт программной инженерии может оказаться полезен для создания методической рамки.
Сейчас я сфокусирована на компьютерных играх, и мои исследовательские интересы связаны с ними. В моем портфолио несколько переводов книг по разработке на Unreal Engine и одна своя книга — «Программирование в Unreal Engine 5 для начинающего игродела. Основы визуального языка Blueprint», написанная в соавторстве с моим учеником Никитой Веселко.
С 2024 года я руковожу проектной группой «Программная инженерия компьютерных игр — ПИКИ». Помимо разработки игр, мы развиваем проект «ИИгра», который рассматриваем и как «песочницу» для исследования игрового искусственного интеллекта, и как точку накопления данных для изучения новых типов человеко-машинного взаимодействия. Казалось бы, я уже не в том возрасте, чтобы «заскакивать» в новые научные направления, но это неотъемлемая часть программной инженерии — здоровое любопытство и умение учиться новому и развиваться, тем более что какой-никакой опыт есть, подходы к освоению новых областей сформированы и очень помогают.
В прошлом году начался мой новый карьерный виток в Вышке, и сейчас я, помимо прочего, тружусь в статусе заместителя руководителя департамента программной инженерии. Можно сказать, что теперь и я в какой-то степени отвечаю за сохранение традиций программной инженерии в Вышке и ее движение вперед. Положение обязывает.
— Что самое сложное в программной инженерии?
— Самое сложное в программной инженерии — сложность. Я бы сказала даже — управление сложностью, то есть умение с ней работать. Очень много и понятно об этой сложности сказано в книге Фреда Брукса «Мифический человеко-месяц». В частности, он сформулировал, в чем состоит основная сложность программной инженерии: «Сложность — это то, чем мы занимаемся, и сложность — это то, что нас ограничивает».
Программно-инженерная сложность проявляется по-разному. Во-первых, в поддержании целостности и в организации эффективной коммуникации больших команд, особенно при распределенной разработке, например транснациональной.
Во-вторых, динамически изменяющийся мир сильно влияет на требования к программам. Необходимо адаптироваться к постоянно меняющимся условиям, управлять развитием программных решений. В связи с этим любят упоминать о техническом долге, то есть балансе между скоростью разработки и качеством архитектуры.
В-третьих, обеспечение надежности, безопасности и сопровождаемости комплексных программных систем на протяжении долгого времени — непростая задача, т.к. устаревают инструменты и средства разработки, оборудование (которое еще из строя может выходить), нарастает технический долг и т.п.
Наконец, в-четвертых, никуда не деться от необходимости согласования формальных моделей и реального кода: теория часто не учитывает практических ограничений. В связи с этим возникают как типично инженерные задачи (такие, как адаптация к реальности), так и опытно-конструкторские работы, которые сейчас модно называть R&D, и даже сформировалось целое направление Research Software Engineering (RSE).
— Чем подготовка по «Программной инженерии» в Вышке отличается от подготовки по этому же направлению в других вузах?
— Современный программный инженер — это не просто грамотный технический специалист, который умеет писать программный код, а человек с уникальным набором дополнительных профессиональных качеств: умение разобраться в бизнес-контексте поставленных задач, готовность к новым вызовам, гибкость в обучении и способность эффективно работать в мультидисциплинарных командах.
Университетская программа должна не только давать фундаментальные знания, но и развивать системное мышление, soft skills и готовность учиться на протяжении всей трудовой карьеры да и жизни в целом.
Вышкинская «Программная инженерия» исходно выстраивалась на принципах близости к индустрии с учетом актуальных данных в ключевом своде знаний Software Engineering Body of Knowledge (SWEBOK) — международном стандарте, постулирующем общепризнанные знания о программной инженерии и входящих в нее областях. Программы Вышки согласованы с международными рекомендациями по преподаванию программной инженерии в вузах Computing Curricula 2005, Computer Science Сurricula 2001/2008/2013 и Software Engineering 2004.
Наш отец-основатель профессор Сергей Авдошин с момента открытия первых программ в Вышке транслировал принцип своевременного ответа на изменения. Меняется программная инженерия как область знания — актуализируется и направление подготовки. Не через год, не через десять лет, а здесь и сейчас. «Программная инженерия» Вышки релевантна не только рынку, но и мировым образовательным и профессиональным стандартам. Это позволяет нам на протяжении многих лет не костенеть, получать престижные профессиональные, в том числе международные, аккредитации, выигрывать важные конкурсы. Например, в 2025 году Высшая школа экономики с бакалаврской программой «Программная инженерия» выиграла грант из федерального бюджета на обеспечение обучения студентов по образовательным программам высшего образования для топ-специалистов в сфере информационных технологий в рамках федерального проекта «Кадры для цифровой трансформации» национального проекта «Экономика данных и цифровая трансформация государства».
— Какова роль программной инженерии в современной IT-индустрии? В чем ее актуальность?
— Как общество мы уже ушли от периода, в котором каждая программа была штучным произведением искусства. Сегодня программы и программные комплексы — это не просто много сложно увязанного друг с другом кода (я очень упрощаю), но также и наборы правил, регламентов, планов развития и инженерных подходов к его созданию. Сейчас мы рассматриваем разработку программного обеспечения как инженерную задачу, что позволило выделить процессы создания некоторых приложений, например несложных, типовых мобильных приложений, и «спрятать» логику, которую программисты пишут в целые блоки. Сегодня обычный человек может собрать эти блоки, как конструктор, и получить приложение, не написав ни одной строчки кода. Без инженерии это невозможно, т.к. сначала нужно выделить общий вид программы, понять единые процессы для таких программ. В частности, это касается появления low-code- и zero-code-решений. К примеру, все интернет-магазины устроены примерно одинаково, плюс-минус пара функций, и сегодня такой магазин можно сделать без кода вообще, просто воспользовавшись zero-code-конструктором.
Центральное понятие программной инженерии — жизненный цикл программного обеспечения, который позволяет управлять созданием программ от идеи до реализации, контролировать продукт на всех этапах создания и оперирования. Время же диктует, что выпуск программного обеспечения на рынок — не финальная точка: с одной стороны, программы требуют сопровождения, с другой — современные подходы заставляют разработчиков заниматься исследованиями, проверкой гипотез и доведением продукта, уже находящегося на рынке. Это сложно. Представьте, что вы доделываете на ходу летящий самолет, улучшая его ходовые характеристики и повышая комфорт для пользователя. Именно программная инженерия изучает, документирует и регламентирует то, как именно следует работать с программным обеспечением как инженерным продуктом, помогая держаться на плаву в усложняющемся IT-мире.
— Какие человеческие качества необходимы для достижения успеха в области программной инженерии?
— Конечно, фундамент успеха — это развитые технические навыки. Но очень важны и человеческие качества, которые помогают эффективно работать не только с кодом, но также с людьми и сложными системами. Ключевыми качествами я бы назвала следующие. Во-первых, критическое мышление — умение анализировать проблемы, выявлять причины ошибок и находить рациональные решения. Во-вторых, любознательность — стремление учиться новому, разбираться в том, как и почему что-то работает. Сюда я бы также отнесла гибкость и адаптивность — способность быстро осваивать новые технологии, методологии и менять подходы при изменении условий. В-третьих, терпение, усидчивость и внимание к деталям: отладка, рефакторинг и работа с legacy-кодом требуют выдержки даже в эпоху нейронных сетей, а малейшая ошибка в коде может привести к серьезным сбоям. В-четвертых, коммуникабельность, т.е. умение ясно объяснять идеи коллегам, заказчикам и нетехническим специалистам, и эмпатия — понимание потребностей людей вокруг, например пользователей, что критично для проектирования удобных и поддерживаемых систем, или коллег, что важно для командообразования. Наконец, в-пятых, ответственность — готовность обосновывать свои проектные решения, метрики продукта и кода, оценивать последствия их использования, управлять рисками, при необходимости исправлять ошибки и работать с последствиями.
— Какие профессиональные амбиции у нынешних выпускников «Программной инженерии»? Как выглядит сегодня профессиональный успех в этой области?
— Направление достаточно широкое. Как следствие, и возможностей много, и амбиции могут выражаться по-разному. Я бы выделила несколько траекторий:
Успех в программной инженерии сегодня выглядит по-разному. Успех — это стать инженером, чьи решения лежат в основе критических инфраструктур, таких как ядра операционных систем, языки программирования, инфраструктуры развертывания и кластеризации программного обеспечения или DevOps- и MLOps-технологии, — можно еще много перечислить.
Успех — это подняться до уровня технического лида или архитектора, например члена архитектурного комитета, масштабных устойчивых платформ. Я отношу сюда и open-source-активистов, чьи проекты используют миллионы разработчиков.
И конечно, успех — это инженеры-исследователи (RSE-специалисты), глубоко погруженные в научные исследования и дающие реальную жизнь научным результатам, например, в области энергоэффективных вычислений, доверенного и безопасного ИИ, верификации программ и проч.
Главное, что успех — это не абстрактная субстанция, а люди и команды, работающие и развивающие программную инженерию в настоящем для будущего.