Читать книгу: «Основы информационных технологий для неспециалистов: что происходит внутри машин», страница 8

Шрифт:

3.5. Краткие выводы

Компьютер – это машина общего назначения. Он берет инструкции из памяти, и мы можем изменить выполняемые им вычисления, записав в память другие команды. Инструкции и данные неразличимы вне контекста. То, что для одного – команды, для другого – информация.

Современные компьютеры почти всегда оснащены несколькими ядрами на одном чипе. Также в них встречается несколько микросхем процессоров, а для более эффективного доступа к памяти на интегральной схеме размещают объемный кэш. Кэширование – это фундаментальный принцип в вычислительной технике, который мы встречаем на всех уровнях от ЦПУ до интернета. Чаще всего оно основывается на локальности данных (во времени или пространстве), что обеспечивает более быстрый доступ к ним.

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

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

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

Алан Тьюринг. Вычислительные машины и разум22.
Mind, 1950
Краткое заключение по аппаратному обеспечению

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

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

Логическая структура компьютеров не сильно изменилась с 1940-х годов, но физическая конструкция преобразовалась колоссально. Уже больше пятидесяти лет подтверждается закон Мура – по сути, предсказание, повлиявшее на реальность. В нем говорится об экспоненциальном уменьшении размера и цены отдельных компонентов и, следовательно, экспоненциальном увеличении вычислительной мощности при заданной стоимости и объеме пространства. Предупреждения о том, что закон Мура перестанет действовать в ближайшие 10 лет, неизменно звучат в предсказаниях о развитии технологий вот уже на протяжении десятилетий23. Очевидно, что в наше время техпроцесс для интегральной схемы совершенствовать сложнее, поскольку компоненты теперь могут состоять всего из нескольких атомов. Но люди в прошлом выказывали удивительную изобретательность: возможно, какое-нибудь новое открытие обеспечит нам следующий взлет.

Цифровые устройства работают в двоичном формате. На базовом уровне информация представлена в компонентах с двумя состояниями, поскольку они просты в сборке и наиболее надежны в эксплуатации. Информация любого вида представлена в виде набора битов. Числа разных видов (целые, дробные, научная запись24) отображаются с помощью 1, 2, 4 или 8 байт – такие фрагменты естественным образом подходят для обработки аппаратным обеспечением. Это значит, что при обычных условиях числа обладают конечным размером и ограниченной точностью. С помощью подходящего ПО можно поддерживать произвольный размер и точность, хотя программы на таком обеспечении будут работать медленнее. Иную информацию, вроде символов естественных языков, также представляют в виде некоторого количества байтов. Шифрование ASCII, которое вполне годится для английского языка, задействует один байт на символ. Более обширный Unicode, сочетающий несколько кодировок, обрабатывает все наборы символов, но занимает ощутимо больше места. UTF-8 – кодировка переменной длины в Unicode, которая предназначена для обмена информацией между системами. В ней применяется один байт для символов из ASCII и два или более для других.

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

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

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

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

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

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

Программное обеспечение – это общий термин, обозначающий последовательности инструкций, которые заставляют компьютер выполнять что-то полезное. Слово soft (англ, software – программное обеспечение) противоположно по смыслу слову hard25 (англ, hardware – аппаратное обеспечение), потому что ПО неосязаемо, к нему сложно прикоснуться. «Железо» осязаемо: если вы уроните ноутбук себе на ногу, то ощутите это. Но для «софта» такую ситуацию представить невозможно.

В следующих нескольких главах мы будем говорить о ПО, то есть о средстве указать компьютеру, что нужно сделать. В главе 4 мы обсудим теорию программных средств с упором на алгоритмы – по сути, схематические программы для решения узких задач. В главе 5 мы поговорим о программировании и его языках (ЯП): мы применяем их, чтобы задавать последовательности вычислительных операций. В главе 6 описываются основные виды программных систем, которыми мы пользуемся, порой даже не зная о них. В последней части данного раздела, главе 7, вы кратко познакомитесь с двумя наиболее популярными на сегодня ЯП – JavaScript и Python.

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

