Как писались первые программы

Говоря о первом языке, сложно умолчать о первом программисте. Графиня Ада Лавлейс, дочь лорда Байрона, всю свою жизнь посвятила математике и механике, трудилась в свое удовольствие без зарплат и дедлайнов. Результатом ее любви к точным наукам стали описание первой в мире вычислительной машины и создание программы для нее.

Когда вы произносите «loop», то отдаете дань памяти Аде Лавлейс. Она ввела в оборот этот термин наряду с «cell». Источник

Аду Лавлейс часто упоминают вместе с Чарльзом Бэббиджем. Он изобрел первый прототип современного компьютера — логарифмическую машину. Но реализовать ее не удалось: проект разрастался на бумаге, а финансирование от английской короны заканчивалось. Ада познакомилась с ученым при дворе, и с этой встречи началось ее глубокое увлечение его работами.

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

В то же время Ада занялась переводом статьи на английский язык, параллельно переписываясь с Бэббиджем. Она не только перевела принцип работы, но и сопроводила его обширным комментарием. В нем она описала алгоритм для вычисления последовательности Бернулли с помощью машины. Кстати, его используют до сих пор, поэтому программа опередила себя на несколько десятков лет. Аду Лавлейс по праву считают первым программистом в истории человечества. В 1980 году в США новый язык назвали в ее честь.


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

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

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

Компьютер 1940–1950-х годов.

Для передачи команд использовали цепочки нулей и единиц — машинный код. Мягко говоря, не самый удобный вариант для программистов: приходилось «разговаривать» с компьютером на его языке, хорошо знать составляющие ЭВМ. А еще легко было допустить ошибку при записи кода.

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

Часто можно услышать, что первым языком высокого уровня был Fortran (1957). Но еще в разгар Второй мировой войны немецкий ученый Конрад Цузе создал Plankalkül — первый высокоуровневый язык. Он написал на нем49 листов программ для оценки шахматных позиций и документацию в отдельной брошюре. Работы Цузе увидели свет только после войны, в 1972 году.

Планкалкюль — электромеханический язык, так как разрабатывался для компьютера Z4. Автор не создал для него аппаратной реализации. Первый компилятор для Планкалкюля написали в Германии в 2000 году: он называется Plankalkül-2000. Его разработали в Свободном университете Берлина спустя пять лет после смерти Цузе. Это интерпретатор диалекта Планкалкюля — он чуть проще самой первой версии языка. Если вам захочется почувствовать дух истории, на нем даже можно написать простенькую программку.

Конрад Цузе за работой

Plankalkül не нашел практического применения, но вполне соответствует современным стандартам высокоуровневых языков. В нем есть четыре вида переменных, массивы, циклы, кортежи, подпрограммы и условные конструкции. С помощью языка можно выполнять простые арифметические операции и сортировку чисел.

В 1957 году в компании IBM группа программистов, возглавляемая Джоном Бэкусом, представила первый работающий высокоуровневый язык Fortran. В его основе лежит принцип анализа всей строки.

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

Сегодня Фортрану 61 год, но он до сих пор востребован и популярен в Data Science. За это время вышло множество версий, язык эволюционировал и обрел четкие стандарты. Благодаря огромному наследию кода он используется для различных вычислений в научных разработках, геологических изысканиях и астрофизике.

Если вам интересна история, взгляните на потрясающую схему развития языков программирования, начиная с Фортрана.

Как видите, однозначного ответа на вопрос, какой язык программирования придумали первым, не существует. Первую абстрактную программу написала Ада Лавлейс, первым высокоуровневым языком был Plankalkül, но эру высоких информационных технологий начал Fortran. Все они первые в личном зачете, и каждый важен для того или иного этапа развития информационных систем.

Ада Лавлейс. Первая в мире программа и взгляд в будущее

image

Ада Лавлейс

10 декабря 1815 года на свет появилась Ада Лавлейс, большинству из нас известная как самый первый в мире программист. Так уж получилось, что это звание принадлежит представительнице прекрасного пола. Сегодня исполняется двести один год со дня рождения этого человека. И в этом посте я бы хотел немного рассказать о самых интересных моментах из ее жизни, не отделываясь обрывочными фразами, но и не слишком уж углубляясь в детали. Материал можно найти, где угодно, имея под рукой Интернет. Однако мало кто полезет искать его просто ради интереса. Поэтому кому интересно, добро пожаловать под кат.

Учась в школе, сидя на уроках литературы, я прекрасно знал, кто такой Джордж Байрон.

image

Мы читали и по желанию заучивали его стихотворения. Спустя время, выбрав себе профессию я узнал о том, кем была загадочная Ада Лавлейс – первая девушка-программист, дочь того самого лорда Джорджа Байрона. Тогда для меня это оказалось удивительным открытием. Я на всю жизнь запомнил, кем была Ада и, как-то совсем незаметно для самого себя, забыл о самом Байроне.

Августа Ада Кинг (впоследствие графиня Лавлейс, но об этом чуть позже) – была дочерью английского поэта лорда Джорджа Гордона Байрона и его жены – Анны Изабеллы Байрон. Однако Байрон спустя месяц после рождения своей дочери покинул их, и они больше никогда не виделись. Сам Байрон умер, когда Аде было восемь лет. Сам он еще не раз вспоминал свою дочь в своих стихах.

Видно, что Ада сама росла в довольно талантливой семье. Ее мать, Анна Изабель, еще до рождения дочери сильно интересовалась математикой, за что когда-то получила от мужа забавное прозвище – “королева параллелограммов”. Это была действительно необычная семья. Анне после ухода мужа все же удалось воспитать дочь в одиночку и вот что из этого получилось.

В двенадцать лет Ада собрала свой летательный аппарат! До этого двенадцатилетняя девочка некоторое время запиралась от матери в комнате и что-то писала. Мать боялась, что она начнет зачитываться стихами отца и пойдет той же дорогой. Однако все это время она чертила.

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

image

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

Математика математикой, но как же так вышло, что помнят о ней в первую очередь именно программисты? Одной из самых судьбоносных встреч Ады Лавлейс стала встреча с Чарльзом Бэббиджем – изобретателем первой аналитической вычислительной машины.

image

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

image

Им было создано огромное количество чертежей, а сам прототип закончен в 1832 году, тот самый, который Ада Лавлейс увидит спустя год.

В 1835 году Ада выйдет замуж за очень достойного человека – барона Уильяма Кинга, который впоследствии был удостоен титула графа, а сама Ада стала графиней Лавлейс. Спустя четыре года у них уже было трое детей – два сына и дочь. Сыновьям Ада дала имена в честь отца – одного назвали Ральфом Гордоном, а другого – Байроном.

А как же с той самой первой в мире программой? И какова судьба машины Бэббиджа? В 1842 году итальянский ученый Луис Манебреа напишет книгу о машине Бэббиджа. Ада по просьбе Бэббиджа займется ее переводом. Во время перевода самой книги она сделала огромное количество замечаний, видя в этой машине кажется больше, чем сам Бэббидж.

Вот ее слова: «Суть и предназначение машины изменятся от того, какую информацию мы в нее вложим. Машина сможет писать музыку, рисовать картины и покажет науке такие пути, которые мы никогда и нигде не видели» Алан Тьюринг впоследствие читал ее записи, введя в свои работы термин возражение леди Лавлейс относительно способности машин мыслить.

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

Сама Ада Лавлейс умерла 27 ноября 1852 года всего в возрасте 36 лет. Ровно столько, сколько прожил ее отец. Ее похоронили в фамильном склепе вместе с отцом, которого она так и не узнала.
В честь Ады Лавлейс был назван разработанный в 1980-х годах Министерством Обороны США язык программирования Ада.

P.S. Наверное, тем людям, у которых фраза “Первым программистом была девушка” вызывает недовольство или улыбку, стоит хотя бы раз поинтересоваться биографией этого человека. О таких людях, как Ада Лавлейс или Алан Тьюринг и о многих других стоит помнить. А для кого-то эти истории еще один повод понять, что в мире нет ничего невозможного.

Спасибо тем, кто прочел эту статью. Делитесь своими мнениями, комментариями или замечаниями).

Британские специалисты первыми более 60 лет назад построили программируемые компьютеры, а потому именно они по праву могут называться первыми программистами.

SSEM – рабочая копия первой программируемой машиныНа вопрос, кто раньше всех построил электронный компьютер, ответ дал судебный процесс, состоявшийся в 1973 году, – «Атанасов против Эккерта и Мочли», хотя, по сути, его стоило бы называть Honeywell против Sperry Rand. Он закончился в пользу Атанасова, а Эккерта и Мочли лишили патента, после чего первым компьютером формально оказалось устройство ABC (Atanasoff–Berry Computer), спроектированное Атанасовым вместе с Клиффордом Берри. Однако это судебное решение вызывает внутренний протест, поскольку даже при самом поверхностном знакомстве с делом становится ясно, что разбирательство было стимулировано поборниками свободы компьютерной индустрии от патентных ограничений.

Какими бы аргументами ни старались доказать первенство Атанасова и Берри, элементарная логика отказывает признать именно их детище предком современных компьютеров – ABC имеет к нынешним компьютерам примерно такое же отношение, как неандерталец к современному человеку. ABC есть не что иное, как параллельная ветвь эволюции, закончившая свое существование, факт в истории, и не более. Лично Джон Атанасов ни в чем дурном не замечен, он никогда прежде не претендовал на первенство, более того, как добросовестный ученый, сам признал, что математической основой вычислительного устройства ABC стали идеи, почерпнутые у отечественного математика Михаила Филипповича Кравчука (1892-1942), погибшего в ГУЛАГе. Атанасов просто перевел с русского его двухтомный труд и прислал благодарственное письмо, но к тому моменту, когда оно пришло, высокочтимый им ученый уже был на Колыме. Память о Кравчуке сейчас восстанавливается, теперь стало известно, что он автор почти 200 научных работ, но, пожалуй, самым весомым свидетельством заслуг Кравчука может служить его научная школа. В числе его учеников основоположники ракетной техники Сергей Королев и Владимир Челомей, а также конструктор авиационных двигателей Архип Люлька. Возможно, имеет право на жизнь гипотеза о существовании еще не выявленной связи между научным наследием Кравчука, работавшего на Украине, и первым советским компьютером МЭСМ, который был создан под руководством Сергея Лебедева в послевоенном Киеве, а не в главных научных центрах Москвы или Ленинграда, что было бы естественнее.

Удивительно, но вопрос относительно первой в современном смысле программы разрешается гораздо проще – кто и когда ее написал, не вызывает сомнения. Том Килбурн – автор самой первой программы, один из разработчиков машины SSEM (Small Scale Experimental Machine), которую еще называли The Baby (1948). Манчестерский «Бэби» был первым программируемым компьютером, поэтому вполне естественно, для него и была написана первая программа. Справедливости ради, следует заметить присутствие в названии слова «экспериментальный», так оно и было: SSEM использовалась как стенд для оценки возможности применения электронно-лучевых трубок в качестве памяти, а настоящим, первым полноценным программируемым компьютером оказался английский EDSAC (1949). Дэвид Уилер не только написал для EDSAC первые программы, но и был основным автором первого учебника по программированию.

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

База была, к тому же по окончании Второй мировой войны Великобритания странным образом стремилась забыть военное прошлое: по необъяснимой причине уничтожили и засекретили Colossus, закрыли различные учреждения, созданные для решения актуальных в военное время задач, следствием всего этого стала массовая миграция специалистов из оборонной сферы в университеты. Наиболее продвинутые ученые сконцентрировались в нескольких граждански центрах по разработке компьютеров, прежде всего в лабораториях при Манчестерском и Кембриджском университетах – эти две группы и стали лидерами. Кроме этого, в Национальной физической лаборатории, в Бирбекском колледже в Лондоне и еще в нескольких учебных заведениях развернулись работы по компьютерной тематике.

Компьютеры из Манчестера

В период с 1946-го по 1948 год в Манчес-терский университет пришли несколько выдающихся персонажей, в итоге здесь собралась ударная команда, включавшая основного разработчика Colossus Макса Ньюмана, его коллегу-математика Джека Гуда, а также Фредди Уильямса и Тома Килбурна – двух инженеров, ранее разрабатывавших радары, они-то и стали основными создателями SSEM. На последней фазе к ним присоединился Алан Тьюринг. Радарное прошлое Уильямса и Килбурна привело к выбору к качестве главного компонента SSEM иконоскопа?– электронно-лучевой трубки, изобретенной в 1923 году русским инженером Владимиром Зворыкиным (1888-1982). Не исключено, что раньше них идею использования трубки в качестве запоминающего устройства выдвинул Преспер Эккерт, есть мнение, что Уильямс встречался с ним в 1946 году на лекциях в США. Как бы то ни было, но в конце того же года Уильямс подал патентную заявку, где изложил принцип запоминающего устройства на ЭЛТ, поэтому иногда такие устройства называют «трубками Уильямса».

Принцип действия трубки в качестве памяти достаточно прост. Электронный луч, сканируя поверхность экрана, не только вызывает вспышки тех точек, куда подается заряд, но и оставляет их заряженными на 0,2 секунды. Это явление можно использовать как для формирования изображения, так и для хранения данных, если непрерывно регенерировать изображение, считывать состояние точек и производить в них запись. Реальная процедура сложнее, запись ведется в форме точек и тире, учитывая, что считывающий луч нарушает запись, ее необходимо восстанавливать и т.д. Все это преодолимые препятствия, но общей слабостью любых запоминающих устройств на ЭЛТ остается органически присущие им ошибки, из-за особенностей фосфорного покрытия иногда биты теряются, но реальной альтернативы им не было, и трубки применялась в качестве запоминающих устройств для ЭВМ вплоть до конца 50-х годов, когда индустрия перешла на ферритовую память. Трубки в качестве запоминающих устройств использовал и Джон фон Нейман в своем компьютере IAS (1952), они применялись в серийных машинах, например в «оборонном калькуляторе» IBM 701 и его гражданских аналогах IBM 702 и IBM 650, в первом серийном отечественном мэйнфрейме «Стрела» (1953).

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

Память «Бэби» состояла из 32 слов по 32 бит (матрица на экране), то есть ее емкость была равна 1 Кбайт, и предназначалась она для хранения команд, данных и результатов. Кроме ЭЛТ в логике машины использовались 300 диодов и 280 пентодов. Весогабаритные параметры этого «Бэби», как у небольшого грузовика: длина более 5 м, высота более 2 м, вес около тонны. Количество команд – 7: безусловный переход, несколько команд управления регистрами, вычитание и остановка, а формат команды близок к одноадресному.

Листок с набросками первой программыПервая программа насчитывала 17 команд, и ее написал Килбурн весной 1948 года, а выполнена она была впервые 21 июня того же года. Этот день можно считать днем рождения программирования. Программа находила наибольший делитель для числа 218 (262 144) перебором, вычитая по 1 от 218?1 и далее. Деление выполнялось повторением вычитания. За 52 минуты SSEM выполнила 3,5 млн операций и получила очевидный ответ – 13 1072. Программа использовала 8 слов в качестве рабочей памяти, то есть всего потребовалось 25 слов. Усовершенствования в первую программу вносили Джем Тутилл и Алан Тьюринг. Никаких листингов в отсутствие печатающих устройств быть не могло, единственный оставшийся документ – листок из записной книжки Тутилла. Экран трубки был открыт, и можно было наблюдать за изменением состояния видимой на экране матрицы. Фредди Уильямс записал позже: «Когда мы увидели, как прекратилось бешеное мигание и на экране остался ожидаемый результат, пришло осознание значения сделанного, впереди просматривалось большое будущее». Оно действительно не заставило себя ждать – уже в августе начались работы по созданию второй экспериментальной машины Manchester Mark 1, которая была сделана в рекордно короткий срок – с августа 1948-го по апрель 1949 года. В 1998 году торжественно отмечалось пятидесятилетие SSEM, к этой дате была построена ее работающая копия, которая сейчас находится в манчестерском Музее науки и промышленности.

Машина Manchester Mark 1, или Manchester Automatic Digital Machine (MADM), в июне 1949 года без сбоев проработала 9 часов, выполняя программу поиска наибольшего обнаруживаемого числа в последовательности простых чисел Мерсенна. Несмотря на очевидные ограничения, этот компьютер стал поводом для многочисленных спекуляций о возможностях электронного мозга и всякого рода аналогичных заблуждений. С практической же точки зрения существенно то, что MADM стала прототипом для Ferranti Mark 1 (1951). Этот компьютер иногда называют первым коммерческим универсальным, что спорно, поскольку Мочли и Эккерт, перейдя в Remington Rand, в том же году выпустили UNIVAC 1, который стал по-настоящему серийным изделием и был выпущен в количестве 40 экземпляров. Влияние Manchester Mark 1 обнаруживается и в компьютерах IBM 701 и 702, эта корпорация в массовом количестве производила электромеханические табуляторы на перфокартах и с небольшим опозданием включилась в гонку за создание мэйнфреймов первого поколения.

Уильямс и Килбурн совместно разработали еще один компьютер – Meg, в составе которого появился процессор для выполнения операций над числами в формате с плавающей запятой. После него Уильямс потерял интерес к компьютерам и занялся разработкой автоматических трансмиссий для автомобилей, одна из их версий была установлена в его собственной машине. Килбурн продолжил начатое дело, и под его руководством были построены еще две экспериментальные модели – Muse и MU5, ставшие прототипами для серийных Ferranti Atlas и ICL 2900.

Себастьян де Ферранти и Том Килбурн (справа) около компьютера Ferranti Atlas

Кембридж и EDSAC

Часто первым компьютером с хранимой программой называют EDSAC (Electronic Delay Storage Automatic Calculator – «автоматический электронный калькулятор с памятью на линиях задержки»). Это утверждение не лишено смысла, но с уточнением – это хронологически первый компьютер, построенный по схеме фон Неймана. Он был построен на три месяца раньше, чем EDVAC, с которого фон Нейман «списал» схему, получившую его имя. В 1945 году он вместе с Германом Гольдшейном, невзирая на других авторов, выпустил документ First Draft of a Report on the EDVAC, в котором описал принцип действия компьютера с памятью, способной хранить программы и данные. Поступок, прямо скажем, сомнительного свойства, но свое действие он возымел: экземпляры документа попали в несколько лабораторий в разных странах, и их использовали непосредственно как руководство для создания компьютеров. В отличие от большинства своих «сводных братьев» EDVAC отличался добросовестностью конструкции, он мог работать по 20 часов в сутки и прожил вплоть до 1961 года, претерпел ряд модернизаций, был доукомплектован магнитным барабаном и процессором вещественной арифметики.

И все же EDVAC был вторым, а первым в мае 1949 года заработал EDSAC, и с него пошла волна создания аналогичных систем, начавшаяся с австралийского компьютера CSIRAC (ноябрь 1949 года). Тем временем Джон фон Нейман продолжил популяризацию своих и чужих идей, работая в Институте перспективных исследований (Institute for Advanced Study, IAS), где под его руководством вышла книга «Предварительные исследования по логическому проектированию электронных счетных инструментов». Описанная в ней архитектура получила название IAS – так было положено начало Open Source. Для создания компьютеров хватало общераспространенных тогда радиодеталей, поэтому для многих университетов и лабораторий открывалась возможность собирать их собственными силами. По архитектуре IAS было построено почти два десятка машин: JOHNNIAC (корпорация Rand), ILLIAC I (Университет штата Иллинойс), MANIAC I (Национальная лаборатория в Лос-Аламосе). Строили такие машины в Швеции (BESK, Стокгольмский университет) и в Израиле (WEIZAC, Институт Вейцмана). В ряд IAS-подобных машин попадает и отечественная БЭСМ.

Том Килбурн – создатель первой программыСоздание EDSAC прочно ассоциируется с именем Мориса Уилкса. Сегодня ему 96 лет, и, вероятно, он старейший из ныне живущих компьютерных патриархов. Уилкс начинал с работы на механическом дифференциальном анализаторе в 1937 году и долгое время оставался единственным сотрудником Математической лаборатории Кембриджского университета. В мае 1946 года ему попал в руки привезенный от фон Неймана отчет по EDVAC, увлекший его настолько, что в отсутствие копировальных машин он переписал его от руки. Затем ему удалось посетить Муровскую школу при Пенсильванском университете, где создавался EDVAC, и прослушать там цикл лекций. В отличие от Мочли и Эккерта, Уилкс умудрялся использовать доступные ему средства, и это оказалось неплохим решением – он смог обогнать своих учителей. Его бюджет был намного меньше, и он не мог позволить себе исследования в поисках новых решений для памяти и электронных компонентов. Используемые в SSEM трубки были ему недоступны, поэтому Уилкс остановил свой выбор на ртутных акустических линях задержки, кроме того, аналогичная система была использована в EDVAC. Мысль об использовании линий задержки в памяти, или, иначе, ультразвуковой памяти, принадлежит Эккерту, а оттуда она перешла в UNIVAC 1. До этого линии задержки применялись в радарах для фильтрации помех и выделения движущих объектов. Если входной сигнал задержать и подать на экран позже и с обратной полярностью, то можно подавить статические изображения. Есть несколько решений для этой технологии, и наибольшее распространение получили ртутные линии с пьезокристаллическим преобразователем, состоящим из излучателя и приемника. В линиях задержки использовали еще металлическую проволоку c магнитострикционными преобразователями. Такие преобразователи вызывали в проволоке механические колебания, аналогичные звуковым. Проволочные магнитострикционные линии задержки прожили дольше, чем ртутные, они существенно проще во всех отношениях, например, их устанавливали в электронные клавишные вычислительные машины «Электроника-155». В ртутной линии передатчик посылал импульс в среду, возникали ультразвуковые колебания ртути, приемник их считывал и с задержкой восстанавливал полученный импульс. В приложении к компьютеру Эккерт прибавил к обычной линии повторитель, возвращающий сигнал на вход. В отличие от радаров, в линиях, предназначенных для памяти, передается последовательность сигналов, условно говоря слово, и, чтобы выделить нужный бит, требуются соответствующие синхроимпульсы. Скорость работы и емкость акустического запоминающего устройства взаимосвязаны, они зависят от свойств среды и длины трубки – в ртути скорость звука почти на порядок выше, чем в воздухе, поэтому и выбрали ее в качестве среды. Память EDSAC имела 512 слов длиной по 35 бит, для этого достаточно иметь 32 линии задержки, каждая из которых хранит по 576 бит (36-й бит в слове использовался как служебный).

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

Проект EDSAC не был бы так успешен, если бы в нем не принял участие Дэвид Уилер, человек, которого можно вполне заслуженно назвать первым профессиональным программистом. Свою знаменитую книгу (1951), первый в истории учебник по программированию «Подготовка программ для электронного цифрового компьютера» (The Preparation of Programs for an Electronic Digital Computer), он написал в соавторстве с Морисом Уилксом и Стэнли Джилом. Уилер всю жизнь, за исключением нескольких лет преподавания в Университете штата Иллинойс и Калифорнийском университете в Беркли, проработал в Кембриджском университете. Начал он с того, что заменил двоичную запись команд символической и назвал эту форму «инициалами команд» (initial orders), его язык был прообразом будущих языков ассемблера, где инициалы обозначали коды команд, идентификаторы служили символическими адресами, и имелась процедура трансляции. И еще одно очень, казалось бы, простое изобретение – Wheeler Jump, то есть прыжок Уилера, представляющий собой вызов подпрограммы, существующей в виде отдельной функции с параметрами или без.

Уилеру принадлежит несколько популярных афоризмов, самый известный из них: «Любая проблема в компьютерной науке может быть решена путем перехода на следующий уровень абстракции. Однако при этом создаются новые проблемы». В то время когда Уилер писал эти слова, в основном имелась в виду косвенная адресация, сегодня их вполне можно отнести и к виртуализации.

Наследники Дифференциальной и Аналитической машины Бэббиджа

Третий известный британский проект – Automatic Computing Engine (ACE), которым поначалу руководил Тьюринг. Использование в названии слова Engine – дань памяти дифференциальной и аналитической машинам Чарьза Бэббиджа. Теоретической предпосылкой к проекту, осуществлявшемуся в математическом отделении Национальной физической лаборатории была работа Тьюринга Proposed Electronic Calculator (1936). Свой проект он предложил к обсуждению в начале 1946 года, а первая фаза проекта проходила в обстановке повышенной секретности, сохранившейся со времен Colossus, поэтому она в основном носила теоретический характер. Более того, до работы на ACE не допустили Томми Фоулера, основного разработчика Colossus, который имел опыт создания электронно-механического устройства большой сложности. Поэтому группе Тьюринга не хватило практической экспертизы, и решили ограничиться усеченной (пилотной) версией Pilot ACE. Этот компьютер заработал в мае 1950 года. Непосредственными преемниками Pilot ACE стали компактный компьютер G-15 от Bendix Corporation, его иногда называют первым ПК, и серия из 30 компьютеров DEUCE (Digital Electronic Universal Computing Engine) компании English Electric. Ни та, ни другая больше компьютерами не занимались.

Первые программисты Страны Советов

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

Первая программа на M-1Первые шаги в программировании на территории бывшего СССР были сделаны в Киеве и Москве, где почти синхронно и независимо друг от друга создавались машины МЭСМ и М-1. Последующая затем эволюция этих двух школ проектирования ЭВМ удивительно точно отражает личные особенности двух выдающихся ученых: Сергея Лебедева и Исаака Брука. Неоднократно отмечалась в отдельных случаях буквально мистическая схожесть их судеб, не признать ее нельзя, но и противоположностей в их жизненных путях тоже немало. Лебедев был в большей степени органичен по отношению к системе советской науки и получал поддержку со стороны властей и Академии, в 1945 году он был избран в АН Украины, а в 1953-м стал действительным членом АН СССР. В 1950 году его пригласили в Москву в Институт точной механики и вычислительной техники (ИТМиВТ), деятельности которого Лебедев придал новый импульс. Напротив, Брук плохо вписывался в систему, хотя и раньше Лебедева обрел академические регалии, ученая степень кандидата технических наук была присвоена ему без защиты диссертации еще в мае 1936 года, а в октябре того же года он защитил докторскую диссертацию. В 1939 году в возрасте 37 лет Брук выступил на заседании президиума Академии наук с докладом о созданном им в Энергетическом институте АН СССР электромеханическом интеграторе, позволявшем решать дифференциальные уравнения до шестого порядка, за что его избрали членом-корреспондентом АН СССР. Во время Великой Отечественной войны Брук предложил синхронизатор, позволяющий авиационной пушке стрелять через вращающийся винт самолета, так он стал действительным членом Академии артиллерийских наук. В 50-е годы им был создан Институт электронных управляющих машин (ИНЭУМ), и, казалось бы, впереди звание академика. Однако интересы ученого вышли за технические рамки, и, основываясь на результатах нобелевских лауреатов Леонида Канторовича и Василия Леонтьева, Брук опрометчиво открыл в ИНЭУМе направление, связанное с применением математических методов и вычислительной техники для решения экономических задач на государственном уровне, итогом чего стал его вынужденный уход в 1964 году с поста директора.

От макетной до малой счетной машины

МЭСМ, как и британская SSEM, задумывалась как макет, поэтому изначально называлась Модельная Электронная Счетная Машина. Но в отличие от SSEM макет оказался вполне работоспособным, и написанные для него первые в отечественной истории программы почти с самого начала имели прикладное значение. Машина была собрана под руководством Лебедева в специально созданной для этой цели лаборатории, располагавшейся в двухэтажном здании (некоторое время там была психиатрическая лечебница) на территории Свято-Пантелеймоновского монастыря. Сегодня вряд ли можно с достаточной достоверностью сказать, почему именно в Киеве была построена первая советская ЭВМ и почему до 1956 года, до того как их возглавил Виктор Глушков, работы в этом направлении прекратились и были переданы в Москву. Однако есть информация к размышлению. Вот выдержка из газетного варианта доклада, сделанного А.Г. Марчуком, директором Института систем информатики СО РАН имени А.П. Ершова, «Роль М.А. Лаврентьева в становлении отечественной техники»: «Возможно, к окончательному решению заняться разработкой цифровой ЭВМ С.А. Лебедева подтолкнул М.А. Лаврентьев. Такое мнение высказывали Глушков, Крейн (запрограммировавший совместно с С.А. Авраменко первую задачу для МЭСМ) и О.А. Богомолец. Последний в 1946-1948 годах несколько раз бывал в Швейцарии и, будучи заядлым радиолюбителем, собирал проспекты и журналы с сообщениями о цифровых вычислительных устройствах. Приехав в Киев летом 1948 года, он показал журналы Лаврентьеву, а тот – Лебедеву… Интрига заключается в том, что Швейцария после войны арендовала третий вариант компьютера известного немецкого пионера вычислительной техники Конрада Цузе. Это наводит на мысль, что передаваемые С.А. Лебедеву материалы могли содержать не только рекламную информацию об английских и американских компьютерах, но и более содержательную, о немецкой Z-4… Слабым подтверждением этой гипотезы является то, что, по утверждению А.Н. Томилина, ближайший ученик Лебедева, академик В.А. Мельников, в восьмидесятые годы активно интересовался творчеством Цузе».

Может сложиться впечатление, что создание машины – это чуть ли не личная инициатива Лаврентьева, Лебедева и Богомольца, и если бы это случилось не в СССР, то можно было бы этому поверить, но на Украине и в условиях послевоенной разрухи? Что здесь не так и чего стоит упоминание визитов Олега Богомольца, сына Александра Богомольца, президента Академии наук Украины до 1946 года, в Швейцарию? Нетрудно догадаться, кто и зачем в те времена ездил в Швейцарию. И какие журналы и проспекты можно было купить в послевоенные годы, да и вообще, о какой рекламе компьютеров можно говорить? Есть документ «Протокол №1 заседания закрытого ученого совета Института электротехники и теплоэнергетики АН УССР от 8 января 1951». На этом заседании, представляя МЭСМ, Лебедев сказал: «Я имею данные по 18 машинам, разработанным американцами, эти данные носят характер рекламы, без каких-либо сведений о том, как машины устроены. В вопросе постройки счетных машин мы должны догонять заграницу, и должны это сделать быстро. По данным заграничной литературы, проектирование и постройка машины ведется 5-10 лет, мы хотим осуществить постройку машины за 2 года».

Начав в октябре 1948-го с нуля, коллективу Лебедева удалось через три года, 6 ноября 1950 года, осуществить пробный запуск машины. На МЭСМ работали программы вычисления суммы нечетного ряда факториала числа и возведения в степень. Пуск МЭСМ в эксплуатацию был осуществлен 25 декабря того же года. На этот раз на машине решались реальные задачи вычисления функций распределения вероятностей. Дата запуска МЭСМ регламентировалась специальным постановлением правительства, все работы осуществлялись в обстановке строгой секретности. 12 января 1952 года началось выполнение заказов по расчетам. Осенью 1952-го на МЭСМ были выполнены расчеты генераторов Куйбышевской ГЭС.

Первые программы для МЭСМ были написаны С.Г. Крейном и С.А. Авраменко, ни тот, ни другой впоследствии не связали свою профессиональную деятельность с программированием. Крейн стал профессором Воронежского государственного университета, заместителем директора по научной работе НИИ математики при этом университете, и вместе с коллегами М.А. Красносельским и В.И. Соболевым создал воронежскую школу функционального анализа. О дальнейшей судьбе Авраменко известно меньше, есть лишь воспоминания о том, что он был начальником Математического сектора в КБ-11 (Арзамас-16, ныне Саров).

Лев Дашевский и Екатерина Шкабара, основные помощники Лебедева, в своей книге «Как это начиналось» вспоминают: «Первая пробная задача была выбрана из области баллистики с весьма существенными упрощениями (не учитывалось сопротивление воздуха). Программа была составлена работавшими с нами математиками С.Г. Крейном и С.А. Авраменко. При этом контрольный расчет был выполнен ими непосредственно в двоичной системе, что обеспечило возможность проверки машины по циклам и по тактам, наблюдая по сигнализации пульта управления за правильностью выполнения программы». Вскоре после этого на МЭСМ решали задачи из области термоядерных процессов, космических полетов, ракетной техники и др.

Родом с Калужской заставы

В начале 1947 года произошло событие, имевшее серьезные последствия. Академик Аксель Берг, в ту пору директор Центрального научно-исследовательского института радиолокации (ЦНИИ-108), свел вместе Исаака Брука и своего сотрудника Башира Рамеева, которых объединял общий интерес к созданию собственного аналога машины ENIAC Мочли и Эккерта. По одним легендам, Рамеев узнал о компьютере, слушая радио BBC, по другим – Брук, будучи артиллерийским академиком, знал о том, что американцы построили машину для расчета таблиц для стрельб, но, как бы то ни было, Рамеев перешел из ЦНИИ-108 в ЭНИН (Лабораторию электросистем Энергетического института АН СССР), руководимую Бруком. Лаборатория находилась в двух расположенных друг напротив друга жилых домах по Большой Калужской, позже переименованной в Ленинский проспект. За несколько месяцев Брук и Рамеев разработали проект цифровой электронной вычислительной машины без хранимой в памяти программы и в декабре 1948 года послали заявку на изобретение «Автоматическая цифровая машина» и получили авторское свидетельство. Постановление президиума АН СССР о разработке М-1 было принято в апреле 1950 года, а уже в январе 1952 года (менее чем через месяц после сдачи МЭСМ) началась ее практическая эксплуатация.

Летом 1952 года началась комплексная отладка машины, включавшая в себя выполнение арифметических и логических операций по программе, в автоматическом режиме. Разработчик устройства ввода/вывода Александр Залкинд написал самые первые программы для М-1. Одной из них было решение уравнения параболы, задача примечательна тем, что в процессе ее решения получались одинаковые значения для оси Y как для положительного, так и для отрицательного значений X. Сравнивая симметричные значения результатов, можно было определить правильность работы машины. Второй программой было решение уравнения у=1/х. По воспоминаниям Залкинда, одним из первых больших ученых, проявивших интерес к М-1, был академик Сергей Соболев, руководивший математическим обеспечением атомного проекта. Для решения одной из задач требовалось провести обращение матриц большой размерности, что и было выполнено на М-1, собранной почти из тысячи электронных ламп-пентодов. Сотрудничеству Соболева с создателями следующей модели М-2 помешал эпизод, случившийся на выборах в действительные члены АН СССР по Отделению физико-математических наук (как тут не вспомнить параллельность судеб). На одно место претендовали Лебедев и Брук, решающим стал голос Соболева, отданный им за первого из двух кандидатов. После этого Брук отказался предоставить МГУ, где работал Соболев, машину М-2, созданную в ЭНИН. Тогда Соболев принял решение разработать ЭВМ силами сотрудников университета, в конечном итоге это привело к тому, что Николай Брусенцов создал машину «Сетунь» с трехзначной логикой.

Выходцы из ЭНИН стали основателями нескольких известных предприятий. Рамеев перешел под начало Юрия Базилевского в Специальное конструкторское бюро № 245 при московском заводе САМ для участия в разработке ЭВМ «Стрела», а через несколько лет на базе СКБ-245 был создан НИИ электронных машин (НИЭМ). Группа в составе Николая Матюхина, Александра Залкинда и еще нескольких сотрудников перешла в НИИ-101 (НИИ автоматической аппаратуры Минрадиопрома), чтобы разрабатывать системы управления ПВО.


Блок-схема компьютера SSEM


Первое поколение, первые шаги
Забытые компьютеры первого поколения были намного ближе к современности, чем это можно предположить.

Colossus, победивший Lorenz
В первой половине XX века было выпущено невероятное множество типов самых разнообразных механических шифраторов. Их производили в СССР, Японии, США, Великобритании и в ряде других стран.
 

The history of programming languages spans from documentation of early mechanical computers to modern tools for software development. Early programming languages were highly specialized, relying on mathematical notation and similarly obscure syntax.[1] Throughout the 20th century, research in compiler theory led to the creation of high-level programming languages, which use a more accessible syntax to communicate instructions.

The first high-level programming language was Plankalkül, created by Konrad Zuse between 1942 and 1945.[2] The first high-level language to have an associated compiler was created by Corrado Böhm in 1951, for his PhD thesis.[3] The first commercially available language was FORTRAN (FORmula TRANslation), developed in 1956 (first manual appeared in 1956, but first developed in 1954) by a team led by John Backus at IBM.

Early history[edit]

During 1842–1849, Ada Lovelace translated the memoir of Italian mathematician Luigi Menabrea about Charles Babbage’s newest proposed machine: the Analytical Engine; she supplemented the memoir with notes that specified in detail a method for calculating Bernoulli numbers with the engine, recognized by most of historians as the world’s first published computer program.[4]

The first computer codes were specialized for their applications: e.g., Alonzo Church was able to express the lambda calculus in a formulaic way and the Turing machine was an abstraction of the operation of a tape-marking machine.

Jacquard Looms and Charles Babbage’s Difference Engine both had simple languages[citation needed] for describing the actions that these machines should perform hence they were the creators of the first programming language.

First programming languages[edit]

In the 1940s, the first recognizably modern electrically powered computers were created. The limited speed and memory capacity forced programmers to write hand-tuned assembly language programs. It was eventually realized that programming in assembly language required a great deal of intellectual effort.[citation needed]

An early proposal for a high-level programming language was Plankalkül, developed by Konrad Zuse for his Z1 computer between 1942 and 1945 but not implemented at the time.[5]

The first functioning programming languages designed to communicate instructions to a computer were written in the early 1950s. John Mauchly’s Short Code, proposed in 1949, was one of the first high-level languages ever developed for an electronic computer.[6] Unlike machine code, Short Code statements represented mathematical expressions in understandable form. However, the program had to be interpreted into machine code every time it ran, making the process much slower than running the equivalent machine code.

In the early 1950s, Alick Glennie developed Autocode, possibly the first compiled programming language, at the University of Manchester. In 1954, a second iteration of the language, known as the «Mark 1 Autocode,» was developed for the Mark 1 by R. A. Brooker. Brooker also developed an autocode for the Ferranti Mercury in the 1950s in conjunction with the University of Manchester. The version for the EDSAC 2 was devised by Douglas Hartree of University of Cambridge Mathematical Laboratory in 1961. Known as EDSAC 2 Autocode, it was a straight development from Mercury Autocode adapted for local circumstances and was noted for its object code optimization and source-language diagnostics which were advanced for the time. A contemporary but separate thread of development, Atlas Autocode was developed for the University of Manchester Atlas 1 machine.

In 1954, FORTRAN was invented at IBM by a team led by John Backus; it was the first widely used high-level general purpose programming language to have a functional implementation, as opposed to just a design on paper.[7][8] When FORTRAN was first introduced, it was viewed with skepticism due to bugs, delays in development, and the comparative efficiency of «hand-coded» programs written in assembly.[9] However, in a hardware market that was rapidly evolving; the language eventually became known for its efficiency. It is still a popular language for high-performance computing[10] and is used for programs that benchmark and rank the world’s fastest supercomputers.[11]

Another early programming language was devised by Grace Hopper in the US, called FLOW-MATIC. It was developed for the UNIVAC I at Remington Rand during the period from 1955 until 1959. Hopper found that business data processing customers were uncomfortable with mathematical notation, and in early 1955, she and her team wrote a specification for an English programming language and implemented a prototype.[12] The FLOW-MATIC compiler became publicly available in early 1958 and was substantially complete in 1959.[13] Flow-Matic was a major influence in the design of COBOL, since only it and its direct descendant AIMACO were in actual use at the time.[14]

Other languages still in use today include LISP (1958), invented by John McCarthy and COBOL (1959), created by the Short Range Committee. Another milestone in the late 1950s was the publication, by a committee of American and European computer scientists, of «a new language for algorithms»; the ALGOL 60 Report (the «ALGOrithmic Language»). This report consolidated many ideas circulating at the time and featured three key language innovations:

  • nested block structure: code sequences and associated declarations could be grouped into blocks without having to be turned into separate, explicitly named procedures;
  • lexical scoping: a block could have its own private variables, procedures and functions, invisible to code outside that block, that is, information hiding.

Another innovation, related to this, was in how the language was described:

  • a mathematically exact notation, Backus–Naur form (BNF), was used to describe the language’s syntax. Nearly all subsequent programming languages have used a variant of BNF to describe the context-free portion of their syntax.

Algol 60 was particularly influential in the design of later languages, some of which soon became more popular. The Burroughs large systems were designed to be programmed in an extended subset of Algol.

Algol’s key ideas were continued, producing ALGOL 68:

  • syntax and semantics became even more orthogonal, with anonymous routines, a recursive typing system with higher-order functions, etc.;
  • not only the context-free part, but the full language syntax and semantics were defined formally, in terms of Van Wijngaarden grammar, a formalism designed specifically for this purpose.

Algol 68’s many little-used language features (for example, concurrent and parallel blocks) and its complex system of syntactic shortcuts and automatic type coercions made it unpopular with implementers and gained it a reputation of being difficult. Niklaus Wirth actually walked out of the design committee to create the simpler Pascal language.

Some notable languages that were developed in this period include:

  • 1951 – Regional Assembly Language
  • 1952 – Autocode
  • 1954 – IPL (forerunner to LISP)
  • 1955 – FLOW-MATIC (led to COBOL)
  • 1957 – FORTRAN (first compiler)
  • 1957 – COMTRAN (precursor to COBOL)
  • 1958 – LISP
  • 1958 – ALGOL 58
  • 1959 – FACT (forerunner to COBOL)
  • 1959 – COBOL
  • 1959 – RPG
  • 1960 — ALGOL 60
  • 1962 – APL
  • 1962 – Simula
  • 1962 – SNOBOL
  • 1963 – CPL (forerunner to C)
  • 1964 – Speakeasy
  • 1964 – BASIC
  • 1964 – PL/I
  • 1966 – JOSS
  • 1966 – MUMPS
  • 1967 – BCPL (forerunner to C)
  • 1967 — Logo (an educational language that later influenced SmallTalk and Scratch).

Establishing fundamental paradigms[edit]

The period from the late 1960s to the late 1970s brought a major flowering of programming languages. Most of the major language paradigms now in use were invented in this period:[original research?]

  • Speakeasy, developed in 1964 at Argonne National Laboratory (ANL) by Stanley Cohen, is an OOPS (object-oriented programming system, much like the later MATLAB, IDL and Mathematica) numerical package. Speakeasy has a clear Fortran foundation syntax. It first addressed efficient physics computation internally at ANL, was modified for research use (as «Modeleasy») for the Federal Reserve Board in the early 1970s and then was made available commercially; Speakeasy and Modeleasy are still in use currently.
  • Simula, invented in the late 1960s by Nygaard and Dahl as a superset of Algol 60, was the first language designed to support object-oriented programming.
  • FORTH, the earliest concatenative programming language was designed by Charles Moore in 1969 as a personal development system while at the National Radio Astronomy Observatory (NRAO).
  • C, an early systems programming language, was developed by Dennis Ritchie and Ken Thompson at Bell Labs between 1969 and 1973.
  • Smalltalk (mid-1970s) provided a complete ground-up design of an object-oriented language.
  • Prolog, designed in 1972 by Colmerauer, Roussel, and Kowalski, was the first logic programming language.
  • ML built a polymorphic type system (invented by Robin Milner in 1973) on top of Lisp,[15] pioneering statically-typed functional programming languages.

Each of these languages spawned an entire family of descendants, and most modern languages count at least one of them in their ancestry.

The 1960s and 1970s also saw considerable debate over the merits of «structured programming», which essentially meant programming without the use of «goto». A significant fraction of programmers believed that, even in languages that provide «goto», it is bad programming style to use it except in rare circumstances. This debate was closely related to language design: some languages did not include a «goto» at all, which forced structured programming on the programmer.

To provide even faster compile times, some languages were structured for «one-pass compilers» which expect subordinate routines to be defined first, as with Pascal, where the main routine, or driver function, is the final section of the program listing.

Some notable languages that were developed in this period include:

  • 1967 – BCPL (forerunner to B)
  • 1968 – Logo
  • 1969 – B (forerunner to C)
  • 1970 – Pascal
  • 1970 – Forth
  • 1972 – C
  • 1972 – Smalltalk
  • 1972 – Prolog
  • 1973 – ML
  • 1975 – Scheme
  • 1978 – SQL (a query language, later extended)

1980s: consolidation, modules, performance[edit]

The 1980s were years of relative consolidation in imperative languages. Rather than inventing new paradigms, all of these movements elaborated upon the ideas invented in the previous decade. C++ combined object-oriented and systems programming. The United States government standardized Ada, a systems programming language intended for use by defense contractors. In Japan and elsewhere, vast sums were spent investigating so-called fifth-generation programming languages that incorporated logic programming constructs. The functional languages community moved to standardize ML and Lisp. Research in Miranda, a functional language with lazy evaluation, began to take hold in this decade.

One important new trend in language design was an increased focus on programming for large-scale systems through the use of modules, or large-scale organizational units of code. Modula, Ada, and ML all developed notable module systems in the 1980s. Module systems were often wedded to generic programming constructs—generics being, in essence, parametrized modules[citation needed] (see also polymorphism in object-oriented programming).

Although major new paradigms for imperative programming languages did not appear, many researchers expanded on the ideas of prior languages and adapted them to new contexts. For example, the languages of the Argus and Emerald systems adapted object-oriented programming to distributed systems.

The 1980s also brought advances in programming language implementation. The RISC movement in computer architecture postulated that hardware should be designed for compilers rather than for human assembly programmers. Aided by processor speed improvements that enabled increasingly aggressive compilation techniques, the RISC movement sparked greater interest in compilation technology for high-level languages.

Language technology continued along these lines well into the 1990s.

Some notable languages that were developed in this period include:

  • 1980 – C++ (as C with classes, renamed in 1983)
  • 1983 – Ada
  • 1984 – Common Lisp
  • 1984 – MATLAB
  • 1984 – dBase III, dBase III Plus (Clipper and FoxPro as FoxBASE)
  • 1985 – Eiffel
  • 1986 – Objective-C
  • 1986 – LabVIEW (Visual Programming Language)
  • 1986 – Erlang
  • 1987 – Perl
  • 1988 – Tcl
  • 1988 – Wolfram Language (as part of Mathematica, only got a separate name in June 2013)
  • 1989 – FL (Backus)

1990s: the Internet age[edit]

The rapid growth of the Internet in the mid-1990s was the next major historic event in programming languages. By opening up a radically new platform for computer systems, the Internet created an opportunity for new languages to be adopted. In particular, the JavaScript programming language rose to popularity because of its early integration with the Netscape Navigator web browser. Various other scripting languages achieved widespread use in developing customized applications for web servers such as PHP. The 1990s saw no fundamental novelty in imperative languages, but much recombination and maturation of old ideas. This era began the spread of functional languages. A big driving philosophy was programmer productivity. Many «rapid application development» (RAD) languages emerged, which usually came with an IDE, garbage collection, and were descendants of older languages. All such languages were object-oriented. These included Object Pascal, Objective Caml, Visual Basic, and Java. Java in particular received much attention.

More radical and innovative than the RAD languages were the new scripting languages. These did not directly descend from other languages and featured new syntaxes and more liberal incorporation of features. Many consider these scripting languages to be more productive than even the RAD languages, but often because of choices that make small programs simpler but large programs more difficult to write and maintain.[citation needed] Nevertheless, scripting languages came to be the most prominent ones used in connection with the Web.

Some notable languages that were developed in this period include:

  • 1990 – Haskell
  • 1990 – Python
  • 1991 – Visual Basic
  • 1993 – Lua
  • 1993 – R
  • 1994 – CLOS (part of ANSI Common Lisp)
  • 1995 – Ruby
  • 1995 – Ada 95
  • 1995 – Java
  • 1995 – Delphi (Object Pascal)
  • 1995 – JavaScript
  • 1995 – PHP
  • 1996 – OCaml
  • 1997 – Rebol

Current trends[edit]

Programming language evolution continues, in both industry and research. Some of the recent trends have included:

  • Increasing support for functional programming in mainstream languages used commercially, including pure functional programming for making code easier to reason about and easier to parallelize (at both micro- and macro- levels)
  • Constructs to support concurrent and distributed programming.
  • Mechanisms for adding security and reliability verification to the language: extended static checking, dependent typing, information flow control, static thread safety.
  • Alternative mechanisms for composability and modularity: mixins, traits, typeclasses, delegates, aspects.
  • Component-oriented software development.
  • Metaprogramming, reflection or access to the abstract syntax tree
    • AOP or Aspect Oriented Programming allowing developers to insert code in another module or class at «join points»
    • Domain specific languages and code generation
      • XML for graphical interface (XUL, XAML)
  • Increased interest in distribution and mobility.
  • Integration with databases, including XML and relational databases.
  • Open source as a developmental philosophy for languages, including the GNU Compiler Collection and languages such as PHP, Python, Ruby, and Scala.
  • More interest in visual programming languages like Scratch, LabVIEW and PWCT
  • Massively parallel languages for GPU graphics processing units and supercomputer arrays, including OpenCL
  • Early research into quantum computing programming languages (see list)
  • Early research in applying Artificial Intelligence techniques to generate code using AI like using GPT-3[16]

Some notable languages developed during this period include:[17][18]

  • 2000 – ActionScript
  • 2001 – C#
  • 2001 – D
  • 2002 – Scratch
  • 2003 – Groovy
  • 2003 – Scala
  • 2005 – F#
  • 2005 – HolyC
  • 2006 – PowerShell
  • 2007 – Clojure
  • 2008 – Nim
  • 2009 – Go
  • 2010 – Rust
  • 2011 – Dart
  • 2011 – Kotlin
  • 2012 – Julia
  • 2012 – TypeScript
  • 2012 – Elm
  • 2012 – Elixir
  • 2014 – Swift
  • 2015 – Raku
  • 2019 – Bosque
  • 2021 – Microsoft Power Fx

Other new programming languages include Red, Crystal, Hack, Haxe, Zig and Reason.

Key figures[edit]

Some key people who helped develop programming languages:

  • Alan Cooper, developer of Visual Basic.
  • Alan Kay, pioneering work on object-oriented programming, and originator of Smalltalk.
  • Anders Hejlsberg, developer of Turbo Pascal, Delphi, C#, and TypeScript.
  • Arthur Whitney, developer of A+, k, and q.
  • Bertrand Meyer, inventor of Eiffel.
  • Bjarne Stroustrup, developer of C++.
  • Brad Cox, co-creator of Objective-C.
  • Brendan Eich, developer of JavaScript.
  • Brian Kernighan, co-author of the first book on the C programming language with Dennis Ritchie, coauthor of the AWK and AMPL programming languages.
  • Chuck Moore, inventor of Forth, the first concatenative programming language, and a prominent name in stack machine microprocessor design.
  • Chris Lattner, creator of Swift and LLVM.
  • Cleve Moler, creator of MATLAB.
  • Dennis Ritchie, inventor of C. Unix Operating System, Plan 9 Operating System.
  • Douglas McIlroy, influenced and designed such languages as SNOBOL, TRAC, PL/I, ALTRAN, TMG and C++.
  • Grace Hopper, first to use the term compiler and developer of FLOW-MATIC, influenced development of COBOL. Popularized machine-independent programming languages and the term «debugging».
  • Guido van Rossum, creator of Python.
  • James Gosling, lead developer of Java and its precursor, Oak.
  • Jean Ichbiah, chief designer of Ada, Ada 83.
  • Jean-Yves Girard, co-inventor of the polymorphic lambda calculus (System F).
  • Jeff Bezanson, main designer, and one of the core developers of Julia.
  • Jeffrey Snover, inventor of PowerShell.
  • Joe Armstrong, creator of Erlang.
  • John Backus, inventor of Fortran and cooperated in the design of ALGOL 58 and ALGOL 60.
  • John C. Reynolds, co-inventor of the polymorphic lambda calculus (System F).
  • John McCarthy, inventor of LISP.
  • John von Neumann, originator of the operating system concept.
  • Graydon Hoare, inventor of Rust.
  • Ken Thompson, inventor of B, Go, Inferno (operating system) and Unix Operating System co-author.
  • Kenneth E. Iverson, developer of APL, and co-developer of J along with Roger Hui.
  • Konrad Zuse, designed the first high-level programming language, Plankalkül (which influenced ALGOL 58[19]).
  • Kristen Nygaard, pioneered object-oriented programming, co-invented Simula.
  • Larry Wall, creator of the Perl programming language (see Perl and Raku).
  • Martin Odersky, creator of Scala, and previously a contributor to the design of Java.
  • Martin Richards developed the BCPL programming language, forerunner of the B and C languages.
  • Nathaniel Rochester, inventor of first assembler (IBM 701).
  • Niklaus Wirth, inventor of Pascal, Modula and Oberon.
  • Ole-Johan Dahl, pioneered object-oriented programming, co-invented Simula.
  • Rasmus Lerdorf, creator of PHP.
  • Rich Hickey, creator of Clojure.
  • Jean Paoli, co-creater of XML
  • Robert Gentleman, co-creator of R.
  • Robert Griesemer, co-creator of Go.
  • Robin Milner, inventor of ML, and sharing credit for Hindley–Milner polymorphic type inference.
  • Rob Pike, co-creator of Go, Inferno (operating system) and Plan 9 (operating system) Operating System co-author.
  • Ross Ihaka, co-creator of R.
  • Ryan Dahl, creator of Node.js.
  • Stanley Cohen, inventor of Speakeasy, which was created with an OOPS, object-oriented programming system, the first instance, in 1964.
  • Stephen Wolfram, creator of Mathematica.
  • Terry A. Davis, creator of HolyC.
  • Walter Bright, creator of D.
  • Yukihiro Matsumoto, creator of Ruby.

See also[edit]

  • ACM
  • SIGPLAN
  • History of Programming Languages Conference
  • History of compiler construction
  • History of computing hardware
  • Programming language
  • Timeline of computing
  • Timeline of programming languages
  • List of programming languages
  • List of programmers

References[edit]

  1. ^ Hopper (1978) p. 16.
  2. ^ Knuth, Donald E.; Pardo, Luis Trabb. «Early development of programming languages». Encyclopedia of Computer Science and Technology. Marcel Dekker. 7: 419–493.
  3. ^ Corrado Böhm’s PhD thesis
  4. ^ J. Fuegi and J. Francis (October–December 2003), «Lovelace & Babbage and the creation of the 1843 ‘notes’«, Annals of the History of Computing, 25 (4): 16–26, doi:10.1109/MAHC.2003.1253887
  5. ^ In 1998 and 2000 compilers were created for the language as a historical exercise. Rojas, Raúl, et al. (2000). «Plankalkül: The First High-Level Programming Language and its Implementation». Institut frame Informatik, Freie Universität Berlin, Technical Report B-3/2000. (full text)
  6. ^ Sebesta, W.S. (2006). Concepts of Programming Languages. p. 44. ISBN 978-0-321-33025-3.
  7. ^ «Fortran creator John Backus dies — Tech and gadgets- NBC News». NBC News. 2007-03-20. Retrieved 2010-04-25.
  8. ^ «CSC-302 99S : Class 02: A Brief History of Programming Languages». Math.grin.edu. Archived from the original on 2010-07-15. Retrieved 2010-04-25.
  9. ^ Padua, David (Feb 2000). «The FORTRAN I Compiler» (PDF). Computing in Science and Engineering. 2 (1): 70–75. Bibcode:2000CSE…..2a..70P. doi:10.1109/5992.814661. Retrieved 7 November 2019.
  10. ^ Eugene Loh (18 June 2010). «The Ideal HPC Programming Language». Queue. Association of Computing Machines. 8 (6).
  11. ^ «HPL — A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers». Retrieved 2015-02-21.
  12. ^ Hopper (1978) p. 16.
  13. ^ Sammet (1969) p. 316
  14. ^ Sammet (1978) p. 204.
  15. ^ Gordon, Michael J. C. (1996). «From LCF to HOL: a short history» (PDF). p. 3. Retrieved 2015-05-04. Edinburgh LCF, including the ML interpreter, was implemented in Lisp.
  16. ^ Manjoo, Farhad (July 29, 2020). «How Do You Know a Human Wrote This?». The New York Times. ISSN 0362-4331. Retrieved August 4, 2020.
  17. ^ TIOBE (25 May 2018). «TIOBE Index, Top 100 programming languages according to TIOBE Index». www.tiobe.com. TIOBE_index.
  18. ^ «GitHub’s Octoverse 2018». Archived from the original on 2019-03-22.
  19. ^ Rojas, Raúl; Hashagen, Ulf (2002). The First Computers: History and Architectures. MIT Press. p. 292. ISBN 978-0262681377. Retrieved October 25, 2013.

Further reading[edit]

  • Rosen, Saul, (editor), Programming Systems and Languages, McGraw-Hill, 1967.
  • Sammet, Jean E., Programming Languages: History and Fundamentals, Prentice-Hall, 1969.
  • Sammet, Jean E. (July 1972). «Programming Languages: History and Future». Communications of the ACM. 15 (7): 601–610. doi:10.1145/361454.361485. S2CID 2003242.
  • Richard L. Wexelblat (ed.): History of Programming Languages, Academic Press 1981.
  • Thomas J. Bergin and Richard G. Gibson (eds.): History of Programming Languages, Addison Wesley, 1996.
  • Sebesta, Robert W. Concepts of programming languages. Pearson Education India, 2004.

External links[edit]

  • History and evolution of programming languages
  • Graph of programming language history

The history of programming languages spans from documentation of early mechanical computers to modern tools for software development. Early programming languages were highly specialized, relying on mathematical notation and similarly obscure syntax.[1] Throughout the 20th century, research in compiler theory led to the creation of high-level programming languages, which use a more accessible syntax to communicate instructions.

The first high-level programming language was Plankalkül, created by Konrad Zuse between 1942 and 1945.[2] The first high-level language to have an associated compiler was created by Corrado Böhm in 1951, for his PhD thesis.[3] The first commercially available language was FORTRAN (FORmula TRANslation), developed in 1956 (first manual appeared in 1956, but first developed in 1954) by a team led by John Backus at IBM.

Early history[edit]

During 1842–1849, Ada Lovelace translated the memoir of Italian mathematician Luigi Menabrea about Charles Babbage’s newest proposed machine: the Analytical Engine; she supplemented the memoir with notes that specified in detail a method for calculating Bernoulli numbers with the engine, recognized by most of historians as the world’s first published computer program.[4]

The first computer codes were specialized for their applications: e.g., Alonzo Church was able to express the lambda calculus in a formulaic way and the Turing machine was an abstraction of the operation of a tape-marking machine.

Jacquard Looms and Charles Babbage’s Difference Engine both had simple languages[citation needed] for describing the actions that these machines should perform hence they were the creators of the first programming language.

First programming languages[edit]

In the 1940s, the first recognizably modern electrically powered computers were created. The limited speed and memory capacity forced programmers to write hand-tuned assembly language programs. It was eventually realized that programming in assembly language required a great deal of intellectual effort.[citation needed]

An early proposal for a high-level programming language was Plankalkül, developed by Konrad Zuse for his Z1 computer between 1942 and 1945 but not implemented at the time.[5]

The first functioning programming languages designed to communicate instructions to a computer were written in the early 1950s. John Mauchly’s Short Code, proposed in 1949, was one of the first high-level languages ever developed for an electronic computer.[6] Unlike machine code, Short Code statements represented mathematical expressions in understandable form. However, the program had to be interpreted into machine code every time it ran, making the process much slower than running the equivalent machine code.

In the early 1950s, Alick Glennie developed Autocode, possibly the first compiled programming language, at the University of Manchester. In 1954, a second iteration of the language, known as the «Mark 1 Autocode,» was developed for the Mark 1 by R. A. Brooker. Brooker also developed an autocode for the Ferranti Mercury in the 1950s in conjunction with the University of Manchester. The version for the EDSAC 2 was devised by Douglas Hartree of University of Cambridge Mathematical Laboratory in 1961. Known as EDSAC 2 Autocode, it was a straight development from Mercury Autocode adapted for local circumstances and was noted for its object code optimization and source-language diagnostics which were advanced for the time. A contemporary but separate thread of development, Atlas Autocode was developed for the University of Manchester Atlas 1 machine.

In 1954, FORTRAN was invented at IBM by a team led by John Backus; it was the first widely used high-level general purpose programming language to have a functional implementation, as opposed to just a design on paper.[7][8] When FORTRAN was first introduced, it was viewed with skepticism due to bugs, delays in development, and the comparative efficiency of «hand-coded» programs written in assembly.[9] However, in a hardware market that was rapidly evolving; the language eventually became known for its efficiency. It is still a popular language for high-performance computing[10] and is used for programs that benchmark and rank the world’s fastest supercomputers.[11]

Another early programming language was devised by Grace Hopper in the US, called FLOW-MATIC. It was developed for the UNIVAC I at Remington Rand during the period from 1955 until 1959. Hopper found that business data processing customers were uncomfortable with mathematical notation, and in early 1955, she and her team wrote a specification for an English programming language and implemented a prototype.[12] The FLOW-MATIC compiler became publicly available in early 1958 and was substantially complete in 1959.[13] Flow-Matic was a major influence in the design of COBOL, since only it and its direct descendant AIMACO were in actual use at the time.[14]

Other languages still in use today include LISP (1958), invented by John McCarthy and COBOL (1959), created by the Short Range Committee. Another milestone in the late 1950s was the publication, by a committee of American and European computer scientists, of «a new language for algorithms»; the ALGOL 60 Report (the «ALGOrithmic Language»). This report consolidated many ideas circulating at the time and featured three key language innovations:

  • nested block structure: code sequences and associated declarations could be grouped into blocks without having to be turned into separate, explicitly named procedures;
  • lexical scoping: a block could have its own private variables, procedures and functions, invisible to code outside that block, that is, information hiding.

Another innovation, related to this, was in how the language was described:

  • a mathematically exact notation, Backus–Naur form (BNF), was used to describe the language’s syntax. Nearly all subsequent programming languages have used a variant of BNF to describe the context-free portion of their syntax.

Algol 60 was particularly influential in the design of later languages, some of which soon became more popular. The Burroughs large systems were designed to be programmed in an extended subset of Algol.

Algol’s key ideas were continued, producing ALGOL 68:

  • syntax and semantics became even more orthogonal, with anonymous routines, a recursive typing system with higher-order functions, etc.;
  • not only the context-free part, but the full language syntax and semantics were defined formally, in terms of Van Wijngaarden grammar, a formalism designed specifically for this purpose.

Algol 68’s many little-used language features (for example, concurrent and parallel blocks) and its complex system of syntactic shortcuts and automatic type coercions made it unpopular with implementers and gained it a reputation of being difficult. Niklaus Wirth actually walked out of the design committee to create the simpler Pascal language.

Some notable languages that were developed in this period include:

  • 1951 – Regional Assembly Language
  • 1952 – Autocode
  • 1954 – IPL (forerunner to LISP)
  • 1955 – FLOW-MATIC (led to COBOL)
  • 1957 – FORTRAN (first compiler)
  • 1957 – COMTRAN (precursor to COBOL)
  • 1958 – LISP
  • 1958 – ALGOL 58
  • 1959 – FACT (forerunner to COBOL)
  • 1959 – COBOL
  • 1959 – RPG
  • 1960 — ALGOL 60
  • 1962 – APL
  • 1962 – Simula
  • 1962 – SNOBOL
  • 1963 – CPL (forerunner to C)
  • 1964 – Speakeasy
  • 1964 – BASIC
  • 1964 – PL/I
  • 1966 – JOSS
  • 1966 – MUMPS
  • 1967 – BCPL (forerunner to C)
  • 1967 — Logo (an educational language that later influenced SmallTalk and Scratch).

Establishing fundamental paradigms[edit]

The period from the late 1960s to the late 1970s brought a major flowering of programming languages. Most of the major language paradigms now in use were invented in this period:[original research?]

  • Speakeasy, developed in 1964 at Argonne National Laboratory (ANL) by Stanley Cohen, is an OOPS (object-oriented programming system, much like the later MATLAB, IDL and Mathematica) numerical package. Speakeasy has a clear Fortran foundation syntax. It first addressed efficient physics computation internally at ANL, was modified for research use (as «Modeleasy») for the Federal Reserve Board in the early 1970s and then was made available commercially; Speakeasy and Modeleasy are still in use currently.
  • Simula, invented in the late 1960s by Nygaard and Dahl as a superset of Algol 60, was the first language designed to support object-oriented programming.
  • FORTH, the earliest concatenative programming language was designed by Charles Moore in 1969 as a personal development system while at the National Radio Astronomy Observatory (NRAO).
  • C, an early systems programming language, was developed by Dennis Ritchie and Ken Thompson at Bell Labs between 1969 and 1973.
  • Smalltalk (mid-1970s) provided a complete ground-up design of an object-oriented language.
  • Prolog, designed in 1972 by Colmerauer, Roussel, and Kowalski, was the first logic programming language.
  • ML built a polymorphic type system (invented by Robin Milner in 1973) on top of Lisp,[15] pioneering statically-typed functional programming languages.

Each of these languages spawned an entire family of descendants, and most modern languages count at least one of them in their ancestry.

The 1960s and 1970s also saw considerable debate over the merits of «structured programming», which essentially meant programming without the use of «goto». A significant fraction of programmers believed that, even in languages that provide «goto», it is bad programming style to use it except in rare circumstances. This debate was closely related to language design: some languages did not include a «goto» at all, which forced structured programming on the programmer.

To provide even faster compile times, some languages were structured for «one-pass compilers» which expect subordinate routines to be defined first, as with Pascal, where the main routine, or driver function, is the final section of the program listing.

Some notable languages that were developed in this period include:

  • 1967 – BCPL (forerunner to B)
  • 1968 – Logo
  • 1969 – B (forerunner to C)
  • 1970 – Pascal
  • 1970 – Forth
  • 1972 – C
  • 1972 – Smalltalk
  • 1972 – Prolog
  • 1973 – ML
  • 1975 – Scheme
  • 1978 – SQL (a query language, later extended)

1980s: consolidation, modules, performance[edit]

The 1980s were years of relative consolidation in imperative languages. Rather than inventing new paradigms, all of these movements elaborated upon the ideas invented in the previous decade. C++ combined object-oriented and systems programming. The United States government standardized Ada, a systems programming language intended for use by defense contractors. In Japan and elsewhere, vast sums were spent investigating so-called fifth-generation programming languages that incorporated logic programming constructs. The functional languages community moved to standardize ML and Lisp. Research in Miranda, a functional language with lazy evaluation, began to take hold in this decade.

One important new trend in language design was an increased focus on programming for large-scale systems through the use of modules, or large-scale organizational units of code. Modula, Ada, and ML all developed notable module systems in the 1980s. Module systems were often wedded to generic programming constructs—generics being, in essence, parametrized modules[citation needed] (see also polymorphism in object-oriented programming).

Although major new paradigms for imperative programming languages did not appear, many researchers expanded on the ideas of prior languages and adapted them to new contexts. For example, the languages of the Argus and Emerald systems adapted object-oriented programming to distributed systems.

The 1980s also brought advances in programming language implementation. The RISC movement in computer architecture postulated that hardware should be designed for compilers rather than for human assembly programmers. Aided by processor speed improvements that enabled increasingly aggressive compilation techniques, the RISC movement sparked greater interest in compilation technology for high-level languages.

Language technology continued along these lines well into the 1990s.

Some notable languages that were developed in this period include:

  • 1980 – C++ (as C with classes, renamed in 1983)
  • 1983 – Ada
  • 1984 – Common Lisp
  • 1984 – MATLAB
  • 1984 – dBase III, dBase III Plus (Clipper and FoxPro as FoxBASE)
  • 1985 – Eiffel
  • 1986 – Objective-C
  • 1986 – LabVIEW (Visual Programming Language)
  • 1986 – Erlang
  • 1987 – Perl
  • 1988 – Tcl
  • 1988 – Wolfram Language (as part of Mathematica, only got a separate name in June 2013)
  • 1989 – FL (Backus)

1990s: the Internet age[edit]

The rapid growth of the Internet in the mid-1990s was the next major historic event in programming languages. By opening up a radically new platform for computer systems, the Internet created an opportunity for new languages to be adopted. In particular, the JavaScript programming language rose to popularity because of its early integration with the Netscape Navigator web browser. Various other scripting languages achieved widespread use in developing customized applications for web servers such as PHP. The 1990s saw no fundamental novelty in imperative languages, but much recombination and maturation of old ideas. This era began the spread of functional languages. A big driving philosophy was programmer productivity. Many «rapid application development» (RAD) languages emerged, which usually came with an IDE, garbage collection, and were descendants of older languages. All such languages were object-oriented. These included Object Pascal, Objective Caml, Visual Basic, and Java. Java in particular received much attention.

More radical and innovative than the RAD languages were the new scripting languages. These did not directly descend from other languages and featured new syntaxes and more liberal incorporation of features. Many consider these scripting languages to be more productive than even the RAD languages, but often because of choices that make small programs simpler but large programs more difficult to write and maintain.[citation needed] Nevertheless, scripting languages came to be the most prominent ones used in connection with the Web.

Some notable languages that were developed in this period include:

  • 1990 – Haskell
  • 1990 – Python
  • 1991 – Visual Basic
  • 1993 – Lua
  • 1993 – R
  • 1994 – CLOS (part of ANSI Common Lisp)
  • 1995 – Ruby
  • 1995 – Ada 95
  • 1995 – Java
  • 1995 – Delphi (Object Pascal)
  • 1995 – JavaScript
  • 1995 – PHP
  • 1996 – OCaml
  • 1997 – Rebol

Current trends[edit]

Programming language evolution continues, in both industry and research. Some of the recent trends have included:

  • Increasing support for functional programming in mainstream languages used commercially, including pure functional programming for making code easier to reason about and easier to parallelize (at both micro- and macro- levels)
  • Constructs to support concurrent and distributed programming.
  • Mechanisms for adding security and reliability verification to the language: extended static checking, dependent typing, information flow control, static thread safety.
  • Alternative mechanisms for composability and modularity: mixins, traits, typeclasses, delegates, aspects.
  • Component-oriented software development.
  • Metaprogramming, reflection or access to the abstract syntax tree
    • AOP or Aspect Oriented Programming allowing developers to insert code in another module or class at «join points»
    • Domain specific languages and code generation
      • XML for graphical interface (XUL, XAML)
  • Increased interest in distribution and mobility.
  • Integration with databases, including XML and relational databases.
  • Open source as a developmental philosophy for languages, including the GNU Compiler Collection and languages such as PHP, Python, Ruby, and Scala.
  • More interest in visual programming languages like Scratch, LabVIEW and PWCT
  • Massively parallel languages for GPU graphics processing units and supercomputer arrays, including OpenCL
  • Early research into quantum computing programming languages (see list)
  • Early research in applying Artificial Intelligence techniques to generate code using AI like using GPT-3[16]

Some notable languages developed during this period include:[17][18]

  • 2000 – ActionScript
  • 2001 – C#
  • 2001 – D
  • 2002 – Scratch
  • 2003 – Groovy
  • 2003 – Scala
  • 2005 – F#
  • 2005 – HolyC
  • 2006 – PowerShell
  • 2007 – Clojure
  • 2008 – Nim
  • 2009 – Go
  • 2010 – Rust
  • 2011 – Dart
  • 2011 – Kotlin
  • 2012 – Julia
  • 2012 – TypeScript
  • 2012 – Elm
  • 2012 – Elixir
  • 2014 – Swift
  • 2015 – Raku
  • 2019 – Bosque
  • 2021 – Microsoft Power Fx

Other new programming languages include Red, Crystal, Hack, Haxe, Zig and Reason.

Key figures[edit]

Some key people who helped develop programming languages:

  • Alan Cooper, developer of Visual Basic.
  • Alan Kay, pioneering work on object-oriented programming, and originator of Smalltalk.
  • Anders Hejlsberg, developer of Turbo Pascal, Delphi, C#, and TypeScript.
  • Arthur Whitney, developer of A+, k, and q.
  • Bertrand Meyer, inventor of Eiffel.
  • Bjarne Stroustrup, developer of C++.
  • Brad Cox, co-creator of Objective-C.
  • Brendan Eich, developer of JavaScript.
  • Brian Kernighan, co-author of the first book on the C programming language with Dennis Ritchie, coauthor of the AWK and AMPL programming languages.
  • Chuck Moore, inventor of Forth, the first concatenative programming language, and a prominent name in stack machine microprocessor design.
  • Chris Lattner, creator of Swift and LLVM.
  • Cleve Moler, creator of MATLAB.
  • Dennis Ritchie, inventor of C. Unix Operating System, Plan 9 Operating System.
  • Douglas McIlroy, influenced and designed such languages as SNOBOL, TRAC, PL/I, ALTRAN, TMG and C++.
  • Grace Hopper, first to use the term compiler and developer of FLOW-MATIC, influenced development of COBOL. Popularized machine-independent programming languages and the term «debugging».
  • Guido van Rossum, creator of Python.
  • James Gosling, lead developer of Java and its precursor, Oak.
  • Jean Ichbiah, chief designer of Ada, Ada 83.
  • Jean-Yves Girard, co-inventor of the polymorphic lambda calculus (System F).
  • Jeff Bezanson, main designer, and one of the core developers of Julia.
  • Jeffrey Snover, inventor of PowerShell.
  • Joe Armstrong, creator of Erlang.
  • John Backus, inventor of Fortran and cooperated in the design of ALGOL 58 and ALGOL 60.
  • John C. Reynolds, co-inventor of the polymorphic lambda calculus (System F).
  • John McCarthy, inventor of LISP.
  • John von Neumann, originator of the operating system concept.
  • Graydon Hoare, inventor of Rust.
  • Ken Thompson, inventor of B, Go, Inferno (operating system) and Unix Operating System co-author.
  • Kenneth E. Iverson, developer of APL, and co-developer of J along with Roger Hui.
  • Konrad Zuse, designed the first high-level programming language, Plankalkül (which influenced ALGOL 58[19]).
  • Kristen Nygaard, pioneered object-oriented programming, co-invented Simula.
  • Larry Wall, creator of the Perl programming language (see Perl and Raku).
  • Martin Odersky, creator of Scala, and previously a contributor to the design of Java.
  • Martin Richards developed the BCPL programming language, forerunner of the B and C languages.
  • Nathaniel Rochester, inventor of first assembler (IBM 701).
  • Niklaus Wirth, inventor of Pascal, Modula and Oberon.
  • Ole-Johan Dahl, pioneered object-oriented programming, co-invented Simula.
  • Rasmus Lerdorf, creator of PHP.
  • Rich Hickey, creator of Clojure.
  • Jean Paoli, co-creater of XML
  • Robert Gentleman, co-creator of R.
  • Robert Griesemer, co-creator of Go.
  • Robin Milner, inventor of ML, and sharing credit for Hindley–Milner polymorphic type inference.
  • Rob Pike, co-creator of Go, Inferno (operating system) and Plan 9 (operating system) Operating System co-author.
  • Ross Ihaka, co-creator of R.
  • Ryan Dahl, creator of Node.js.
  • Stanley Cohen, inventor of Speakeasy, which was created with an OOPS, object-oriented programming system, the first instance, in 1964.
  • Stephen Wolfram, creator of Mathematica.
  • Terry A. Davis, creator of HolyC.
  • Walter Bright, creator of D.
  • Yukihiro Matsumoto, creator of Ruby.

See also[edit]

  • ACM
  • SIGPLAN
  • History of Programming Languages Conference
  • History of compiler construction
  • History of computing hardware
  • Programming language
  • Timeline of computing
  • Timeline of programming languages
  • List of programming languages
  • List of programmers

References[edit]

  1. ^ Hopper (1978) p. 16.
  2. ^ Knuth, Donald E.; Pardo, Luis Trabb. «Early development of programming languages». Encyclopedia of Computer Science and Technology. Marcel Dekker. 7: 419–493.
  3. ^ Corrado Böhm’s PhD thesis
  4. ^ J. Fuegi and J. Francis (October–December 2003), «Lovelace & Babbage and the creation of the 1843 ‘notes’«, Annals of the History of Computing, 25 (4): 16–26, doi:10.1109/MAHC.2003.1253887
  5. ^ In 1998 and 2000 compilers were created for the language as a historical exercise. Rojas, Raúl, et al. (2000). «Plankalkül: The First High-Level Programming Language and its Implementation». Institut frame Informatik, Freie Universität Berlin, Technical Report B-3/2000. (full text)
  6. ^ Sebesta, W.S. (2006). Concepts of Programming Languages. p. 44. ISBN 978-0-321-33025-3.
  7. ^ «Fortran creator John Backus dies — Tech and gadgets- NBC News». NBC News. 2007-03-20. Retrieved 2010-04-25.
  8. ^ «CSC-302 99S : Class 02: A Brief History of Programming Languages». Math.grin.edu. Archived from the original on 2010-07-15. Retrieved 2010-04-25.
  9. ^ Padua, David (Feb 2000). «The FORTRAN I Compiler» (PDF). Computing in Science and Engineering. 2 (1): 70–75. Bibcode:2000CSE…..2a..70P. doi:10.1109/5992.814661. Retrieved 7 November 2019.
  10. ^ Eugene Loh (18 June 2010). «The Ideal HPC Programming Language». Queue. Association of Computing Machines. 8 (6).
  11. ^ «HPL — A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers». Retrieved 2015-02-21.
  12. ^ Hopper (1978) p. 16.
  13. ^ Sammet (1969) p. 316
  14. ^ Sammet (1978) p. 204.
  15. ^ Gordon, Michael J. C. (1996). «From LCF to HOL: a short history» (PDF). p. 3. Retrieved 2015-05-04. Edinburgh LCF, including the ML interpreter, was implemented in Lisp.
  16. ^ Manjoo, Farhad (July 29, 2020). «How Do You Know a Human Wrote This?». The New York Times. ISSN 0362-4331. Retrieved August 4, 2020.
  17. ^ TIOBE (25 May 2018). «TIOBE Index, Top 100 programming languages according to TIOBE Index». www.tiobe.com. TIOBE_index.
  18. ^ «GitHub’s Octoverse 2018». Archived from the original on 2019-03-22.
  19. ^ Rojas, Raúl; Hashagen, Ulf (2002). The First Computers: History and Architectures. MIT Press. p. 292. ISBN 978-0262681377. Retrieved October 25, 2013.

Further reading[edit]

  • Rosen, Saul, (editor), Programming Systems and Languages, McGraw-Hill, 1967.
  • Sammet, Jean E., Programming Languages: History and Fundamentals, Prentice-Hall, 1969.
  • Sammet, Jean E. (July 1972). «Programming Languages: History and Future». Communications of the ACM. 15 (7): 601–610. doi:10.1145/361454.361485. S2CID 2003242.
  • Richard L. Wexelblat (ed.): History of Programming Languages, Academic Press 1981.
  • Thomas J. Bergin and Richard G. Gibson (eds.): History of Programming Languages, Addison Wesley, 1996.
  • Sebesta, Robert W. Concepts of programming languages. Pearson Education India, 2004.

External links[edit]

  • History and evolution of programming languages
  • Graph of programming language history

Код. Сегодня он везде: в светофорах, в наушниках, в вашем чайнике, в автомобиле — куда не покажи пальцем, это будет работать благодаря коду.

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

В этом материале вы узнаете, откуда появился код, как он работает, кто стал первым программистом и причём здесь ткацкие станки.

У всех компьютеров общий предок — ткацкий станок

Их считывание происходило двумя методами: электромеханическим и фотоэлектрическим.

Для кого-то это может стать неожиданным фактом, но пра-прадедушкой современных компьютеров являются ткацкие станки. Со стороны так и не подумаешь: что может объединять потрясающие тонкие MacBook с этими огромными махинами.

Общий предок — перфокарты. Да, в компьютерах Mac они не использовались, но зато отлично применялись в компьютерах первого поколения. На них записывались программы.

Только в ЭВМ это были математические задачи, а в станках — картины.

На фотографии изображён рабочий образец Жаккардового станка.

Идею применять перфокарты в ткацких станках впервые реализовал французский изобретатель Жозеф Жаккар в 18 веке. В каждое из отверстий проходила отдельная игла. Благодаря этому появилась возможность создавать полотна с невероятной детализацией.

Некоторые из таких полотен можно сравнить с настоящими картинами, написанными профессиональными художниками.

Это портрет Жозефа Жаккара, сотканный на его изобретении.

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

Первый «компьютер» придумали в 19 веке

Пускай при жизни Бэббидж не успел реализовать свой проект, вместо него это сделали сотрудники Музея науки в Лондоне. Сборка заняла два года в период с 1989 по 1991 год.

Взяв за основу Жаккардов станок, в 19 веке британский учёный Чарльз Бэббидж придумал машину с физическим механизмом. Перфокарты в ней использовались в трёх сценариях.

Перфокарты операций переключали машину между режимами сложения, вычитания, деления и умножения.

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

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

Цитата из описания машины на Википедии.

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

К сожалению, при жизни реализовать своё изобретение ему не удалось.

Портрет Ады.

Идею вычислительных машин подхватила его ученица Ада Байрон. Она, кстати, написала первые в истории компьютерные программы.

Одна из них была сделана для вычисления значений тригонометрической функции с многократным повторением заданной последовательности вычислительных операций. Здесь же Ада ввела понятие «цикла» в программировании. Другая разработка предназначалась для вычисления чисел Бернулли.

Также она выдвинула теорию, что при помощи аналитических машин можно будет решать не только математические задачи, но ещё создавать музыку, картины и тексты. Как она говорила в одной из своих записок:
«аналитически машины укажут науке такие пути, какие нам и не снились». Что же, она предугадала будущее.

Табулируюшая машина сделала работу с данными проще

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

Все эти разработки тогда были уделом сообщества учёных. Массово перфокарты, кроме ткацких станков, нигде особо не использовались. Но всё поменяла табулирующая машина Германа Холерита. Американский учёный придумал её с целью ускорить процесс переписи населения.

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

Россия тоже внесла свой вклад в развитие компьютеров и программирования

Теперь набор перфораций стал нести в себе не только математические задачи, но и список симптомов у больных.

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

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

Перфокарты работают просто, но программистов они сильно ограничивали

Все электронные вычислительные машины работают по бинарному принципу: на глубинном уровне все данные представляют собой набор единиц и нулей. 1 — заряд есть, 0 — заряда нет.

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

Ведь сегодня есть удобные среды для программирования с инспекторами. Если вдруг при компиляции кода случится ошибка, компьютер на неё укажет и предложит вариант исправления. Раньше такого не было.

Одна лишняя перфорация и всё — программа работает совсем иначе. Либо наоборот, где-то перфорации не хватает, и программа тоже будет «крашиться». Позднее программисты придумали компиляторы, которые переводят команды из понятных человеку слов на «язык» компьютера.

Компиляторы упростили работу с кодом

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

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

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

Так появился Ассемблер — язык программирования низкого уровня. Низкого, потому что он сочетал в себе элементы привычного человеческого языка и машинного кода. За ним стали развиваться уже языки программирования высокого уровня. В них теперь задействовались только команды, соответствующие нашему привычному человеческому языку.

Языки высокого уровня сделали работу с кодом понятной для всех

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

Повышенные требования к компьютерам стали основной причиной, по которой языки ВУ появились. Теперь на ЭВМ создавались сложные вычислительные алгоритмы, которые содержали тысячи строчек кода.

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

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

Компьютеры стали превращаться в устройства для всех.

Благодаря играм появились графические интерфейсы

Недавно попробовал поиграть в ним с компьютером, вообще не представляю, как можно обыграть в этом машину.

Самая первая компьютерная игра появилась в начале 1940-х годов, её создал американский инженер Эдвард Гордон. Однажды за обедом вместе со своими коллегами он обсуждал идею того, что датчики, которые используются в счётчиках Гейгера для калибровки, могут научить компьютер играть. Они решили проверить гипотезу. Скажу заранее — у них всё получилось.

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

Так появился Nimatron — игровой автомат, весом в тонну, который показали на Всемирной выставке в Нью-Йорке. Он произвёл фурор: на ниматроне было сыграно порядка 100 тыс. партий. Забавно, что 90 тыс. из них выиграла машина.

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

Без игр современная техника была бы совсем другой. Правда, компьютерные игры не появиться не могли.

В 1962 году появилась Spacewar! — это первая компьютерная игра в нашем привычном понимании. Она имела двухмерную графику и возможность кооператива для пары участников. Всё, что нужно было делать — это уничтожать космические корабли противника.

Spacewar! создали программисты из Массачусетского технологического университета. Группой руководили Стив Рассел и Мартин Гретц. Игры показали, что компьютеры могут быть понятными многим. Да-да, дело было в графике. Непосредственно сами системы компьютеров того поколения управлялись при помощи ввода команд в терминале.

Карл держит в руках самую первую компьютерную мышь.

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

В 1968 году американский изобретатель Дуглас Карл Энгельбарт представил миру курсор. Он разрабатывался совместно с командой инженеров из Стэнфордского исследовательского института, и эта вещь изменила то, как люди пользуются компьютерами.

В 1972 году в исследовательском центре Xerox PARC началась работа над Xerox Alto первым компьютером с графическим интерфейсом. Теперь в разработке программного обеспечения появилось понятие «графический интерфейс пользователя» (Graphic user interface).

Разработка программного обеспечения перешла на новую ступень развития. Теперь программисты могли знать, как будет выглядеть софт, и понимать, как пользователи будут с ним взаимодействовать. Более того, существуют среды для визуального программирования.

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

Это способ, в котором создание софта осуществляется при помощи манипулирования графическими объектами. Для проектирования каких-то сложных сервисов они, конечно, не подходят, но для простеньких программ или для ознакомления — в самый раз.

Следом за Xerox Alto в 1980-х вышли Apple Lisa и Macintosh — первые массовые компьютеры с графическим интерфейсом на рынке. Теперь компьютеры научились решать не только научные задачи, но и повседневные.

Интернет — самое масштабное, что было создано с помощью кода

Недавно Тим Бернерс-Ли решил продать исходный код интернета в виде NFT-токена на аукционе. Стартовая цена: $1 тыс.

Самым глобальным продуктом, который появился благодаря программированию, однозначно является интернет. Технологию «Всемирной паутины» придумал Тим Бернерс-Ли и Роберт Кайо.

Официальным днём рождения интернета считается 1989 год, тогда Тим работал в CERN над внутренней сетью организации, в которой сотрудники могли бы обмениваться информацией. Он предложил прокачать изначальную идею и создать глобальный гипертекстовый проект. Все документы находящиеся в его пределах должны были связываться между собой гиперссылками.

NeXTcube был выбран не случайно. Система обладала невероятно удобным софтом для разработки.

Для реализации идеи были буквально с нуля изобретён протокол передачи данных HTTP и язык гипертекстовой разметки HTML. В 1990-м началась работа над созданием первого в мире гипертекстового браузера «WorldWideWeb». Самый первый веб-сервер Бернерс-Ли создал на основе компьютера NeXTcube.

Теперь сеть стала способом передачи информации и других цифровых продуктов, созданных при помощи кода. Наступила эпоха интернет-сервисов.

В итоге все привело к интернет-сервисам и искусственному интеллекту

Сегодня вся наша жизнь сфокусирована в одном устройстве, которое помещается в кармане.

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

Instagram, YouTube, Netflix, Facebook, признавайтесь, кто где дольше сидит? Влияние программистов и сервисов на нашу жизнь стало огромным. По-сути, круглые сутки мы живём с нескончаемом потоке информации. И теперь те принципы программирования, которые были заложены в прошлом веке, стали определять то, как мы едим, путешествуем, отдыхаем, одеваемся и живём.

Некоторые задачи мы вовсе стали доверять компьютерам, начав развивать нейросети. Благодаря искусственному интеллекту, сегодня мы имеем технологию автопилота, и Tesla тому пример, алгоритмы рекомендаций в музыкальных сервисах и даже такие необычные эксперименты, как нейросеть Зелибоба от «Яндекса».

ИИ может выполнять даже творческую работу: Студия Артемия Лебедева имеет собственную нейросеть, которая называется «Николай Иронов» — она создаёт логотипы и дизайн.

Фишка нейросетей состоит в том, что они могут совершенствовать сами себя. Следующим шагом в истории программирования будет этап, когда искусственный интеллект сможет реплицироваться, придумывать новые алгоритмы и писать код. Кто-то боится, что компьютеры вовсе заменят людей и лишат их большинства профессий. Но я больше склоняюсь к мнению историка Юваля Ной Харари:

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

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

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

Цитата из книги «21 урок для XXI века», глава: «Новый профессии?»

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

1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (21 голосов, общий рейтинг: 4.90 из 5)

🤓 Хочешь больше? Подпишись на наш Telegram.

undefined

iPhones.ru


Всё по делу.

  • Apple,
  • история,
  • программирование,
  • Это интересно

podogreykin avatar

podogreykin

@podogreykin

Главный любитель технологий и Звёздных воин в галактике. До сих пор слушаю музыку с iPod.

Есть вопрос или замечание: [email protected]

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

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

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

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

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

Основные этапы исторического развития языков программирования

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

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

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

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

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

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

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

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

Разнообразие языков программирования

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

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

Все многообразие языков можно классифицировать по разным критериям. Например, по типу решаемых задач (языки системного или прикладного назначения, языки для web-разработки, организации баз данных, разработки мобильных приложений). Среди наиболее популярных на сегодняшний день можно отметить Java, C, C++, C#, JavaScript, PHP, в том числе Python, изучению базовых основ которого посвящен данный курс.

Трансляция

Ранее было сказано, что для перевода кода с языка программирования высокого уровня на машинный язык требуется специальная программа – транслятор.

Заложенный в транслятор алгоритм такого перевода сложен. При этом существует два основных способа трансляции — компиляция программы или ее интерпретация.

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

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

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

Примеры решения и дополнительные уроки в pdf-версии и android-приложении курса

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

Перед тем как мы расскажем, в каком году и как появилась первая компьютерная программа, стоит упомянуть о появлении первого компьютера, ведь программирование является прикладной наукой и используется совместно с вычислительной техникой. В 1833 году Чарлз Бэббидж представил миру свою «Аналитическую машину», которая по совместительству стала первым в мире компьютером. Главная функция изобретения заключалась в умении производить вычисление по указаниям, которые задавались извне. Впрочем, из-за недостатка технических возможностей, в реальности Чарлз так и не имел возможности построить данную машину.

История первой программы

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

Этой девушкой оказалась Ада Августа Лавлейс. Практически сразу же после рождения Ады её отец лорд Байрон покинул свою семью и больше никогда не встречался с ребёнком. Мать Анабелла привила ребёнку интерес к музыке и математике. В сотрудничестве с Бэббиджэм Ада ввела множество удивительных для того времени понятий о хранилище (памяти), рабочей переменной, цикле, «мельнице» (процессоре). Также девушка высказалась об абсолютно удивительном для 19 века заключении – о том, что машина не сможет создать что-либо новое, она будет выполнять заданные человеком команды. По её мнению, потенциал машины не должен был заканчиваться исключительно на вычислениях. Она рассказала о том, что изобретение сможет создавать и музыку.

Язык для создания программ АДА

Удивительное событие произошло в 1978 году в ходе проведения эксперимента на вычислительной машинке БЭСМ-6. На испытаниях, проходивших в Ирландии (Дублин), программисты закодировали программу Ады на Фортране. В процессе отладки выявили по одной опечатке и ошибке. При этом программа Ады Августы Лавлейс нуждалась в минимальном количестве перфокарт, а также способствовала экономии памяти.

Ада Августа Лавлейс умерла в 36-летнем возрасте и о её работах забыли практически на 130 лет. Однако с началом развития компьютеров, в 1980 году, её имя вновь всплыло и стал использоваться язык программирования на основе её заметок. Более того, в Соединённых Штатах Америки был создан язык программирования АДА, который был назван как раз таки в честь самой первой программистки в мире. При этом день рождения Ады (10 декабря) сегодня называют Днём программистов, и отмечается он во всём мире.

Когда-то мы писали, что попасть в геймдев можно без умения кодить. Это так, но программисты очень важны для игровой индустрии. Обойтись без этих специалистов геймдев не может. А чем они должны владеть? Языками программирования, конечно. Именно на них и пишется код. Давайте запустим машину времени, вернемся к истокам и узнаем, на чем писали задолго до C++ и Python.

Основы и немного истории

Определимся с терминами. Программа — это набор инструкций для конкретного исполнителя (механизма, устройства и т.д.), а язык программирования — знаковая система, предназначенная для записи программ.

Первые программисты появились задолго до компьютеров, с которыми они обычно ассоциируются. Автомат-гуманоид Аль-Джазари (1206 год), ткацкий станок Жаккара (1804), «Аналитическая машина» Бэббиджа (1843) были программируемыми устройствами. Автомату алгоритм действий задавался с помощью кулачков и зажимов, станку и «разностной машине» — с помощью перфокарт. Ада Августа Лавлейс, дочь самого Байрона, даже написала для устройства Бэбиджа (которое он так и не собрал) программу, решавшую уравнение Бернулли.

1940-50-е годы: от Ассемблера к Fortran и AGOL

Электронно-вычислительные машины работают с командами, состоящими из нулей и единиц (машинным кодом). Однако такой язык получается громоздким и неудобным. Поэтому специалисты решили автоматизировать набор машинного кода. В конце сороковых — начале пятидесятых стал применяться Ассемблер. В нем для обозначения объектов и команд использовались буквы или укороченные слова (например, add вместо 000010). Это был язык низкого уровня, то есть созданный для конкретного типа процессора. Он значительно упростил труд программистов.

Следом появились так называемые языки высокого уровня (или машинонезависимые). В отличие от предшественников, они не были привязаны к конкретным устройствам. Для них создавались компиляторы — «переводчики» программ, созданных на языках высокого уровня, на «низкоуровневые». Первым из них стал Shortcode (1949). В 1950 Уильям Шмитт адаптировал его для компьютера UNIVAC.

C 1954 по 1957 в IBM под руководством Джона Бэкуса (1924-2007) был разработан знаменитый Fortran (от formula translator). Он использовался для технических расчетов и научных задач. Fortran стал первым относительно массовым языком программирования — к 1963 году существовало уже 40 компиляторов для различных машин. Он попал и в Советский союз, благодаря общению советских физиков с коллегами, работавшими в CERN. В 1967 году был создан компилятор для ЭВМ «Минск-2», в 1968 — для БЭСМ-6. Язык используется до сих пор — в основном, для сложных вычислений.

Успех «Фортрана» заставил действовать конкурентов. Немецкое Общество прикладной математики и механики создало комитет и поставило перед ним задачу разработки нового универсального языка программирования. То же самое сделала американская Ассоциация вычислительной техники. К счастью, вместо противостояния получилось сотрудничество (если не считать спора из-за того, какой знак использовать для десятичных дробей — точку или запятую). Комитеты объединились и создали ALGOL (1958), «дедушку» Java, Pascal и C++. Как и Fortran, ALGOL распространился по миру, но в Европе и СССР был встречен гораздо теплее, чем в США. Язык отличался блочной структурой, что для того времени было прогрессивным решением, а затем стало стандартом.

Другие современники Fortran и ALGOL — это LISP (1958) и COBOL (1959). Первый построен на обработке списков (отсюда название — list processing) и до сих пор в ходу (например, в корпорации Boeing). Второй создавался для экономических процессов (кредитные карты, банкоматы), тоже по-прежнему «в строю» и применяется в банковских системах. Заменить его на современный можно, но дорого и энергозатратно — в этом уже убедились в Commonwealth Bank of Australia.

1960-70-е: от структурного программирования к объектно-ориентированному

Первая «звезда» шестидесятых — BASIC (он же Beginner’s All-purpose Symbolic Instruction Code, универсальный код символических инструкций для начинающих), созданный Томасом Курцем и Джоном Кемени, профессорами Дартмутского колледжа в 1964 году. Разработчики хотели создать простой язык, с помощью которого непрофессионалы могли бы разрабатывать несложные программы для решения прикладных задач. BASIC был основан на Fortran II и Algol. Популярным язык стал уже в 1970-х с распространением микрокомпьютеров.

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

В конце 1960-х сформировалась парадигма структурного программирования, основанного на представлении о программе как системе блоков. «Отцом» методологии считают Эдсгера Дейкстру (1930-2002), автора письма «Оператор Goto считается вредным». Новая парадигма позволила оптимизировать код и сделать его более компактным благодаря внедрению функций и процедур. Кстати, Дейкстра критиковал BASIC, говоря что сделать хорошего программиста из того, кто начинал с этого языка, очень трудно. Это, конечно, было большим преувеличением.

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

Первые ООП-языки — это Simula (1967) и основанный на нем Smalltalk (1972). Последний привнес в программирование множество идей и концептов, актуальных по сей день: взаимодействие между элементами через сообщения, возможность редактировать код «на ходу» и динамическая типизация. Logitech и ряд других компаний и сейчас используют Smalltalk для отдельных операций.

В 1972 появились С и SQL (первоначально назывался SEQUEL). C (прародитель С#, Java, Python и других), был создан Деннисом Ричи, сотрудником Bell Telephone Laboratories для работы с Unix. SQL — детище специалистов IBM Бойса и Чемберлена, ориентирован на работу с информацией из баз данных. Оба до сих пор используются.

1980-1990-е: мультипарадигмальность, визуальные языки, Интернет

В начале 1980-х сотрудник Bell Labs Бьерн Страуструп решил улучшить язык С и добавил к нему ряд возможностей Simula (1967). Так появился C++, объединивший в себе черты объектно-ориентированных и системных языков. Страуструп внедрил в С возможность работать с объектами и классами, строгую проверку типов, аргументы по умолчанию и т.д. Первые версии языка (1980) назывались «Си с классами», а наименование С++ стало использоваться в 1985 году с выходом очередной версии. К этому моменту возможности языка еще больше расширились. С++ актуален до сих пор, активно используется (например, в игровых движках и Adobe Photoshop) и развивается.

Еще одной важной вехой стало появление объектно-ориентированного Ada (1980/81), названного в честь Ады Лавлейс. Его разработала команда Жана Ишбиа по заказу Министерства обороны США. В основу языка легли Pascal (1970) и Algol (1960), однако присущий им синтаксис был упорядочен. «Ада» создавался для военных и смежных задач — прежде всего для систем управления кораблями и самолетами. Сейчас используется для управления воздушным движением в некоторых странах, а также в космических проектах.

В эту эпоху началось активное применение модулей — крупных единиц организации кода. Они позволили упростить процессы тестирования и поиска ошибок. Помимо Ada модульными были Modula-2 (1978) и Oberon (1986) (оба разработаны создателем Pascal Никлаусом Виртом), сам Pascal (1970), Haskell (1990) и другие. Кстати, Вирт высказал мнение, что программы становятся медленнее «куда шустрее, чем компьютеры становятся быстрее». Иными словами, программное обеспечение не успевает за аппаратным. Этот тезис известен под разными названиями: «закон Вирта», «закон Гейтса» или «закон Пейджа».

Получили развитие языки, предназначенные для обработки текстовой информации — например, Perl (1987), Python (1991), и Ruby (1993). Perl, разработанный для редактирования текстов, в наши дни применяется в самых разных целях — от системного администрирования до работы с базами данных. Python, созданный голландцем Гвидо ван Россумом, был назван в честь знаменитой комедийной группы из Великобритании «Монти Пайтон». Сейчас это универсальный язык, широко известный и удобный. Ruby Юкихиро Мацумото тоже актуален по сей день и используется для веб-приложений.

Другой тренд конца восьмидесятых — начала девяностых — развитие визуальных языков. В них программа создается при помощи манипуляций с графическими объектами вместо написания кода. Первыми стали Visual Basic (1991), Delphi (1995) и C++ Builder (1997). Современный пример — ориентированный на детскую и подростковую аудиторию Scratch (2007).

В начале девяностых началось активное развитие Интернета. Понадобились инструменты для создания веб-сайтов. Сначала активно применяли уже упомянутый нами Perl и HTML. В 1995 был выпущен PHP — С-подобный язык для разработки интернет-страниц и веб-приложений (активно применяется и сейчас, в том числе WordPress и Wikipedia). В том же году вышла первая версия популярного JavaScript Брендана Эйха, также применяющегося для динамической веб-разработки, браузеров и виджетов.

Джеймс Гослинг выпустил один из самых популярных языков наших дней Java (1995), который не стоит путать с JavaScript.. Сейчас он часто используется для создания Android-приложений и веб-сервисов. И конкурирует с Kotlin (2011), о котором мы еще скажем.

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

От нулевых до наших дней

Первый «хит» нового тысячелетия — это C# (2001), разработанный в Microsoft Андерсом Хейлсбергом, создателем Delphi. Это С-подобный язык, синтаксически близкий к C++ и Java, взявший многое от Delphi, Modula и Smalltalk. C# активно используется самой Microsoft, применяется при разработке игр на Unity и веб-разработке.

В 2003 свет увидел Scala, созданный в Швейцарии под руководством Мартина Одерски. Его «фишкой» стала масштабируемость, а также объединение объектно-ориентированного и функционального программирования. Ближайшие «родственники» языка — это Java и C++. «Ровесник» Scala — язык Groovy, созданный для платформы Java. Синтаксически он близок Java, но имеет ряд отличий.

В нулевые и десятые набирала силу Google, не оставшаяся в стороне от большой игры — в ноябре 2009 компания представила язык Go (также известен как Golang — не путать с языком Go!). Продукт Google разрабатывался как относительно простая замена C и C++, которая сможет эффективно работать на многоядерных процессорах и распределенных системах. Go не стал «прорывом», но вошел в число популярных современных языков и, в основном, применяется для создания микросервисов и веб-приложений.

Российские программисты тоже внесли вклад в развитие языков нулевых-десятых. С 2010 по 2011 компанией JetBrains (под руководством Андрея Бреслава) был разработан Kotlin. Это объектно-ориентированный язык, функционирующий на базе Java Virtual Machine, создававшийся как более лаконичная и простая альтернатива Java и Scala. Как и Java, он часто используется Android-разработчиками.

Swift (2014) создавался Apple как более простая и эффективная замена C, C++ и Objective-C. Это универсальный язык, на котором прежде всего пишут продукты для macOS, iOS и других систем корпорации. Иногда может использоваться для поддержки сайтов и веб-приложений.

Вместо заключения:

Мир программирования огромен. Наш материал — лишь общее описание эволюции языков программирования. Для того, чтобы рассмотреть тему детально, необходимы сотни страниц, но мы надеемся, что вы узнали что-то интересное и новое.

Если вы только планируете ворваться в яркую и разнообразную вселенную программирования, то, скорее всего, размышляете о том, с какого языка начать. Это зависит от того, чем именно вы хотите заниматься — веб-разработкой, мобильными приложениями или, может быть, data science. Некоторые языки многофункциональны, другие — скорее относятся к «узким» и «заточены» на решение ограниченного спектра задач.

У языков программирования разные пороги вхождения. Если начать работать в Python относительно просто, то об R этого не скажешь. При выборе языка для изучения исходите из своих целей, знаний и уровня подготовки. Ищите и используйте возможности для образования и самообразования. Это не только курсы, книги и статьи, но и онлайн-тренажеры.

Хотите стать программистом в игровой студии? Имеет смысл начать изучать Python — на нем легко создавать прототипы игр. Вы наверняка будете работать в Unreal или Unity, так что осваивайте C++ и C#. JavaScript пригодится, если вы собираетесь разрабатывать мобильные проекты. Менее известные, но использующиеся в индустрии, языки — это Lua, Swift и CUDA-C.

Источники:

5. Harry McCracken. Fifty Years of BASIC, the Programming Language That Made Computers Personal — https://time.com/69316/basic/

Подписывайтесь на официальный аккаунт Black Caviar Games на DTF, чтобы не пропустить новые интересные статьи! ;)

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как писать сочинение описание памятника культуры план
  • Как писать сочинение описание комнаты
  • Как писать сочинение описание класса
  • Как писать сочинение описание интерьера 6 класс
  • Как писать сочинение огэ презентация

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии