А вот средний уровень программирования требует знаний линейной алгебры, геометрии и математического анализа. Хотя большинство людей не чувствуют нехватки знаний, оставаясь на базовом уровне. Программирование может быть как искусством, так и ремеслом. Как ремесло оно помогает учиться и зарабатывать на жизнь. Как искусство программирование требует как ремесленного подхода, так и знания в области высшей математики. В рамках этой книги мы будем считать, что вас интересует именно подход ремесленника.
Обычно способ взаимодействия аппаратного обеспечения и софта описывается техническим языком. Вместо этого воспользуемся метафорой. Разобраться в слоях компьютера – все равно что разобраться в слоях клаб-сэндвича с индейкой (рис. 2.3).
Клаб-сэндвич с индейкой – понятная вещь. Он состоит из множества частей, однако вместе они создают восхитительный вкус. Компьютер работает в определенной логике, подобно тому как ингредиенты сэндвича находятся в определенном порядке.
Слой хлеба – основа сэндвича, в случае компьютера – это железо. Оно «не знает» ничего, разве что то, как справиться с двоичными данными – нулями и единицами. Под справляться я подразумеваю считать . Помните, что вся деятельность компьютеров сводится к математике.
Над аппаратным обеспечением находится слой, который позволяет переводить слова в двоичный код (нули и единицы). Назовем его слоем машинного языка . Это как слой индейки, который укладывается поверх хлеба. Машинный слой обеспечивает перевод символов в двоичный код, при помощи которого компьютер и осуществляет расчеты. Этими символами могут быть слова, цифры – то, что мы, люди, используем для коммуникации друг с другом. Это искусственная система. Чтобы говорить на языке машинных кодов, необходимо владеть особым диалектом – языком ассемблера , который буквально собирает символы в машинный код.
Язык ассемблера сложный. Ниже можно познакомиться с примером того, как на нем выглядит программа десятикратного вывода «Hello, world!». Я нашла этот код на сайте для разработчиков под названием Stack Overflow.
org
xor ax, ax
mov ds, ax
mov si, msg
boot_loop: lodsb
or al, al
jz go_flag mov ah, 0x0E
int 0x10
jmp boot_loop
go_flag:
jmp go_flag
msg db ‘hello world’, 13, 10, 0
times 510- ($-$$) db 0
db 0x55
db 0xAA
Язык ассемблера нелегко читать, на нем сложно писать. Немногие хотят посвятить ему свое время. Поэтому, чтобы облегчить процесс передачи инструкций, появился еще один слой. Назовем его операционной системой . На моем Mac работает операционная система Linux, названная в честь ее создателя, Линуса Торвальдса. Linux основывается на Unix – операционной системе, разработанной Ричи, автором «Hello, world!». Уверена, сами операционные системы вам известны лучше, чем их разработчики. Собственно, компьютерная революция 1980-х была как раз триумфом операционных систем, которые стали функционировать поверх языка машинных кодов и значительно упростили человеку взаимодействие с компьютером.
На этой стадии у вас появляется вполне рабочая версия компьютера. Вы можете запускать любые существующие программы только лишь с помощью Linux. Однако его интерфейс основывается на текстовых командах и не слишком интуитивно понятен – на компьютерах Mac, например, работает своя операционная система OS X с ее известнейшим интерфейсом. Он называется графическим пользовательским интерфейсом (GUI, graphic user interface). GUI был одной из самых инновационных идей Стива Джобса: он понял, что командные интерфейсы слишком сложны, поэтому распространял практику использования иконок поверх текста, помогая ориентироваться на экране. Джобс узнал о графическом пользовательском интерфейсе и мыши у Алана Кэя, исследователя лаборатории Xerox PARC, в 1973 г. выпустившей обе эти технологии. И хотя мы любим приписывать кому-то конкретному лавры инновационных технологических побед, на самом деле редко когда за компьютерной инновацией стоит один человек. Если присмотреться, всегда можно найти логического предшественника, а также команду специалистов, которая разрабатывала проект месяцами, если не годами. В свое время Джобс заплатил за экскурсию по Xerox PARC, увидел проект GUI и запатентовал его. Графический интерфейс в дуэте с мышью от Xerox PARC – это производная от более ранней идеи, системы oN-Line System (NLS), представленной Дугласом Энгельбартом в презентации «Мать всех демо» (Mother of All Demos) в 1968 г. на конференции Ассоциации вычислительной техники. Мы рассмотрим эту историю подробнее в главе 6.
Читать дальше