Об особенностях академической карьеры в программной инженерии и в компьютерных науках в целом, о том, как устроено исследование программиста, и о многом другом рассказывает Валерий Шилов, профессор департамента программной инженерии факультета компьютерных наук.
профессор департамента программной инженерии ФКН
— Начнем с ликбеза. Программная инженерия — это то же самое, что программирование?
— Смотрите. Есть электроника, в частности твердотельная электроника, исследующая свойства полупроводниковых, диэлектрических, магнитных и других материалов. Ее результаты использует электронная инженерия, которая занимается элементной базой компьютеров. Есть компьютерная инженерия — она про то, как на этой элементной базе строить компьютеры, вычислительные системы. А есть программная инженерия — она про то, как писать, отлаживать, внедрять и сопровождать программы для этих компьютеров. То есть само программирование — это часть программной инженерии, большая часть, важная часть, но только часть.
— Как строилась ваша карьера? И насколько такая карьера типична для вашего поколения программистов?
— Конечно, сегодня академическая карьера строится совершенно по-другому, чем десятилетия назад. Сегодня люди, которые оканчивают университеты и институты по айтишной специальности, в основном идут в промышленность, в разработку, мало кто задумывается о науке. Я начинал довольно-таки давно, почти полвека назад, и тогда нашим приоритетом была наука. Я оканчивал ВМК МГУ[1], это был второй набор на ВМК. Начиная с 3-го курса студенты делились на два потока: одни углублялись в прикладную математику, а другие больше ориентировались на программирование. Я пошел на второй поток, на кафедру алгоритмических языков, которой заведовал выдающийся советский программист первого поколения Николай Павлович Трифонов. Мне это направление, близкое к системному программированию, было более интересно. Впрочем, в дипломах у выпускников обоих потоков в итоге значилось: квалификация «математик», специальность «прикладная математика».
[1] Факультет вычислительной математики и кибернетики Московского государственного университета имени М.В. Ломоносова.
В середине 1970-х с этой специальностью после окончания университета естественным было пойти работать в какое-то научное учреждение. Конечно, можно было еще пойти в вычислительный центр какого-нибудь промышленного предприятия. Компаний же — разработчиков программного обеспечения тогда не было! Я попал по распределению в 45-й институт Министерства обороны и проработал там 13 лет гражданским служащим, не военным. Участвовал в разработке и испытаниях советских суперкомпьютеров для противоракетной обороны. Собственно, тогда же я и начал заниматься наукой. Естественно, занимался и программированием тоже, но это не было моей основной работой. Программирование выглядело так: у тебя есть задача, ты должен решить ее как математик, как алгоритмист. Ну а потом, поскольку программистов профессиональных нет, ты должен сам ее запрограммировать и отладить. Этим я тоже занимался и писал довольно много программ на разных языках. Но все-таки больше я занимался вопросами, связанными с разработкой суперкомпьютеров. Моя диссертация была этому посвящена. Мы с моим руководителем профессором Аркадием Бенционовичем Барским предложили оригинальную архитектуру вычислительной системы и всячески ее продвигали и пропагандировали, выступали на конференциях, публиковали статьи в открытой печати. Тогда не было возможности печататься за границей, печатались здесь, в Советском Союзе. Это и было стартом моей карьеры.
Затем академик Всеволод Сергеевич Бурцев пригласил меня в Вычислительный центр коллективного пользования Академии наук. Я проработал там несколько лет, с 1989 по 1997 год. Это был тоже очень интересный период. Наш ВЦ разрабатывал, наверное, последний масштабный компьютерный проект советских времен — проект создания оптического суперкомпьютера. Был расчет на то, что, построив компьютер не из электронных, а из оптических элементов, используя возможности оптики для хранения и передачи данных, удастся добиться рывка в производительности. После распада Советского Союза этот грандиозный проект, естественно, скукожился, потому что в нем принимала участие вся страна: Киргизия, Эстония, Украина, Молдавия… И когда связи распались, проект заглох. А потом, как решили власти, необходимость создавать свои, отечественные суперкомпьютеры отпала... Тогда же, в начале 1990-х годов, Всеволод Сергеевич Бурцев решил организовать кафедру в Московском авиационном технологическом институте (МАТИ) и предложил мне заняться образовательными программами, — он понимал, что наука рано или поздно снова станет востребована и будущих разработчиков компьютеров надо начинать готовить уже сейчас. Кафедра в МАТИ (она была названа ПВК — проектирование вычислительных комплексов) приняла первых студентов в 1993 году. Я стал заместителем заведующего кафедрой (сначала как совместитель), а в 1997 году перешел на полную ставку профессором — как раз в это время Бурцевский институт был Академией наук закрыт. В 2004 году меня избрали заведующим кафедрой. К этому времени кафедра уже переориентировалась с подготовки аппаратчиков на подготовку разработчиков программного обеспечения. Кафедра была очень сильная, в разное время на ней работали такие известные ученые в области вычислительной техники, как лауреат Ленинской и Государственной премий Юрий Степанович Рябцев, лауреат Госпремии Андрей Михайлович Степанов, лауреат Премии Совета Министров СССР Николай Евгеньевич Балакирев, математики и физики с международным именем Николай Васильевич Арделян, Сергей Михайлович Захаров и другие. Мои студенты постоянно побеждали и становились призерами Всероссийского конкурса выпускных квалификационных работ (и бакалаврских, и магистерских) по направлению «Информатика и вычислительная техника», трижды побеждали на Всемирных конкурсах студенческих проектов IEEE Computer Society. Больше тысячи выпускников кафедры работают по всему миру и по всей России.
Но начинались уже другие времена, работать становилось все сложнее. Был период, когда четыре года подряд мы новый год встречали с новым ректором! Каждый приходил со своими управленческими идеями, нередко весьма странными, а подчас и просто нелепыми. Народ начал разбегаться, лучших специалистов, поскольку они имели собственное мнение и не стеснялись его отстаивать, увольняли. В общем, институт разваливался. Процесс принял необратимый характер после объединения МАТИ и МАИ[1]. Стало окончательно понятно, что мне там больше делать нечего. И как раз в это время Сергей Михайлович Авдошин пригласил меня в Вышку на только что образованный факультет компьютерных наук академическим руководителем образовательной программы бакалавриата «Программная инженерия», которым я оставался восемь лет, до 1 сентября 2023-го. В настоящее время я являюсь профессором департамента программной инженерии.
В общем, полагаю, что моя карьера достаточно типична для специалистов моего поколения.
— В конце 1990-х — начале 2000-х вы получили еще юридическое образование. Зачем?
— Во-первых, для того, чтобы лучше руководить коллективом кафедры, а коллектив у меня был немаленький. В моменты наивысшего развития кафедра реализовывала две бакалаврские и две магистерские программы, численность студентов и аспирантов доходила до 600 человек, включая иностранцев, и еще преподавателей несколько десятков. Много возникало вопросов, связанных с функционированием этого непростого организма. Поэтому почему бы не получить юридическое образование? Оно не раз мне пригодилось. Скажем, с 1999 до 2008 года я возглавлял Благотворительный фонд поддержки образования «Познание». Это была специфическая организация, но мы издали несколько хороших учебных пособий по математике для школьников, организовывали интересные курсы по программированию, компьютерной графике и др. А главное, через этот фонд московское правительство финансировало выставку «Образование и карьера». Знаменитая международная выставка, которая на протяжении многих лет проходит в Гостином дворе два раза в год. В работе фонда возникало много именно правовых, юридических нюансов.
[1] Московский авиационный институт.
И в 45-м институте, и в Академии наук я довольно много занимался программированием. Это были программы не коммерческие, а научные, с помощью которых проверял те или иные гипотезы или моделировал ту или иную систему. Ну а когда я уже кафедрой заведовал, через нее проходило много проектов, в том числе по разработке программного обеспечения. В некоторых проектах я выступал не разработчиком, а руководителем. И эта деятельность была уже гораздо ближе к программной инженерии, потому что ты должен был не только понимать, что делают твои коллеги-разработчики (а иногда и помогать им), но и планировать, управлять и так далее.
Программная инженерия — дисциплина очень специфическая. Это такой зонтик, который покрывает огромный спектр вопросов, иногда довольно разноплановых, связанных с разработкой программной системы от начала до конца. В дипломах наших выпускников написано: «программный инженер». Но в компаниях нет такой штатной единицы. В реальности разработкой занимается целый пул специалистов. Есть аналитики, которые работают с клиентами, извлекают из них требования и формализуют их для того, чтобы передать разработчикам. Есть специалисты, которые проектируют архитектуру будущей программной системы. Есть разработчики, которые программируют. Есть отладчики, которые отлаживают и тестируют новую систему. И есть те, кто этим руководит. Программный инженер должен уметь все это. Естественно, он начинает с каких-то младших позиций, чаще всего разработчика, хотя многие начинают и аналитиками, а кто-то тестировщиком. И это я перечислил только малую часть тех позиций, тех ролей, которые имеются в сегодняшней разработке. Поработав и поняв, как процессы устроены изнутри, и имея соответствующую теоретическую подготовку, человек становится великолепным, классным руководителем проектов. Это не просто менеджер, который получил общие управленческие компетенции на экономическом факультете, а профессионал, который разбирается во всех стадиях разработки. И поэтому это не такой руководитель, который просто будет говорить своим подчиненным: «Чтобы к завтрашнему дню все было готово!» Он может помочь, посоветовать, ему доверяют подчиненные, потому что знают, что он тоже профессионал, что он понимает весь процесс и его требования обоснованны. Вот максимум программного инженера, его вершина — руководитель большого, крупного программного проекта, человек, который умеет делать все, что этот проект составляет.
— Как сегодня строится академическая карьера программиста?
— Сегодня, на самом деле, ситуация очень сложная именно с программистами. Системному программисту несколько проще, поскольку он участвует в разработках, требующих чаще всего серьезного математического аппарата, и этот математический аппарат и становится предметом диссертации. А программистам, которые работают не в научных организациях, не занимаются компиляторами, операционными системами и т.п., гораздо сложнее. У меня на кафедре защищались и мои ученики, и ученики моих коллег, и обычно это проходило очень сложно. Потому что, по моему опыту, программисты, как правило, защищались по специальности «Математическое моделирование, численные методы и комплексы программ». Вот «комплексы программ» — это вроде программистское дело, но для защиты диссертации требуется сочетание всех трех элементов. Ты должен также провести какие-то расчеты, используя численные методы, причем желательно новые, и предложить математическую модель объекта диссертационного исследования. Понятно, что прикладной программист этим не занимается. И какую бы сложную, интересную систему он ни разработал, будь он даже ее основателем и идеологом и будь она потом внедрена повсюду, защитить ее по этой специальности очень тяжело. И, опять-таки по моему опыту, довольно часто аспирантам приходится какую-то математику не то что изобретать, но притягивать за уши. Иной раз можно было бы без нее обойтись, но аспиранту приходится работу «наукообразить», он должен показывать свою научную квалификацию, математическую квалификацию, а это, к сожалению, не все программисты могут.
На самом деле, сегодня программисты достаточно редко идут в науку. В основном это те, кто работает в серьезных организациях вроде Института системного программирования или Вычислительного центра РАН, где надо воплощать и проверять свои научные идеи с помощью программных моделей. А бо́льшая часть все-таки идет работать в фирмы, разрабатывающие новые прикладные программные продукты. Там великолепные условия содержания, большие оклады по нынешним меркам, самые большие из всех видов деятельности, кроме рэкета, наверное. Конечно, возможность много зарабатывать весьма привлекательна. Тем более что работа интересная, хотя при этом сложная, требующая полного погружения. Так что отвлекаться еще на научную деятельность, то есть на придумывание того, как подать свою работу, под каким углом представить, чтобы она выглядела именно как научная работа, — многие думают: зачем? Карьерный рост в компаниях чаще всего не связан с наличием ученой степени. Другое дело, что ученая степень свидетельствует об определенном уровне квалификации, а важна именно квалификация, а не формальное наличие кандидатского диплома. Но в принципе ученая степень для карьеры программиста не является чем-то обязательным.
— Как устроено программистское исследование?
— Если речь идет о диссертационном исследовании, то, во-первых, его содержание не может быть чисто прикладным. Ведь к защите представляется некая математическая модель, которая должна быть тобой разработана и которую ты реализуешь уже как программист. Исследуешь при разных параметрах и говоришь: да, при таких-то условиях она здорово работает, это полезно. Скажем, прогнозирование времени окончания проекта по разработке большой программы. Это очень важная задача, поскольку обычно оценка производится достаточно приближенно, а между тем ошибка грозит срывом сроков, а значит, большими материальными потерями. Поэтому, если есть модель, которая позволяет, исходя из каких-то параметров — производительность труда, ресурсы, количество сотрудников и так далее, — этот срок рассчитать, а потом динамически каждый день пересматривать, пересчитывать в зависимости от того, как идет работа, это даст большую экономию. Мой бывший студент несколько лет назад сделал совершенно замечательную работу на эту тему: предложил очень интересную модель, реализовал ее в виде программы, показал, что она работает и дает результаты с хорошей точностью, и защитил диссертацию. Но он все-таки защищал не программную реализацию, а в первую очередь математическую модель. Другие студенты защищались по каким-то темам, более близким к физике. Например, матмодель и программный комплекс процессов теплообмена в жилых домах. То есть возможны абсолютно разные работы, но везде должна быть матмодель, и все равно приходится уходить в какую-то другую область, помимо программирования.
— А как эта проблема с получением ученой степени программистами решается на Западе?
— Честно говоря, детально не знаю. Но мне почему-то кажется, что там эта проблема так остро не стоит. У них другая система написания и защиты диссертаций. Нет ни такого жесткого деления на научные специальности, как у нас, ни такой строгой регламентации содержания диссертации и всех процессов защиты. Если имеется некий результат, который ты получил, то защищаешь его, приблизительно как у нас сейчас в Вышке. Если ты сделал какую-то интересную работу и у тебя есть соответствующие серьезные публикации, ты можешь их представить комиссии из уважаемых специалистов, которая рассматривает их, заслушивает твой доклад и говорит: да, ты показал свою квалификацию как PhD в области Computer Sciences.
— Что изменилось в программной инженерии с советского времени?
— Программная инженерия зародилась в мире где-то в 1960–1970-е годы. Тогда появились мощнейшие компьютеры, на которых стало возможно решать очень сложные задачи, которые раньше, на слабых компьютерах, решить было нельзя. А значит, появилась возможность писать огромные, сложные программы. Но было непонятно, как эти программы разрабатывать. Это же не один человек на коленке пишет и сам отлаживает, а большие коллективы. Как организовать эту коллективную работу? Как построить взаимодействие и согласовать те части, которые делают отдельные люди или отдельные подразделения этого большого проекта? И так далее. Как ответ на эти вызовы где-то к концу ХХ века программная инженерия и оформилась окончательно. Появился ряд международных стандартов, регламентирующих ее содержание и процессы. Появилась и соответствующая академическая дисциплина. Программную инженерию начали преподавать в университетах, и в середине 2000-х годов она пришла и в Россию. Благодаря в том числе Сергею Михайловичу Авдошину, первому руководителю нашего департамента. Они с коллегами разработали первые образовательные стандарты, и программная инженерия была утверждена в России как направление бакалавриата и магистратуры. С этого момента программная инженерия начала шагать по нашей стране.
В советское же время формально программной инженерии не было. При этом в Советском Союзе были выдающиеся специалисты, особенно в Министерстве обороны (но, конечно, не только), которые в принципе шли тем же путем, что и их коллеги на Западе. Они реализовывали грандиозные, масштабные проекты разработки программного обеспечения, но их деятельность длительное время не осмысливалась и не репрезентировалась как новое научное и техническое направление. Кроме того, многие их проекты имели гриф секретности, и они не могли получить широкой известности. Фактически эти специалисты были программными инженерами, хотя они так себя не называли.
— Чем отличается обучение программной инженерии в Вышке от обучения в других вузах?
— Во-первых, Вышка была первым вузом, внедрившим у себя обучение по этому направлению. И общий подход, и образовательный стандарт, и учебные планы были разработаны очень-очень здорово. Сергей Михайлович Авдошин проделал колоссальную работу и заложил основу для развития на многие годы вперед. Это не самореклама, потому что не я это делал, а реклама Вышки! На мой взгляд, в Вышке лучшая программа обучения программной инженерии, которая есть в России. И это единственная программа, которая в полной мере может называться именно программной инженерией. В ней есть то обязательное ядро, которое и составляет суть программной инженерии, но имеется также большое количество научно-исследовательских семинаров и дисциплин по выбору, позволяющих студенту определиться с областью своей будущей профессиональной деятельности. Да, есть замечательные вузы — ИТМО[1], Физтех, которые тоже обучают по этому направлению, но некоторые дисциплины, которые обязаны знать и освоить программные инженеры, в их программах либо отсутствуют, либо даются элективно. Скажем, в ИТМО образовательные программы по направлению «Программная инженерия» называются «Компьютерные технологии в дизайне», «Нейротехнологии и программирование» и «Системное и прикладное программное обеспечение». То есть они готовят не программного инженера, а узкоспециализированного разработчика. Готовят здорово, программы великолепные, сильнейший вуз — все замечательно. Но это все-таки, на мой взгляд, не в полной мере программная инженерия. То же самое в Физтехе. Хотя у них эта программа реализуется только второй год, поэтому пока трудно сказать, во что она разовьется. Но то, что я видел, тоже ориентировано на подготовку классного разработчика, который многое умеет, много знает — технологии, языки программирования, библиотеки и т.д., — однако общего взгляда на программную инженерию ему не дают.
[1] Национальный исследовательский университет ИТМО (Институт точной механики и оптики).