top of page

История языков программирования

Первые программы заключались в установке ключевых переключателей на передней панели вычислительного устройства. Очевидно, таким способом можно было составить только небольшие программы. Одну из первых попыток создать полноценный язык программирования предпринял немецкий учёный Конрад Цузе, который в период с 1943 по 1945 год разработал язык Plankalkül. Это был очень перспективный язык, фактически являвшийся языком высокого уровня, однако из-за военных действий он не получил практической реализации, а его описание было опубликовано только в 1972 году.

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

Например, для организации чтения блока данных с гибкого диска программист может использовать 16 различных команд, каждая из которых требует 13 параметров, таких как номер блока на диске, номер сектора на дорожке и т.п. Когда выполнение операции с диском завершается, контроллер возвращает 23 значения, отражающие наличие и типы ошибок, которые необходимо анализировать. Уже одно обращение к процессору громоздко, а анализ ошибок и вовсе представляется невообразимым, особенно, если не именно с этим процессором приходиться работать. Таким образом, набор команд машинного языка сильно зависит от типа процессора.

Язык ассемблера
На протяжении 1950-х годов запросы на разработку программного обеспечения возросли и программы стали очень большими. Приходилось писать очень много кода, хотя обеспечение и было весьма простым: по тем временам дизайн рабочего стола был проще нынешнего, программы работали с элементарными вещами, а компьютер только ещё начинал победно шествовать. Однако программы запутывались всё больше, их структура усложнилась, потому что всё время развивалась компьютерная техника. Тогда стали пользоваться специальными программами-сборщиками программ из маленьких кусочков кодов — ассемблерами. Начался новый этап развития.
Теперь, когда была нужна эффективная программа, вместо машинных языков использовались близкие к ним машинно-ориентированные языки ассемблера. К таковым относились, например, Autocode, с 1954-го г. — IPL (предшественник языка LISP) , с 1955-го г. — FLOW-MATIC . Теперь люди стали использовать мнемонические команды взамен машинных команд.
Но даже работа с ассемблером достаточно сложна и требует специальной подготовки. Например, для процессора Zilog Z80 машинная команда 00000101 предписывает процессору уменьшить на единицу свой регистр B. На языке ассемблера это же будет записано как DEC B.

Языки высокого уровня
Следующий шаг был сделан в 1954 году, когда была начата разработка языка высокого уровня — Фортран (англ. FORTRAN — FORmula TRANslator), компилятор для которого впервые появился в апреле 1957 года[3]. К разработке такого языка подтолкнули новые возможности внедрённого в 1954 году компьютера IBM 704, в котором на аппаратном уровне были реализованы индексная адресация и операции с плавающей точкой. Вслед за ним появились и некоторые другие языки, например: LISP, ALGOL 58, FACT. Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека, с помощью них можно писать программы до нескольких тысяч строк длиной. Условными словами можно было, как привычно человеку, гораздо более просто выразить сложную программную операцию из битов. Однако ранние варианты Фортрана значительно уступают поздним концепциям и языкам, использовался он для создания относительно простых по современным меркам программ.

Во второй половине 50-х интернациональная команда разработчиков попыталась создать универсальный язык программирования. В результате появился ALGOL 58 (англ. ALGOrithmic Language), по многим параметрам являвшийся наследником Фортрана. В него были добавлены новые концепции и обобщения, формализована концепция типов данных, разрешено использование идентификаторов любой длины, когда в Фортране было ограничение в 6 символов. Этот вариант языка был скорее черновым, поэтому в январе 1960 года в Париже состоялось второе собрание комитета по его разработке, где было решено внести значительные изменения. Новый вариант получил название ALGOL 60, основными новшествами в нём были: концепция блочной структуры, возможность создания рекурсивных процедур, автоматические массивы. Несмотря на свои многочисленные достоинства, ALGOL так и не получил большого распространения, в первую очередь из-за сложности в его реализации и отсутствии поддержки от корпорации IBM.

В дальнейшем появились COBOL (1959), Паскаль (1970), Си (1972).

Появление структурного программирования
К концу 1960-х годов в связи с ростом сложности программ и дальнейшим развитием программных средств возникла необходимость увеличить производительность труда программистов, что привело к разработке структурного программирования. Основоположником данной методологии считается Эдсгер Дейкстра, который в 1968 году опубликовал своё знаменитое письмо «Оператор Goto считается вредным», а также описал основные принципы структурного программирования. С развитием структурного программирования следующим достижением были процедуры и функции. То есть, если есть задача, которая выполняется несколько раз, то её можно объявить как функцию или как процедуру и в выполнении программы просто вызывать её. Общий код программы в данном случае становится меньше. Это способствовало созданию модульных программ.
Следующим достижением было объединение разнородных данных, которые используются в программе в связке, в структуры.
Структуры — это составные типы данных, построенные с использованием других типов данных. Например, структура времени разбивается на: часы, минуты, секунды. В свою очередь и часы, и минуты, и секунды описаны при помощи более простых и элементарных типов данных. И в место работы с отдельными переменными, в которых легко запутаться, можно перейти к структуре «время», включающее в себя уже часы, минуты и секунды, и работать с ней, как с единым типом одного формата.
Структурное программирование предполагает точно обозначенные управляющие структуры, программные блоки, отсутствие инструкций безусловного перехода (GOTO), автономные подпрограммы, поддержка рекурсии и локальных переменных. Суть такого подхода заключается в возможности разбиения программы на составляющие элементы с увеличением читабельности программного кода.
Также создавались функциональные (аппликативные) языки (Пример: Lisp — англ. LISt Processing, 1958) и логические языки (пример: Prolog — англ. PROgramming in LOGic, 1972).
Хотя внедрение структурного программирования дало положительный результат, даже оно оказывалось несостоятельным тогда, когда программа достигала определённой длины. Для того чтобы написать более сложную и длинную программу, нужен был новый подход к программированию.

ООП
При использовании структур данных в программе вырабатываются и соответствующие им функции для работы с ними. Это привело к мысли их объединить и использовать совместно, так появились классы.
Класс — это структура данных, содержащая в себе не только переменные, но и функции, которые работают с этими переменными.
Коротко, это достижение в области программирования было очень велико. Теперь программирование можно было разбить на классы и тестировать не всю программу, состоящую из 10 000 строк кода, а разбить программу на 100 классов, и тестировать каждый класс. Это существенно облегчило написание программного продукта.
В итоге в конце 1970-х и начале 1980-х были разработаны принципы объектно-ориентированного программирования. ООП сочетает лучшие принципы структурного программирования с новыми концепциями инкапсуляции, полиморфизма подтипов и наследования.
Первым объектно-ориентированным языком программирования является Симула-67, в котором впервые появились классы. Концепции ООП получили дальнейшее развитие в языке Smalltalk, в котором также были заложены основы систем с оконным управлением. Более поздними примерами объектно-ориентированных языков являются Object Pascal, C++, Java, C# и др.
ООП позволяет оптимально организовывать программы, разбивая проблему на составные части, и работая с каждой по отдельности. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути, описывает часть мира, относящуюся к этой задаче.

Информация предоставлена сайтом - https://ru.wikipedia.org/

bottom of page