Компьютерное программирование.

Как развивалось компьютерное программирование.

Компьютерное программирование – это разработка компьютерных программ, по которым выполняют вычисления компьютеры. Компьютерное программирование – это технология, которая, как и любая другая технология претерпела эволюцию во времени. Технология создания компьютерных программ постояннно совершенствовалась и развивалась в тесной связи и взаимодействии с развитием самих компьютеров. Сам процесс развития и компьютеров, и компьютерного программирования для этих компьютеров принято условно подразделять на поколения. Общепринято, что всего поколений – шесть. Каждое поколения характеризуется и элементной базой, на которой созданы компьютеры (электронные лампы, транзисторы, интегральные схемы,…), и технологией создания компьютерных программ (машинные коды, языки программирования, структурное программирование, объектно-ориентированное программирование, …).

“Доисторический” период.

Часто первым программируемым устройством принято считать Жаккардовый ткацкий станок, построенный в 1804 году Жозефом Мари Жаккаром, который произвёл революцию в ткацкой промышленности, предоставив возможность программировать узоры на тканях при помощи перфокарт.

Aналитическая машина Беббиджа
Aналитическая машина Беббиджа

Первое программируемое вычислительное устройство, Аналитическую машину, разработал Чарлз Бэббидж .
19 июля 1843 года графиня Ада Августа Лавлейс, дочь великого английского поэта Джорджа Байрона, написала первую в истории человечества компьютерную программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости. В своей первой и единственной научной работе Ада Лавлейс рассмотрела большое число вопросов. Ряд высказанных ею общих положений (принцип экономии рабочих ячеек памяти, связь рекуррентных формул с циклическими процессами вычислений) сохранили своё принципиальное значение и для современного программирования. В материалах Чарльза Бэббиджа и комментариях Ады Лавлейс намечены такие понятия, как подпрограмма и библиотека подпрограмм, модификация команд и индексный регистр, которые стали употребляться только в 1950-х годах.

На заре компьютерного программирования.

В конце 1930-х и в начале 1940-х годов А. Чёрч, А. Тьюринг, А. Марков разработали математические абстракции для формализации алгоритмов: А. Чёрч – Лямбда-исчисление,  А. Тьюринг – Машину Тьюринга, А. Марков – Нормальные алгоритмы.

Конрад Цузе
Конрад Цузе

В период с 1943 по 1945 годы, появились электрические цифровые компьютеры, и немецким инженером Конрадом Цузе был разработан язык, который можно считать первым высокоуровневым языком программирования для вычислительной машины. Язык получил название – Планкалкюль (на немецком Plankalkül — «исчисление планов»). Характерные особенности языка: свободная переносимость (независимость от архитектуры и набора команд машины), операторы условия (кроме ELSE), циклы, подпрограммы, отсутствие рекурсии, работа с массивами и подмассивами, а также сложный синтаксис.
1945 г. – Джон Маучли и Джон Преспер Эккерт построили в Пенсильванском университете электронный компьютер ENIAC (Electronic Numerical Integrator and Computer) и разработали проект первого компьютера EDVAC (Electronic Discrete Variable Automatic Computer) с хранимой программой.

Программирование на языке вычислительной машины (в кодах). Первые Ассемблеры. Микропрограммирование.

Машинный код. Пример.
Машинный код. Пример.

Единственный язык, напрямую “понимаемый” и выполняемый ЭВМ — это машинный язык (также называемый машинным кодом или языком машинных команд). Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным кодом, запись программы на котором состояла из единиц и нулей. Машинный код “понимает” вычислительная машина, и именно этот язык, язык вычислительной машины, можно считать языком программирования первого поколения. У каждого типа вычислительных машин и машины разных производителей был свой, никальный язык. Поэтому программу нужно было переписывать заново при переходе с одной ЭВМ на другую ЭВМ.
В 1949 году Джон Маучли  создал первый интерпретатор языка программирования под названием “Short Code“. На этом языке операции и переменные кодировались двухсимвольными сочетаниями.

Ассемблеры – языки программирования Первого поколения.

