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

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

Первый машинный язык был придуман в 1941 году Конрадом Цузе, который является изобретателем аналитической машины. Чуть позже, в 1943 г., Говард Эйкен создал машину "Марк-1", способную считывать инструкцию на уровне машинного кода.

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

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

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

  • Аспектно-ориентированные (основная идея - разделение функциональности для увеличения эффективности программных модулей).
  • Структурные (в основе лежит идея создания иерархической структуры отдельных блоков программы).
  • Логические (в основе лежит теория аппарата математической логики и правил резолюции).
  • Объектно-ориентированные (в таком программировании используются уже не алгоритмы, а объекты, которые принадлежат определенному классу).
  • Мультипарадигмальные (сочетают в себе несколько парадигм, и программист сам решает, каким языком воспользоваться в том или ином случае).
  • Функциональные (в качестве основных элементов выступают функции, которые меняют значение в зависимости от результатов вычислений исходных данных).

Программирование для начинающих

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

  • Basic придуман в 1964 году, относится к семейству высокоуровневых языков и используется для написания прикладных программ.
  • Python ("Питон") довольно легко выучить благодаря простому читаемому синтаксису, преимущество же в том, что на нем можно создавать как обычные десктопные программы, так и веб-приложения.
  • Pascal ("Паскаль") - один из древнейших языков (1969 г.), созданных для обучения студентов. Его современная модификация имеет строгую типизацию и структурированность, однако "Паскаль" - вполне логичный язык, который понятен на интуитивном уровне.

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

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

Уровни языков программирования

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

Низкоуровневые языки предназначены для создания машинных команд для процессоров. Главное их преимущество в том, что они используют мнемонические обозначения, т. е. вместо последовательности нулей и единиц (из двоичной системы счисления) компьютер запоминает осмысленное сокращенное слово из английского языка. Самые известные языки низкого уровня - это "Ассемблер" (существует несколько подвидов этого языка, каждый из которых имеет много общего, а отличается лишь набором дополнительных директив и макросов), CIL (доступен в платформе.Net) и Байт-код JAVA.

Языки программирования высокого уровня: список

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

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

Самые используемые языки программирования

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

  • языки ООП: Java, C++, Python, PHP, VisualBasic и JavaScript;
  • группа структурных языков: Basic, Fortran и Pascal;
  • мультипарадигмальные: C#, Delphi, Curry и Scala.

Область применения программ и приложений

Выбор языка, на котором написана та или иная программа, во многом зависит от области ее применения. Так, например, для работы с самим "железом" компьютера (написания драйверов и поддерживающих программ) лучшим вариантом станет C ("Си") или С++, которые входят в основные языки программирования (список смотрите выше). А для разработки мобильных приложений, в том числе игр, следует выбрать Java или С# ("Си-шарп").

Если вы еще не определились, в каком направлении работать, то рекомендуем начать изучение с языков C или C++. Они имеют весьма понятный синтаксис, четкое структурное разделение на классы и функции. К тому же, зная C или С++, можно с легкостью выучить любой другой язык программирования.

Рассказывает программист Вильям В. Вольд

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

Введение

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

Тем не менее, я написал абсолютно новый язык. И он работает. Наверное, я что-то делаю правильно.

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

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

Первые шаги

«А с чего вообще начинать?» - вопрос, который другие разработчики часто задают, узнав, что я пишу свой язык. В этой части постараюсь подробно на него ответить.

Компилируемый или интерпретируемый?

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

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

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

Прим. перев. Кстати, у нас есть краткий обзор - это отличное упражнение для тех, кто изучает Python.

Выбор языка

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

Но в целом совет можно дать такой:

  • интерпретируемый ЯП крайне рекомендуется писать на компилируемом ЯП (C, C++, Swift). Иначе потери производительности будут расти как снежный ком, пока мета-интерпретатор интерпретирует ваш интерпретатор;
  • компилируемый ЯП можно писать на интерпретируемом ЯП (Python, JS). Возрастёт время компиляции, но не время выполнения программы.

Проектирование архитектуры

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

Лексический анализатор / лексер

Строка исходного кода проходит через лексер и превращается в список токенов.

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

Обращения к исходному коду уже не будет происходить на следующих этапах, поэтому лексер должен выдать всю необходимую для них информацию.

Flex

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

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

Моё решение

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

Синтаксический анализатор / парсер

Список токенов проходит через парсер и превращается в дерево.

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

Bison

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

Преимущества кастомных программ

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

