Какой язык программирования был разработан раньше. История создания языков программирования

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

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

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

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

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

Программирование появилось задолго до 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-х был нормой.


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

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

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

Решение лежало на поверхности: необходимо перевести цифровые обозначения операций в буквы. То есть вместо «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). Именно в Фортране впервые были одновременно реализованы многие атрибуты языка высокого уровня, среди которых:

  • арифметические и логические выражения;
  • цикл DO (ранняя форма цикла FOR);
  • условный оператор IF;
  • подпрограммы;
  • массивы.

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


IBM 704 – машина, на которой был создан Fortran

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

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

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

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

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

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

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

Move Income To Total Subtract Expenses

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

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

  • отличия между присваиванием:= и логическим равенством =;
  • использование цикла for с тремя аргументами: начальное значение, предел, шаг;
  • блочная структура программ, заключённая между begin и end, это исключило необходимость применения GOTO.

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

>> Статьи

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Одной из самых революционных идей приведших к созданию автоматических цифровых вычислительных машин, была высказанная в 20-х годах 19 века Чарльзом Бебиджем мысль о предварительной записи порядка действия машины для последующей автоматической реализации вычислений – программе. И, хотя использованная Бебиджем запись программы на перфокартах, придуманная для управления такими станками французским изобретателем Жозефом Мари Жаккаром, технически не имеет ничего общего с современными приемами хранения программ в ПК, принцип здесь по существу один. С этого момента начинается история программирования.
Аду Левлейс, современницу Бебиджа, называют первым в мире программистом. Она теоретически разработала некоторые приемы управления последовательностью вычислений, которые используются в программировании и сейчас. Ею же была описана и одна из важнейших конструкций практически любого современного языка программирования – цикл.

Революционным моментом в истории языков программирования стало появление системы кодирования машинных команд с помощью специальных символов, предложенной Джоном Моучли. Система кодирования, предложенная им, вдохновила одну из его сотрудниц Грейс Мюррей Хоппер. При работе на компьютере «Марк-1» ей и ее группе пришлось столкнуться со многими проблемами и все, что ими придумано, было впервые. В частности они придумали подпрограммы. И еще одно фундаментальное понятие техники программирования впервые ввели Хоппер и ее группа – «отладка».
В конце 40-х годов Дж. Моучли создал систему под названием «Short Code», которая являлась примитивным языком программирования высокого уровня. В ней программист записывал решаемую задачу в виде математических формул, а затем, используя специальную таблицу, переводил символ за символом, преобразовывал эти формулы в двухлитерные коды. В дальнейшем специальная программа компьютера превращала эти коды в двоичный машинный код. Система, разработанная Дж. Моучли, считается одним из первых примитивных интерпретаторов.

Уже в 1951 г. Хоппер создала первый в мире компилятор и ею же был введен сам этот термин. Компилятор Хоппер осуществлял функцию объединения команд и в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня (в то время псевдокодов) в машинные команды. «Подпрограммы находятся в библиотеке (компьютера), а когда вы подбираете материал из библиотеки – это называется компиляцией» – так она объясняла происхождение введенного ею термина.

В 1954 году группа под руководством Г. Хоппер разработала систему, включающую язык программирования и компилятор, которая в дальнейшем получила название Math-Matic. После удачного завершения работ по созданию Math-Matic Хоппер и ее группа принялись за разработку нового языка и компилятора, который позволил бы пользователями программировать на языке, близком к обычному английскому. В 1958 г. появился компилятор Flow-Matic. Компилятор Flow-Matic был первым языком для задач обработки коммерческих данных.
Разработки в этом направлении привели к созданию языка Кобол (COBOL – Common Business Oriented Language). Он был создан в 1960 году. В этом языке по сравнению с Фортраном и Алголом, слабее развиты математические средства, но зато хорошо развиты средства обработки текстов, организация вывода данных в форме требуемого документа. Он задумывался как основной язык для массовой обработки данных в сферах управления и бизнеса.

Середина 50-х годов характеризуется стремительным прогрессом в области программирования. Роль программирования в машинных командах стала уменьшаться. Стали появляться языки программирования нового типа, выступающие в роли посредника между машинами и программистами. Первым и одним из наиболее распространенных был Фортран (FORTRAN, от FORmula TRANslator – переводчик формул), разработанный группой программистов фирмы IBM в 1954 году (первая версия). Этот язык был ориентирован на научно-технические расчеты математического характера и является классическим языком программирования при решении на ПК математических и инженерных задач.
Для первых языков программирования высокого уровня предметная ориентация языков была характерной чертой.
Особое место среди языков программирования занимает Алгол, первая версия которого появилась в 1958 году. Одним из разработчиков Алгола был «отец» Фортрана Джон Бэкус. Название языка ALGOrithmic Language подчеркивает то обстоятельство, что он предназначен для записи алгоритмов. Благодаря четкой логической структуре Алгол стал стандартным средством записи алгоритмов в научной и технической литературе.

В середине 60-х годов Томас Курц и Джон Камени (сотрудники математического факультета Дартмунтского колледжа) создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык назвали «универсальным символическим кодом для начинающих» (Beginner All-Purpose Symbolic Instruction Code, или, сокращенно, BASIC). Годом рождения нового языка можно считать 1964. Сегодня универсальный язык Бейсик (имеющий множество версий) приобрел большую популярность и получил широкое распространение среди пользователей ПК различных категорий во всем мире. В значительно мере этому способствовало то, что Бейсик начали использовать как встроенный язык персональных компьютеров, широкое распространение которых началось в конце 70-х годов. Однако Бейсик неструктурный язык, и поэтому он плохо подходит для обучения качественному программированию. Справедливости ради следует заметить, что последние версии Бейсика для ПК (например, QBasic) стали более структурными и по своим изобразительным возможностям приближаются к таким языкам, как Паскаль.

Разработчики ориентировали языки на разные классы задач, в той или иной мере привязывали их к конкретной архитектуре ПК, реализовывали личные вкусы и идеи. В 60-е годы были предприняты попытки преодолеть эту «разноголосицу» путем создания универсального языка программирования. Первым детищем этого направления стал PL/1 (Programm Language One), разработанный фирмой IBM в 1967 году. Этот язык претендовал на возможность решать любые задачи: вычислительные, обработки текстов, накопления и поиска информации. Однако он оказался слишком сложным, транслятор с него – недостаточно оптимальным и содержал ряд невыявленных ошибок.
Однако линия на универсализацию языков была поддержана. Старые языки были модернизированы в универсальные варианты: Алгол-68 (1968 г.), Фортран-77. Предполагалось, что подобные языки будут развиваться и усовершенствоваться, станут вытеснять все остальные. Однако ни одна из этих попыток не увенчалась успехом.

Язык ЛИСП появился в 1965 году. Основным в нем служит понятие рекурсивно определенных функций. Поскольку доказано, что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций, то ЛИСП по сути является универсальным языком. С его помощью ПК может моделировать достаточно сложные процессы, в частности – интеллектуальную деятельность людей.
Пролог разработан во Франции в 1972 году для решения проблем «искусственного интеллекта». Пролог позволяет в формальном виде описывать различные утверждения, логику рассуждений и заставляет ПК давать ответы на заданные вопросы.
Значительным событием в истории языков программирования стало создание в 1971 году языка Паскаль. Его автор – швейцарский ученый Никлаус Вирт. Вирт назвал его в честь великого французского математика и религиозного философа XVII века Блеза Паскаля, который изобрел первое суммирующее устройство, именно поэтому новому языку было присвоено его имя. Этот язык первоначально разрабатывался как учебный язык структурного программирования, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах.

В 1975 году два события стали вехами в истории программирования – Билл Гейтс и Пол Аллен заявили о себе, разработав свою версию Бейсика, а Вирт и Йенсен выпустили классическое описание языка «Pascal User Manual and Report».

Не менее впечатляющей, в том числе и финансовой, удачи добился Филип Кан, француз, разработавший в 1983 году систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы – компиляции, редактирования связей, отладки и диагностики ошибок – в едином интерфейсе. Турбо-Паскаль – это не только язык и транслятор с него, но еще и операционная оболочка, позволяющая пользователю удобно работать на Паскале. Этот язык вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями. В силу названных достоинств Паскаль стал источником многих современных языков программирования. С тех пор появилось несколько версий Турбо-Паскаля, последняя – седьмая.
Фирма Borland/Inprise завершила линию продуктов Турбо-Паскаль и перешла к выпуску системы визуальной разработки для Windows – Delphi.

Большой отпечаток на современное программирование наложил язык Си (первая версия – 1972 год), являющийся очень популярным в середе разработчиков систем программного обеспечения (включая операционные системы). Этот язык создавался как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Си сочетает в себе как черты языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки как Бейсик и Паскаль.
Период с конца 60-х до начала 80-х годов характеризуется бурным ростом числа различных языков программирования, сопровождавшим кризис программного обеспечения. В январе 1975 года Пентагон решил навести порядок в хаосе трансляторов и учредил комитет, которому было предписано разработать один универсальный язык. В мае 1979 года был объявлен победитель – группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили Ада, в честь Огасты Ады Левлейс. Этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, управления процессами в реальном времени.

В течение многих лет программное обеспечение строилось на основе операционных и процедурных языков, таких как Фортран, Бейсик, Паскаль, Ада, Си. По мере эволюции языков программирования получили широкое распространение и другие, принципиально иные, подходы к созданию программ.
Существует большое количество классификаций языков программирования по различным признакам. Наиболее распространенными являются следующие классификации:
 языки программирования высокого (Паскаль, Бейсик) и низкого уровня (Ассемблер);
 строго типизированные (Паскаль) и нестрого типизированные (Бейсик);
 с поддержкой объектно-ориентированного программирования (Си++) и без и т. д.

Рассмотрим другую классификацию. Языки программирования делятся на:
1) Машинно-ориентированные языки:
 машинные языки;
 языки символического кодирования;
 автокоды;
 макрос.
2) Машинно-независимые языки:
 проблемно-ориентированные языки;
 универсальные языки;
 диалоговые языки;
 непроцедурные языки.

Машинно-ориентированные языки

Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ПК (внутреннего языка, структуры памяти и т. д.). Машинно-ориентированные языки имеют следующие особенности:
 высокое качество создаваемых программ (компактность и скорость выполнения);
 возможность использования конкретных аппаратных ресурсов;
 предсказуемость объектного кода и заказов памяти;
 для составления эффективных программ необходимо знать систему команд и особенности функционирования данного ПК;
 трудоемкость процесса составления программ (особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
 низкая скорость программирования;
 невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

Машинный язык

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

Языки Символического Кодирования

Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ.
Использование символических адресов – первый шаг к созданию ЯСК. Команды ПК вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.

Автокоды

Существуют языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются автокоды.

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

Макрос

Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму называется макрос (средство замены).
В основном, макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов  выдача выходного текста.
Макрос одинаково может работать, как с программами, так и с данными.

Машинно-независимые языки

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

Проблемно-ориентированные языки

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

Универсальные языки

Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т. д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков PL/1. Второй по мощности универсальный язык называется Алгол-68.

Диалоговые языки

Появление новых технических возможностей поставило задачу перед системными программистами – создать программные средства, обеспечивающие оперативное взаимодействие человека с ПК их назвали диалоговыми языками.
Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей управления обеспечивали бы описание алгоритмов решения задач.
Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе.
Одним из примеров диалоговых языков является Бейсик.

Непроцедурные языки

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

История создания языка программирования Basic и Visual Basic

Язык программирования Basic был создан в 1964 году двумя профессорами из Dartmouth College - Джоном Кенеми и Томасом Куртцом для обучения студентов навыкам программирования. Язык получился настолько простым и понятным, что через некоторое время его начали применять и в других учебных заведениях. В 1975 году, с приходом первых микрокомпьютеров, эстафету Basic приняли Билл Гейтс и Пол Аллен, основатели Microsoft. Именно они создали новую версию Basic для первых компьютеров "Альтаир" (MITS Altairs), способную работать в 4КБ оперативной памяти. Со временем именно эта версия и превратилась в один из самых популярных языков программирования в мире. На пути к вершине славы у Basic было множество трудностей, которые он всегда с честью преодолевал, и когда появились первые персональные компьютеры IBM PC, именно он стал стандартом в программировании, но уже в виде GW-Basic. Потом был Turbo Basic, QuickBasic, Basic PDS, но всегда при разработке новой версии языка сохранялась совместимость с прежними версиями и программа, написанная для практически первого Basic, вполне (с незначительными изменениями) могла бы работать и в последующих версиях этого языка. Но наступили новые времена, и в начале 90-х появляется операционная система Microsoft Windows с новым графическим интерфейсом пользователя (GUI).

Жизнь программистов превратилась в ад. Чтобы создать простую программу, приходилось писать несколько страниц кода: создавать меню и окна, менять шрифты, очищать память, "рисовать" кнопки и т.д. Однако преимущества нового интерфейса были настолько неоспоримы, что уже третья версия этой операционной системы стала фактическим стандартом для персонального компьютера. В это время в недрах Microsoft велось несколько параллельных проектов по созданию нового языка программирования для Windows. И в 1991 году под лозунгом "теперь и начинающие программисты могут легко создавать приложения для Windows" появилась первая версия нового инструментального средства Microsoft Visual Basic. В тот момент Microsoft достаточно скромно оценивала возможности этой системы, ориентируя ее, прежде всего, на категорию начинающих и непрофессиональных программистов. Основной задачей тогда было выпустить на рынок простой и удобный инструмент разработки в тогда еще довольно новой среде Windows, программирование в которой представляло проблему и для опытных специалистов. Система программирования, созданная разработчиками Visual Basic, позволяла "отстраниться" от сложнейшей внутренней структуры Windows и создавать программы из "кубиков", как в детском конструкторе. Меню, окна, списки, кнопки, поля ввода текста и другие элементы интерфейса Windows добавлялись в программу с помощью простейших операций drag&drop.

Свою первую программу VB-программисты создавали уже через несколько минут после начала изучения этого языка! Более того, Visual Basic позволял разработчикам создавать новые объекты-"кубики", которые также могли использоваться в программах наравне со стандартными. И хотя многие С-программисты тихо посмеивались над попытками Microsoft сделать простой и понятный инструмент разработки Windows-программ, Visual Basic начал свое победное шествие по миру, и ничто не могло остановить этот процесс. Последние барьеры упали в 1994 году с выпуском Visual Basic for Applications. Именно в это время, после включения VBA в состав Microsoft Office, Basic начинает превращаться в один из основных стандартов программирования для Windows. Для фирмы Microsoft язык Basic имеет особое значение, в свое время разработка варианта Basic для компьютера Altair 8800 положила начало трудовому программистскому пути ее основателей, Билла Гейтса и Пола Аллена. Поэтому в свое время - в 1989 году, когда пришла пора распределить основные направления создания сред разработки на различных языках программирования между различными фирмами, Microsoft оставила за собой QuickBasic - среду разработки программ на Basic"е, отказавшись, к примеру, от дальнейшей работы над языком программирования Pascal, оставив его фирме Borland, которая, в свою очередь, остановила работы над своей версией Basic"а (впоследствии Pascal стал языком Delphi).

Первоначально задумывавшийся как игрушка, Visual Basic от Microsoft невероятно быстро завоевал программистский мир. Его популярность обусловлена двумя причинами: относительной простотой и продуктивностью. Программы на VB работают медленнее своих аналогов на C/C++, но все же они достаточно быстры для многих деловых целей и требуют гораздо меньше времени на разработку. Формы были той самой сберегающей усилия абстракцией, которую предложил VB программистам Windows. IDE VB позволила разрабатывать окна графически, перетаскивая элементы управления, такие как кнопки и списки, с панели инструментов в форму. Получив удовлетворительный внешний вид формы, можно было переходить к кодовой части и писать обработчики событий для каждого элемента управления формы.

Разработка приложения в VB, таким образом, состояла из создания нескольких форм, которые общались друг с другом и, возможно, обращались к базе данных за необходимой информацией. В результате форма оказалась окном, которое предлагало использовать оконные методы гораздо более удобным способом. VB уменьшил число ошибок путем удаления некоторых скрытых элементов синтаксиса C/C++. Кроме специальных случаев, выражения ограничивались одной строкой кода, а переменные должны были объявляться и инициализироваться в отдельных строках кода. Операторы присваивания и сравнения использовали один и тот же символ, однако грамматика VB требовала, чтобы эти операторы применялись таким образом, чтобы их намерения были четко обозначены.

Возможно, самым важным было то, что отсутствовали указатели - требование Билла Гейтса, начиная с первых версий Microsoft BASIC. Хотя указатели полезны, так как разрешают прямой доступ к памяти по любому адресу, их использование сопряжено с ошибками в том случае, если они применяются неаккуратно. Требование грамматической простоты BASIC восходит к тому факту, что первоначально он был создан как язык для обучения: "Beginner"s All-purpose Symbolic Instructional Code" (Многоцелевой символьный командный код для начинающих). VB версии 6 - это уже мощный язык, который можно использовать для создания распределенных приложений с применением компонентов СОМ и Microsoft Transaction Server. Microsoft предложила трехуровневый подход для архитектур "клиент-сервер", в котором "тонкие" пользовательские интерфейсы взаимодействовали с удаленными компонентами VB для получения данных из базы данных или с другой машины.

При помощи VBScript и VBA (VB для приложений) можно писать сценарии для web-браузеров и автоматизировать приложения Microsoft Office. Более того, VB6 можно использовать для создания элементов управления Active-X, работающих вместе с Internet Explorer, хотя это делается крайне редко, поскольку требуется, чтобы на машине клиента, работающего в Интернете, была установлена библиотека времени исполнения DLL VB. Начиная с VB5, программы VB компилировались в машинный код, но они были основаны на применении DLL, предоставляющей повсеместно используемые функции и реализующей объектные возможности VB. Интересно то, что компилятор VB для трансляции использует многопроходный режим, а в конечном счете полагается на компилятор Microsoft C++ для получения выходного машинного кода после компиляции в промежуточный язык. В этом свойстве VB - использование библиотеки времени исполнения и внутреннего интерфейса C++ - видны зародыши.NET.

История создания языка программирования C#

Язык C# появился на свет в июне 2000 г. в результате кропотливой работы большой группы разработчиков компании Microsoft, возглавляемой Андерсом Хейлсбергом (Anders Hejlsberg). Этот человек известен как автор одного из первых компилируемых языков программирования для персональных компьютеров IBM -- Turbo Pascal. Наверное, на территории бывшего Советского Союза многие разработчики со стажем, да и просто люди, обучавшиеся в той или иной форме программированию в вузах, испытали на себе очарование и удобство использования этого продукта. Кроме того, во время работы в корпорации Borland Андерс Хейлсберг прославился созданием интегрированной среды Delphi (он руководил этим проектом вплоть до выхода версии 4.0).
Появление языка C# и инициативы.NET отнюдь не случайно пришлось на начало лета 2000 г. Именно к этому моменту компания Microsoft подготовила промышленные версии новых компонентных технологий и решений в области обмена сообщениями и данными, а также создания Internet-приложений (COM+, ASP+, ADO+, SOAP, Biztalk Framework). Несомненно, лучшим способом продвижения этих новинок является создание инструментария для разработчиков с их полноценной поддержкой. В этом и заключается одна из главных задач нового языка C#. Кроме того Microsoft не могла больше расширять все те же инструменты и языки разработки, делая их все более и более сложными для удовлетворения конфликтующих между собой требований поддержки современного оборудования и обеспечения обратной совместимости с теми продуктами, которые были созданы в начале 1990-х гг. во время первого появления Windows. Наступает момент, когда необходимо начать с чистого листа для того, чтобы создать простой, но имеющий сложную структуру набор языков, сред и средств разработки, которые позволят разработчику легко создавать современные программные продукты.

С# и.NET являются той самой отправной точкой. Если говорить упрощенно, то.NET представляет собой новую платформу, новый API для программирования в Windows, а С# е новый язык, созданный с нуля, для работы с этой платформой, а также для извлечения всех выгод из прогресса сред разработки и нашего понимания принципов объектно-ориентированного программирования в течение последних 20 лет.
Необходимо отметить, что обратная совместимость не потеряна. Существующие программы будут выполняться, а платформа.NET была спроектирована таким образом, чтобы она могла работать с имеющимся программным обеспечением. Связь между компонентами в Windows сейчас почти целиком осуществляется при помощи СОМ. С учетом этого.NET обладает способностью (а) создавать оболочки (wrappers) вокруг существующих компонентов СОМ, так что компоненты.NET могут общаться с ними, и (б) создавать оболочки вокруг компонентов.NET, что позволяет им выглядеть как обычные СОМ-компоненты.

Авторы C# стремились создать язык, сочетающий простоту и выразительность современных объектно-ориентированных языков (вроде Java) c богатством возможностей и мощью C++. По словам Андерса Хейлсберга, C# позаимствовал большинство своих синтаксических конструкций из C++. В частности, в нем присутствуют такие удобные типы данных, как структуры и перечисления (другой потомок C++ -- Java -- лишен этих элементов, что создает определенные неудобства при программировании). Синтаксические конструкции С# унаследованы не только от C++, но и от Visual Basic. Например, в С#, как и в Visual Basic, используются свойства классов. Как C++, С# позволяет производить перегрузку операторов для созданных вами типов Java не поддерживает ни ту, ни другую возможность). С# - это фактически гибрид разных языков. При этом С# синтаксически не менее (если не более) чист, чем Java, так же прост, как Visual Basic, и обладает практически той же мощью и гибкостью, что и C++.

Особенности С#:

Полный и хорошо определенный набор основных типов.
- Встроенная поддержка автоматической генерации XML-документации. Автоматическое освобождение динамически распределенной памяти.
- Возможность отметки классов и методов атрибутами, определяемыми пользователем. Это может быть полезно при документировании и способно воздействовать на процесс компиляции (например, можно пометить методы, которые должны компилироваться только в отладочном режиме).
- Полный доступ к библиотеке базовых классов.NET, а также легкий доступ к Windows API (если это действительно необходимо).
- Указатели и прямой доступ к памяти, если они необходимы. Однако язык разработан таким образом, что практически во всех случаях можно обойтись и без этого.
- Поддержка свойств и событий в стиле VB.
- Простое изменение ключей компиляции. Позволяет получать исполняемые файлы или библиотеки компонентов.NET, которые могут быть вызваны другим кодом так же, как элементы управления ActiveX (компоненты СОМ).
- Возможность использования С# для написания динамических web-страниц ASP.NET.

Одной из областей, для которых не предназначен этот язык, являются критичные по времени и высокопроизводительные программы, когда имеет значение, занимать исполнение цикла 1000 или 1050 машинных циклов, и освобождать ресурсы требуется немедленно. C++ остается в этой области наилучшим из языков низкого уровня. В С# отсутствуют некоторые ключевые моменты, необходимые для создания высокопроизводительных приложений, в частности подставляемые функции и деструкторы, выполнение которых гарантируется в определенных точках кода. Также этот язык активно используется для создания современных видеоигр, например игра Battlefield 3 частично написана на C#, и полностью на технологии.NET