В 1949 году была введена в эксплуатацию английская вычислительная машина с хранимой программой- EDSAC (Electronic Delay Storage Automatic Calculator), разработанная Морисом Уилксом из Кембриджского университета. Морис Уилкс ввел систему мнемонических обозначений для машинных команд, названную языком Ассемблера.
Машина EDSAC была прямой копией проекта EDVAC, но в части, касающейся вопросов программирования EDSAC, Морис Уилкс явился в некотором роде первооткрывателем. Устав кодировать каждую команду с помощью двоичных цифр (”единиц” и “нулей”), он занялся поисками более удобного способа общения с машиной. Первым результатом этих усилий явились новые коды, составленные из букв и коротких слов, взятых из английского языка. Он ввел мнемонику, где каждая команда изображалась одной заглавной буквой: обозначала “вычитание”, Т — “передать информацию в память”, Z — “остановка машины” и т. д.

Профессор Грейс Мюррей Хоппер

Ещё одно ценное новшество, наряду с мнемоникой, это введенная на EDSAC библиотека подпрограмм. К этому времени программисты уже были знакомы с понятием подпрограммы. Грейс Хоппер и ее коллеги применяли подпрограммы на гарвардской машине Говарда Айкена. Они имели блокноты с записью наиболее употребляемых подпрограмм, чтобы в случае необходимости не составлять их заново. Но проблема состояла в том, что адреса расположения команд и переменных подпрограммы в памяти менялись в зависимости от ее размещения в памяти вычислительной машины. Поэтому, настройка подпрограмм на определенное место в памяти нуждалась в автоматизации, и впервые это было сделано в компьютере EDSAC. Программисты EDSAC начали с написания набора унифицированных подпрограмм, которые и образовали библиотеку. После этого достаточно было ввести лишь короткую команду, чтобы компьютер самостоятельно проделал всю работу по настройке и размещению подпрограммы внутри основной программы.
Морис Уилкс назвал мнемоническую схему для EDSAC и библиотеку подпрограмм собирающей системой (по-английски assembly system — отсюда слово “ассемблер”), поскольку она собирала последовательности подпрограмм.

Пример программы на Ассемблере
Пример программы на Ассемблере

В настоящее время языки программирования, в которых короткие мнемонические имена непосредственно соответствуют отдельным машинным командам, называются языками ассемблера. Морис Уилкс считается создателем (1949 год) одного из языков ассемблера.
Если требуется полный низкоуровневый контроль над системой на уровне машинных команд и отдельных ячеек памяти, программы пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора ЭВМ (по этой причине трансляторы с языков ассемблера получаются алгоритмически простейшими трансляторами).
Языки Ассемблера принято относить к языкам второго поколения. Хотя эти языки также ограничены спецификациями конкретных машин, но они более простые для использования человеком за счёт применения мнемоник, то есть символьных обозначений машинных команд, а так же за счёт возможности сопоставления имён адресам в машинной памяти. При использовании ассемблера становился необходимым процесс перевода программы на язык машинных кодов перед её выполнением, для чего были разработаны специальные программы, также получившие название ассемблеров (сборщиков программы).

Макрокоманды или макросы.

Языки второго поколения были усовершенствованы за счет включения в них макрокоманд или макросов. Макрос – это символьное имя, заменяемое при обработке препроцессором на последовательность программных инструкций. Для каждого интерпретатора (языков ассемблера) существует специальный синтаксис объявления и вызова макросов. Макрос может “разворачиваться” в различные последовательности инструкций при каждом вызове, в зависимости от сработавших разветвлений внутри макроса и переданных ему аргументов.

Микропрограммирование.

В 1951 году Морис Уилкс выдвинул концепцию микропрограммирования.  Предложенный им метод стал основой техники микропрограммирования, которой предстояло стать популярной двумя десятилетиями позже, в начале 70-х годов. Микропрограммирование – это проектирование и написание микропрограмм для реализации машинных наборов команд. Микропрограммы (микрокод) можно легко менять в любое время, что значительно облегчает процесс проектирования, позволяет безболезненно добавлять новые команды, делать компьютеры со сменными наборами команд, командами, которые могут написать сами пользователи.
Более подробно о микропрограммировании можно почитать на странице нашей википедии>>.

Структурное (операторное) программирование. Подпрограммы. Первые языки программирования. Компиляторы.

В 1951 году Грейс Хоппер  разработала первую транслирующую программу, которую она назвала компилятором. Эта программа производила трансляцию на машинный язык всей программы, записанной в удобной для обработки алгебраической форме.

