ремесленничеству: мол, достаточно заполучить хоть какую-то программу, лишь бы работала.
1.5. Компьютеры повсюду
Каждый из нас что-то где-то слышал о компьютерах или программах. В этом разделе мы приводим несколько примеров. Может быть, среди них вы найдете тот, который вам понравится. По крайней мере, мы хотели бы убедить вас, что сфера применения компьютеров — а значит, и программирования — намного больше, чем можно себе представить.
Многие люди представляют себе компьютер как небольшой серый ящик с экраном и клавиатурой. Такие компьютеры, как правило, стоят под письменным столом и хорошо подходят для игр, обмена сообщениями, электронной почты и воспроизведения музыкальных произведений. Другие компьютеры, ноутбуки, используются в самолетах занятыми бизнесменами, просматривающими базы данных, играющими в компьютерные игры и просматривающими видеофильмы. Эта карикатура — всего лишь вершина айсберга. Большинство компьютеров вообще не попадает в поле нашего зрения, и именно от их работы зависит существование нашей цивилизации. Одни компьютеры занимают целые комнаты, а другие не больше монетки. Многие из наиболее интересных компьютеров вообще не имеют непосредственной связи с людьми, осуществляемой с помощью клавиатуры, мыши или других устройств.
1.5.1. С экранами и без них
Представление о компьютере как о ящике с экраном и клавиатурой широко распространено и весьма устойчиво. Однако представим себе два следующих компьютера.
Оба компьютера можно увидеть непосредственно. Кроме того, будем считать, что они относятся к одной и той же модели, только с разными системами ввода-вывода. На левом устройстве время выводится на маленький экран (напоминающий экраны обычных компьютеров, но только поменьше), а справа отображается на традиционном циферблате, работающем под управлением небольшого электрического моторчика. Их системы ввода-вывода состоят из четырех кнопок (их легко обнаружить на правом устройстве) и радиоприемника, обеспечивающего синхронизацию с высокоточными атомными часами. Большинство программ, управляющих этими двумя компьютерами, являются общими для них.
1.5.2. Кораблестроение
На этих двух фотографиях изображены крупный дизельный корабельный двигатель и огромный корабль, на котором может быть установлен такой двигатель.
Посмотрим, в каком месте компьютеры и программное обеспечение могли бы сыграть ключевую роль.
• Проектирование. Разумеется, как корабль, так и его двигатель проектируется с помощью компьютеров. Список их применения практически бесконечен и включает в себя изготовление архитектурных и инженерных чертежей, общие вычисления, визуализацию помещений и конструкций, а также моделирование их работы.
• Строительство. Современные корабли сильно компьютеризованы. Сборка корабля тщательно планируется с помощью компьютеров, а сам процесс осуществляется под управлением компьютеров. Сварка проводится роботами. В частности, современные двухкорпусные танкеры невозможно построить без маленьких роботов-сварщиков, способных проникнуть в пространство между корпусами. Там просто нет места, в которое мог бы протиснуться человек. Разрезание стальных плит для корабля было одним из первых приложений систем компьютерного проектирования и производства CAD/CAM (computer-aided design and computer-aided manufacture).
• Двигатель. Имеет электронную систему впрыскивания топлива и контролируется несколькими десятками компьютеров. Для двигателя мощностью 100 тысяч лошадиных сил (такого, какой изображен на фотографии) это нетривиальная задача. Например, компьютеры, управляющие двигателем, настраивают топливную смесь, чтобы минимизировать загрязнение. Многие насосы, связанные с двигателем (и другими частями корабля), также управляются компьютерами.
• Управление. Корабли предназначены для доставки груза и людей. Составление расписания движения флотилии кораблей — непрерывный процесс (который также выполняется компьютерами), поскольку он зависит от погоды, спроса и предложения, а также от грузоподъемности кораблей и вместимости портов. Существуют даже веб-сайты, с помощью которых можно отслеживать движение торговых кораблей. Корабль, изображенный на фотографии, — крупнейший в мире сухогруз (397 м в длину и 56 м в ширину), но другие крупные современные корабли управляются точно так же.
• Мониторинг. Океанские лайнеры в большой степени автономны; иначе говоря, их команды могут справиться с любыми неожиданностями еще до прибытия в следующий порт. Одновременно они являются частью глобальной системы, имеют доступ к достаточно точной метеорологической информации (через компьютеризованные космические спутники). Кроме того, у них имеются устройства глобального позиционирования (global positioning system — GPS), а также радары, управляемые компьютерами. Если команде нужен отдых, то за работой большинства систем (включая двигатель, радар и т.п.) можно следить (через спутник), находясь в центре управления кораблем. Если произойдет нечто необычное или связь будет нарушена, то команда сразу узнает об этом.
Что произойдет, если один из многих сотен упомянутых компьютеров выйдет из строя. В главе 25, “Программирование встроенных систем”, эта тема рассмотрена более подробно. Создание программ для современных кораблей — очень сложная и интересная работа. Кроме того, она приносит пользу. Стоимость транспорта действительно удивительно мала. Вы оцените это, когда захотите купить какой-нибудь товар, произведенный в другом месте. Морской транспорт всегда был дешевле, чем наземный; в настоящее время одной из причин этого является широкое использование компьютеров и информации.
1.5.3. Телекоммуникации
На этих двух фотографиях изображены телефонный коммутатор и телефон (в который встроены фотоаппарат, MP3-плеер, FM-радиоприемник и веб-браузер).
Посмотрим, в каком месте компьютеры и программное обеспечение могли бы сыграть ключевую роль здесь. Допустим, вы берете в руку телефон и делаете вызов, а человек, которому вы звоните, отвечает вам, и вы начинаете разговор. А возможно, вы хотите соединиться с автоматизированной справочной системой, или послать фотографию, сделанную с помощью встроенного фотоаппарата, или послать текстовое сообщение (просто нажав кнопку “послать” и поручив всю остальную работу телефону). Очевидно, что такой телефон является компьютером. Это особенно ясно, если телефон (как большинство мобильных телефонов) имеет экран и предусматривает больше, чем обычные телефонные услуги, например функции веб-браузера. На самом деле такие телефоны содержат несколько компьютеров: один управляет экраном, другой обеспечивает связь с телефонной станцией, а третий делает что-то еще.
Часть телефона, которая управляет экраном, выполняет функции веб-браузера и решает другие задачи, возможно, покажется пользователям компьютеров наиболее знакомой: она просто запускает графический пользовательский интерфейс. Большинство пользователей даже не представляют, с какой огромной системой соединяется такой маленький телефонный аппарат, выполняя свою работу. Допустим, я нахожусь в Техасе, а вы — в Нью-Йорке, но уже через несколько секунд ваш телефон зазвонит, и я услышу “Алло!” на фоне городского гула. Многие телефоны способны выполнить этот фокус и соединить вас с любой точкой Земли, и вы принимаете это как должное. Как телефон находит вас? Как передается звук? Как этот звук шифруется в пакетах? Ответы на эти вопросы могут