Тем не менее, я решил делать парсер сам. Вот основные причины:

  • минимизация переключения контекста ;
  • упрощение сборки;
  • желание справиться с задачей самостоятельно.

В целесообразности решения меня убедило высказывание Уолтера Брайта (создателя языка D) в одной из его статей :

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

Абстрактный семантический граф

Переход от синтаксического дерева к семантическому графу

В этой части я реализовал структуру, по своей сути наиболее близкую к «промежуточному представлению» (intermediate representation) в LLVM. Существует небольшая, но важная разница между абстрактным синтаксическим деревом (АСД) и абстрактным семантическим графом (АСГ).

АСГ vs АСД

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

Запуск

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

Варианты компиляции

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

Написать свой компилятор

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

Программирование для начинающих

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

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

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

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

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

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

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

Стремление. Если вы чего-то очень сильно хотите, вы обязательно это получите (но если вы совершите что-то противозаконное, вы рискуете провести немало времени в тюрьме). Если вы хотите научиться про­граммировать, ваше желание обязательно вам поможет, независимо от того, сколько препятствий окажется у вас на пути.

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

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

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

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

0010 1010 0001 1101

ООН 1100 1010 1111

0101 ОНО 1101 0101

1101 1111 0010 1001

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

Теперь мне бы хотелось разъяснить вам, что следует отличать язык программирования (Basic, Pascal) от его реализации, которая обычно представлена в составе среды программирования (Quick Basic, Virtual Pascal) - набора средств для редактирования исходных текстов, генерации исполняемого кода, отладки, управления проектами и т.д. Синтаксис и семантика языка программирования фиксируется в стандарте языка. Каждая среда программирования предоставляет свой интерпретатор или компилятор с этого языка, который зачастую допускает использование конструкций, не фиксированных в стандарте.

Рассмотрим основные и популярные языки программирования

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

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

Фортран - Язык программирования высокого уровня, разработанный фирмой IBM в 1956 г. для описания алгоритмов решения вычислительных задач. Относится к категории процедурно-ориентированных языков. Наиболее распространенными версиями этого языка являются Фортран IV, Фортран 77 и Фортран 90. Используется на всех классах ЭВМ. Последняя его версия также применяется на ЭВМ с параллельной архитектурой.

Ада - Язык программирования высокого уровня, ориентированный на применение в системах реального времени и предназначенный для автоматизации задач управления процессами и/или устройствами, например, в бортовых (корабельных, авиационных и др.) ЭВМ. Разработан по инициативе министерства обороны США в 1980-х гг. Назван в честь английского математика Ады Августы Байрон (Лавлейс), жившей в 1815-1851 гг.

