Кто придумал языки программирования. История развития языков программирования: кратко обо всем. Внимание, правильные вопросы

Не бойтесь тюрьмы, не бойтесь сумы,
Не бойтесь мора и глада,
А бойтесь единственно только того,
Кто скажет: «Я знаю, как надо!»
(А.Галич)

Давайте скажем прямо и коротко: правильного ответа на вопрос «какой язык программирования мне выбрать первым?» в природе не существует. Даже ответа класса «один из вот этих трёх». Не существует даже сейчас, в конкретный момент времени, когда я это пишу, 10 апреля 2017 года, 21:38 по киевскому времени - но ещё меньше смысла в попытках ответить на этот вопрос, заглядывая на месяц, полгода или год вперёд.

Что существует - это несколько правильных вопросов , которые полезно задать себе. Это и будет первым твоим тестовым заданием для входа в профессию: хочешь ли ты отвечать на эти вопросы и вообще подумать и поисследовать предметную область, прежде чем принять решение?

Если да - айда за мной.

Некоторые предуведомления

Во-первых, одного языка недостаточно. Даже на первом году обучения. Как минимум несколько «специализированых» языков всё равно понадобятся (HTML, CSS, SQL, YAML, JSON, XML, Markdown - как минимум примеры разных синтаксисов , которые почти наверняка придётся читать, и с большой вероятностью - писать). Но и не только. Не-JS-программисту почти наверняка понадобится прочитать чуточку JS; JS-программисту - проверить реализацию алгоритма, описанную на Python; системному программисту - разобраться с чужим говно кодом на скриптовом языке.

А на пути к «миддл»-уровню их придётся освоить полдюжины. А чтобы стать настоящим профессионалом - разбираться в парадигмах всякой фантастической дряни.

Во-вторых, вряд ли ты всю жизнь будешь писать на одном языке. И вряд ли даже достаточно долго. Может, даже и месяца не будешь. На самой первой работе в 2003-м году я был нанят C++-алгоритмистом, но немножко поддерживал сайт на PHP, и ещё дописывал интерфейс к нашей библиотеке на Excel VBA (содрогается) . И ничего, нормально, чего только с джунами не бывает.

Но и не только это - сменится «основной» язык в полюбившейся конторе, или наймёт другой работодатель по твоей любимой теме, изменятся воздушные потоки стартапной или энтерпрайзной культуры - и ВЖУХ - ты уже и не помнишь конструкций так тщательно выбранного «первого языка».

Поэтому, в общем, не стоит относиться к этому выбору слишком серьёзно, как к выбору жены или дома (их тоже можно сменить - но всё же чуть сложнее). Начать, попробовать всякое и найти своё - намного более осмысленная стратегия чем несколько недель/месяцев/лет анализировать «а с чего же всё-тки начать».

В-третьих, и самых главных (и вытекает из первых двух) - зачастую не «ты выбираешь язык», а язык выбирает тебя . Стоит по-настоящему заинтересоваться тем, что ты делаешь, выбрать это как важную часть своей жизни - а я обращаюсь именно к таким людям, не к тем кто надеется «по субботам подработать программингом» (их уже ничего не спасёт) - так вот, стоит сделать этот выбор, и дальше все советы «что выбрать» будут до лампочки. Интересная задача или перспективный работодатель нарисуются сами, язык на котором не получается сделать круто, отвалится сам собой, зато вырастет другой. Just stay tuned.

Внимание, правильные вопросы!

И всё же, чтобы с чего-то начать, девушка/юноша, обдумывающий житьё (то есть выбирающий, какому бы язык программирования выучиться для начала ), может спросить себя вот о чём:

Зачем собираешься учиться? Очень важный вопрос, который стоит честно задать себе первым делом. Получить дополнительный инструмент для своей основной профессии (например, микробиологии или бухгалтерии)? Развлечься в свободное время? Помочь ребёнку в школе?.. Ну, окей, на mkdev мы по умолчанию предполагаем, что ты собрался работать программистом (хотя с удовольствием научим и микробиолога - знаешь ли ты, что Ruby у них ужасно популярен?). Но: ты уже твёрдо уверен, что хочешь найти профессию в IT как можно быстрее, или просто решил попробовать, твоё ли это? Во втором случае, возможно, стоит перепробовать десяток языков и подходов, чтобы понять что тебе нравится - или ничего, это тоже ок!

Связанный вопрос: Сколько у тебя времени? Без чёткого дедлайна «через год я уже должен зарабатывать X долларов» - может быть разумно (и вполне приятно) сразу планировать себе «вузовского класса» обучение: то есть составить список из нескольких классических языков - Scheme, Haskell, Prolog, нескольких промышленных (Java, Ruby, JS), пары супермодных (Rust, Pony, Elixir)... А вопрос «на чём именно писать» как-то сам вырастет. Но если хочется «настоящую профессию и побыстрее», то...