Поезда, корабли и самолеты также все больше зависят от ПО. К сожалению, с помощью программных средств не всегда просто изменить поведение оборудования.

После того как в октябре 2018 года и марте 2019 года разбились два «Боинга-737 МАХ», что привело к гибели 346 человек, в новостях часто обсуждали программное обеспечение для самолетов. Компания Boeing начала производство серии 737 в 1967 году, и с годами машины постоянно совершенствовались. Самолеты модели 737 МАХ, выпущенные в 2017 году, представляли собой обширную модификацию оригинала с более объемными и экономичными двигателями.

Вследствие такого обновления машины приобрели существенно иные летные характеристики. Вместо того чтобы модифицировать аэродинамические параметры и обеспечить тем самым поведение самолета, близкое к ранним версиям, инженеры Boeing разработали программную систему автоматического контроля полета под названием Maneuvering Characteristics Augmentation System26, или 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.

Нападениям, как криминальным, так и поддерживаемым государством, вполне могут подвергнуться самые разнообразные цели. Если наше ПО недостаточно устойчиво и надежно, то у нас проблемы, а по мере роста зависимости от компьютеров ситуация будет только усугубляться. Как мы увидим далее, сложно написать «софт», который совершенно надежен. Любая ошибка или недосмотр в логике или реализации способны привести к сбоям в работе программы, и даже если их не происходит при обычном использовании, возможно, что возникшая лазейка пригодится злоумышленникам.

4
Алгоритмы

Алгоритм Фейнмана42:

1. Запишите проблему.

2. Подумайте над ней как следует.

3. Запишите решение.

Приписывается физику Мюррею Гелл-Манну, лауреату Нобелевской премии, 1992

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

Более удачная метафора – бланки налоговых деклараций, так как в них описывается множество подробностей того, что нужно сделать («Вычтите строку 30 из строки 29. Если получилось ноль или меньше, укажите 0. Умножьте строку 31 на 0,25…»). Аналогия все еще не совершенна, но тут намного лучше, чем в варианте с рецептами, отражаются вычислительные аспекты. Здесь проводятся арифметические операции, значения данных копируются из одного места в другое, проверяются условия, последующие расчеты зависят от результатов предыдущих.

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

Алгоритм — это компьютерная версия тщательно составленного, точного и недвусмысленного рецепта или налоговой формы. По сути, последовательность шагов, которые гарантируют правильное вычисление результата. Каждый этап описывается в терминах базовых операций, значение которых четко определено: например, «сложить два целых числа». Нет никаких расплывчатых терминов. Указан характер входных данных. Рассмотрены все возможные ситуации: никогда не бывает такого, что при работе с алгоритма становится непонятно, какие действия производить дальше. Если специалисты по информатике склонны к педантизму, то обычно добавляют еще одно условие: алгоритм не может выполняться бесконечно. Согласно такому стандарту, классическая инструкция к шампуню «намылить, смыть, повторить»27 – это не алгоритм.

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

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

4.1. Линейные алгоритмы

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

Простейший метод – поочередно узнать рост всех присутствующих, отмечая, кто самый высокий на текущий момент. То есть мы по очереди спрашиваем каждого человека: «Джон, какой у тебя рост? Мэри, какой у тебя рост?» – и так далее. Если Джон – первый из опрошенных, то пока он будет самым высоким. Если Мэри выше, то теперь она будет самой высокой, в противном случае Джон сохранит лидерство. Дальше мы спросим третьего человека и т. д.

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

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

