Первый язык программирования высокого уровня — Планкалкюль. Краткая история развития языков программирования Кто автор 1 языка программирования

>> Статьи

Как появились языки программирования?

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

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

Начало 40-х годов ознаменовано появлением первого языка для программ - ассамблера, включавшего в команду набор коротких слов или их аббревиатур. Ассамблер считается языком низкого уровня программирования, потому и назван машинно-ориентированным языком. Впрочем, программы, написанные на этом языке, отличаются эффективностью и работоспособностью..

Языки высокого уровня: алгоритмические языки

Развитие технологий и внедрение новых типов цифровых устройств заставило программистов изобрести язык более высокого уровня с ориентиром написания на алгоритмы. Так появились дополнительные программы- трансляторы, которые запускали действие алгоритма. Известны два метода трансляции:

- Compilation или компиляция, когда инструкции вступают в активное действие после перевода всего пакета программы;

- Interpretation или интерпретация, при которой выполнение и перевод машинного языка осуществляется в синхронном порядке.

Особенностью таких программ являются: простота создания (написания кода), возможность корректировать при использовании, удобство при считывании.

Год 1954: структурное программирование

Миру стал известен первый компилятор языка программирования очень высокого уровня. Речь идет о Fortran, от английской аббревиатуры FORmula TRANslator. Разработка языка упростилась, но при составлении объемных программ язык становился практически не читаем, хотя и было выпущено много версий Fortran.

Пик развития языков программирования приходится именно на 50-60-е годы, тогда создаются несколько вариантов:

- Algol (1958 г.), созданный на основе обособленных блоков;

- Cobol (1959 г.) - язык бизнеса и управления, основа С+;

- Basic (1965 г.), известный программистам по сегодняшний день.

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

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

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

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

Модель объекта, которого еще не существует;

Экземпляр класса;

Абстракция, придание характеристик объекту;

Инкапсуляция, когда объединяются свойства и методы, преследуя цель сокрытия данных;

Наследование;

Полиморфизм.

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

Последовательность развития языков программирования зависит от внедрения новых инноваций, так после появления Интернет, стал необходим язык для доступа к ресурсам, сайтам. Технология World Wide Web (WWW) дала жизнь новым языкам, активно используемых до сих пор: Java, Perl, SQL, HTML, PHP, JavaScript.

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

Давайте скажем прямо и коротко: правильного ответа на вопрос «какой язык программирования мне выбрать первым?» в природе не существует. Даже ответа класса «один из вот этих трёх». Не существует даже сейчас, в конкретный момент времени, когда я это пишу, 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-программистом» вроде бы довольно бессмысленно.

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

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

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

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

Короче...

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

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

Начало развития

Язык ассемблера

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

Но даже работа с ассемблером достаточно сложна и требует специальной подготовки.

Например, для процессора Zilog Z80 машинная команда 00000101 предписывает процессору уменьшить на единицу свой регистр B . На языке ассемблера это же будет записано как DEC B .

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

Следующий шаг был сделан в 1954 году, когда был создан первый язык высокого уровня - Фортран (англ. FORTRAN - FORmula TRANslator ). Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека, с помощью них, можно писать программы до нескольких тысяч строк длиной. Однако легко понимаемый в коротких программах, этот язык становился нечитаемым и трудно управляемым, когда дело касалось больших программ. Решение этой проблемы пришло после изобретения языков структурного программирования (англ. structured programming language ), таких как Алгол (1958), Паскаль (1970), Си (1972).

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

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

Также создавались функциональные (аппликативные) языки (Пример: Lisp - англ. LISt Processing , 1958) и логические языки (пример: Prolog - англ. PROgramming in LOGic , 1972).

Хотя структурное программирование, при его использовании, дало выдающиеся результаты, даже оно оказывалось несостоятельным тогда, когда программа достигала определенной длины. Для того чтобы написать более сложную (и длинную) программу, нужен был новый подход к программированию.

ООП

В итоге в конце 1970-х и начале 1980-х были разработаны принципы объектно-ориентированного программирования . ООП сочетает лучшие принципы структурного программирования с новыми мощными концепциями, базовые из которых называются инкапсуляцией, полиморфизмом и наследованием.

Примером объектно-ориентированных языков являются: Object Pascal , C++ ,

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

Ссылки

  • История программирования и вычислительной техники

Wikimedia Foundation . 2010 .