Алексей Андреевич Ляпунов
Алексей Андреевич Ляпунов

В 1953 году в СССР была выпущена первая серийная вычислительная машина Стрела. Советский математик Алексей Андреевич Ляпунов предложил одну из первых нотаций языков программирования (операторное программирование).  В 1952–53 учебном году на кафедре Вычислительной математики Механико-математическом факультете МГУ А.А.Ляпунов прочел первый в Советском Союзе спецкурс по программированию. В этом спецкурсе, состоявшем из восьми лекций под названием “Принципы программирования“, были изложены основы подхода, получившего название операторный метод программирования. А.А.Ляпунов показал, как можно описывать процесс решения на ЭВМ некоторой задачи с помощью операторных логических схем, представляющих последовательность операторов разных видов (арифметические операторы, операторы управления) и логических условий, определяющих порядок выполнения операторов, что позволяло автоматизировать переход от представления на языке операторных схем к программе, записанной на языке машины, при помощи “программирующей программы“.

Операторное программирование.

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

Языки программирования.

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

Историческая справка: Первые языки программирования.

1957 г. – Группа разработчиков фирмы IBM, руководимая Джоном Бекусом, создала язык программирования ФОРТРАН.
1958 г. – Дж. Килби, сотрудник фирмы Texas Instruments, создал первую интегральную схему. Появилась первая версия языка программирования АЛГОЛ. Джон Маккарти из Массачусетского технологического института создал язык программирования ЛИСП для обработки списков. Фрэнк Розенблатт из Корнеллского университета разработал модель Перцептора – кибернетической модели мозга.
1959 г. – Организован комитет CODASYL, который в следующем году создал язык программирования КОБОЛ. Дуглас Росс разработал язык АПТ для программирования станков ЧПУ. Дж. Маккарти и К. Стрейчи предложили концепцию разделения времени работы компьютера. Выпущена Советская вычислительная машина “Сетунь”, работающая в троичной системе счисления.
1960 г. – Тринадцать европейских и американских специалистов по программированию в Париже утвердили стандарт языка программирования АЛГОЛ-60. Фирма IBM разработала мощную вычислительную систему Stretch (IBM 7030).
1961 г. – Дж. Гордон, руководитель разработки систем моделирования фирмы IBM, создал язык GPSS (General Purpose Simulation – общецелевая система моделирования). Сотрудниками Манчестерского университета под руководством Т. Килбурна создана вычислительная машина “Atlas”, в которой впервые реализована концепция виртуальной памяти.
1962 г. Р. Грисуолд разработал язык программирования SNOBOL, ориентированный на обработку строк. Э. В. Евреиновым и Ю. Г. Косаревым предложена модель коллектива вычислителей и обоснована возможность построения суперкомпьютеров на принципах параллельного выполнения операций, переменной логической структуры и конструктивной однородности.
в 1964 году, (в год, когда были созданы первые IBM/360 и первая “мышка”), был разработан язык BASIC.
В 1969 году создан языка LOGO.
В 1971 году был создан язык PASCAL.

Подпрограммы.
Подпрограммы
Подпрограммы

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

Популярные языки программирования третьего и четвёртого поколений.

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

С середины 1950-х годов начали появляться языки третьего поколения. Первыми были Фортран, Лисп, Кобол, Алгол. Языки программирования этого типа более абстрактны (их ещё называют языками высокого уровня) и универсальны, не имеют жёсткой зависимости от конкретной аппаратной платформы и используемых на ней машинных команд. Программа на языке высокого уровня может исполняться на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором ЭВМ). Обновлённые версии перечисленных языков используются до настоящего времени.
В 1960-е и 1970-е годы были разработаны языки программирования, ответвления которых используются  и в настоящее время. Большинство современных языков программирования, в конечном счёте, основано на одном из языков, разработанных в 60-е и 70-е годы прошлого столетия. Перечислим наиболее популярные языки программирования:
– язык APL. Язык оказал влияние на функциональное программирование и стал первым языком, поддерживавшим обработку массивов;
– язык PL/I (NPL) был разработан в 1960-х годах как объединение лучших черт Фортрана и Кобола;
– язык SNOBOL, разработанный и совершенствуемый в течение 1960-х годов, ориентирован на обработку текстов. В языке SNOBOL  в число базовых операций введен сопоставление с образцом;
– язык SIMULA (Симула) впервые включал поддержку объектно-ориентированного программирования.
В период с 1969 по 1973 годы велась разработка языка Си. Язык  Си широко используется до настоящего времени. Язык Си стал основой для таких популярных языков, как С++ и Java.
В 1972 году был создан язык Пролог (PROLOG) – язык логического программирования.
В 1973 году в языке ML была реализована расширенная система полиморфной типизации, положившая начало типизированным языкам функционального программирования.
В 1980-е годы сообщество функциональных языков приняло в качестве стандарта ML и Лисп.
В середине 1970-х группа специалистов представила язык Smalltalk, который был уже всецело объектно-ориентированным.
Язык С++ объединил в себе черты объектно-ориентированного и системного программирования
Язык Ада (ADA), производный язык от Паскаля (PASCAL), правительство США стандартизировало с целью использования при разработки программного обеспечения бортовых систем управления военными объектами.

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

Программисты пишут исходную программу на том или ином языке программирования, затем, используя компилятор, транслируют его (в один или несколько этапов) в машинный код, готовый к исполнению на целевом процессоре, или в промежуточное представление, которое может быть исполнено специальным интерпретатором — виртуальной машиной. Но это справедливо только для языков высокого уровня.
В 1960—1970-х годах  обсуждался вопрос о том, насколько необходима поддержка структурного программирования в тех или иных языках программирования.

Структурное программирование.

Структурное программирование – это технология разработки компьютерных программ, основанная на представление программы в виде иерархической структуры блоков.  Методология структурного программирования предложена в 1970-х годах Э. Дейкстрой и др.
В соответствии с данной методологией любая программа строится без использования оператора безусловного перехода GOTO, а лишь с использованием из трёх базовых управляющих структур: последовательность, ветвление, цикл. Так же широко используются подпрограммы. При этом разработка программы ведётся пошагово, методом «сверху вниз».
Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственно, усложнения программного обеспечения. В 1970-е годы объёмы и сложность программ достигли такого уровня, что традиционная (неструктурированная) разработка программ перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать. Поэтому потребовалась систематизация процесса разработки и структуры программ.
Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов».
По мнению Бертрана Мейера (создатель языка программирования Эйфель), «Революция во взглядах на программирование, начатая Дейкстрой, привела к движению, известному как структурное программирование, которое предложило систематический, рациональный подход к конструированию программ. Структурное программирование стало основой всего, что сделано в методологии программирования, включая и объектно-ориентированное программирование»
Модульная система программирования (модуль — объёмная единица организации кода) нашла своё отражение и применение в таких языках программирования, как Модула-2, Оберон, Ада и ML. Методология структурного программирования широко используется еще в одном технологическом подходе к созданию программ – в обобщённом программировании.

Обобщённое программирование.

Обобщённое программирование (generic programming) – это технология программирования, в которой используются способы описании данных и алгоритмов, позволяющие применять эти данные и алгоритмы к различным типам данных, не меняя само это описание. Обобщённое программирование  поддерживается разными языками программирования. В 1970-х годах возможности обобщённого программирования впервые появились в форме обобщённых функций (дженериков)  в языках Клу и Ада. Позднее в виде параметрического полиморфизма в ML и его потомках, а затем во многих объектно-ориентированных языках, таких как C++, Java, Object Pascal, D, Eiffel, языках программироавния для платформы .NET.
Средства обобщённого программирования реализуются в языках программирования в виде тех или иных синтаксических средств, дающих возможность описывать данные (типы данных) и алгоритмы (процедуры, функции, методы), параметризуемые типами данных.

Более подробно об  обобщённом программировании можно почитать на странице нашей википедии>>.

Объектно – ориентированное программирование.

Объектно-ориентированное программирование.
Объектно-ориентированное программирование.

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

Немного предистории.

