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

Самый первый язык программирования

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

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

Язык Plankalkül

В гитлеровской Германии конструкторам и изобретателям были созданы максимально подходящие условия для развития, так как от их успехов непосредственно зависело будущее всего рейха. В 1942-1945 годах немец Конрад Цузе активно работал над созданием собственного языка программирования, который получил от него название Plankalkül. В переводе с немецкого это означает «План вычислений». Параллельно с этим ученый работал и над созданием вычислительных машин, на которых и должен был применяться будущий язык. Одной из удачных моделей его ЭВМ стало устройство под названием Z3.

Примечательно, что язык Plankalkül, который для многих знатоков темы – первый язык программирования, разрабатывался Цузе без какой-либо посторонней помощи и использования чужого опыта. В конце концов ученому удалось создать желаемый язык и он обладал такими очень новаторскими на 1940-е годы возможностями, как:

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

Другие языки

Параллельно с Plankalkül в самых разных странах мира разрабатывались и другие языки программирования. Уже в начале 50-х свет увидели FORTRAN, ALGOL, LISP, COBOL. Они обрастали массой модификаций, диалектов и стали той основой, которая через несколько десятилетий и привела к появлению уже современных мощных языков высокоуровневого программирования. Также примерно в это же время очень активно развивались разнообразные языки ассемблера, которые были низкоуровневыми и своим кодом обращались непосредственно к физическим возможностям машин.

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

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

Источник

История языков программирования. 1980-е

Когда-то давно в программировании не существовало понятия «объекты», а сегодня уже трудно представить достаточно мощный язык, хотя бы частично не использующий принципы ООП. И хотя объектное программирование зародились ещё в 1960-х, именно 1980-е стали тем временем, когда оно стало мейнстримом.

Но начать следует с аппаратной части. В 1979 году свет увидел легендарный процессор Intel 8088, который дал мощный толчок развитию персональных компьютеров. Так как IBM PC уже по сути стал стандартом, то отныне все машины поддерживали любые языки программирования без необходимости их урезать и адаптировать.

Философия программирования

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

Simula

Вне всяких сомнений, самой большой революцией 80-х годов стало появление объектно-ориентированных языков. Однако первопроходцем принято считать язык Simula, разработанный в 1967 году в Норвежском Вычислительном Центре тремя учёными – Оле-Йоханом Далем, Бьорном Мирхаугом и Кристен Нигаард.

Однако, как мы помним, это было время комитетов в программировании. Более того, так как язык был разработан в небольшом скандинавском университете тремя людьми без соответствующего опыта, шансы получить мировое признание у Simula 67 были нулевые.

Язык был развитием Algol 60 и на первый взгляд не содержал ничего нового. Реальная же важность Simula 67 заключалась в философии разделения самой программы и её экземпляра. До этого большинство программистов не разделяло эти понятия. Даль и Нюгор, напротив, были озадачены именно созданием симуляций (отсюда и название языка).

Чтобы понять отличие, рассмотрим пример, пусть будет автомобиль. В традиционных языках (Fortran, Algol, BASIC или Cobol) вам необходимо писать подпрограмму или модуль для каждого автомобиля, хотя все они будут более или менее одинаковыми. В Simula 67 был реализован иной подход – вы создаёте лишь один модуль, определяющий автомобиль как набор переменных, процедур и функций, а затем просто создаёте экземпляры с частными параметрами.

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

Smalltalk

Следующим важным шагом в развитии объектно-ориентированных языков стал Smalltalk.

Алан Кей жил на западном побережье США в эпицентре аппаратной революции. Главным его стремлением было создать компьютер, с которым мог работать даже ребёнок. Устроившись на работу в Xerox Palo Alto, Кей создал специальную исследовательскую группу. С компьютером не получилось, зато на свет появились Smalltalk 72 и 76, заимствовавшие идеи Simula. Об этом странном норвежском языке Кей прочитал в одном из научных журналов, идея ему понравилось и он положил её в основу своих разработок. Однако в 1981 году Кей покинул проект, после чего акценты Smalltalk изменились.

Отныне группа получила название «группа концепций программного обеспечения», а Smalltalk 80 позиционировался как «серьезный язык». Большой вклад в это внесли Адель Голдберг, Дэвид Робинсон, Ларри Теслер, Дэн Ингаллс и Питер Деат.

Smalltalk стал первым полноценным объектно-ориентированным языком и задал тренд на долгие годы. Кроме того, со Smalltalk связано ещё одно эпохальное событие. На этом языке был написана первая графическая среда. Однажды в Xerox Palo Alto зашёл Стив Джобс, восхитился этой разработкой и завербовал Ларри Теслера для создания LISA – предшественника первого Macintosh. Окна, иконки, мышь – всё это берёт начало здесь.

Объекты и другие языки

Объектно-ориентированный подход стал настолько популярен в конце 80-х годов, что многие традиционные языки стали включать в себя этот подход. Бьёрн Страуструп из компании AT&T расширил возможности языка C и создал C++. Были и другие расширения, даже более удачные, но Страуструп обладал соответствующими полномочиями, потому именно его вклад в программирование оказался историческим.

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

Таким образом, к концу 1980-х годов практически каждый программист был знаком либо с Basic, либо с C++.

Неимперативное программирование

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

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

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

Функциональные языки, такие как Lisp, FP и Hope, желали покончить с императивным программированием, настаивая, что применение частных случаев неэффективно по сравнению с обобщающими математическими функциями. К примеру, в императивном программировании выражение:

означает, что каждый раз, когда выполняется эта часть программы, А меняет значение, то есть фактически не имеет ни одного значения. Функциональные языки используют рекурсию для создания новых переменных и поэтому А не использует значения до момента запроса. Рекурсия также используется для замены циклов, поэтому время выполнения кода соизмеримо с полным временем выполнения программы. Единственная проблема заключается в том, что многие программисты находят рекурсию сложной. Тем не менее, самый известный функциональный язык, LISP, разработанный Джоном МакКарти из Массачусетского технологического института в 1959 году, по-прежнему имеет своих поклонников. И он по-прежнему является основным языком для ИИ в той или иной форме.

Логическое программирование

Самый успешный из логических языков — Prolog. Он основан на идее написания программ как набора логических операторов и использования перебора для автоматического определения результатов.

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

Самой важной частью истории Prolog является его принятие японцами в 1981 году в рамках проекта десятилетия. Это стимулировало многих программистов в США, чтобы пересмотреть их использование Lisp в качестве первого выбора для программирования ИИ.

Турбо-языки

Было бы несправедливо обойти программирование 80-е годов, не упомянув семейство турбо-диалектов от Borland.

Turbo Pascal был первым из высокопроизводительных компиляторов нового поколения с простой средой разработки. Его создатель Андерс Хейлсберг (который, кстати, продолжил разработку C# для Microsoft) стал еще одним примером скандинавского влияния на вычисления.

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

После успеха Turbo Pascal появились интегрированные среды Turbo C, Turbo BASIC и Turbo Prolog.

Вдали от мейнстрима

Modula 2 был предложением Никлауса Вирта в качестве замены Pascal. По сути, это было обновление, включающее в себя идеи параллельного программирования. В 1980 году появилось Modula 2, более универсальное расширение, которое включало функции объектно-ориентированного программирования.

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

Modula 2 наследовала слишком много алгольных идей, поэтому мировой славы не получила. С другой стороны, на свет появилась Ada – пожалуй, последний из суперязыков. Она была создана очередным комитетом по заказу Министерства Обороны США и является возвратом к идеям Algol/Сobol. Ada – универсальный язык, который включает в себя невероятный диапазон функций. По этой причине его можно использовать для создания хоть объектно-ориентированной, хоть функциональной программы. Короче говоря, для всего.

В СССР

Однако комитетские языки тоже не теряли влияние. В Советском Союзе был выпущены ГОСТы на Алгол-68 и Фортран. Также в образовании стали закрепляться Basic и Pascal, которые стали для нескольких поколений фундаментом в мире программирования.

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

Если Вам понравилась статья, ставьте лайк и подписывайтесь на канал! Будет много интересного!

Источник

История языков программирования: 1950-е

Программирование появилось задолго до 50-х годов XX века. Первые идеи высказал ещё Чарльз Бэббидж (1792-1871), которого по праву считают отцом компьютера. Он не знал о транзисторах, микросхемах и мониторах, но достаточно точно описал основные принципы, на которых будут строится все вычислительные машины. Развила идею графиня Ада Лавлейс (1815-1852). Её место в истории до сих вызывает немало споров, но одно абсолютно точно – именно Ада фактически стала первым известным программистом. Благодаря её трудам стало понятно, что путь к эффективному использованию машин – алгоритмы, описанные в коде.

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

Суть проблемы

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

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

01 x y – добавление содержимого ячейки памяти y к ячейке x;

02 x y – аналогичная процедура с вычитанием.

В итоге код программы превращался в бесконечную череду цифр:

01 10 15 02 11 29 01 10 11…

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

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

Первый сборщик

Решение лежало на поверхности: необходимо перевести цифровые обозначения операций в буквы. То есть вместо «01 10 15» использовать «ADD 10 15». Это требовало дополнительного перевода символов в машинную команду, но, учитывая проблему, жертва была минимальна.

Решение оказалось настолько очевидным, что доподлинно неизвестно, кто первым изобрёл язык Ассемблера. Вероятнее всего, он появился одновременно сразу в нескольких местах. За название и популяризацию ответственными принято считать авторов книги «The preparation of programs for a digital computer» Уилкса, Уилера и Гилла. Нетрудно догадаться, что название Ассемблер происходит от английского слова assemble – собирать, монтировать, что вполне точно описывает процесс. Позднее символы стали касаться не только простейших операций, но и адресации, что значительно упростило читаемость кода.

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

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

Компиляторы и предубеждения

Ассемблер позволил создать простые превращения. Например, перевод 01 в ADD. Макроассемблер расширил эту идею и подарил программистам возможность сворачивать несколько инструкций в одну. К примеру, если в программе вы постоянно добавляли значение в ячейку памяти и проверяли, не переполнена ли она, всё это можно было записать в макрос INCRT и использовать его, меняя лишь переменные. По сути, макроассемблеры превратились в первые языки высокого уровня.

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

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

Тем не менее компилятор стал единственным выходом из ситуации, но здесь проявилась другая трудность – арифметические выражения. Их исполнение не совпадает с тем, как машина читает код. Из школьного курса мы знаем порядок вычислений в выражении «2+3*5», но машина читает код в одном направлении, так что ответ будет неверным. Да, указанный пример можно решить, создав макрос, но для сложных выражений уровня «(2 + 3 * 5 + 4/6) * 10 + 16- (14 + 15) * 8» требовался принципиально иной подход.

Эпоха новой формации

Найти алгоритм анализа стека удалось Джону Бэкусу, создателю Фортрана. Он начал работать над ним в 1954 году и ему потребовалось почти 5 лет, чтобы доказать право языков высокого уровня на существование. Полное название Фортрана – The IBM Formula Translating System, или FORmula TRANslator. Несмотря на 60-летний возраст, он остаётся одним из самых популярных языков программирования и невероятно востребован в Data Science. За это время мы видели множество версий: Fortran 1, II, 66, 77, 90, 95, 2008, а в следующем году выйдет ещё одна (планировался Fortran 2015, но из-за задержек название может смениться на 2018). Именно в Фортране впервые были одновременно реализованы многие атрибуты языка высокого уровня, среди которых:

Ещё одним важным наследием Фортрана, о котором даже не догадываются современные программисты, является использование ограничений для переменных для целых чисел. Все они должны были начинаться с одного из 6 символов I, J, K, L, M, N (происходит от I-Nteger). Именно отсюда взялась привычка для перечислений брать переменные i, j и т.д.

При этом Фортран оставался языком, приближенным к машинам. Например, там существовало такое:

if (выражение) doneg, dozero, dopos

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

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

Языки для каждого

Fortran 1 был научным языком, в его основе лежали операции с комплексными числами и с плавающей запятой. Он даже не умел обрабатывать текст, для этого приходилось преобразовывать его в специальные коды. Поэтому Фортран оказался непригоден для бизнеса, где был специально создан язык Cobol.

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

Move Income To Total Subtract Expenses

Cobol стал олицетворением максимального удаления от прежнего машинно-арифметического мышления к общечеловеческому. И главное – теперь можно было работать с текстом и записями.

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

Именно из Алгол произошли C, C ++, C #, Java и многие другие популярные сегодня языки.

Четвёртым китом 1950-х стал Лисп (LISt Processing language), разработанный специально для обслуживания искусственного интеллекта. Главной его особенность стала работа не с императивными данными, а с функциями. Для этого Джону Маккарти пришлось предусмотреть множество механизмов для нормальной работы: динамическую типизацию, автоматическое распределение памяти, сборщик мусора. В конечном счёте, именно Лисп стал прародителем таких языков, как Python и Ruby, а сам до сих пор активно применяется в ИИ.

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

Если Вам понравилась статья, ставьте лайк и подписывайтесь на канал! Будет много интересного!

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Uchenik.top - научные работы и подготовка
0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии