Компьютерная Эра. Философия компьютера


Оцифрованный мир


Компьютер — это инструмент для обработки информации. Логика компьютера вытекает из реалий его мира, в котором он, так сказать, «живет». Стихия компьютера — однообразие. К сфере его «размышлений» принадлежат продукты машинного производства — большие серии однотипных объектов, различающихся лишь номерами. Компьютер отличит яйцо от курицы лишь по номеру, и не по какому другому признаку (цвет, запах, форма, здравый смысл наконец). Все это компьютеру недоступно в их естественном виде. Вот если мы сможем перевести цвет, запах, форму и здравый смысл в цифры (в числа), соответственно курица и яйцо у нас будут всего лишь разными последовательностями двоичных цифр, и вот тут уже компьютер вступает в свои права и моментально отличит одно от другого. Прежде чем «подсунуть» компьютеру информацию, ее надо предварительно оцифровать, представить в виде длиннющих и не очень цепочек чисел, причем эти числа будут составлены всего из двух элементов — 0 и 1 (есть ток – нет тока).

Мы живем в мире аналоговой информации. Мы ориентируемся в событиях и явлениях по их аналогиям, и соответственно строим приборы по аналоговому принципу. Компьютер же аналогии не приемлет, ему подавай все в цифрах (в двоичных). Вот несколько примеров аналоговой и соответствующей ей цифровой информации. Запись на виниловой (граммофонной) пластинке — это аналоговое представление звуковых колебаний. Звук (аудиоинформация) хранится на ней в виде микроскопических бугорков, расположенных в длинных спиральных канавках. Двигаясь по канавке, иголка звукоснимателя попадает на бугорки и вибрирует. Ее вибрация усиливается и звучит из динамиков как музыка. Если музыка звучит громче, значит бугорки глубже врезаются в канавку, если нота выше, — значит бугорки располагаются ближе друг к другу, теснее. Бугорки являются аналогами исходных колебаний — звуковых волн, улавливаемых микрофоном. Та же информация (музыка) в цифровом виде хранится на компакт-диске как микроскопическая впадинка на поверхности этого диска. Таких впадинок на диске более 5 миллиардов. Лазерный луч внутри проигрывателя компакт-дисков (цифрового устройства) проходит по каждой впадинке, а специальный датчик определяет состояние этой впадинки (0 или 1). Полученную информацию проигрыватель реконструирует в исходную музыку, генерируя определенные электрические сигналы, которые динамики преобразуют в звуковые волны.

Еще пример. Пусть имеется несколько осветительных приборов разной мощности (например, электрические лампочки). Мы говорим — сделай посветлее (потемнее) и включаем (гасим) в какой-то комбинации несколько ламп. Понятно, что на следующий день мы не сделаем точно такого же освещения, как накануне, а будем опять включать или гасить лампы «на глаз», ориентируясь на аналогию — на нашу память. А если придет другой человек, и мы начнем ему объяснять, как нужно включить или погасить лампы, чтобы освещение стало как в прошлый раз, то вероятность расхождения еще больше усиливается. Но можно эту информацию перевести в цифровую форму и тогда уже вероятность ошибки будет равна нулю. Как это сделать? Нужно перенумеровать все лампы и сказать так: включи первую, вторую, пятую и восьмую, то есть информация будет звучать так: 1-2-5-8, или, предварительно расположив (мысленно или на самом деле) лампы в ряд, условившись, что включенная лампа будет обозначаться как 1, а выключенная как 0, тот же ответ приобретет такой вид — 11001001. Вот это уже информация в цифровой (двоичной) форме, и любой человек в любой день, зная этот шифр, сделает освещение точно такое же, какое было вчера или сто лет назад. То есть цифровая информация не искажается в принципе. Пожелание, выраженное в цифровой форме, будет выполнено безошибочно и уровень освещения не будет зависеть от конкретных людей, как в аналоговом варианте. В аналоговом варианте точность воспроизведения освещения будет приблизительной, в цифровом варианте — абсолютной.

Аналоговыми устройствами являются обычные магнитофоны, фотоаппараты, видеокамеры, телефоны. Например, в случае с магнитофоном аналогом звука выступает намагниченность пленки. Даже телефоны с процессорами (кнопочные) представляют из себя аналоговые устройства, потому что посылают все-таки аналоговый сигнал, и удобства, идущие от чипа (запоминание номеров, дозвон, дисплей и другие), картины не меняют.

Любой вид информации можно преобразовать в числа, пользуясь только нулями и единицами. Такие числа называются двоичными. Каждый ноль или единица — это бит информации (от англ. binary digit — «двоичная цифра»). Преобразованную таким образом информацию можно передать компьютерам и хранить в них как длинные строки бит. Эти-то числа и подразумеваются под цифровой информацией.


Таким образом, вычислительная машина (компьютер) имеет дело не с реальной действительностью, а с ее математическими моделями, которые строит человек, одаренный чувством числа.

Система перевода выглядит как создание числовых и формульных отображений реальных событий. Человек (математик и программист) реконструирует реальное событие, явление, факт в виде математических абстракций четкой формы, создает математический мир — как только возможно приближенный к реальному миру по своим параметрам, а затем передает свое творение в виде нулей и единиц компьютеру. Компьютер оживает. Человек как бы вдыхает душу в компьютер — в это безжизненное нагромождение железа, пластмассы и стекла[1].

0 или 1 — минимальная ячейка информации, есть ток — нет тока, да — нет. Всего два числа, доступных пониманию компьютера. Язык битов. Двоичный разряд. Двоичная система счисления[2].

Однако двух цифр мало для перевода на машинный язык событий и явлений реальной жизни. Из двух цифр (0 и 1) можно составить всего четыре комбинации: 00, 01, 11, 10. Этого мало. В одном лишь русском алфавите 33 буквы. Плюс к этому десять цифр десятичной системы счисления, которой пользуется человек, и другие необходимые символы. Что же делать?

Первый шаг к сближению языка битов и языка людей — объединение 8 бит в один байт. 8 бит в одном байте дают 256 (2 в восьмой степени) различных комбинаций нулей и единиц. Это как раз то оптимальное число, которое способно вместить в себя все буквы двух алфавитов (латинский и русский, прописные и строчные буквы), знаки препинания, цифры и другие символы. Каждой комбинации из 8 бит ставится в соответствие одна буква, цифра или другой символ, понятный человеку. Все это закреплено в международных соглашениях. Соответствие между набором букв и двоичными числами называется кодировкой символов. Заметим попутно, что в 1 килобайте количество байт вовсе не 1000, а 1024 (2 в десятой степени, это самое приближенное к тысяче число: 2 в девятой степени дает 512, а 2 в одиннадцатой —2048), умножение килобайта на килобайт дает 1 мегабайт, который содержит 1024х1024 байт (1048576, то есть 2 в двадцатой степени).

Но писать программы (инструкции) для компьютера на его родном языке — в машинных кодах (то есть в виде цепочек двоичных чисел) — дело крайне неблагодарное, трудоемкое и утомительное. Хотя первые программисты так и делали, но при кодировании алгоритма (последовательности команд) числами (цепочками из 0 и 1) часто допускались ошибки, а весь процесс написания программ был крайне медленным.

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

Откуда берутся трансляторы? — разумеется, их пишет сам человек. Вернее, очень много людей, большие коллективы (многотысячные) квалифицированных программистов в течение нескольких лет. Однако затем расходы на создание транслятора окупаются, так как он позволяет быстрее писать программы другим тысячам и сотням тысяч программистов — и прикладным, и системным. Объем транслятора составляет десятки тысяч машинных команд, но потом, после его создания, делается возможным писать программы на более очеловеченном языке — языке программирования, в результате повышается производительность труда и программистов и пользователей всех уровней. Одному человеку для создания среднего транслятора потребовалось бы примерно 500 лет.

Трансляторы бывают двух типов: компиляторы (переводят программу в машинные коды целиком) и интерпретаторы (переводят программу в машинные коды построчно). Например, транслятор встроенного языка 1С[3] является интерпретатором. Интерпретатор «читает» программу строка за строкой и параллельно переводит ее смысл (на машинный язык нулей и единиц). Компилятор же подобен профессиональному переводчику: сначала он основательно прорабатывает исходный текст и затем составляет его перевод на машинный язык. Ясно, что интерпретатор более мобилен (на профессиональный перевод по сравнению с простым прочтением уходит гораздо больше времени), а компилятор более эффективен (однажды переведенную книгу затем можно сколько угодно раз читать на своем родном языке).

Таким образом, достоинством компилятора является высокая скорость выполнения самих программ, недостатком — много времени уходит на компилирование (т.е. на перевод программ в машинные коды), что существенно для больших программ, используемых на больших ЭВМ. Достоинством интерпретатора является то, что выполнение программы идет параллельно с трансляцией, недостатком же является низкая скорость выполнения программ.

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

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

Первые трансляторы (с середины 50-х годов) требовали подробного описания всех производимых действий, когда каждая символическая команда транслируется в одну машинную команду и назывались автокодами (assembler). Сейчас эти языки применяются, когда необходимо учесть специфику данной ЭВМ, достичь максимального быстродействия и минимального размера программ, и называются языками низкого уровня. Одним из трансляторов, который преобразовывал математические формулы в машинные команды, был созданный в 1956 году в США транслятор, которому соответствовал язык программирования, названный FORTRAN (FORmula TRANslation), созданный в 1958 году под руководством Джона Бэкуса на фирме IBM.

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

Одним из наиболее распространенных языков программирования высокого уровня является Бейсик (BASIC — Beginners All-purpose Symbolic Instruction Code — символьный универсальный язык программирования для начинающих). Бейсик был изобретен в 1962 году Дж. Кемени и Т. Курц, сотрудниками Дартмутского колледжа, США, и в дальнейшем имел много модификаций. Например, реализованные фирмой Microsoft версии языка программирования Бейсик (семейство Microsoft BASIC): Quick Basic 4.5 и его сокращенный вариант Qbasic, который входит в состав дисковых операционных систем MS-DOS 5.0 и выше.

Зимой с 1974 на 1975 год американцы Пол Аллен и Билл Гейтс за пять недель написали интерпретатор языка Бейсик для первого персонального компьютера фирмы MITS — «Altair-8800» с оперативной памятью 256 байт, без клавиатуры и экрана, сердцем которого был микропроцессорный чип Intel 8080[4] Компьютер, создателем которого был Эдвард Робертс, на свой страх и риск запустивший его в продажу, высылался по почте по смехотворной цене 397 долларов, по сравнению с ценами на большие выпускавшиеся тогда компьютеры (десятки тысяч долларов). Появление первого по- настоящему доступного широкой публике персонального компьютера было настоящей революцией – на смену немногим избранным людям, работавшим в машинных залах больших ЭВМ, пришла целая армия новых людей, с восторгом встретивших возникшую вместе с “Альтаиром” массовую концепцию развития вычислительной техники. Общественный успех был ошеломляющим, неправдоподобным, фантастическим.[5]

Однако Аллен и Гейтс не видели живьем и не держали в руках ни самого компьютера, ни процессора к нему. Они лишь увидели в январском номере журнала Popular Electronics за 1975 год его (компьютера) описание. У него было 16 адресных переключателей и 16 же световых индикаторов. Можно было заставить индикаторы перемигиваться на передней панели, и не более того, ибо тогда еще отсутствовало какое-либо программное обеспечение к этому компьютеру. Без программ он был бесполезной штукой. Но зато в компьютере был тот самый микропроцессорный чип Intel 8080, и надо было «всего лишь» обучить его (чип) какому-либо языку программирования. У друзей была документация на микропроцессор, которую им по их просьбе ранее прислали из Intel, и которую они и принялись изучать досконально. Первый проект, таким образом, стал для них заключаться в создании версии Бейсика для «Альтаира». Написав программу, заставлявшую мейнфрейм – большой компьютер в Гарварде (где учился Гейтс) “строить” из себя крошечный “Альтаир” (так называемая виртуальная машина[6]), друзья создали для него интерпретатор Бейсика. Выполнение этой задачи означало рождение всемирно известной Microsoft — первой в мире компании, взявшейся разрабатывать программы для микрокомпьютеров.