Заметьте, что поиск большой группы людей с одинаковым ростом – еще более сложная проблема, так как от нас потребуется непрерывно помнить имена всех, кто соответствует условию, и до самого конца опроса мы не будем знать, кто попадет в финальный список. Этот пример подразумевает использование структуры данных, то есть способа представления информации, необходимой для вычисления. Такой фактор важен для многих алгоритмов, хотя здесь мы не будем подробно обсуждать данную тему.

А что, если мы захотим вычислить средний рост? Можно узнавать у каждого человека его или ее рост, складывать получаемые значения по мере их поступления (возможно, используя программу Игрушки для суммирования последовательности чисел) и потом разделить итог на количество опрошенных. Если у нас на листочке записано N значений роста, то, выразив процесс расчета более «алгоритмически», мы получим:


Однако если мы попросим компьютер выполнить эту работу, надо будет проявить внимательность. Что произойдет, например, если на листочке нет никаких чисел? Если расчеты ведет человек, то это не проблема: нам понятно, что пока вычислять нечего. Компьютеру же нужно сказать, чтобы он проверил, не возникла ли такая ситуация, и описать ему порядок действий на такой случай. Если машина не проведет проверку, то будет пытаться разделить сумму на ноль, а это неопределенная операция. Алгоритмы и компьютеры обязаны обрабатывать все возможные ситуации. Если вы когда-нибудь получали чек на «О долларов и 00 центов» или счет, где к оплате указана сумма, равная нулю, то сталкивались с примером того, что кто-то не учел все вероятные случаи должным образом.

Что, если мы не знаем заранее, сколько будет элементов данных, как чаще всего и бывает? Можно подсчитывать элементы по мере вычисления суммы:



Как видите, в конце добавлено условие отсутствия записей, при соблюдении которого машина сообщает, что значения роста не введены. Это один из способов решения проблемы с возможным делением на ноль – целевая проверка, не возникло ли такое «неудачное» состояние.

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

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

22.Turing A. Computing machinery and intelligence (англ.) U Mind: журнал. – Oxford: Oxford University Press, 1950. – № 59. – P. 433–460.
23.Одна из множества статей о том, что закон Мура перестанет работать: https:/⁄ www.technologyreview.com/2020/02/24/905789/were-not-prepared-for-the-end-of-moores-law/.
24.Научная (экспоненциальная) запись – представление действительных чисел в виде мантиссы и порядка. Например, 1 201 000 = = 1,201 × 106, 0,000000231 = 2,31 × 10 7 и т. п.
25.В английском языке soft означает «мягкий, еле ощутимый», тогда как hard – «твердый, крепкий».
26.Система улучшения характеристик маневренности (англ.).
27.Автор отсылает к классическому анекдоту о программисте, который не мог покинуть ванную комнату, потому что следовал этой инструкции на бутылке шампуня.

Бесплатный фрагмент закончился.

Бесплатно
649 ₽

Начислим

+19

Покупайте книги и получайте бонусы в Литрес, Читай-городе и Буквоеде.

Участвовать в бонусной программе
Возрастное ограничение:
0+
Дата выхода на Литрес:
02 декабря 2024
Дата перевода:
2024
Дата написания:
2021
Объем:
599 стр. 132 иллюстрации
ISBN:
978-5-04-214386-1
Переводчик:
Издатель:
Правообладатель:
Эксмо
Формат скачивания:
Текст PDF
Средний рейтинг 4 на основе 61 оценок
По подписке
Текст PDF
Средний рейтинг 5 на основе 2 оценок
По подписке
Текст PDF
Средний рейтинг 4,4 на основе 35 оценок
По подписке
Текст PDF
Средний рейтинг 4 на основе 60 оценок
Текст PDF
Средний рейтинг 5 на основе 1 оценок
По подписке
Текст PDF
Средний рейтинг 4,5 на основе 8 оценок
Текст PDF
Средний рейтинг 5 на основе 3 оценок
Текст PDF
Средний рейтинг 4,9 на основе 13 оценок
По подписке
Текст PDF
Средний рейтинг 5 на основе 8 оценок
По подписке