Первым языком программирования, в котором были предложены основные понятия, впоследствии сложившиеся в технологию объектно-ориентированного программирования (ООП), была Симула, но термин объектная ориентированность не использовался в контексте использования этого языка. В момент его появления в 1967 году в языке Симула были предложены революционные идеи: объектов, классов, виртуальных методов. Фактически, Симула была Алголом с классами. Понятие класса в Симуле может быть полностью определено через композицию конструкций Алгола (то есть класс в Симуле описывается посредством примитивов конструкций Алгола).
В языке Smalltalk (Алан Кэй и Дэн Ингаллс) понятие класса стало основообразующей идеей для всех остальных конструкций языка (то есть класс в языке Smalltalk является примитивом, посредством которого описаны более сложные конструкции). Фактически, Smalltalk стал первым широко распространённым объектно-ориентированным языком программирования.
В настоящее время объектно-ориентированная технология стала доминирующей в большинстве алгоритмических языков программирования.

Cписок наиболее популярных объектно-ориентированных языков программирования: ActionScript (3.0), Ada, C#, C++, Cyclone, D, Delphi, Dylan, Eiffel, F#, Io, Java, JavaScript,
JScript.NET, Object Pascal, Objective-C, Perl, PHP, PowerBuilder, Python, Ruby, Scala, Simula, Smalltalk, Swift, Vala, VB.NET, Visual DataFlex, Xbase++, X++.

Основные понятия Объектно-ориентированного подхода к программированию.

Технология ООП базируется на таких понятиях, как   как  абстрагированиеинкапсуляциянаследованиеполиморфизм.
Абстрагирование означает выделение значимой информации и исключение из рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко называя её просто «абстракцией»), подразумевая набор значимых характеристик объекта, доступный остальной программе.
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Одни языки (С++, Java, Ruby) отождествляют инкапсуляцию с сокрытием, но другие (Smalltalk, Eiffel, OCaml) различают понятия инкапсуляция и сокрытие.
Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс называется потомком, наследником, дочерним или производным классом.
Полиморфизм – это свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Другой вид полиморфизма – параметрический полиморфизм. Параметрический полиморфизм  в ООП называют Обобщённым программированием.
Необходимость совместного использования объектов разных классов, способных обрабатывать однотипные сообщения, требует поддержки полиморфизма – возможности записывать разные объекты в переменные одного и того же типа. В таких условиях объект, отправляя сообщение, может не знать в точности, к какому классу относится адресат, и одни и те же сообщения, отправленные переменным одного типа, содержащим объекты разных классов, вызовут различную реакцию.
Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа класс может быть присвоен объект любого класса-потомка её класса.
Более подробно об  объектно-ориентированном программировании можно почитать на странице нашей википедии>>.

Веб – программирование. Клиент – серверные приложения.

Веб - программирование
Веб – программирование

Веб-программирование – это раздел программирования, ориентированный на разработку веб-приложений (программ, обеспечивающих функционирование динамических сайтов Всемирной паутины).
В 1945 году Ванневар Буш (создатель дифференциального анализатора) впервые выдвинул идею гипертекста. В компьютерной терминологии гипертекст — это текст, сформированный с помощью языка разметки, такого как HTML. Гипертекст предполагает использование гиперссылок. Гиперссылка (hyperlink) – это часть гипертекстового документа, ссылающаяся на другой элемент (команду, текст, заголовок, примечание, изображение) в самом документе, на другой объект (файл, каталог, приложение), расположенный на локальном диске или в компьютерной сети, либо на элементы этого объекта. Каждая веб-страница содержит гипертекст. Гипертекст может создаваться вручную, на языке программирования (разметки) HTML. Созданные подобным образом веб-страницы называют статическими. Гипертекст может генерироваться автоматически, с помощью специальных языков программирования – серверных скриптов (языков сценарием). Такие, автоматически созданные веб-страницы называются динамическими.

Язык разметки (HTML). Таблицы стилей (CSS). Клиентские скрипты (Scripts)

Язык разметки HTML (Hyper Text Markup Language) – первый язык, предназначенный для программирования веб-страниц.