У типичного «Альтаира» память примерно на 4 тысячи символов. Это очень и очень мало ( у большинства современных ПК – не менее чем на 8 миллионов символов), но в эту крошечную память нужно было очень и очень многое втиснуть. Этим определялась сложность задачи.

И вообще-то написание хорошей программы требует больших усилий, а создание версии Бейсика для «Альтаира» оказалось делом просто изнурительным. Как пишет Гейтс в своей книге «Дорога в будущее», в тот период они с Полом мало спали, ни с кем не виделись, иногда ничего не ели и путали день с ночью. Когда их сваливал сон, они засыпали за столом или на полу, Но спустя пять недель они написали свой Бейсик.

С реализации этого проекта началась жизнь языка Бейсик как полноправного языка программирования. Сегодня нет проще и доступнее языка, и вообще вошло в традицию включать интерпретатор языка Бейсик в минимальный комплект поставки программного обеспечения компьютера. Вдобавок, QuickBasic, например, очень привлекателен своей средой программирования[7]. Тут фирма Microsoft потрудилась на славу! Одна из удач — использование своеобразного режима работы. Для быстрой работы в среде (quick — “быстрый”) используется режим интерпретатора, а для окончательного перевода отлаженных программ на машинный язык используется компилятор. Из Qbasic компилятор исключен.

Билл Гейтс и Пол Аллен оказались в нужное время на нужном месте. Впрочем, Гейтс всегда был трудоголиком. Начав с нуля (первая компания, которую он основал — Traf-O-Data, так назывался прибор для подсчета количества транспорта на улицах — была организована на 900 долларов), он всегда предпочитал вкладывать деньги в собственные проекты, в развитие, а не в развлечения.

В 1975 году компания Microsoft состояла из двух сотрудников — самого Билла Гейтса и его друга Пола Аллена; сейчас в компании трудится порядка 30 000 человек, причем очень много программистов из России. Один лишь центральный офис компании занимает 45 зданий!

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

Следующим распространенным языком программирования высокого уровня является PASCAL, изобретатель которого Никлаус Вирт назвал его так в честь французского таланта Блеза Паскаля. Язык Паскаль первоначально был создан для обучения студентов программированию. По сравнению с “расхлябанным” Бейсиком Паскаль был более строгим и стройным. В дальнейшем Паскаль преобразовался в систему программирования DELPHI [8].

Алгоритмический язык С (“си”) был разработан Деннисом Ритчи в лаборатории Bell в начале 70-х годов, США, на основе более раннего языка B («би»). Дальнейшим развитием С стал объектно-ориентированный язык С++, разработанный Бьерном Страуструпом. Объектно-ориентированный означает, что программа представляется как совокупность объектов, которые обладают поведением, могут производить некоторые действия и объединяться друг с другом. То есть проблема, которую надо запрограммировать на компьютере, разбивается на отдельные части (объекты), каждый из которых затем реализуется (программируется) отдельно.

Есть и другие языки программирования — COBOL (1960г.,экономика, бизнес), Ada (назван так в честь Ады Лавлейс — первой женщины, написавшей программу для вычислительной машины), PL/1, APL (язык мейнфреймов — больших компьютеров, вобрал в себя многие черты Алгола, Кобола и Фортрана), Фокал (усеченный Бейсик для инженерных расчетов), Кларион (бухгалтерия), Клиппер (СУБД — системы управления базами данных), Пролог (логическое программирование), SQL (язык для работы с базами данных, в том числе с серверными базами данных),[9] Лисп (создание искусственного интеллекта, списки),[10] Java (С++ для Интернета). Есть и другие языки: Алгол (1959г., устаревший язык), Modula, Альфа, Logo, Smalltalk и другие. Например, встроенный язык 1С создан на основе Паскаля, Бейсика, С++ и SQL , причем кодовые слова и операторы пишутся на русском языке, и для него разработан собственный транслятор (интерпретатор). Всего насчитывается несколько сотен языков программирования.

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


