Английский математик Чарлз Бэббидж (1791—1871 гг.). В 20-х годах XIX века ему пришла идея создать механическую машину для вычислений, что порядок ее действий можно было предварительно записывать и впоследствии выполнять эти действия на машине автоматически. Это была идея, положившая начало программированию. Ч. Бэббидж посвятил реализации этой идеи всю жизнь. Он не добился успеха и признания современников при жизни, но оказал огромное влияние на современное развитие информатики.
Вспомним первые компьютеры и программы для них. Это была эра программирования непосредственно в машинных кодах, а основным носителем информации были перфокарты и перфоленты. Программисты обязаны были знать архитектуру машины досконально. Программы были достаточно простыми, что обуславливалось, во-первых, весьма ограниченными возможностями этих машин, и, во-вторых, большой сложностью разработки и, главное, отладки программ непосредственно на машинном языке. Основоположником программирования можно считать английского математика Чарлза Бэббиджа (1791—1871 гг.). В 20-х годах XIX века ему пришла идея создать такую механическую машину для вычислений, что порядок ее действий можно было предварительно записывать и впоследствии выполнять эти действия на машине автоматически. Это была идея, положившая начало программированию. Ч. Бэббидж посвятил реализации этой идеи всю жизнь. Он не добился успеха и признания современников при жизни, но оказал огромное влияние на современное развитие информатики. Хотя использованный Бэббиджем способ записи программы на перфокартах, не имеет ничего общего с современными технологиями хранения и выполнения программ компьютерами, принцип остался тем же. Компилятоp (от англ. Compile - собирать вместе, составлять) - системная программа, выполняющая преобразование программы, написанной на одном алгоритмическом языке, в программу на языке, близком к машинному, и в определенном смысле эквивалентную первой. В 1954 г. группа под руководством Г. Хоппер разработала систему, включающую язык программирования и компилятор, которая в дальнейшем получила название MATH-MATIC. После удачного завершения работ по созданию MATH-MATIC Г. Хоппер и ее группа принялись за разработку нового языка и компилятора, который позволил бы пользователям программировать на языке, близком к обычному английскому. В 1958 г. появился компилятор FLOW-MATIC, он был первым языком для задач обработки коммерческих данных. Работы в этом направлении привели к созданию языка КОБОЛ. Одним из основных консультантов при его создании была Грейс Мюррей Хоппер. Середина 50-х годов XX века характеризуется стремительным прогрессом в области программирования. Для записи программ начали применять мнемонический язык – язык assembly. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Появление этого языка на свет, очень облегчало жизнь программистов. Теперь вместо рябящих в глазах нулей и единиц, они могли писать программу командами, состоящими из символов приближенных к обычному языку. Для того времени этот язык был новшеством и пользовался популярностью т.к. позволял писать программы небольшого размера, что при тех машинах критерий значительный. Но сложность разработки в нём больших программных комплексов привела к появлению языков третьего поколения – языков высокого уровня. Но на этом жизнь ассемблера не закончилась, он жив и посей день и не только жив, но и пользуется популярностью в узких кругах. Не стоит забывать, что у хакеров этот язык так же пользуется популярностью, да ещё какой! Но что же им так нравиться в нём? Конечно же, то, что скорость работы полученной программы значительно выше скорости программы написанной на языке программирования высокого уровня. Это объясняется тем, что получившийся размер программы очень мал. А как же разработчики антивирусных программ? Они тоже не лыком шиты и так же используют ассемблер в некоторых модулях своих программ, что так же обеспечивает их быстродействие. А если бы не ассемблер некоторые программы загружались бы около часа! Языки программирования сохраняют свое предназначение для решения задач определенных типов. Выбор языка определяется удобствами для программистов, их предпочтениями в силу опыта и образования, а также пригодностью для данного компьютера и данной задачи. А задачи, решаемые с помощью компьютера, бывают самые разнообразные. Такая разнотипность решаемых компьютером задач и приводит к многообразию языков программирования.
| Задача | Примеры языков | Задачи искусственного интеллекта | Lisp, Prolog, Multilisp, Commonlisp, Рефал, Planner, QA4, FRL, KRL, QLisp | Параллельные вычисления | Fun, Apl, Alfl, PARAlfl, ML, SML, PPL/1, Hope, Miranda, Occam, PFOR, Glypnir, Actus, параллельный Cobol, ОВС-ЛЯПИС, ОВС-Мнемокод, ОВС-Алгол, ОВС-Фортран, PA(1), PA(G) | Задачи вычислительной математики и физики | Occam, PFOR, Glypnir, Actus,параллельный Cobol, ОВС-ЛЯПИС, ОВС-Мнемокод, ОВС-Алгол, ОВС-Фортран, PA(1), PA(G) | Разработка интерфейса | Forth, c, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java, РПГ | Разработка программ-оболочек, разработка систем | Forth, c, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java, РПГ | Задачи вычислительного характера | Algol, Fortran, Cobol, Ada, PL/1,Фокал, Basic,Pascal | Оформление документов, обработка больших текстовых файлов, организация виртуальных трехмерных интерфейсов в Интернете, разработка баз данных | Perl, Tcl/Tk, VRML, SQL, PL/SCL, Informix 4GL, Natural, DDL, DSDL, SEQUEL, QBE, ISBL |
Но это отнюдь не весь список созданных человечеством языков программирования, так как многие языки по определённым причинам не могли существовать самостоятельно, они легли в основу новых, более усовершенствованных.
| Поколения ЭВМ | Характеристика ЭВМ | Языки программирования | Характеристика ЯП |
| 1 поколение (1946-1954г.г.) | Для научно-технических расчетов; носитель информации - перфокарты и перфоленты; программное обеспечение-библиотека стандартных программ, автокоды. | Машинные | Ориентированы на использование в конкретной ЭВМ, сложны в освоении, требуют хорошего знания архитектуры ЭВМ. |
| 2 поколение (1958-1960г.г.) | Для технологических и экономических расчётов; носитель информации- магнитная лента; созданы трансляторы. | Ассемблеры, макроассемблеры | Более удобны для использования, но по-прежнему машинно-зависимы |
| 3 поколение (1960-1966г.г.) | Для управления и технологических расчётов; носитель информации- диск; программное обеспечение- операционные системы; СУБД; пакеты прикладных программ. | Языки высокого уровня | Мобильные, человеко-ориентированные, проще в освоении |
| 4 поколение (1970-1980г.г.) | Для информационного обслуживания, телекоммуникации; носитель информации-гибкий диск; прикладное ПО общего назначения; сетевое ПО; мультимедия. | Непроцедурные, объектно-ориентированные, языки запросов, параллельные | Ориентированы на непрофессионального пользователя и на ЭВМ с параллельной архитектурой |
| 5 поколение (1980г.- по наше время) | Телекоммуникации, информационное обслуживание; носитель информации- гибкий, жёсткий и оптический диски; интеллектуальные программные системы; | Языки искусственного интеллекта, экспертных систем и баз знаний, естественные языки | Ориентированы на повышение интеллектуального уровня ЭВМ и интерфейса с языками |
Развитие вычислительной техники сопровождается созданием новых и совершенствованием существующих средств общения программистов с ЭВМ - языков программирования (ЯП). Проанализируем таблицу и установим зависимость развития ЯП от развития ЭВМ.
ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, который определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ. Второе поколение ЯП характеризуется созданием языков ассемблерного типа, позволяющих вместо двоичных и других форматов машинных команд использовать их мнемонические символьные обозначения. Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затруднительны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные языки используются при необходимости разработки высокоэффективного программного обеспечения. Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня - Fortran, разработанного под руководством Дж. Бэкуса в фирме IBM. За короткое время Fortran становится основным ЯП при решении инженерно-технических и научных задач. Постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов - от микро- до супер-ЭВМ, а его версии используются и для вычислительных средств нетрадиционной параллельной архитектуры. Вскоре после языка Fortran появились такие ныне широко известные языки, как Algol, Cobol и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня. Языки четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алгоритмов. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта. Языки программирования от поколения к поколению улучшали свои характеристики, становясь все более доступными в освоении непрофессионалам. Все языки программирования делятся на два уровня: низкий и высокий.
Бэйсик использует обозначения подобные обычным математическим выражениям. Поэтому этот язык позволяет решать достаточно широкий круг задач. Позволим выделить некоторую общую тенденцию в развитии языков программирования. Языки развиваются в сторону все большей и большей абстракции. И это сопровождается падением эффективности. Вопрос: а стоит ли этого абстракция? Ответ: стоит. Стоит, так как повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это, конечно, требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять. А еще лучше — не совершать. А еще лучше максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования. А с потерей эффективности придется смириться.
Изучив литературу по данному вопросу, я пришел к выводу, что мёртвый язык программирования – это язык, который по определенным причинам вышел из употребления.
Точная смерть языка наступает в том случае, когда язык претерпевает эволюцию и развивается в другой язык или даже в группу языков.
Время жизни языка программирования зависит от успешности команды создателей и промоутеров, т.е. Бейсик и Фортран существовали на ЕС-ЭВМ на СМ-ЭВМ, и на ПК в период существования DOS первых версий, тогда компьютеры назывались ЭВМ и предназначались для счета, но эти ЭВМ уже изжили себя. Вычислительная мощь, это последнее о чем мы сейчас вспоминаем по отношению к компьютерам, мы мало нуждаемся в счете, очень мало людей, чьи вычислительные потребности выходят за рамки обычного калькулятора, но из этих немногих попадая в электронные таблицы типа Excel, там и остаются в нирване. Эти языки справлялись со своими задачами и прекрасно жили в условиях тех "сумасшедших ресурсов", но изменился подход к использованию вычислительной техники, и целая категория вычислительной техники превратилась в "абак" – вычислительное средство, представляющее интерес, только исторически.
Что делает язык мощным и пригодным для всех ипостасей?
Прикладное или системное программирование - это наличие различных библиотек, с оптимальным кодом и удачным транслятором (компилятор или интерпретатор). Мы живем в эпоху вымирания языков. Вымирают естественные языки, такой же тенденции подвержены и языки программирования. Причины вымирания языков программирования разнообразны. Раньше огромная польза была от Pascal. Сейчас он почти умер. В свое время Perl считался крутым, но затем его вытеснил PHP. Однако все языки создавались для чего-то, а не просто так. И перед тем как окончательно отправить тот или иной язык в архив истории, следовало бы полностью осознать его наследие, употребляемое в текущей практике программирования. А может статься, что некоторые языки вообще списаны со счетов зазря. Вопрос лишь в том, как грамотно провести ревизию, инвентаризацию всего этого добра из сотен и тысяч языков, как извлечь крупицы смысла из гор отработанной породы?
Проанализировав хронологическую таблицу языков программирования, мы можем назвать несколько основных причин их краха.