Знаешь ли точно, в какой области хочешь работать? «Только разработка игр, ничего другое не прёт», «Искусственный интеллект - это то, о чём я со школы мечтал», «Хочется поближе к железу быть, всяких роботов и сенсоры программировать» или даже «Да вот друзья собираются делать стартап про сериалы с бигдатой» - хорошие варианты ответа на этот вопрос. Но ты совершенно не обязан их иметь. «А покажите, пожалуйста, весь ассортимент» - тоже хороший ответ. И «пока попробую у дяди в фирме бухгалтеру помочь, а там хочется чего-то поинтереснее» - тоже норм.

Виктор поможет тебе сделать первые шаги в программировании, научит основам, и языку Ruby!

Дальше: А что бы хотел делать? Кажется, это тот же вопрос, что выше? А нет. Закрой глаза, и представь, как выглядит твой идеальный рабочий процесс? Экспериментировать с интерфейсом, чтобы пользователь оказался счастлив, даже не подозревая сколько сил вложено? Выдумать новый алгоритм столкновения частиц для физического движка игры и три года доводить до ума? Быстро написать много кода, объединив десяток известных компонентов в новую стартапную идею, пока никто её не придумал? Разобраться со сложной чужой штукой, чтобы заставить её работать в новой среде? - есть огромное количество вариантов, и некоторые даже и уводят вдаль от профессии «просто программиста» - в область devops, или UI-специалистов, или аналитиков данных... Посвяти хотя бы 20 минут этой медитации, результат может быть Совсем Неожиданным.

Например (в связке с предыдущим вопросом) даже если ты уверен, что хочешь участвовать в разработке игр, понять что ты хочешь отлаживать новые уровни, или что тебя действительно развлечёт проработка физически точных алгоритмов столкновений, или - создание игрового сервера который выдержит стотыщмиллионов соединений - это всё же сильно разные направления для обучения и саморазвития.

И только ответив (или сознательно решив отложить ответ) на все вопросы выше, имеет смысл задать прагматический вопрос: Какие языки сейчас активно используются? - в той области, теме и среде, что тебе интересна. И выбрать штуки три (именно так!) для освоения в ближайшее время.

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

Некоторые ответы

Слышишь странный тихий звук?

Это устаревают и покрываются ржавчиной перечисленные ниже «ответы». Если ты читаешь эту статью через полгода после её написания, скорее всего раздел «ответы» уже слегка устарел (если не произошло какое-то катастрофическое событие, в результате которого устарело вообще всё); читаешь через год - устарел основательно. Читаешь через 5 лет - ...а чёрт его знает. В нашей области всё меняется каждый день, но зачастую остаётся довольно стабильным в более долгой перспективе.

Ну, в общем, понятно - читай осторожно.

Ниже - субъективные, короткие и неполные сведения о воображаемом топ-15 нынешних языков программирования (в алфавитном порядке).

Автор приписал каждому из них некоторое число: это количество вакансий на главном украинском сайте для разработчиков dou.ua , в которых язык хотя бы упоминается. Эти числа сами по себе ничего не значат, но позволяют провести некоторый неполный сравнительный анализ, на примере одной из пост-советских/европейских стран, и сделать какие-то очень неточные сравнительные выводы.