[1] Конечно, на физическом уровне в памяти компьютера не существует никаких двоичных чисел, а только электрические элементы, которые могут находиться либо в возбужденном, либо в невозбужденном состоянии. Однако при программировании удобно не учитывать этот факт, а представлять себе, что в компьютере действительно фигурируют единицы и нули.

[2] Двоичная система при переводе больших десятичных чисел в двоичные дает очень длинные ряды цифр. И тогда была придумана 16-тиричная система счисления: число в двоичной системе разбивается на тетрады — по четыре двоичных знака в каждой. Каждая тетрада дает 2 в четвертой степени = 16 комбинаций. Каждой из этих шестнадцати комбинаций ставится в соответствие одна десятичная цифра от 0 до 9, таким образом обозначаются первые десять шестнадцатиричных цифр, а оставшиеся шесть шестнадцатиричных цифр обозначаются первыми шестью буквами латинского алфавита. Например, десятичное число 396 в двоичной системе обозначается как 110001100, а в шестнадцатиричной системе как 18С.

[3] Фирма 1С основана в 1991 году братьями Сергеем и Борисом Нуралиевыми (на снимках).

[4] Корпорация INTEL была основана в середине июня 1968 года Робертом Нойсом и Гордоном Муром, затем сразу к ним присоединился нынешний председатель совета директоров Эндрю Гроув, а в 1974 году в корпорацию пришел ее будущий президент и главный управляющий Крейг Барретт, и уже с тех пор Intel превратилась в крупнейшего в мире производителя микропроцессоров с числом сотрудников свыше 64 тысяч и годовым доходом на конец 1997 года свыше 25 миллиардов долларов.

[5] В 1981 году фирма IBM выпустила свою модель ПК – IBM PC, ставшую, в сочетании с программным обеспечением от Microsoft, эталоном, стандартом для всего парка персональных компьютеров современного мира.

[6] Виртуальной машиной называют некую программу-транслятор, использующую все ресурсы окружающей среды-метрополии, но позволяющую выполнять программы, чужеродные этой среде. То есть пишется программа, которая в чужой среде программирования и аппаратных средств подчиняется своим командам управления, своим операторам и своим синтаксическим правилам. Таким образом Пол и Билл заставили большой компьютер сымитировать из себя маленького — того самого «Альтаира».

[7] Среда программирования, или интерфейс, — это удобства, необходимые для написания программ и заключающиеся в наличии программы обработки текста — текстового процессора — для ввода программ и их исправления, затем в возможности запуска готовых программ для их отладки (устранения ошибок).

[8] Система программирования включает в себя среду программирования — текстовый процессор + транслятор + библиотеки функций и объектов.

[9] Сервером («serve» – служить, работать на кого-либо, оказать услугу, подходить, годиться) является мощный сетевой компьютер, центр сети, хранилище данных, своего рода приемо-распределительный центр, оптовая база информации. Сервером может быть и совершенно обычный компьютер – при отсутствии денег на настоящий. Вообще язык SQL — специфический язык, он используется в связке с каким-либо другим языком программирования.

[10] Списками являются совокупности элементов, с которыми можно производить действия (сортировка и т.д.). В свое время существовала гипотеза, что мозг человека работает именно со списками — с перечисленным множеством образов, слов, понятий. И если бы удалось сделать кучу процедур для работы с этими списками, то удалось бы на каком-то этапе приблизиться к уровню сложности человеческого мозга. Сведя работу мозга к набору команд процессора, удалось бы создать таким образом искусственный мозг.

<< Предыдущая глава | Содержание | Следующая глава >>




Начало  Назад  Вперед