HTML (от англ. HyperText Markup Language — «язык гипертекстовой разметки») — стандартизированный язык разметки документов во Всемирной паутине. Большинство веб-страниц содержат описание разметки на языке HTML (или XHTML). Язык HTML интерпретируется браузерами; полученный в результате интерпретации форматированный текст отображается на экране монитора компьютера или мобильного устройства.
Язык HTML до 5-й версии определялся как приложение SGML (стандартного обобщённого языка разметки по стандарту ISO 8879). Спецификации HTML5 формулируются в терминах DOM (объектной модели документа).
Язык XHTML является более строгим вариантом HTML, он следует синтаксису XML и является приложением языка XML в области разметки гипертекста.
Во всемирной паутине HTML-страницы, как правило, передаются браузерам от сервера по протоколам HTTP или HTTPS, в виде простого текста или с использованием шифрования.

Языки сценариев (сценарные языки программирования).

В 1990-х годах в связи с активным развитием Интернета распространение получили языки программирования, позволяющие создавать сценарии (scripts) для веб-страниц. Перечислим наиболее популярные из них: Perl, Java, PHP, ASP. Возрастала также и популярность технологий виртуализации. Эти изменения являлись совершенствованием уже существовавших парадигм и языков.

Веб-приложение.

Веб-приложение – это компьютерная программа, разбитая на две части. Одна часть называется клиентским приложением. Вторая часть называется серверным приложением. Поэтому веб-приложение называется Клиент – Серверным приложением. Клиентское приложение  взаимодействует с серверным приложением при помощи браузера. Сервер, на котором размещается серверное приложение называется Веб-сервером. Логика веб-приложения распределена между сервером и клиентом, хранение данных осуществляется, преимущественно, на сервере, обмен информацией происходит по сети. Клиентские приложения не зависят от конкретной операционной системы пользователя, поэтому веб-приложения являются межплатформенными службами.
Веб-приложения стали широко использоваться с начала 2000-х годов. В настоящее время всё большее количество полезных, пользовательских программ переносится на Веб-серверы, в так называемые “Облака”. А программы и сервисы, перенесённые в облака получили общее название “Облачные технологии“. Можно считать, что Интернет и Облако – это синонимы.

Клиент-Серверное Веб приложение
Клиент-Серверное Веб приложение

Языки веб-программирования.

Языки веб-программирования – это языки, которые в основном предназначены для работы с веб-технологиями. Языки веб-программирования можно условно разделить на две пересекающиеся группы: клиентские и серверные.
Для написания кодов страниц веб-сайтов разработан язык разметки гипертекстов HTML, и язык стилизации страниц CSS. Эти языки содержит команды (операторы) для разметки и оформления текста и графики. Для придания большей привлекательности и функциональности (говорят – динамичности), в страницы веб-сайта внедряются программы – скрипты. Для написания программ – скриптов разработаны специальные языки программирования – клиентские языки программирования.

Клиентские языки программирования.

Программы, разработанные на клиентских языках программирования, обрабатываются на стороне пользователя (клиенте), как правило, эти программы выполняет браузер. Поэтому, результат выполнения программы (скрипта), входящей в состав веб-страницы зависит от браузера пользователя. То есть, если пользователь запретил выполнять клиентские программы – скрипты, то они исполняться не будут, как бы ни желал этого программист. Кроме того, может произойти такое, что в разных браузерах или в разных версиях одного и того же браузера одна и та же программа – скрипт будет выполняться по-разному. Применение клиентских программ может снизить нагрузку на сервер за счет того, что они исполняются на стороне клиента и не всегда требуют перезагрузку (генерацию) веб-страницы.
Самыми распространенными клиентскими языками для разработки программ-скриптов являются: JavaScript и VisualBasicScript (VBS).
JavaScript, разработан компанией Netscape и первоначально использовался только для браузера Netscape Navigator. В настоящее время этот язык получил очень большую популярность. VisualBasicScript (VBS) это аналог клиентского языка от компании Microsoft.
Для того, чтобы браузер мог их понимать и выполнять в него (в браузер) встроен специальный инструмент – интерпретатор.
Интерпретатор – это программа, которая последовательно, оператор за оператором переводит программу – скрипт с языка программирования (JavaScript или VisualBasicScript) на машинный язык и сразу же исполняет, то есть интерпретирует. Причем, в процессе выполнения может потребоваться обращение к веб-серверу. Но чаще всего этого обращения не требуется. Что значительно ускоряет работу с веб-страницей.

Серверные языки  программирования.