Смотреть что такое "Краткая история развития языков программирования" в других словарях:

    Язык программирования формальная знаковая система, предназначенная для записи программ. Программа обычно представляет собой некоторый алгоритм в форме, понятной для исполнителя (например, компьютера). Язык программирования определяет набор… … Википедия

    Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 … Википедия

    Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 … Википедия - (Айкакан Советакан Социалистакан Анрапетутюн) Армения (Айастан Страна армян). I. Общие сведения Армянская ССР образована 29 ноября 1920. С 12 марта 1922 по 5 декабря 1936 входила в состав Закавказской федерации (См.… …

    - (Летувос Тарибу Социалистине Республика) Литва (Летува). I. Общие сведения Литовская ССР образована 21 июля 1940. С 3 августа 1940 в составе СССР. Расположена на З. Европейской части СССР. Граничит на С. с… … Большая советская энциклопедия

    Образец Бурана ОК ГЛИ (БТС 002) для тестирования в атмосфере. Авиа космический салон МАКС, 1999 … Википедия

Мне всегда казалось, что первым был Фортран, что, в частности отображено и в наверное наиболее известной диаграмме истории языков программирования . На самом деле по влиянию и известности Фортран конечно и был первым. Однако с исторической точки зрения - нет.

[Если быть совсем точным, то уж по настоящему первым языком программирования была, по всей видимости, та нотация, с помощью которой были написаны программы Чарльза Бэббиджа в знаменитой статье Ады Августы Байрон, графини Лавлейс "Sketch Of the Analytical Engine "(статья представляла собой перевод статьи итальянца Менабреа о работе разностной машины Бэббиджа и, содержала существенное дополнение, написанное самой Адой Августой). Однако это был не вполне язык программирования, да и машина, для которой он предназначался существовала только в уме гениального человека. Замечу кстати, что в 1991 году музей науки в Лондоне создал по чертежам Бэббиджа его машину и она сейчас существует в рабочем состоянии ]

Итак, первый язык программирования. Это был вовсе не Фортран, а язык с удивительным названием - Plankalkül, то есть в переводе с немецкого "Исчисление планов" или "План вычислений", был разработан немецким учёным, изобретателем и конструктором Конрадом Цузе в нацистской Германии между 1942 и 1945 годами.

[Цузе также сконструировал несколько различных моделей компьютеров. Например его Z3 тоже был создан раньше знаменитых Marc I и ENIAC и являлся при этом вполне полноценной машиной. ]

Утверждается, что всех своих достижений Цузе добился абсолютно самостоятельно, не обладая сведениями ни о работах американцев и англичан, проводившихся в близкое время, и даже не зная о работах Бэббиджа.

Создание языка программирования было естественным продолжением работ по созданию "железной" части компьютеров. Сам Цузе пытался с его помощью писать программу для игры в шахматы. Работы над языком были закончены около 1946 года, однако развития язык не получил и даже написанное руководство увидело свет только в 1972 году. Из-за этого язык оказался неизвестным и существенного влияния на дальнейшее развитие индустрии не оказал (в сравнении например с тем же Фортраном).

Тем не менее Plankalkül несомненно был первым в мире языком программирования высокого уровня. Основные концепции языка включают:

  • Наличие подпрограмм (и это в 1940-х годах!!!)
  • Наличие операции присваивания (=>)
  • Циклы
  • Условный оператор (if)
  • Возможность манипуляций с массивами
  • Возможность манипуляций со списками
При создании языка Цузе собрал множество проблем, которые были поставлены инженерами и учёными. Для демонстрации того, что язык действительно способен решать эти проблемы было написано огромное количество примеров программ (в частности около 60 страниц примеров для программы играющей в шахматы).

Одной из проблем языка был чрезвычайно сложный и очень непривычный современному программисту синтаксис. Вот пример присваивания A = A+1 на языке Plankalkül.

Планкалкюль (Plankalkül) - первый в мире язык программирования высокого уровня, разработанный немецким инженером Конрадом Цузе между
1942 и 1946 годами для его компьютера «Z4» (компьютер на снимке ниже, фото взято из «Википедии»).

Шла Вторая Мировая Война, Цузе работал в отрыве от учёных других стран, совершенно самостоятельно. За это время он создал не только язык программирования,
но и написал на нём 49 страниц программ для оценки шахматных позиций. Полностью его работа была опубликована много позже, в 1972.

Рискну рассказать об этом языке программирования, в качестве археологического изыскания. Тем более, что на русском языке об этом языке сказано очень мало.

Только в 1957 году (работы были начаты в 1954) появился Фортран - язык, который большинство считает первым языком высокого уровня.

«Z4» был электро-механическим, поэтому компилятора или интерпретатора Планкалкюля не существовало, но в 2000 году в Свободном
универсистете Берлина (Freie Universität Berlin) был создан интерпретатор его
диалекта (запускается в виде Ява-аплета в браузере).

Диалект, который реализуется, назван Plankalkül-2000 и отличается от оригинала различными упрощениями.
Например, упрощена форма записи, Цузе использовал двухмерную запись -
первой строкой записывалось само выражение, а ниже некоторые его аргументы (тип переменной, индексы и так далее). Кроме того, были упрощены и значки самих операций,
приведены к более привычному нам с вами виду.

Язык довольно богатый, на мой взгляд, для сороковых годов-то: есть условные конструкции, два вида циклов (аналог while и for), есть массивы и кортежи,
можно описывать и вызывать подпрограммы (но рекурсии нет).

Все переменные делятся на четыре вида.

  • «Variablen» (В ходные переменные) - это входные переменные подпрограмм, доступны только для чтения начинаются с буквы «V» и номера.
  • «Zwischenwert» (З начения промежуточные), доступны для чтения и записи, предназначены для хранения промежуточных вычисляемых значения, начинаются с «Z» и номера.
  • «Resultatwerte» (Р езультат) - в этих переменных возвращается результат вычисления, начинаются с «R» и номера.
  • «Indizes» (И ндексы) - переменные цикла (аналога for), начинаются с «i», дальше может быть номер, номер необходим для организации вложенных циклов.
Доступны три типа переменных. Несмотря на то, что «Z4» умел оперировать числами с плавающей точкой, интерпретатор этого не умеет.
  • Для целого неотрицательного указывается размерность в битах. Есть две формы записи «0» - один бит, «n.0» - «n» бит, например, 8.0 - один байт (8 бит).
  • Кортеж указывается в скобках, например (3.0, 4.0) - это две переменные в три и четыре бита, кортеж должен иметь более одного элемента.
  • Массив записывается через точку, к примеру: 4.5.0 - массив из четырёх элементов по пять бит в каждом, 32.(0, 8.0, 16.0) - 32 кортежа, в каждом из которых три переменных: один бит, восемь и
    шестнадцать.
Планкалкюль явно можно сильно упростить по синтаксису, но современный диалект почти в точности копирует ту запись, которую использовал Цузе, я полагаю, что такой синтаксис родился из-за
необходимости «отлаживать» программу на бумаге. Впрочем, язык настролько прост, что я его выучил целиком минут за 15 и даже написал на нём парочку программ в нескольких вариантах.

Одна из них вычисляет указанное (по порядку) число Фибоначчи :
P0 FactEvgenyStepanischev (V0[:4.0]) => (R0[:10.0]) (0, 1) => (Z0[:10.0], Z1[:10.0]) W1 (V0[:4.0]) [ i > 0 -> (Z0[:10.0] + Z1[:10.0], Z1[:10.0] - Z0[:10.0]) => (Z1[:10.0], Z0[:10.0]) ] Z1[:10.0] => R0[:10.0] END
Запускать следует так: открываете страницу с интерпретатором , копируете в окно мою программу, нажимаете «Compile», открывается отдельное
окно с Ява-аплетом (требует, чтобы на компьютере была установлена Ява), в открывшемся окне мышкой побитно набираете начальное значение V0 (нажимать надо на зелёные кружки́),
потом в окне браузера нажимаете «Run», в красной строчке (R0) увидите получившееся значение.


Подпрограммы в языке начинаются с символа «P» и уникального номера, дальше идёт имя, по которому её можно будет вызвать, у меня подпрограмма называется «FactEvgenyStepanischev», заканчивается
подпрограмма ключевым словом «END» (в оригинальном Планкалкюле его не было).

У подпрограммы описываются принимаемые и возвращаемые значения, у меня используется одна переменная на вход, размерностью 4 бита и одна на выход, размерность в 10. Первой строкой
присваиваются значения «ноль» и «один» промежуточным переменным Z0 и Z1. Тип переменных приходится указывать при каждом их использовании, преобразовать переменную в другой
тип нельзя.

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

Операция «стрелка» („->“) - условная конструкция, часть справа будет выполнена, если выражение слева истинно. В диалекте работают только самые простые выражения, например
цикл туда подставить можно, но кнопка «Run» в аплете у меня не появилась, поэтому я ограничился присваиванием внутри цикла.

Я тут использовал комплексное присваивание, которое хорошо знакомо тем, кто использует Перл, Пайтон или ПХП, но работает оно иначе - присваивания выполняются
последовательно, слева направо, поэтому я не могу ограничиться «(Z0[:10.0] + Z1[:10.0], Z1[:10.0]) => (Z1[:10.0], Z0[:10.0])», результат будет не тот, который ожидается.

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

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



error: Контент защищен !!