Обрати внимание: суть этих чисел не столько в том, что «надо выбирать то, где число больше»! Cуть в том, что у любого из этих языков число не равно нулю - в не очень большой, и не слишком благополучной, будем честны, стране. То есть найти работу можно и на языке у которого там написано 5 - но для этого его надо правда любить, а если цель просто «чёт попрограммить за приличное бабло» - тогда, конечно, надо выбирать где число побольше, там любого желающего берут, видимо.

    C (100? - похоже, поисковый движок не справился) - единственный живой дедушка программирования, притом живее всех живых. Всё системное (с поправками на Rust и Go, про которые ниже), программирование всяких микроконтроллеров и встроенных устройств, всяких драйверов для дронов и прочих mindblowing штук - это по-прежнему C. Ещё он «базовый» язык для сшивания или ускорения других языков и библиотек (какая-нибудь научная хрень, которая скажем изначально писалась на Python, потом для скорости переписывается на C, потом к этой C-имплементации появляются обёртки на Ruby, Julia и Haskell... так и живём). Короче, вряд ли первый язык, но обязательный для изучения - совершенно точно. К тому же, вовсе не стоит на месте, и свежие стандарты вполне свежи и хороши;

    C++ (144) - уродливый (по мнению одних) или восхитительно-сложный (по мнению других) племянник C. Объектно-ориентированный, метапрограммируемый, чудовищно переусложнённый, долго компилируемый... короче, C++ - это моя первая любовь среди языков программирования. Сейчас используется, насколько можно судить, для разработки игр, некоторых десктопных систем и немношк везде где можно C, но нужно более сложный код (потому что компилятор gcc доступен на всех примерно ОС, и компилирует и то и это);

    C# (414) - один из немногих языков, программисты на котором продали душу диаволу почти намертво привязаны к экосистеме Microsoft (которая, будем честны - особенно для разработчиков - довольно впечатляюще развита). Области применения - игры, либо Сложный Дорогой Enterprise софт. Сам язык, по состоянию на текущий момент, довольно красивый и прогрессивный. И, в общем, как почти все не новые и прагматичные языки общего назначения, имеет в себе немношк функционального, мношк ОО, что-то из метапрограммирования и т.д.;

    Clojure (6) - такой, волшебный единорог от языков программирования, работает на JVM (почитай про Java ниже), наследник Lisp, функциональный язык. Его диалект ClojureScript компилится в JS (тоже читай ниже, почему это важно). Используется в «умных» стартапах и в продакшене Очень Серьёзных Компаний. Выбрать можно только по Большой Любви (но он клёвый);

    Erlang+Elixir (5+10) - Erlang - это язык и платформа, особо популярный для создания телекоммуникационных (раньше) и вообще высоконагруженных распределённых (сейчас) приложений. Elixir - язык, работающий на той же платформе, но менее инопланетянский чем Erlang (впрочем, «основной» язык платформы всё равно придётся хоть немного понимать, см. ниже рассуждение про Java). На сегодняшний день всё это немножко отдаёт «элитарностью», но надёжно укоренилось в некоторых областях (скажем, в банковских системах) - и ужасно интересно;

    ES (JavaScript, CoffeeScript, TypeScript и т.д.) (788+10+64+...) - очевидный фаворит на текущий момент, ES/JS/... - по сути, не язык, а семейство языков. На них пишут (несколькими разными способами) веб-интерфейсы и мобильные интерфейсы, и ещё (несколькими другими образами) серверный и админский софт, и черта лысого. Что именно сегодня называется «языком JavaScript» определить довольно тяжело: нанявшись на работу «JavaScript-программистом», ты, в зависимости от везения, можешь оказаться человеком, который поддерживает древний интерфейс банковской системы, которая кровь-из-носу должна работать под любым браузером; или частью модной команды пишущей на строго-типизированном TypeScript сложную визуализацию научных данных; или вдруг поучаствовать в разработке интерфейса будущего на «следующей» версии языка, которая сложным образом компилируется в нечто работающее на старой нокии... целый мир, который одним абзацем не опишешь. Но «свой первый язык» в этой области искать довольно опасно;

Есть ещё третье мнение и рассказ о том, на чём основывается выбор языка программирования в реальной разработке

    Go (78) - простой как палка и эффективный язык, сделанный гуглом, в основном для случаев «сделать быстрый, тупой, надёжный код». Полёт мысли в нём сразу обрубается грубостью языка. Зато эффективный - не передать как;

    Java (466) - особый случай. Java это и язык, и платформа (JVM) - и в этой платформе работает, например, смешной и клёвый Clojure, научно-заумная Scala, и JRuby (тот же Ruby, но для JVM). Да и сама Java сегодня - вовсе не тот «ограниченный язык для корпоративных рабов», как ей когда-то создали репутацию. Учитывая невероятное количество мощных библиотек, выбор языков работающих на этой платформе и её универсальность, некоторое представление о Java должен иметь любой уважающий себя программист. А ещё Java - единственный (с некоторыми оговорками) язык разработки под Android;

    PHP (431) - старинный оккупант веба с чудовищной репутацией. В современном изводе от большей части адского наследия избавился, и вообще вполне приличный современный ОО-язык. Зато по старой памяти составляет Очень значительную часть инфраструктуры интернетов. Нанявшись PHP-шником можно с равной вероятностью попасть в аккуратный проект с Архитектурой и Тестами - а можно в поддержку безумной доисторической системы с неструктурированными if/else на 2000 строк;

    Python (303) - когдатошний «конкурент» Ruby в качестве модного языка для веба и стартапов, сейчас язык в основном для поддержки сложных и взрослых web-приложений, которые на нём и выросли - а больше для научных/bigdata исследований, местами даже забарывает R (см. ниже);

    R (16) - язык как бы общего назначения, но используют только учёные/бигдата. Довольно адовый синтаксис (потому што старый), зато куча крутых пакетов для него есть, и исследований на нём написанных. Чуть ли не лучший в мире, выходит, язык для удовлетворения любопытства ;

    Ruby (124) - ещё несколько лет назад «модный» и «хипстерский», сегодня - просто один из мейнстримных языков. Очень выразительный и лаконичный, немного «магический», довольно медленный. Используется в основном для веб-разработки. На сегодня это язык который легко с первого взгляда полюбить или возненавидеть, и довольно беспроблемно найти работу. Ещё Ruby сегодня любят админы и тестеры, на нём есть клёвые инструменты для тех и других;

    Rust (3) - один из довольно новых игроков. Быстрый и сложный. Обещает заменить C в области системного программирования, но пока что, кажется, учить его имеет смысл скорее «на будущее»;

    Scala (60) - «умный младший брат» на платформе Java: современный, сложный, функциональный, ужасно любимый всякой бизнес-аналитикой и от того стремительной набирающий популярность;

    Swift / Objective-C (58+15) - единственный выбор для разработки под iOS. Ориентироваться, конечно, стоит только на Swift (Objective-C уже только для поддержки старых приложений) - и он, в общем, не замечателен ни какими-то особыми фичами, ни какими-то особыми глупостями, приличный современный язык, сравнимый с C# и Java. Рекомендовать его как первый можно разве что для тех, кто решил намертво связать свою судьбу с Apple, поскольку применимость его (сознательно) ограничена.

