Языки программирования (ЯП) по своим возможностям и времени создания принято делить на несколько поколений (Generation Language, GL). К сегодняшнему дню насчитывается пять поколений ЯП. Каждое из последующих поколений языков по своей функциональной мощности качественно отличается от предыдущего.
Языки первого поколения продолжают использоваться и сегодня, хотя в значительно меньшем объеме. Чаще всего приходится писать программы в машинных кодах для новых микропроцессоров, для которых еще не разработаны компиляторы, поддерживающие требуемый набор команд.
Появление третьего поколения ЯП (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Фортран, Кобол, Алгол и др. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций, позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков привлекла к написанию небольших программ (как правило, расчетного или учетного характера) значительное количество специалистов из некомпьютерных областей.
Подавляющее большинство языков 3GL успешно применяется и сегодня. Современные компиляторы с интегрированными средами разработки предоставляют очень удобные средства поддержки процесса создания программ, легко осваиваемые студентами первых курсов, благодаря чему простые в освоении языки третьего поколения используются для разработки программ абсолютным большинством людей, зарабатывающих на жизнь программированием. Практически все современные коммерческие продукты, рассчитанные на массовый рынок, написаны на языках третьего поколения.
С начала 70-х годов по настоящее время продолжается период языков четвертого поколения (4GL). После первых восторгов по поводу безграничных способностей ЭВМ стали более ясны возможности существующих языков программирования. Несмотря на рождение новых технологий (ООП, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оказался очень трудоемкой задачей, так как для реализации крупных проектов требовался более глобальный подход, чем тот, который предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Целью их создания было стремление увеличить скорость разработки проектов, снизить число ошибок и повысить общую надежность работы больших программных комплексов, получить возможность быстро и легко вносить изменения в готовые проекты, активно внедрять технологии визуальной разработки и т. д. Все языки четвертого поколения интегрированы в мощные пользовательские оболочки и обладают простым и удобным интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Языки 4GL активно применяются в различных специализированных областях, где высоких результатов можно добиться, используя не универсальные, а проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. Как правило, в эти языки встраиваются мощные примитивы, позволяющие в одном операторе описать такую функциональность, для реализации которой на языках младших поколений потребовались бы тысячи строк кода.
Однако тем, кто использует языки 4GL для создания законченных приложений, по-прежнему необходимо кодировать программу вручную с последовательным вводом команд. При этом сохраняется главный недостаток языков предыдущих поколений. Он заключается в том, что все они в значительной степени ориентированы на чуждую человеческому мышлению чисто компьютерную идеологию (работа с памятью, переменными, базами данных, последовательностями абстрактных операторов и т. п.), что требует от людей хорошего понимания принципов функционирования компьютера и операционных систем. Кроме того, парадигма функционального программирования по-прежнему присутствует в языках 4GL во всей полноте, не позволяя перейти к более высокому уровню абстракций при разработке программных систем.
Создавая программы, решающие самые разные задачи, разработчики стараются использовать богатый многолетний опыт компьютерной индустрии. Системы пятого поколения имеют открытую архитектуру и поддерживают большое количество продуктов третьих фирм, предоставляя пользователю возможность интеграции с готовыми решениями для различных областей. Это могут быть всевозможные визуальные редакторы, генераторы отчетов, стандартные библиотеки, удобные Мастера (Wizards) быстрого создания типовых приложений, CASE-системы, средства интеграции с базами данных и т. п. Чем больше приложений удастся объединить в одном пакете, тем большими возможностями он будет обладать.
Некоторые компьютерные эксперты считают продукты последнего поколения уже не языками, а средствами разработки, прикладными пакетами, не имеющими к процессу создания программ с помощью ЯП никакого отношения. Проектирование программы происходит в специализированном визуальном редакторе, и работа с исходными текстами отсутствует.
Языки программирования (ЯП) по своим возможностям и времени создания принято делить на несколько поколений (Generation Language, GL). К сегодняшнему дню насчитывается пять поколений ЯП. Каждое из последующих поколений языков по своей функциональной мощности качественно отличается от предыдущего.
Языки первого поколения продолжают использоваться и сегодня, хотя в значительно меньшем объеме. Чаще всего приходится писать программы в машинных кодах для новых микропроцессоров, для которых еще не разработаны компиляторы, поддерживающие требуемый набор команд.
Появление третьего поколения ЯП (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Фортран, Кобол, Алгол и др. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций, позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков привлекла к написанию небольших программ (как правило, расчетного или учетного характера) значительное количество специалистов из некомпьютерных областей.
Подавляющее большинство языков 3GL успешно применяется и сегодня. Современные компиляторы с интегрированными средами разработки предоставляют очень удобные средства поддержки процесса создания программ, легко осваиваемые студентами первых курсов, благодаря чему простые в освоении языки третьего поколения используются для разработки программ абсолютным большинством людей, зарабатывающих на жизнь программированием. Практически все современные коммерческие продукты, рассчитанные на массовый рынок, написаны на языках третьего поколения.
С начала 70-х годов по настоящее время продолжается период языков четвертого поколения (4GL). После первых восторгов по поводу безграничных способностей ЭВМ стали более ясны возможности существующих языков программирования. Несмотря на рождение новых технологий (ООП, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оказался очень трудоемкой задачей, так как для реализации крупных проектов требовался более глобальный подход, чем тот, который предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Целью их создания было стремление увеличить скорость разработки проектов, снизить число ошибок и повысить общую надежность работы больших программных комплексов, получить возможность быстро и легко вносить изменения в готовые проекты, активно внедрять технологии визуальной разработки и т. д. Все языки четвертого поколения интегрированы в мощные пользовательские оболочки и обладают простым и удобным интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Языки 4GL активно применяются в различных специализированных областях, где высоких результатов можно добиться, используя не универсальные, а проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. Как правило, в эти языки встраиваются мощные примитивы, позволяющие в одном операторе описать такую функциональность, для реализации которой на языках младших поколений потребовались бы тысячи строк кода.
Однако тем, кто использует языки 4GL для создания законченных приложений, по-прежнему необходимо кодировать программу вручную с последовательным вводом команд. При этом сохраняется главный недостаток языков предыдущих поколений. Он заключается в том, что все они в значительной степени ориентированы на чуждую человеческому мышлению чисто компьютерную идеологию (работа с памятью, переменными, базами данных, последовательностями абстрактных операторов и т. п.), что требует от людей хорошего понимания принципов функционирования компьютера и операционных систем. Кроме того, парадигма функционального программирования по-прежнему присутствует в языках 4GL во всей полноте, не позволяя перейти к более высокому уровню абстракций при разработке программных систем.
Создавая программы, решающие самые разные задачи, разработчики стараются использовать богатый многолетний опыт компьютерной индустрии. Системы пятого поколения имеют открытую архитектуру и поддерживают большое количество продуктов третьих фирм, предоставляя пользователю возможность интеграции с готовыми решениями для различных областей. Это могут быть всевозможные визуальные редакторы, генераторы отчетов, стандартные библиотеки, удобные Мастера (Wizards) быстрого создания типовых приложений, CASE-системы, средства интеграции с базами данных и т. п. Чем больше приложений удастся объединить в одном пакете, тем большими возможностями он будет обладать.
Некоторые компьютерные эксперты считают продукты последнего поколения уже не языками, а средствами разработки, прикладными пакетами, не имеющими к процессу создания программ с помощью ЯП никакого отношения. Проектирование программы происходит в специализированном визуальном редакторе, и работа с исходными текстами отсутствует.
Языки 5го поколения. Разве они существуют?
Java, как и C#, по-прежнему занимают львиную долю рынка корпоративных приложений, сделанных на заказ. Java на этом рынке уже около 20 лет, C# около 10 лет, при этом они относится к языкам программирования 3го поколения. В то время, как языки 4го поколения предлагают более эффективный способ создания бизнес приложений, но всё равно Java и C# вне конкуренции. Что же говорить про языки программирования 5го поколения, если языки программирования 4го поколения, предлагая увеличение производительности программиста на порядок, не смогли потеснить лидеров из 3го поколения. Разве языки 5го поколения вообще существуют?
Поколения языков программирования
1е поколение
Программирование на уровне машинных команд. Программы на них писались с помощью нулей и единиц. Для этих языков не было ни компиляторов, ни трансляторов, код выполнялся процессором напрямую. Программный код был зависим от процессора, поэтому первое поколение языков программирования можно классифицировать, как языки уровня процессора.
2е поколение
В отличие от языков программирования первого поколения, программы можно было задавать с помощью символов, используя мнемонические сокращения английских слов. Например, MOV — означал «move» — передвинуть. JMP — означал «jump» — перепрыгнуть. Такие программы впоследствии конвертировались в машинный код программой ассемблером. Ассемблерные языки были также специфическими для компьютера и процессора, но при этом были намного более понятны человеку, чем языки 1го поколения. Их также можно классифицировать, как языки уровня процессора, но с более дружелюбным синтаксисом.
3е поколение
Эта группа языков представляет собой значительные улучшения по сравнению со вторым поколением языков. Эти языки отличаются наличием составных типов данных, именованными переменными и возможностью определять участки кода, как подпрограммы. Первыми представителями этих языков были Fortran, ALGOL и COBOL. Языки программирования общего назначения такие, как C, С++, Pascal, Java, C# тоже являются языками 3го поколения.
Программы, написанные на языках 3го поколения, не зависят от конкретного типа процессора. Они могут не зависеть даже от типа операционной системы компьютера, поэтому их можно классифицировать, как языки уровня компьютерной системы.
4е поколение
Языки этого поколения создавались для решения задач в строго определённой предметной области, и их синтаксис наиболее приближен к языку понятному человеку. Примером этих языком могут послужить SQL, XUL, FoxPro, PowerBuilder и др. Языки четвёртого поколения часто сравнивают с предметно-ориентированными языками программирования (domain-specific language, DSL). Эти языки значительно упрощают разработку приложений в определённой предметной области, но по-прежнему программы выполняются в рамках определённой компьютерной системы. Поэтому их можно классифицировать, как языки уровня компьютерной системы, но с более дружелюбным синтаксисом.
5е поколение
На теперешний момент нет чёткого определения, по каким критериям определяются языки 5ых поколений. Пишут, что с его помощью компьютер может решить определённую проблему без участия программиста. Программисту нужно будет только задать, какую проблему должен решить компьютер и условия, которые нужно достичь, чтобы решить её. И это без необходимости того, чтобы реализовывать алгоритм или процедуру для её решения.
Если проанализировать классификации поколений языков, приведённых выше, то можно заметить, что 1е и 2е поколения работали на уровне процессоров. 3е и 4е поколения — на уровне компьютерных систем, будь то просто компьютер или кластер компьютеров. А что же с 5м поколением?
Мне видится, что языки 5го поколения должны работать на ещё более высоком уровне и оперировать не только ресурсами определённой компьютерной системы. Они должны работать на уровне распределённых компьютерных ресурсов, связывая относительно независимые системы в одно большое приложение. При этом вовлекая не только компьютерные, но и человеческие ресурсы.
Т.е. языки 5го поколения находятся между компьютерными системами и человеком. Они определяют алгоритм взаимодействия человека с программой и наоборот. Это очень похоже на use case сценарии, только на этапе выполнения программы, а не на этапе её проектирования.
Предвестниками языков 5го поколения можно считать веб фреймворки. Вернее, ту часть веб фреймворка, которая отвечает за соответствие запроса пользователя и выполняемой команды со стороны сервера. В одних фреймворках — это называется маппинг запросов на действия (actions), в других роутинг (routing) запросов.
Пример маппинга в Spring MVC:
Фреймворк, обрабатывая URL запрос «/helloWorld», вызывает соответствующий метод helloWorld(…). Метод возвращает строчку «helloWorld», что указывает фреймворку передать управление соответствующему представлению, например «hellowWorld.jsp».
Так как возможности маппинга и роутинга запросов достаточно ограничены, в большинстве случаев их соответствие прописывается один к одному. Запрограммировать какие-либо условия, ветвления маппингов достаточно сложно, поэтому их можно считать только предвестниками языков 5го поколения.
Представителями языков 5го поколения можно считать разнообразные workflows, так как workflow задаёт, какие действия, в какой последовательности и при каких условиях должны выполнить программа и человек, участвующий в этом процессе. Существуют некоторые веб фреймворки, у которых маппинг задаётся посредством определённого Workflow.
В Apache Struts 1, маппинг выглядит примерно так:
По событию со страницы CustomerDetailForm.jsp форма отправляется на action — «/submitDetailForm». Фреймворк вызывает соответствующий обработчик в классе «mybank.example.CustomerAction», который возвращает результат в виде строки «success» или «failure». По результату возвращает пользователю либо «ThankYou.jsp», либо «Failure.jsp».
В Spirng Web Flow маппинг будет выглядеть примерно так:
Фреймоворк, выполняя запрос пользователя переходит в «action-state» — edit. Где находит Person объект по Id, пришедшему из URL. Кладёт его во flowScope. Дальше переходит на «view-state» — personForm, где передаёт управление «/person/form.jsp» представлению. После того, как пользователь обновит форму, он может сохранить изменения или же отменить их. В этих случаях происходят соответствующие события «save» или «cancel», которые ведут на соответствующие end-states. При этом флоу заканчиват свою работу.
Также workflows могут задаваться не только на уровне приложения, но и на уровне интеграций приложений (business process management — BPM), обеспечивая взаимодействие между собой относительно независимых приложений. Достаточно известным примером из BPM может послужить Activiti. Пример его XML представления бизнес-процесса:
Write monthly financial report for publication to shareholders.