Когда пользователь дает запрос на какую-либо страницу (переходит на неё по ссылке или вводит адрес в адресной строке своего браузера), то вызванная страница сначала обрабатывается на сервере, то есть выполняются все программы, связанные со страницей, и только потом возвращается к посетителю по сети в виде файла. Имя этого файл может иметь расширения: .html, .htm, .php, .asp, .aspx, .perl, .ssi, .xml, .dhtml, .xhtml.
Работа программ уже полностью зависима от сервера, на котором расположен сайт, и от того, какая версия того или иного языка поддерживается. К серверным языкам программирования можно отнести: PHP, Perl, Python, Ruby, любой .NET язык программирования (технология ASP.NET), Java, Groovy.
Важной стороной работы серверных языков является возможность организации непосредственного взаимодействия с системой управления базами данных (СУБД) – сервером базы данных, в которой упорядоченно хранится информация, которая может быть вызвана в любой момент.

Скрипты PHP, которые выполняются на стороне сервера и посылают в браузер пользователя уже обработанную информацию. Применяются для создания динамических HTML-страниц, гостевых книг, ведения форумов и опросов. CGI-сценарии, которые написаны преимущественно на Perl, C/C++, выполняются на стороне сервера и зависят от конкретных действий пользователя. Применяются, как и сценарии PHP, для создания динамических HTML-страниц, гостевых книг, ведения форумов и опросов.

CORBA (Common Object Request Broker Architecture)

1986 г. Первая всемирная конференция по объектно-ориентированным системам программирования прошла в Портленде. Возможно, именно прозвучавшие на ней доклады оказали стимулирующее влияние на Уильяма Аткинсона, инженера Apple, который через год после этого спроектировал систему HyperCard, прообраз современных визуальных сред быстрой разработки. Эффективность новой технологии оказалась столь высокой, что уже в 1989 г. одиннадцать компаний, среди которых были 3Com, American Airlines, Canon, Data General, Hewlett-Packard, Philips Telecommunications, Sun Microsystems и Unisys, основали группу OMG (Object Management Group), призванную формировать индустриальные стандарты на объектное программирование и упрощать интеграцию приложений с помощью универсальных кросс-платформных технологий. Эта группа первым делом приступила к выработке единого стандарта компонентной модели CORBA (Common Object Request Broker Architecture) – набора спецификаций, определяющих способы объектно-ориентированного взаимодействия компонентов промежуточного уровня в гетерогенных средах без привязки к конкретным языкам программирования. С самого начала CORBA нацеливалась на поддержку крупных, индустриальных проектов, и этот подход со временем себя полностью оправдал. Сегодня нет другого столь же распространенного независимого стандарта, поддерживающего самые разные ОС и объектные модели.

1992 г. Вышел стандарт CORBA 1.0 (Common Object Request Broker Architecture), определяющий ключевые аспекты функционирования CORBA-систем. В него были включены базовое описание объектной модели, наборы программных интерфейсов поддержки CORBA-систем, а также декларативный язык определения интерфейсов Interface Definition Language (IDL), созданный OMG (Object Management Group) для описания распределенных интерфейсов.

2001 г. OMG выпускает спецификацию CORBA 3.0. Она дополнена возможностями асинхронного обмена сообщениями, разработки систем реального времени и создания встраиваемых систем. В ней появились подключаемые компоненты, поддержка XML и средства интеграции различных Интернет-технологий. Была продумана модель сборки системы из компонентов JavaBeans и ActiveX. Стало допустимым в рамках одного компонента описывать множество интерфейсов, а также использовать язык сценариев. Особый акцент в третьей версии CORBA сделан на эффективном взаимодействии с Java.

2002 г. Опубликована последняя официальная версия CORBA 3.0.2.

UML (Unified Modeling Language).

В 1994 году Гради Буч и Джеймс Румбах из Rational Software решили объединить две методологии визуального моделирования Booch и OMT и создать на их основе новый язык UML (Unified Modeling Language).

COM (Component Object Model), DCOM – распределенной версии COM

В 1995 году Microsoft сообщает о новой технологии DCOM – распределенной версии COM, позволившей собирать приложения из компонентов, выполнявшихся на разных компьютерах. Первоначально эта технология называлась Network OLE (сетевое OLE), однако по мере выделения COM в самостоятельное направление решено было отказаться от упоминания OLE в ее названии.

“Архитектура, управляемая моделью” (Model Driven Architecture, MDA)

