Программирование аркадных игр
и обучение информатикеChapter 2: Что такое компьютерный язык?
Что является сутью компьютерного языка? Зачем он нужен компьютерам? Почему в мире так много компьютерных языков?
Как для понимания принципов работы двигателя не нужно водить машину, так и для понимания ответа на эти вопросы не нужно программировать. Но для того, чтобы улучшить своё знание темы, необходимо понять как работает компьютер. Здесь даётся краткое объяснение.
2.1 Краткая история программирования
Компьютеры являются цифровой электроникой. Их восприятие данных заключается в наличии или отсутствии напряжения в проводах. Отсутствие напряжение выглядит для компьютера как ноль, наличие - как единица. На самом деле, компьютеры не знают других цифр, так что в итоге ему приходится комбинировать 0 и 1 для составления чисел.
Раньше, особые переключатели использовались для загрузки единиц и нулей в компьютерную память. На этой картинке, принадлежащей Wikimedia Commons, изображён Altair 8800. Переключатели на передней панели использовались для загрузки программы. Огни показывали результат. Монитора не было.
Каждый набор из переключателей представляет из себя номер. Каждый номер представляет данные или инструкцию, которую с ними должен сделать компьютер. Эта система, использующая только нули и единицы для репрезентации чисел называется бинарной(двоичной) системой исчисления. Этот тип компьютерного языка называется 1GL, или язык программирования первого поколения.
Числа в двоичной системе исчисления чаще всего представлены в комбинациях из четырёх цифр. Например:
1010 0010 0011
Усовершенствованием ввода через переключатели было начало использования шестнадцатеричных кодов. Десятичные числа, используемые в посведневной жизни, состоят из цифр 0-9. Шестнадцатеричная система исчисления состоит из цифр 0-9, а также из символов от A до F для репрезентации набора четырёх переключателей, с возможными значениями 0-15.
Двоичная | Десятичная | Шестнадцатиричная |
0 | 0 | 0 |
1 | 1 | 1 |
10 | 2 | 2 |
11 | 3 | 3 |
100 | 4 | 4 |
101 | 5 | 5 |
110 | 6 | 6 |
111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | 10 | A |
1011 | 11 | B |
1100 | 12 | C |
1101 | 13 | D |
1110 | 14 | E |
1111 | 15 | F |
1 0000 | 16 | 10 |
1 0001 | 17 | 11 |
Следующее видео немного подробнее объясняет, как работает система исчисления:
Для облегчения ввода программ, более поздние компьютеры позволяли вводить программы с помощью языка assembly. Каждая команда использовала мнемонику, а программа, называемая компилятором, превращала мнемоники в числа, обозначающие команды. Такой тип языка называется 2GL, или язык второго поколения.
Ниже преведена часть программы на языке assembly, предоставлено Wikimedia Commons.
Хотя это было улучшением, этого всё ещё было недостаточно для того, чтобы сделать процесс программирования лёгким. Следующее поколение языков предоставило абстракции более высокого уровня. Первые языки третьего поколения: (COBOL, FORTRAN и LISP) были намного проще для понимания и программирования.
Языки второго и третьего поколения использовали программу, называемую компилятор. Компилятор берёт программу, введённую пользователем (так называемый исходный код) и превращает её в машинный код. Программист запускает машинный код. Оригинальный исходный код не запускается.
Если программа использует исходный код из разных источников, они могут быть связаны вместе в один с помощью программы, называемой linker (линкер, редактор связей, компоновщик). Редактор связей работает с машинным кодом, сгенерированным компилятором, для создания финальной версии программы. Эта финальная версия - то, что запускает пользователь. Исходный код для этого не нужен.
Недостатком машинного языка является то, что программа будет работать только на определённых типах компьютера. Программы, скомпилированные для компьютеров с Windows скорее всего не будут работать на компьютерах Apple Macintosh и наоборот.
Потому что весь процесс компиляции и связи может быть сложным для начинающих программистов, некоторые языки стали использовать интерпретаторы. Эти программы спотрят на исходный код и преобразуют его в машинный код на ходу. Это также позволяет одним и тем же программам запускаться на Windows, Mac, Unix компьютерах, в случае, если на каждой из этих платформ есть доступ к интерпретатору.
Недостатком использования интерпретатора является то, что он медленнее, чем оригинальный, машинный язык.
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, 10, 100, 1000 и 10000 из двоичной в десятичную систему исчисления.
- Что такое компилятор?
- Что такое исходный код?
- Что такое машинный язык?
- Что является языком программирования первого поколения?
- Что является языком программирования второго поколения?
- Что является языком программирования третьего поколения?
- Что такое интерпретатор?
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin