Pull to refresh

Конец программной инженерии и последний методист

Reading time 5 min
Views 17K
Original author: Bertrand Meyer
Это перевод статьи профессора Бертрана Мейера из блога Communications of the ACM.
Статья относительно недавняя (по сравнению с предыдущим переводом).

Кроме того, что Бертран Мейер известен большинству специалистов как создатель языка программирования Eiffel и идей контрактного программирования (design by contract), он является почетным доктором и заведующим кафедрой ИТМО, преподает в университете Иннополис. И прекрасно владеет русским языком. ;)

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

Но так было в давние времена. За некоторыми исключениями, одно из которых будет упомянуто ниже, если кто и продолжает изучать методологии программирования, занимается он этим уже в мире agile, там, где решающие доводы часто начинаются с фразы «Я всегда говорю…» (Пример со страницы консультанта: «я всегда говорю команде: ‘Мне хотелось бы, чтобы [пользовательские] истории были небольшими, умещались в одну итерацию, однако такой путь не всегда приемлем»). Дейкстра, бывало, апеллировал к интуиции, однако подтверждал ее строгими концептуальными доказательствами.

Область программной инженерии, где методология программирования в наши дни является лишь небольшой частью, невероятно расширилась и в глубину и вширь. Конференции типа ICSE и ESEC все еще привлекают большие толпы, журналы гудят, исследователи по-прежнему в восторге от своих работ, но… являюсь ли я единственным, кто ощущает все нарастающее вокруг разочарование? Непонятно интересно ли это все кому-либо за пределами сообщества. Мир, похоже, считает программную инженерию чем-то таким, что знакомо любому в ИТ, мы же все разрабатываем программы, ну или управляем людьми, которые разрабатывают программы. В обзоре найма факультетами компьютерных наук в США от 2017 года, показано, что в ста ведущих университетах, предоставляющих профессорские места, программная инженерия заняла лишь 3% от всех вакансий! (В ВУЗ-ах, которые ограничиваются уровнем магистра, эта цифра равна 6%, не сказать, чтобы незначительно, но и не впечатляет также, учитывая, что эти заведения в основном и ответственны за подготовку будущих инженеров-программистов.) С точки зрения академической карьеры, очевидное направление для выбора – «Искусственный интеллект, анализ данных и машинное обучение», которое набрало 23% от числа нанятых в этих 100 лучших университетах.

Ничего не имею против коллег из ИИ; я всегда считал, что «ИИ зима» была перебором [1] и у них есть право на весну. Означает ли это, что теперь программная инженерия должна отправиться в зиму? Это сумасшествие. Программная инженерия важна как никогда. Недавняя статья-«апокалипсис от ПО» (больше о проблеме, чем о решении) – один из последних обзоров, звучащих как сигнал тревоги. Или, как один из недавних примеров – почитайте об утере спутника в России [2] (сочная цитата, которую вы можете использовать в следующий раз, когда будете преподавать классу тему сложности тестирования программного обеспечения: «Это выявило скрытую проблему в алгоритме, которая не проявлялась десятилетиями успешных пусков связки “Союз” — “Фрегат”»).

Подобные случаи, кстати, иллюстрируют то, что я бы назвал дилеммой профессора программной инженерии, гораздо более интересной, на мой взгляд, чем причудливые этические головоломки (вы понимаете о чем я – проблема вагонетки и тому подобное) над которыми люди с философского факультета проводят свои дни: этично ли, для профессора программной инженерии, каждое утро, сразу после пробуждения, открывать сайт cnn.com в надежде на свершение какой-нибудь программно-инициированной катастрофы, которая окончательно узаконила бы его профессию? Ответ простой – нет, это не этично. Тем не менее, когда вы наблюдаете в каком состоянии находится обычная разработка программного обеспечения, подумать страшно (хотя и неправильно такого желать) обо всех поджидающих своего часа катастрофах, которые, как вы можете подозревать, там уже заложены и просто ждут правильного стечения обстоятельств.

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

Ценится, однако, не то, что нужно миру, а то, что мир считает нужным. Не похоже, чтобы мир думал о большой необходимости программной инженерии. Даже когда программное обеспечение приводит к катастрофам, мы видим заголовки день-два и потом ничего. Радио тишина. Я до тошноты спорил, включая четыре раза в этом блоге (теперь пять), о необходимости простого правила, которое требовало бы публичной ревизии каждого такого события; цитируя самого себя: авиаперевозки становятся безопаснее не случайно, а из-за несчастных случаев. К этим предостережениям остаются глухи. В качестве другого признака спада интереса, многие, включая меня, получили большую часть своего понимания о программной инженерии из форума ACM о рисках, давнего и уникального источника технической информации о неприятностях в программном обеспечении. Форум все еще процветает и все еще, порой, информирует о проблемах программной инженерии, однако большая часть трафика – о приватности и безопасности (с особой нежностью к либертарианским тирадам против любых разумных правил приватности, которые утверждаются в ЕС). Важные темы, конечно, но куда нам идти за исчерпывающей информацией о том, что идет не так с программным обеспечением?

Еще одно обстоятельство, заслуживающее внимания – эволюция языков программирования. Создание языков снова громкая тема, со всякого вида модными вновь прибывшими. Я вижу один пример (TypeScript) в котором движущей силой является инженерная цель: сделать Web программы безопаснее, более масштабируемыми и более управляемыми за счет введения некоторой дисциплины в мир JavaScript. Но это исключение. Аргументы многих новых языков склоняются к тому, насколько они искусны и какие выразительные конструкции они вводят в употребление. Отлично. Нам нужны новые идеи. Они могли бы быть еще более убедительными, если бы были направлены на решение старых и скучных проблем программной инженерии: корректность, надежность, расширяемость и возможность многократного использования.

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

Примечания

[1] ИИ был моей первой любовью, спасибо за это Жан-Клоду Симону из Политехнического/Париж VI и Джону Маккарти в Стэнфорде.

[2] Благодарю Николая Шилова за обращение моего внимания на эту информацию. Текст на русском, но вы можете пропустить его через web-переводчик, что позволит понять самое важное.

[3] В этот раз позаимствую фразу у Джеймса Нобеля.
Tags:
Hubs:
+15
Comments 141
Comments Comments 141

Articles