В 1997 году Эксперты OMG осознают не только важность объектных технологий программирования, но и острую потребность в универсальных методологических концепциях проектирования крупных систем. Секретом стабильности системы и высокой отдачи инвестиций специалисты OMG называют независимую UML-модель и приступают к созданию концепции “Архитектура, управляемая моделью” (Model Driven Architecture, MDA). В ее основу закладывается базовая платформно-независимая UML-модель системы, несколько платформно-зависимых моделей и коллекция определений программных интерфейсов. Первую реализацию этой универсальной концепции (так называемое “отображение в объектный стандарт”) OMG выполнила, конечно, для CORBA.

Технология .NET

2000 г. Microsoft анонсирует новую объектную платформу .NET и новый язык программирования C#, сочетающий лучшие свойства С++ и Java. Он был предложен Microsoft во многом в противовес Java.

Платформа .NET Framework — это технология, которая поддерживает создание и выполнение нового поколения приложений и веб-служб XML.

Платформа .NET Framework доступна только для систем Windows. Для запуска приложений в ОС Windows, MacOS и Linux можно использовать платформу .NET Core.

https://docs.microsoft.com/ru-ru/dotnet/framework/get-started/overview

 

 

В некоторых алгоритмических языках вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, некоторых реализациях Lisp, Java, Perl, Python, языках для .NET Framework.

1985 г. – Создание микропроцессора Intel-80386 и сразу разработанной под него первой графической среды Windows. Через два года IBM создала проекты PS/2 и OS/2, аналоги INTEL и Microsoft.

1990 г. – Создание MSDOS 4.01 и Windows 3.0. Через год была создана русская версия MSDOS 5.0, и только через 4 года вышла следующая версия данной среды.

1995-1996 г. – Создание операционной среды Windows 95, через два года появляется новое поколение Pentium 2.

1998-1999 г. – Создание операционной среды Windows 98 и нового поколениямикропроцессоров Pentium 3.

Языки программирования пятого поколения.

В 1980-е годы в Японии и других странах мира осуществлялись значительные инвестиции в изучение перспектив так называемых языков пятого поколения, которые включали бы в себя конструкции логического программирования.

Пятое поколение ЭВМ: 1992 – 2013 годы

 

Кратко основную концепцию ЭВМ пятого поколения можно сформулировать следующим образом:
Компьютеры на сверхсложных микропроцессорах с параллельно-векторной структурой, одновременно выполняющих десятки последовательных инструкций программы.
Компьютеры с многими сотнями параллельно работающих процессоров, позволяющих строить системы обработки данных и знаний, эффективные сетевые компьютерные системы.

Шестое и последующие поколения ЭВМ.

Intel 80486DX2 top
Электронные и оптоэлектронные компьютеры с массовым параллелизмом, нейронной структурой, с распределенной сетью большого числа (десятки тысяч) микропроцессоров, моделирующих архитектуру нейронных биологических систем, распознающие сложные образы.

Наиболее популярные, на сегодня, языки программирования.

Перечислим несколько наиболее популярных языков программирования:

Язык программирования Swift
Язык программирования Go
Язык программирования PHP
Язык программирования C++
Язык программирования Python
Язык программирования JavaScript
Язык программирования Java
Язык программирования CSharp (C#)
Язык программирования Objective-C
Язык программирования Rust

 

Язык программирования Рейтинг tiobe_top_10
Язык программирования Рейтинг tiobe_top_10

 

Язык универсальных систем (Universal Systems Language).

Язык универсальных систем (Universal Systems Language) – это язык программирования, который предупреждаeт, a не исправляeт сбойные ситуации. Oн основывается на теории систем и опирается на уроки проекта, по разработке бортового программного обеспечения, кораблей «Аполлон». Разрабатывает этот язык программирования компанию Hamilton Technologies, Inc в Кембридже, штат Массачусетс. Компанию возглавляет выдающаяся женщина программист  Маргарет Гамильтон.  В течении своей замечательной жизни, Маргарет Гамильтон стала свидетелем того, как разработка программного обеспечения, превратилась из не очень серьезного занятия в престижную профессию программиста компьютерных программ.

Источники информации.

https://ru.wikipedia.org/wiki/Язык_программирования
https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование