Книга: Основы информационных технологий для неспециалистов: что происходит внутри машин
Назад: 3. Процессор изнутри
Дальше: 4 Алгоритмы

Часть II
Программное обеспечение

Хорошая новость: компьютер – это машина общего назначения, способная выполнять любые вычисления. Хотя у него есть только несколько типов инструкций, он может прогонять их очень быстро и в значительной степени контролировать свою работу.
Плохая новость: сам он не предпринимает никаких действий, пока кто-то ему не скажет, что делать, при этом в мучительно мелких подробностях. Компьютер – настоящий «ученик чародея», способный неустанно и безошибочно следовать инструкциям, но требующий со скрупулезной точностью описывать ему, что делать.
Программное обеспечение – это общий термин, обозначающий последовательности инструкций, которые заставляют компьютер выполнять что-то полезное. Слово soft (англ, software – программное обеспечение) противоположно по смыслу слову hard (англ, hardware – аппаратное обеспечение), потому что ПО неосязаемо, к нему сложно прикоснуться. «Железо» осязаемо: если вы уроните ноутбук себе на ногу, то ощутите это. Но для «софта» такую ситуацию представить невозможно.
В следующих нескольких главах мы будем говорить о ПО, то есть о средстве указать компьютеру, что нужно сделать. В главе 4 мы обсудим теорию программных средств с упором на алгоритмы – по сути, схематические программы для решения узких задач. В главе 5 мы поговорим о программировании и его языках (ЯП): мы применяем их, чтобы задавать последовательности вычислительных операций. В главе 6 описываются основные виды программных систем, которыми мы пользуемся, порой даже не зная о них. В последней части данного раздела, главе 7, вы кратко познакомитесь с двумя наиболее популярными на сегодня ЯП – JavaScript и Python.
В ходе чтения стоит помнить кое о чем. Современные технологические системы все более обширно задействуют оборудование общего назначения (процессоры, память, средства коммуникации с окружающей средой), а определенное поведение создают с помощью программных средств. Вот вам прописная истина: по сравнению с оборудованием, ПО более дешево и приспособляемо, а также его легче изменить, особенно когда устройство уже покинуло завод. Например, если в машине подачей мощности и торможением управляет компьютер (встроенная система), очевидно, что различные функции вроде антиблокировки тормозов и электронного контроля устойчивости реализуются на программном уровне.
Поезда, корабли и самолеты также все больше зависят от ПО. К сожалению, с помощью программных средств не всегда просто изменить поведение оборудования.
После того как в октябре 2018 года и марте 2019 года разбились два «Боинга-737 МАХ», что привело к гибели 346 человек, в новостях часто обсуждали программное обеспечение для самолетов. Компания Boeing начала производство серии 737 в 1967 году, и с годами машины постоянно совершенствовались. Самолеты модели 737 МАХ, выпущенные в 2017 году, представляли собой обширную модификацию оригинала с более объемными и экономичными двигателями.
Вследствие такого обновления машины приобрели существенно иные летные характеристики. Вместо того чтобы модифицировать аэродинамические параметры и обеспечить тем самым поведение самолета, близкое к ранним версиям, инженеры Boeing разработали программную систему автоматического контроля полета под названием Maneuvering Characteristics Augmentation System, или MCAS. Ее задача состояла в том, чтобы МАХ летал так же, как и другие модели серии 737, ведь тогда удалось бы избежать крупных затрат на повторную сертификацию и переобучение пилотов. В каком-то смысле ПО сделало бы новый самолет неотличимым от старого.
Говоря простым языком, из-за более тяжелых двигателей, к тому же перемещенных в другое положение, у МАХ поменялись летные характеристики. При определенных обстоятельствах, когда программа MCAS считала, что нос самолета находится слишком высоко, она интерпретировала это как возможное сваливание и опускала нос. Ее решение основывалось на показаниях одного (возможно, неисправного) входного датчика, хотя на «Боинге» их стояло два. Когда пилоты пытались поднять нос, программа отменяла эту команду. В результате самолет раскачивался вверх и вниз, что неизбежно приводило к авиакатастрофам. Что еще хуже, Boeing не уведомляла о существовании MCAS, поэтому пилоты даже не знали о возможной проблеме. Их не обучали тому, как ее устранить36.
Вскоре после второго крушения авиационные органы власти по всему миру приостановили эксплуатацию самолета МАХ. Репутация Boeing серьезно пострадала, а убытки компании оценивались в более чем 20 миллиардов долларов. В конце ноября 2020 года Федеральное управление гражданской авиации США снова разрешило полеты на МАХ, так как в подготовку пилотов и в саму машину внесли изменения. Впрочем, неясно, когда эти самолеты снова будут регулярно подниматься в воздух.
Компьютеры занимают центральное место в критически важных системах, а ПО управляет ими. Беспилотные автомобили (или обычные помощники, встроенные в современные машины) находятся под контролем программного обеспечения. Вот простой пример: в моей машине Subaru Forester установлены две камеры, которые смотрят наружу через лобовое стекло. Благодаря компьютерному зрению автомобиль предупредит меня, если я перестроюсь, не включив поворотники, или если в опасной близости окажутся машина или человек. Нередко эта информация ошибочна, и частые ложные срабатывания больше отвлекают, чем помогают, но несколько раз данная функция выручала меня.
В медицинских системах визуализации тоже применяются компьютеры: они управляют сигналом и формируют изображения, которые анализируют врачи, так что цифровые картинки вытеснили пленочные снимки. Схожая ситуация теперь и в таких областях инфраструктуры, как система управления воздушным движением, навигационные средства, электрические и телефонные сети. Но в вычислительных устройствах для голосования нашли серьезные недостатки. Так, в начале 2020 года подсчет голосов на предварительных выборах Демократической партии в Айове сорвался из-за неполадок с компьютерной системой, и для устранения ошибки понадобилось несколько дней37. Идея интернет-голосования стала популярной во время пандемии COVID-19, но она несет в себе рисков больше, чем осознают сотрудники избирательных комиссий. Очень сложно разработать систему, которая надежно даст людям сделать выбор, сохранив при этом тайну голосования38.
Военные системы полностью зависят от компьютеров как по части вооружений, так и в аспекте снабжения. То же самое относится и к финансовым системам по всему миру. Кибервойна и шпионаж – это реальные угрозы. Например, червь Stuxnet 2010 года разрушил иранские центрифуги по обогащению урана. Крупное отключение электроэнергии на территории Украины в декабре 2015 года было вызвано российской вредоносной программой, хотя правительство РФ отрицает свою причастность39. Два года назад (в 2018-м) произошла вторая серия атак с использованием программы-вымогателя Petya, которая повлияла на работу различных украинских организаций. Когда атака программы-вымогателя WannaCry нанесла ущерб в миллиарды долларов по всему миру, правительство США официально возложило ответственность на Северную Корею40. В июле 2020 года несколько стран обвинили российскую группу кибершпионажа в попытке украсть сведения о разрабатываемых вакцинах против COVID-1941.
Нападениям, как криминальным, так и поддерживаемым государством, вполне могут подвергнуться самые разнообразные цели. Если наше ПО недостаточно устойчиво и надежно, то у нас проблемы, а по мере роста зависимости от компьютеров ситуация будет только усугубляться. Как мы увидим далее, сложно написать «софт», который совершенно надежен. Любая ошибка или недосмотр в логике или реализации способны привести к сбоям в работе программы, и даже если их не происходит при обычном использовании, возможно, что возникшая лазейка пригодится злоумышленникам.
Назад: 3. Процессор изнутри
Дальше: 4 Алгоритмы