Программирование аркадных игр и обучение информатике

Программирование аркадных игр
и обучение информатике

Chapter 2: Что такое компьютерный язык?

Video: What is a computer language?

Что является сутью компьютерного языка? Зачем он нужен компьютерам? Почему в мире так много компьютерных языков?

Как для понимания принципов работы двигателя не нужно водить машину, так и для понимания ответа на эти вопросы не нужно программировать. Но для того, чтобы улучшить своё знание темы, необходимо понять как работает компьютер. Здесь даётся краткое объяснение.

2.1 Краткая история программирования

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

Раньше, особые переключатели использовались для загрузки единиц и нулей в компьютерную память. На этой картинке, принадлежащей Wikimedia Commons, изображён Altair 8800. Переключатели на передней панели использовались для загрузки программы. Огни показывали результат. Монитора не было.

fig.altair
Figure 2.1: Altair 8800

Каждый набор из переключателей представляет из себя номер. Каждый номер представляет данные или инструкцию, которую с ними должен сделать компьютер. Эта система, использующая только нули и единицы для репрезентации чисел называется бинарной(двоичной) системой исчисления. Этот тип компьютерного языка называется 1GL, или язык программирования первого поколения.

Числа в двоичной системе исчисления чаще всего представлены в комбинациях из четырёх цифр. Например:

1010 0010 0011

Усовершенствованием ввода через переключатели было начало использования шестнадцатеричных кодов. Десятичные числа, используемые в посведневной жизни, состоят из цифр 0-9. Шестнадцатеричная система исчисления состоит из цифр 0-9, а также из символов от A до F для репрезентации набора четырёх переключателей, с возможными значениями 0-15.
ДвоичнаяДесятичнаяШестнадцатиричная
000
111
1022
1133
10044
10155
11066
11177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F
1 00001610
1 00011711

Следующее видео немного подробнее объясняет, как работает система исчисления:

Video: Decimal, binary, and hexadecimal systems

Для облегчения ввода программ, более поздние компьютеры позволяли вводить программы с помощью языка assembly. Каждая команда использовала мнемонику, а программа, называемая компилятором, превращала мнемоники в числа, обозначающие команды. Такой тип языка называется 2GL, или язык второго поколения.

Ниже преведена часть программы на языке assembly, предоставлено Wikimedia Commons.

fig.assembly
Figure 2.2: Пример языка assembly

Хотя это было улучшением, этого всё ещё было недостаточно для того, чтобы сделать процесс программирования лёгким. Следующее поколение языков предоставило абстракции более высокого уровня. Первые языки третьего поколения: (COBOL, FORTRAN и LISP) были намного проще для понимания и программирования.

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

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

fig.compiler_and_linker
Figure 2.3: Компиляторы и редакторы связей

Недостатком машинного языка является то, что программа будет работать только на определённых типах компьютера. Программы, скомпилированные для компьютеров с Windows скорее всего не будут работать на компьютерах Apple Macintosh и наоборот.

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

Недостатком использования интерпретатора является то, что он медленнее, чем оригинальный, машинный язык.

fig.interpreter
Figure 2.4: Интерпретатор

Python является примером интерпретируемого языка. Легче писать на Python'е, чем на C, но Python работает медленнее и требует интерпретатора для успешной работы.

Языки вроде Java используют систему, где программы компилируются в машинный код, который, вместо самой операционной системы компьютера, затем запускается на Java Virtual Machine (JVM). C#, испольщующий Common Language Infrastructure (CLI), - другой популярный язык, который делает то же самое, запуская себя на виртуальной машине Virtual Execution System (VES). Хотя обучение этим языкам не является целью этой книги, вы смело можете с ними ознакомиться.

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

Компания Tiobe следит за популярностью разных языков программирования на своём сайте, который обновляется каждый месяц. Можно следить за этими тенденциями, вместе с досками объявлений на DICE, чтобы составить общую картину того, какие языки требуются работодателям на данный момент.

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

Если вас интересует более подробная история информатики в целом, рекомендую ознакомиться со следующими фильмами:

Я также рекомендую книгу Accidental Empires, если вам нравиться читать больше, чем смотреть фильмы.

2.2 Проверка пройденного

Нажмите здесь для теста с несколькими вариантами ответов (англ. яз).

  1. Приведите пример числа в двоичной системе исчисления. (Хотя число "1" может быть двоичным, десятичным или шестнадцатиричным, попытайтесь придумать пример, который показывает разницу между системами исчислений.)
  2. Дайте пример числа в десятичной системе исчисления.
  3. Дайте пример числа в шестнадцатиричной системе исчисления.
  4. Переведите числа 1, 10, 100, 1000 и 10000 из двоичной в десятичную систему исчисления.
  5. Что такое компилятор?
  6. Что такое исходный код?
  7. Что такое машинный язык?
  8. Что является языком программирования первого поколения?
  9. Что является языком программирования второго поколения?
  10. Что является языком программирования третьего поколения?
  11. Что такое интерпретатор?


You are not logged in. Log in here and track your progress.