BASIC (Beginner"s All-purpose Symbolic Instruction Code) Рожденный в 60-е годы в Америке. Бейсик был задуман как простой язык для быстрого освоения. Бейсик стал фактическим стандартом для МикроЭВМ именно благодаря своей простоте как в освоении так и в реализации. Однако для достижения этого качества был принят ряд решений (отсутствие типизации, нумерация строк и неструктурное GOTO, и др.), негативно сказывающихся на стиле изучающих программирование. Кроме того, недостаток выразительных средств привел к появлению огромного количества диалектов языка, не совместимых между собой. Современные, специализированные версии Бейсика (такие как Visual Basic) несмотря на приобретенную "структурность" обладают все теми же недостатками, прежде всего - небрежностью по отношению к типам и описаниям. Пригоден для использования на начальном этапе обучения, как средство автоматизации (в случаях когда он встроен в соответствующие системы) либо как средство для быстрого создания приложений.

Pascal Разработанный известным теоретиком Н.Виртом на основе идей Алгола-68, Паскаль предназначался прежде всего для обучения программированию. Построенный по принципу "необходимо и достаточно", он располагает строгим контролем типов, конструкциями для описания произвольных структур данных, небольшим, но достаточным набором операторов структурного программирования. К сожалению, обратной стороной простоты и строгости является громоздкость описаний конструкций языка. Наиболее известная реализация - Turbo/Borland Pascal - несмотря на отличия от стандарта Паскаля, представляет из себя среду и набор библиотек, сделавшие из учебного языка промышленную систему для разработки программ в среде MS-DOS.

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

Delphi - это не продолжатель дела Borland Pascal / Borland C, его ниша - т.е. быстрое создание приложений (Rapid Application Developing, RAD). Подобные средства позволяют в кратчайшие сроки создать рабочую программу из готовых компонентов, не растрачивая массу усилий на мелочи. Особое место в таких системах занимают возможности работы с базами данных.

Лисп - Алгоритмический язык, разработанный в 1960 г. Дж. Маккарти и предназначенный для манипулирования перечнями элементов данных. Используется преимущественно в университетских лабораториях США для решения задач, связанных с искусственным интеллектом. В Европе для работ по искусственному интеллекту предпочитают использовать Пролог.

Пролог - Язык программирования высокого уровня декларативного, предназначенный для разработки систем и программ искусственного интеллекта. Относится к категории языков пятого поколения. Был разработан в 1971 г. в университете г. Марсель (Франция), относится к числу широко используемых и постоянно развиваемых языков. Последняя его версия Prolog 6.0

ЛОГО - Язык программирования высокого уровня, разработан в Массачусетском технологическом институте в ориентировочно 1970 г. для целей обучения математическим понятиям. Используется также в школах и пользователями ПЭВМ при написании программ для создания чертежей на экране монитора и управления перьевым графопостроителем.

Java Как яркий пример специализации, язык Java появился в ответ на потребность в идеально переносимом языке, программы на котором эффективно исполняются на стороне клиента WWW. В ввиду специфики окружения, Java может быть хорошим выбором для системы, построенной на Internet/Intranet технологии.

Алгол - Язык программирования высокого уровня, ориентированный на описание алгоритмов решения вычислительных задач. Был создан в 1958 г. специалистами западно-европейских стран для научных исследований. Версия этого языка Алгол-60 была принята Международной конференцией в Париже (1960 г.) и широко использовалась на ЭВМ 2-го поколения. Версия Алгол-68, разработанная группой специалистов Международной федерации по обработке информации (ИФИП) в 1968 г., получила статус международного универсального языка программирования, ориентированного на решение не только вычислительных, но и информационных задач. Хотя в настоящее время Алгол практически не используется, он послужил основой или оказал существенное влияние на разработку более современных языков, например, Ада, Паскаль и др.

Самого лучшего языка не существует. Если вы собираетесь стать профессионалом в написании программ, вам необходимо изучить один из языков программирования высокого уровня (наиболее популярен язык программирования C++), а также один из языков программирования баз данных (например, SQL). Изучив язык программиро­вания C++, вы не ошибетесь. Зная этот язык, вы всегда сможете найти работу в любой компании, занимающей­ся программированием.
Несмотря на большую популярность языка программирования C++, часто исполь­зуются и другие языки. На многих устаревших компьютерах до сих пор работают программы, написанные на языке программирования COBOL. Поэтому нужны про­граммисты, которые умеют усовершенствовать данные программы, а также писать но­вые. Очень часто крупные компании выплачивают таким программистам высокую за­работную плату.
Если вы собираетесь работать самостоятельно, предпочтительнее всего научиться создавать собственные программы для баз данных. Для этого вам понадобится изучить такие языки программирования, как SQL или VBA, которые используются в програм­ме Microsoft Access. Для того чтобы создавать Web-страницы, необходимо знать HTML, а также немного знать Java, JavaScript, VBScript и другие языки программиро­вания для Internet. Самым нужным будет тот язык программирования, который по­зволит решить поставленные перед вами задачи легко и быстро. Это может быть язык программирования C++, BASIC, Java, SQL или язык ассемблера.

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

Желаю удачи в освоение программирования!

    Списки языков программирования По категориям Хронологический Генеалогический Приведён список языков программирования, сгруппированных по категориям. Некоторые языки попали в несколько категорий. Содержание … Википедия

    Списки языков программирования По категориям Хронологический Генеалогический Приведён генеалогический список языков программирования. Языки классифицируются в соответствии с предшествующими языками, которые оказали сильное влияние на формирование … Википедия

    Содержание 1 По производителю или платформе 1.1 Flash 1.2 Java 1.3 Microsof … Википедия

    Списки языков программирования По категориям Хронологический Генеалогический Хронология языков программирования упорядоченный в хронологическом порядке список языков программирования. Содержание … Википедия

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

    Эта страница информационный список. Языки программирования.NET (Языки с поддержкой CLI или CLI языки) компьютерные языки программирования, используемые для создания библиотек и программ, удовлетворяющих требованиям Comm … Википедия

    Основная статья: Текстовый редактор Список текстовых редакторов Windows и таблица сравнения. Содержание 1 Таблица сравнения известных текстовых редакторов … Википедия

    Язык программирования C# один из наиболее популярных языков программирования на сегодняшний день. Paint.NET открытое программное обеспечение для обработки растровой графики SharpDevelop открытая IDE для языков C#, Visual Basic .NET (VB.NET), Boo … Википедия

    Это список программного обеспечения, разрабатываемого Free Software Foundation как часть проекта GNU UNIX подобной операционной системы состоящей целиком из свободного программного обеспечения. Большая часть из этих пакетов также… … Википедия

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

Книги

  • Python для детей. Самоучитель по программированию , Бриггс Джейсон. О книге Эта книга - самоучитель по одному из самых востребованных на сегодняшний день языков программирования - Python. Начиная с самых простых действий, шаг за шагом вы будете писать свои…
  • JavaScript для детей. Самоучитель по программированию , Морган Ник. О книге Эта книга позволит вам погрузиться в программирование и с легкостью освоить JavaScipt. Вы напишете несколько настоящих игр - поиск сокровищ на карте, "Виселицу" и"Змейку" . На каждом…

ЯЗЫК ПРОГРАММИРОВАНИЯ И ЕГО ВИДЫ

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

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

Низкоуровневый язык программирования (язык программирования низкого уровня) - язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

ЯЗЫКИ ПРОГРАММИРОВАНИЯ НИЗКОГО УРОВНЯ

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

Рис.1. Пример машинного кода и представления его на ассемблере

Трансляторы делятся на:

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

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

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

Преимущества

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

Недостатки

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

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

    значительное время разработки больших и сложных программ.

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

Ассемблер - язык низкого уровня, что широко применяется до сих пор.

ЯЗЫКИ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ

Первым языком программирования высокого уровня считается компьютерный язык Plankalkül, разработанный немецким инженером Конрадом Цузе ещё в период 1942-1946 годах. Однако транслятора для него не существовало до 2000 г. Первым в мире транслятором языка высокого уровня является ПП (Программирующая Программа), он же ПП-1, успешно испытанный в 1954 г. Транслятор ПП-2 (1955 г., 4-й в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур, а транслятор ПП для ЭВМ Стрела-4 уже содержал и компоновщик (linker) из модулей. Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957).

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

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

Примеры: C, C++,C#, Java, Python, PHP, Ruby, Perl, Паскаль, Delphi, Lisp . Языкам высокого уровня свойственно умение работать с комплексными структурами данных. В большинстве из них интегрирована поддержка строковых типов, объектов, операций файлового ввода-вывода и т. п.Недостатком языков высокого уровня является больший размер программ по сравнению с программами на языке низкого уровня. Поэтому в основном языки высокого уровня используются для разработок программного обеспечения компьютеров и устройств, которые имеют большой объем памяти. А разные подвиды ассемблера применяются для программирования других устройств, где критичным является размер программы.

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

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

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

Набоp действий, котоpые могут выполняться внутpи функции очень огpаничен. Он состоит из вычисления фоpмульных выpажений, вызовов дpугих функций (что не является отдельным действием - вызов функции часто входит в выpажение), присваиваний, ветвлений (гpуппа действий, котоpая выполняется лишь при истинности некоторого условия) и циклов (гpуппа действий, выполняемых многокpатно, число повтоpений зависит от некотоpого условия). Действия могут быть вложены дpуг в дpуга. Может показаться, что набоp из ветвлений и циклов слишком мал, но это не так. Доказано, что любой алгоpитм, составленный из функциональных блоков (на низком уpовне - арифметических команд и команд пеpесылки данных), условных и безусловных пеpеходов может быть пpеобpазован в эквивалентный алгоpитм, составленный только из стpуктуpных блоков - функциональных блоков, ветвлений и циклов с пpовеpкой условия в конце. Это утвеpжение было сфоpмулиpовано в статье Бома и Джакопини (Corrado Bohm and Giuseppe Jacopini) "Flow diagrams, turing mashines and languages with only two formation rules" (Communications of ACM, Volume 9 / Number 5 / May, 1965).

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

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

Обычно языки пpогpаммиpования пpедоставляют достаточно огpаниченный набоp пpедопpеделенных типов пеpеменных и сpедства создания новых типов. Пpедопpеделены некотоpые из следующих типов:

    натуpальные и целые числа pазличной pазpядности;

    вещественные числа;

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

    стpоки символов;

    логические значения;

    указатели

Действия над данными могут выполняться с помощью функций и операторов.

В языке C, напpимеp, не опpеделены символы, строки и логические значения. Его тип char на самом деле является коpотким целым и допускает аpифметические действия.

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

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

Есть и другие способы создания новых типов. Например, в языке Pascal возможно создание:

    типов-диапазонов (посредством задания диапазона значений);

    типов-перечислений (посредством перечисления возможных значений);

    типов-множеств

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



Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

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

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png