Мови програмування, ти, я і інформатика
Двійковий запис інформації вкрай незручна для людини, тому досить швидко від двійковій запису перейшли до восьмеричної записи, а потім до шестнадцатеричной.
Про шестнадцатеричной системі числення розмова окрема, а поки розглянемо приклад шестнадцатеричной записи машинної команди складання, який був приведений при вивченні основ комп'ютерного «мови» і «мислення». Отже, для того, щоб подати комп'ютера команду складання цілих чисел, йому необхідно записати наступне:
Здається, що далеко не кожна людина зможе швидко записати цю череду нулів і одиниць без помилок, і вже тим більше - запам'ятати її. А ось такий запис цієї ж команди виглядає вже значно простіше:
Це і є шестнадцатеричная запис команди на складання цілих чисел, в якій використовується не два, а 16 символів. Звичайно, смислової інформації для людини не несе і такий запис, але їй значно простіше користуватися - записувати, запам'ятовувати, вводити, і важче помилитися при маніпулюванні.
Біда полягає в тому, що такий запис незрозуміла не тільки людині, а й комп'ютера, оскільки і для нього це всього лише нічого не значущий набір символів. Комп'ютер, як ми усвідомили в попередній статті, здатний мислити лише поняттями «так» і «ні», умовно позначаються одиницею і нулем. Виходить, що полегшуючи розумові потуги людини введенням нової мови для складання команд, ми втратили комп'ютер, як розуміє ці команди виконавця і співрозмовника.
Довелося написати невелику програму, що переводять шестнадцатеричную запис в двійкову. Після цього процес виконання програм ускладнився. У обчислювальну машину спочатку вводився незрозумілий для неї текст програми, написаної в шістнадцятирічних символах. Потім цей текст оброблявся програмою, перетворюючої кожен символ в двійковий набір нулів і одиниць. І тільки після цього перетворення комп'ютер починав розуміти, що від нього вимагається і приступав до виконання команд програми.

Шістнадцяткова або восьмерична запис команд стала першою мовою програмування, що вимагає перекладу на машинну мову. Такі мови були названі мовами програмування першого покоління, 1GL (1 Generation Language).
Наступним кроком став перехід від шістнадцятковій системи інформації до символьного. Раз вже ЕОМ не розуміє вводиться в неї текст, то чому б не зробити його хоча б зрозумілим людині? Адже це значно полегшить працю програмістів, складових для комп'ютера численні і різноманітні команди. І якщо врахувати, що комп'ютер, після перекладу символьної команди, Новомосковскет її в мільйони разів швидше за людину, то підвищення комфорту програмістів при написанні команд значно підвищить продуктивність їх праці і дозволити уникнути численних помилок, що неминуче супроводжують написання програм абсолютно незрозумілою людині символікою.
Домовилися позначати команди скороченою записом дій, яких вони вимагають від машини, а осередки пам'яті якимись іменами. Наприклад, команду складання цілих чисел, яка в двійковій запису виглядає так: 00000001000011010000111000001010. а в шістнадцятковій - 010D0E0A. тепер позначають ADD - від англійського дієслова «додати». Тоді попередній приклад для цілих чисел А і В можна записати в такому вигляді:
Ця запис уже цілком прийнятна для людини, і навіть має віддалене уявлення про програмування індивідуум, може здогадатися, чого в даному випадку потрібно від комп'ютера. Ну а те, що комп'ютер цей запис прочитати не може, вже не настільки важливо - в будь-якому випадку йому необхідний перекладач, з яким він може спілкуватися значно швидше, ніж людина, що намагається перетворити команди в двійкову систему числення. Програма, яка переводить символьну запис в двійковий код, була названа ассемблером. а мова - мовою асемблера. Мови асемблера склали друге покоління мов програмування - 2GL.
Нарешті, через десять років розвитку обчислювальної техніки вдалося розробити мови, що дозволяють записувати команди машині майже як математичні формули. Наприклад, попередню команду такою мовою можна записати у вигляді:
Це був революційний прорив. Тепер програмісту не треба було думати про те, які машинні команди будуть виконуватися в його програмі. Він може взагалі не знати систему команд комп'ютера. Більш того, він може навіть не знати тип комп'ютера, для якого пише програму. Такими мовами (мовами третього покоління, 3GL) ми користуємося дотепер. Першою мовою третього покоління була мова обчислення формул FORTRAN. потім з'явився Algol і безліч інших, серед яких нині живі - Pascal, C, C ++, Java, C #.
Програма, яка переводить запис на машинний мову, називається компілятором. Звичайно, компілятори набагато складніше ассемблеров, це великі і складні програми, створювані цілими колективами програмістів.
Для кожної мови третього покоління створений не один компілятор. По-перше, різні компілятори створюються різними фірмами, що конкурують між собою. По-друге, розрізняються налагоджувальні та оптимізують компілятори, що створюють різний, чорновий або остаточний, машинний код. По-третє, для кожного типу комп'ютерів розробляються свої компілятори, адже набір машинних команд може сильно відрізнятися. Вибір відповідного компілятора - це одна з найважливіших завдань програміста, що приступив до реалізації свого проекту.

На цьому рахунок покоління мов програмування не зупинився. Були створені декларативні мови. склали четверте покоління мов програмування - 4GL. Основна ідея декларативних мов полягає в тому, щоб записувати не дії, що призводять до результату виконання програми, а вказівки машині, за якими вона сама зробить необхідні операції. Мови четвертого покоління говорять, що треба зробити, а не те, як це зробити.
Спроби створити мови п'ятого покоління. засновані на голосовому введенні звичайних для людини вказівок типу: «Виріши-но мені диференціальне рівняння», виявилися невдалими і непомітно були зняті з порядку денного. Несподівані нововведення в створенні нових мов припинилися. Тепер мови програмування розвиваються поступово, без помітних стрибків і революційних переворотів.
Отже, на сучасних мовах програмування записуються машинні команди, а оператори. що вимагають попереднього перекладу на машинну мову. Кожен оператор перетворюється компілятором в кілька машинних команд.
Крім того, мови бувають низькорівневі і високорівневі. компільовані й інтерпретовані.