Как-то, в общем, вот так.

Кое-что не попало в этот список - например, Perl, разработчики на котором вполне востребованы, но сам язык находится в странном состоянии и порекомендовать его как «первый» язык не поворачивается. Или, например, Lua - тоже популярный, но как язык мелких скриптов для других систем (в основном, игр), быть «просто Lua-программистом» вроде бы довольно бессмысленно.

Ээээ я всё понял. А выбрать-то что?..

Ну, это. Бери всё. (смайлик)

Нет, правда. На самом деле, разумная стратегия (если, конечно, ты собираешься провести в нашей профессии значительную часть времени, а не «полгодика подзаработать») - прикинуть, какие несколько языков тебе интересно хотя бы посмотреть в следующие месяцы. Выбирать их можно как цвета в инструкциях для дизайнеров - можно «из близких», можно «из противоположных», можно «из взаимо-дополняющих»...

Твоя цель на первых этапах - чтобы было интересно, и чтобы начало получаться. А проложить путь к этой цели можешь только ты, и скорее всего - не с первого раза. Такие дела.

Короче...

В нашей области умение задавать вопросы всегда важнее знания правильных ответов. Потому что ответы - меняются. А вопросы нужны каждый день. Интересуйся, учись всему понемножку, присматривайся к миру.

Остальное как-то само.

Замечание 1

Для работы первых программ нужно было устанавливать ключевые переключатели на передней панели вычислительного устройства. Естественно, с помощью такого способа можно было составлять только небольшие программы. Одна из первых попыток создания полноценного языка программирования была предпринята немецким ученым Конрадом Цузе, который за период 1943–1945 гг. разработал язык Plankalkul. Plankalkul был очень перспективным языком, который фактически являлся языком высокого уровня, однако во времена войны он не получил должной практической реализации, а его описание было опубликовано только в 1972 г.

Машинный код. Ассемблер

История языков программирования начинается с разработки машинного языка: языка логического нуля и единицы. Запись с помощью этого языка была очень сложной и утомительной.

Для облегчения работы программистов в конце 1940-х гг. был разработан язык ассемблер. Вместо двоичных цифр, которые обозначали какую-либо команду, записывались короткие слова или аббревиатуры. Программисты считают ассемблер языком программирования низкого уровня, поскольку он близок к языку самого низкого уровня – машинному. Программы, написанные на ассемблере, напрямую зависят от характеристик конкретного процессора, поэтому его называют машинно-ориентированным языком.

Написание программ на ассемблере является довольно сложной задачей, к тому же необходимы знания устройств компьютера. И тем не менее программы на ассемблере – самые эффективные и работоспособные.

Алгоритмические языки

В ходе развития программирования возникла необходимость разработки новых, более совершенных языков программирования, которые бы были схожи с естественными языками и позволяли бы не работать напрямую с машинными командами. Их стали называть языками высокого уровня. Языки высокого уровня ориентированы на описание алгоритмов, поэтому их называют алгоритмическими языками. Преимуществом таких языков является большая наглядность и независимость от конкретного компьютера.

Поскольку компьютером распознается только машинный язык, программа, написанная на алгоритмическом языке, перед выполнением должна переводится на этот язык специальной программой – транслятором. В трансляторе заложены все правила алгоритмического языка и способы преобразования различных его конструкции на машинный язык. Существуют две разновидности трансляции:

  • Компиляция (Compilation) – метод выполнения программ, при котором инструкции программы выполняются только том случае, когда собран перевод всего текста программы.
  • Интерпретация (Interpretation) – метод выполнения программ, при котором инструкции программы переводятся и сразу выполняются.

Замечание 2

Преимуществом программ, написанных на алгоритмическом языке, является упрощение работы с программой за счет относительной простоты написания, удобной читаемости, возможности ее коррекции. К недостаткам относятся: дополнительное время и память на трансляцию.

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

В 1954 г. была начата разработка первого компилятора языка высокого уровня. Через два года появился язык Fortran (FORmula TRANslator – «переводчик формул»). Язык содержал средства, которые значительно упрощали разработку, однако программирование на Fortran не было простой задачей: если в коротких программах он был легко понимаемым, то когда дело касалось больших программ язык становился нечитаемым. Несмотря на это, язык был довольно успешным и было выпущено много его версий.

Проблемы были решены после разработки языков структурного программирования: в них появилась возможность создания программных блоков, независимых подпрограмм, поддержки рекурсии и локальных переменных, отсутствие оператора безусловного перехода (GoTo). Таким образом, такие языки стали поддерживать возможность разбиения программы на составляющие элементы.

На протяжении десяти лет было создано достаточно большое число новых языков:

  1. Algol (1958 г.) предназначался для записи алгоритмов, которые составлены из обособленных блоков;
  2. Cobol (1959 г.) использовался для массовой обработки данных в сферах управления и бизнеса;
  3. Basic (1965 г.) позволял писать простые программы, использовался для обучения основам программирования.

Совсем немногие из созданных языков были структурированными. Также были созданы специализированные языки: Lisp, Prolog, Forth и т.д. Особого внимания заслуживает язык Pascal (1970 г.), названный в честь ученого Блеза Паскаля, который использовался как для обучения, так и для решения задач различной сложности. Программы на Pascal легко читаемы, что позволяет быстро находить и исправлять ошибки, также он был хорошо структурированным. Все вышеперечисленное привело к его широкой распространенности, и даже в данное время его активно используют в учебных заведениях.

В 1972 г. появился язык С, что стало успешным шагом в программировании. Язык сочетал в себе преимущества многих языков и обладал большим числом разных нововведений. Широкие возможности, структурированность и относительная простота его изучения позволили языку быстро стать признанным и завоевать место одного из основных языков.

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

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

С 1970-х гг. были заложены основы объектно-ориентированного программирования (ООП), которое возникло как поседствие развития процедурного программирования, при котором данные и подпрограммы их обработки формально не были связаны.

ООП включает следующие основные понятия:

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

Замечание 3

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

В настоящее время число прикладных языков программирования, которые реализуют объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Основные языки, которые поддерживают концепцию ООП: C++, C#, Object Pascal (Delphi), Java и т.д.

Развитие Интернета

С развитием технологии WWW (World Wide Web) Интернет стал очень популярным. Было создано большое количество вспомогательных языков для обеспечения работы с Интернетом, оформления сайтов, доступа к ресурсам и т.д.

Становится распространенным интерпретируемый язык Perl, который отличается своей простотой и легкой переносимостью на другие платформы. Он предназначен для написания приложений и CGI-скриптов различной сложности. Также широко используется и играет значительную роль в развитии и функционировании Интернета язык Java.

В 1970-х гг. появился язык SQL – язык структурированных запросов, который был создан для доступа и работы с базами данных.

Для написания кодов страниц веб-сайтов разработан язык разметки гипертекстов HTML, который содержит команды для разметки и оформления текста и графики. Для придания большей привлекательности и функциональности сайта используются:

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

Изначально программирование имело крайне примитивный вид и практически не имело отличий от упорядоченного бинарного кода с формализованным подходом. По сути, при зарождении сферы отличий языка программирования от компьютерного кода было немного. Очевидных и естественных удобств для программиста не существовало, он обязан был обладать знаниями числовых кодов для каждой команды машины. Даже распределение памяти для выполнения команд ложилось на специалиста.

Для упрощения обращения с ЭВМ люди стали активно разрабатывать языки, одним из первых стал Ассемблер . Для отображения переменных стали использоваться символьные наименования. Вместо числовых операций человеку достаточно знать мнемонические имена, их запоминание в разы облегчалось. Уже на этом этапе языки программирования стали более приближёнными к понятному для человека языку.

К первооткрывателям среди языков программирования относится Фортран - это сокращённое сочетание 2 слов: Formula и Translation . Создан уже в середине 50-х. До сих пор язык используется благодаря лёгкости и простоте написания, а также развитой системе библиотек для Фортран. Чаще используется для научных и инженерных подсчётов, а также активно применяется в физичке и остальных науках, связанных с математикой.

Узконаправленные языки

Из-за увеличения сфер использования ЭВМ появились и другие языки для отдельных разработок в новых сферах:

  • экономическое направление оставалось незанятым до появления Кобол;
  • Снобол - обрабатывает алгоритмы, связанные с текстами;
  • Лисп. Работает на основании алгоритмов для отработки символов. Активно используется для формирования искусственного интеллекта.

Уже в 1968 г. был впервые запущен конкурс, в котором главным местом являлось звание лучшего языка программирования для начала карьерного пути. Данные планировалось использовать для обучения специалистов. Победу одержал Алгол-68 , но он остался малоизвестным, о популярности и речь не идёт.

Специально для участия в конкурсе был создан Паскаль , разработчиком являлся Никлаус Вирт. Язык весьма доступный, удобный и объединяет немало мощных инструментов для структурирования информации. Несмотря на изначальную разработку с целью обучения студентов, Паскаль получил широкое распространение и активно развивался. Даже сегодня он является одним из лучших и известнейших языков программирования.

Для обучения детей в школах был создан Лого , у истоков стоял Самуэль Пайперт . Достоинства - простота работы и обилие возможностей.

В школах стал преподаваться простой язык Бейсик , он легко взаимодействует с ЭВМ в качестве прямого диалога. Время никак не повлияло на эту сферу, до сих пор Бейсик является самым простым языком для начала изучения большинства распространённых направлений программирования.

Создание языка C

Развитие возможностей вычислительного оборудования привело к необходимости написания ёмких программ для управления ЭВМ . Это место по праву занял язык Си, который стал активно использоваться в 70-х годах. Явным достоинством языка является его универсальность. Он превосходит Паскаль благодаря наличию вложенных возможностей сотрудничества с разными машинными командами и подходящими частями памяти.

Си используется повсеместно в качестве инструментального языка для написания операционных платформ, трансляционных устройств, баз данных и остальных прикладных, системных задач. не имеет чёткой направленности, он подходит для многих задач из-за эффективности, лёгкости переноса и экономного потребления ресурсов. Чаще всего Си по скорости обработки данных сопоставим с Ассемблером , производительность программ на обоих языках будет приблизительно равной. В небольшом языке заложена немалая мощность.

Пролог и Ада

Внедрение функционального программирования неизбежно повлекло создание Пролога. Задачи языка сводились к анализу и взаимодействию с человеческими языками. Логика приложения формальна, она оптимально подходит для автоматического решения задач и теорем.

Только в 80-х годах был разработан язык Ада . Он расширяет классическое понимание и свойства языков того периода. Ада могла решать задачи в режиме реального времени и моделировать независимые решения.

Классификация

Сегодня разработаны классификации языков по уровню работы, это распределение самое распространённое. Выделяют 3 основных уровня:

  1. Низкий. Сюда относятся различные машинные языки или разновидности с символическим кодирование типа Ассемблера и Автокода . За основу взяты операторы машинных команд, только разработаны с привязкой к мнемоническому коду. Операндами являются уже не точные адреса, а символьное обозначение имён. Все модели разработаны для отдельных разновидностей ПК , они являются машинно-зависимыми. В подобных языках отмечается сильная зависимость языка от внутренних особенностей системы;
  2. Высокий. Языки встречаются куда чаще, они более удобны в использовании. К ним причисляются: Алгол, С, Пролог, Паскаль, Бейсик, Фортран и другие . Перечисленные языки не имеют жёсткой зависимости от машины, ведь они основываются на возможностях системы операндов, которые подобны для классовых алгоритмов. Недостатками высокого уровня являются большая ресурсоёмкость и медленное исполнение;
  3. Сверхвысокий. Представителей языков крайне мало, только APL и Алгол-68 . Их считают сверхвысокого уровня из-за разработки сверхмощных операторов.

Согласно другой классификации языки делятся на:

  • символьные - Пролог, Лисп и Снобол;
  • вычислительные - Паскаль, С, Алгол, Бейсик, Фортран.

Направления развития

Информатика в современном мире развивается в 3 ключевых направлениях:

  1. Процедурное появилось в период активнейшего развития компьютеров и других вычислительных устройств, с тем пор широко используется. В процедурных направлениях присутствуют выраженные описания действий, необходимых к выполнению. Для получения результата всегда проводится определённая процедура, которую составляют различные последовательности манипуляций. Процедурные языки дополнительно разделяются на:
    • Структурные. В них используется один оператор для записи цельных алгоритмом: циклов, функцию, ветвлений и остального. Более известны: Паскаль, Ада и С.
    • Операционные. Применяют несколько различных действий. Среди самых известных разновидностей: Фокал, Фортран и Бейсик .
  2. Непроцедурные. Языки программирования имеют декларативную структуру, появление которой приходится на 70-е года. Активнее всего начали развиваться в 80-х годах после появления проекта формирования 5 поколения ЭВМ. Основная задача - создание возможностей для построения высокоинтеллектуальных машин. Они также разделяются на:
    • Функциональные. Программа выполняет исчисление определённой функции, которая берёт за основу другие относительно простые алгоритмы и более простые задачи. В основе функционального направления используется основной элемент - рекурсия. Она подразумевает расчёт значений функции с помощью задействования её в других элементах. В языке отсутствуют циклы и методика присваивания значений.
    • Логические. Программа вовсе не требует описание действий, её основу составляют соотношения данных и их значения. Только после расчёта можно получать ответы на вопросы. После перебирания известных параметров выводится ответ. В программе отсутствует метод или порядок обнаружения ответа, он неявным образом устанавливается языком. Ярким представителем является Пролог. Из направления полностью устранено алгоритмическое мышление, только статические отношения между объектами, а вся динамика сокрыта от разработчика и сводится к перебору данных.
  3. Объектно-ориентированные языки , все они являются разновидностью высокого уровня программирования. Подобные языки не нуждаются в описании чёткой последовательности манипуляций для получения результата задачи, но отдельные компоненты процедурного направления присутствуют. Пользователям значительно проще работать с такими языками, так как они обладают доступным и богатым интерфейсом. Лучшим примером подобного направления с визуальным общением является Object Pascal.

Существуют языки для написания сценариев, известными являются Rexx, Tcl, Perl и Python , а также языки оболочек систем Unix. В них разрабатывается индивидуальный стиль написания кода, который отличается от известного принципа системного уровня программирования. Они не используются для создания приложений на нижнем уровне, скорее для комбинирования различных компонентов из разных языков, из которых составляется набор отдельных функций.

Активнее всего стали развиваться по мере распространения интернета, от чего стали широко применяться языки сценариев. Для создания сценариев чаще всего применяется Perl , а для Web-части пользуется популярностью JavaScript .

Позволю себе выделить некоторую общую тенденцию в развитии языков программирования. Проницательный читатель, наверное, уже давно догадался, о чем я собираюсь сказать. Языки развиваются в сторону все большей и большей абстракции. И это сопровождается падением эффективности. Вопрос: а стоит ли этого абстракция? Ответ: стоит. Стоит, так как повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это, конечно, требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять. А еще лучше - не совершать. А еще лучше максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования. А с потерей эффективности придется смириться.

Целью данного обзора была попытка дать читателю представление о всем многообразии существующих языков программирования. Среди программистов часто бытует мнение о «всеобщей применимости» того или иного языка (C, C++, Pascal и т.п.). Это мнение возникает по нескольким причинам: недостаток информации, привычка, инертность мышления. Я попытался слегка компенсировать первый фактор. По поводу остальных могу лишь сказать, что настоящий профессионал должен постоянно стремиться повышать свои профессиональную квалификацию. А для этого нужно не бояться экспериментировать. Ну и что, что все вокруг пишут на C/С++/VB/Pascal/Perl/Java/… (нужное подчеркнуть)? А почему бы не попробовать что-нибудь новенькое? А вдруг это окажется эффективнее? Разумеется, прежде чем приниматься использовать новый язык, нужно внимательно изучить все его особенности, включая наличии эффективной реализации, возможности взаимодействия с существующими модулями и т.п., и только после этого принимать решение. Разумеется, всегда есть риск пойти не тем путем, но… Не ошибается лишь тот, кто ничего не делает.

И еще. Мне доводилось слышать, а порой и участвовать в дискуссиях вида «язык A лучше, чем язык B». Я надеюсь, что, прочитав этот обзор, многие убедятся в бессмысленности таких споров. Максимум, о чем может идти речь - это о преимуществах одного языка над другим при решении той или иной задачи в тех или иных условиях. Вот здесь действительно иногда есть о чем поспорить. И решение подчас отнюдь не очевидно. Однако же спорить «вообще» - очевидная глупость.

Эта статья задумывалась как ответ тем, кто кричит «язык X MUST DIE». Надеюсь, что ответ получился достаточно адекватным и убедительным. Надеюсь также, что статья имеет, помимо полемической, и познавательную ценность.

В пятидесятые годы двадцатого века с появлением компьютеров на электронных лампах началось бурное развитие языков программирования. Компьютеры, стоившие в то время значительно дороже, чем разработка любой программы, требовали высокоэффективного кода. Такой код разрабатывался вручную на языке Ассемблер . В середине 50-х годов под руководством Джона Бэкуса для фирмы IBM был разработан алгоритмический язык программирования FORTRAN. Несмотря на то, что уже существовали разработки языков, выполняющие преобразование арифметических выражений в машинный код, создание языка FORTRAN (FORmula TRANslator), предоставляющего возможность записи алгоритма вычислений с использованием условных операторов и операторов ввода/вывода, стало точкой отсчета эры алгоритмических языков программирования.

К языку FORTRAN предъявлялись требования cоздания высокоэффективного кода. Поэтому многие конструкции языка первоначально разрабатывались с учетом архитектуры IBM 407. Успех разработки этого языка привел к тому, что производители других вычислительных систем стали создавать свои версии трансляторов. С целью некоторой возможной на тот момент унификации языка язык FORTRAN IV, разработанный в 1966 году, стал первым стандартом, именуемым FORTRAN 66.

Как альтернатива языку FORTRAN, первоначально ориентированному на архитектуру IBM, под руководством Питера Наура в конце 50-х годов был разработан язык ALGOL (ALGOrithmic Language). Основной целью, преследуемой разработчиками этого языка, была независимость от конкретной архитектуры вычислительной системы. Кроме того, создатели языка ALGOL стремились разработать язык, удобный для описания алгоритмов и применяющий систему обозначений, близкую к той, что принята в математике.

Языки FORTRAN и ALGOL были первыми языками, ориентированными на программирование вычислений.

Язык PL/I , первые версии которого появились в начале 60-х годов, был первоначально ориентирован на IBM 360 и расширял возможности языка FORTRAN некоторыми средствами языка COBOL, разработанного в эти же годы. Несмотря на определенную популярность языка PL/I у программистов, работавших на компьютерах IBM и машинах серии ЕС, в настоящее время он представляет чисто теоретический интерес.

В конце 60-х годов под руководством Найарда и Дала был разработан язык Simula-67, использующий концепцию пользовательских типов данных. Фактически это первый язык, применяющий понятие классов.

В середине 70-х годов Вирт предложил язык Pascal , который сразу стал широко использоваться. В это же время по инициативе Министерства обороны США началась работа по созданию языка высокого уровня, получившего название Ada – в честь Ады Лавлейс, программистки и дочери лорда Байрона. Создание языка началось с определения требований и выработки спецификаций. Над проектом работали четыре независимые группы, но все они использовали как основу язык Pascal. В начале 80-х годов был разработан первый промышленный компилятор языка Ada .

Универсальный язык программирования С был разработан в середине 70-х годов Денисом Ритчи и Кеном Томпсоном. Этот язык стал популярным языком системного программирования и в свое время использовался для написания ядра операционной системы UNIX. Стандарт языка С начал разрабатываться рабочей группой института стандартов ANSI в 1982 году. Международный стандарт языка С принят в 1990 году. Язык С лег в основу разработки языков программирования C++ и Java.

Наряду с алгоритмическими языками параллельно развивались и языки, предназначаемые для обработки деловой информации, а также языки искусственного интеллекта. К первым относится язык COBOL (COmmon Business Oriented Language), а ко вторым – языки LISP (LISt Processing) и Prolog . Язык LISP, разработанный в 60-х годах под руководством Дж. Маккарти, был первым функциональным языком обработки списков, который нашел широкое применение в теории игр.

С появлением персональных компьютеров языки стали составными частями интегрированных сред разработки. Появились языки, применяемые в различных офисных программах, например VBA (Visual Basic for Application).

В 90-х годах с распространением сети Интернет расширяется возможность распределенной обработки данных, что отражается и на развитии языков программирования. Появляются языки, ориентированные на создание серверных приложений, такие как Java , Perl и PHP , языки описания документов – HTML и XML . Традиционные языки программирования С++ и Pascal также претерпевают изменения: под языком программирования начинает пониматься не только функциональность самого языка, а также библиотеки классов, предоставляемые средой программирования. Акцент со спецификации самих языков программирования переносится на стандартизацию механизмов взаимодействия распределенных приложений. Появляются новые технологии – COM и CORBA, специфицирующие взаимодействие распределенных объектов.