Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Классификация языков программирования. Критерии выбора среды и языка программирования

Содержание:

ВВЕДЕНИЕ

За последние десятилетия область компьютерных и информационных технологий продвинулась далеко вперед. Использование технологий давно является значимой частью повседневной жизни людей, и все больше информации обрабатывается через электронные устройства. Шагая вместе с техническим прогрессом, программирование имеет такое же стремительное развитие, как и другие технологии [6].

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

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

Предметом данного исследования являются имеющиеся классификации языков программирования, критерии выбора среды и разработки программ.

Объектом исследования являются языки программирования и среда их применения.

Цель исследования – анализ классификации языков программирования и критериев выбора среды и языка для разработки программ.

Соответственно, сформулируем задачи исследования:

  1. Изучить историю возникновения развития языков программирования.
  2. Рассмотреть классификацию языков программирования.
  3. Провести обзор современных языков программирования.
  4. Оценить и проанализировать критерии выбора среды и языка программирования для разработки программ.

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

Глава 1. Теоретический подход. Классификация языков программирования

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

Программа представляет собой записанный на языке программирования алгоритм, и является последовательностью операторов языка. Языки программирования являются строго формализованными искусственными языками. Правила записи операторов языка называются его синтаксисом [2].

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

  1. Машинный язык, появившийся в 40-50 годы XX в.

Созданные на машинном языке программы представляли собой достаточно длинные последовательности нулей и единиц и являлись машинно-зависимыми, для каждой электронно-вычислительной машины (ЭВМ) требовалось составлять свою программу [3].

  1. Ассемблер, появившийся в начале 50-ых годов XX в.

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

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

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

  • объем используемой памяти (встраиваемое программное обеспечение, загрузочные секторы, программы для микроконтроллеров и процессоров с ограниченными ресурсами, программные защиты, вирусы);
  • быстродействие (игры, драйверы).

Фортран, например, по своей сути тоже является языком ассемблера, но с определенными ограничениями [2].

  1. Первые языки программирования высокого уровня.

Уже с середины 50-ых гг. XX в. начали появляться первые языки программирования высокого уровня (high-level language), которые уже были машинно-независимыми, то есть не привязанными к конкретному типу ЭВМ. Однако при этом для каждого языка были созданы собственные компиляторы. Примерами таких языков можно назвать FORTRAN, разработанный для технических и научных расчетов; COBOL (1959), применяемый, в основном, для коммерческих приложений (был способен обрабатывать большие объемы нечисловых данных); язык BASIC– универсальный язык символьных инструкций для начинающих программистов). Естественно, к минусам данной технологии можно отнести необходимость предварительной разработки транслятора [6]. Язык высокого уровня выполняет роль посредника между человеком и компьютером, позволяя человеку общаться с компьютером более привычным для человека способом. Зачастую он помогает выбрать правильный метод решения задачи [3]. На рис. 1 схематично представлено дерево развития языков программирования высокого уровня.

  1. Алгоритмические языки программирования.

В период начала 80-ых г. XX в. начали разрабатываться языки программирования, позволившие перейти к структурному программированию (применение операторов ветвления, выбора, цикла и почти полный отказ от частого применения операторов перехода). К ним можно отнести: язык Pascal (назван его создателем Никлаусом Виртом в честь великого физика Блеза Паскаля; 1970); язык Си, способствующий быстрому и эффективному созданию программного кода (1971).

  1. Языки объектно-ориентированного программирования.

Появились в 90-ые г. XX в., и в их основу были положены программные объекты, объединяющие данные и методы их обработки. В них сохранялся алгоритмический стиль программирования [2].

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

Для их использования были созданы интегрированные среды программирования, дающие возможность визуально конструировать графический интерфейс приложений. Среди таких языков можно выделить следующие [3]:

- язык С++ (1983) - продолжение алгоритмического языка Си;

- язык Object Pascal (1989), разработанный на основе языка Pascal. После создания среды программирования получил название Delphi (1995);

- язык Visual Basic (1991) был разработан корпорацией Microsoft на основе языка Qbasic (1975) для создания приложений с графическим интерфейсом в среде ОС Windows [4].

Данные языки используются в различных сферах — атомной энергетике, космических исследованиях, радиотехнике и пр. [6].

  1. Языки программирования для компьютерных сетей.

Уже с 90-ых годов XX в. одновременно со стремительным развитием Интернета были разработаны языки, призванные обеспечить межплатформенную совместимость. На компьютерах, подключенных к Интернету, с различными операционными системами (такими как Windows, Linux, Mac OS и др.) могли быть выполнены одни и те же программы. Тогда исходная программа компилируется в промежуточный код, исполняемый на компьютере встроенной в браузер виртуальной машиной [2]. Назовем примеры этих языков:

- язык Java - объектно-ориентированный язык, созданный компанией Sun Microsystems для формирования сетевого программного обеспечения (1995);

- язык JavaScript – это язык сценариев Web-страниц (организация Netscape), (1995).

  1. Языки программирования на платформе .NET.

Интегрированная среда программирования Visual Studio .Net, созданная корпорацией Microsoft, дает возможность разработки приложения на различных языках объектно-ориентированного программирования, например:

- на языке Visual Basic .Net (созданный на основе Visual Basic) – 2003 г.;

- на языке Visual C# (С-шарп) – на основе языков С++ и J – 2003 г.;

- на языке Visual J# (J-шарп) – на основе Java и JavaScript – 2003 г. [4].

Можно выделить некоторые особенности современных языков программирования:

  • введение конструкций для поддержки параллельного программирования (несколько процессов) и распределенных вычислений (несколько компьютеров);
  • увеличение поддержки функционального программирования в ключевых языках программирования для упрощения кода;
  • использование альтернативных механизмы для композиции и модульности: примеси, делегаты, аспектно-ориентированное программирование и т.д.
  • механизмы повышения безопасности языка (проверки типов, зависимостей и др.);
  • метапрограммирование;
  • компонентно-ориентированная разработка (в т.ч. использование различных фреймворков);
  • автоматизация процесса программирования (XML for graphical interface (XUL, XAML)) [3];
  • интеграция с базами данных;
  • предметно-ориентированные языки;
  • открытое программное обеспечение как философия создания и развития языков программирования;
  • исследования возможности разработки языков программирования для квантовых компьютеров;
  • кроссплатформенность [2].

На рис.2 представлен принцип работы языков платформы .NET. [4].

Рисунок 2. Принцип работы языков платформы .NET.

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

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

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

Сформулируем ключевые требования к языкам программирования:

  • Единство – возможность использования одинаковых символов для обозначения одних родственных понятий в различных частях алгоритма, причем число таких символов должно быть минимальным по возможности;
  • Наглядность – применение по возможности существующих уже символов, понятных и известных не только программистам, но и пользователям;
  • Модульность – способность описания сложных алгоритмов в виде суммы простых модулей, составленных по отдельности и примененных в разных сложных алгоритмах;
  • Гибкость – наличие возможности достаточно простого и удобного описания известных приемов вычислений посредством существующего ограниченного набора изобразительных средств в языке;
  • Однозначность – недвусмысленность записи каждого алгоритма, отсутствие которой могло бы способствовать неправильным ответам при решении задач [3].

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

Алгоритм – это всегда последовательность предписаний, при выполнении которых возможно за определенное количество шагов перейти к результату от исходных данных [4]. Учитывая степень детализации предписаний, как правило, определяется уровень языка программирования, и, чем меньше детализация, тем выше уровень языка.

По данному критерию можно выделить уровни языков программирования:

  • Машинные
  • Машинно-независимые (высокого уровня)
  • Машинно-ориентированные (ассемблеры) [1].

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

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

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

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

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

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

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

    1. Низкоуровневые и высокоуровневые языки.

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

Языки программирования, имеющие достаточный уровень абстракции - оперируют сложными структурами данных и способные выполнять над ними комплексные операции (что в машинном коде повлекло бы длинные и сложные цепочки кода), относят к языкам высокого уровня. Примеры таких языков - C, Pascal, Python, Java и т.д. [3].

    1. Трансляторы: компиляторы, интерпретаторы и гибриды.

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

Программа для перевода кода с языка программирования в машинный код называется транслятором. На данный момент выделяется три типа трансляторов: компиляторы, интерпретаторы и гибриды.

  1. Компиляторы один раз производят перевод всего кода в машинный код, результатом чего служит исполняемый модуль (например, EXE-файл для ОС Windows).
  2. Интерпретаторы производят анализ и сразу выполняют программу покомандно, по мере поступления ее исходного кода на вход интерпретатора [1].

Схематично сравнительная работа компилятора и интерпретатора представлена на рис.3.

Рисунок 3. Схема работы компилятора и интерпретатора.

Рассмотрим достоинства и недостатки обоих вариантов в табл. 1.

Таблица 1. Плюсы и минусы работы компилятора и интерпретатора.

Характеристика

Компилятор

Интерпретатор

1

Быстродействие

(+) обеспечивает максимальную производительность

(-) дополнительный слой замедляет выполнение программы и может требовать больше ресурсов

2

Переносимость

(-) исполняемый файл привязан к платформе компиляции

(+) программа может быть легко перенесена на другую платформу, для которой меняется интерпретатор

  1. Гибриды стараются совместить плюсы компиляторов и интерпретаторов. Самыми известными примерами являются язык Java и платформа .NET Framework. [1].

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

    1. Типизация.

Языки высокого уровня производят работу не с битами и байтами, а с наиболее абстрактными структурами данных - типами, потому принято считать их типизированными [4].

Существует, в свою очередь, несколько видов типизации [3]:

  1. Явная / неявная

- явная – языки, при работе с которыми тип новых переменных, функций и их аргументов нужно задавать явно, например, это языки C++, Pascal, C#;

- неявная – языки перекладывают задачу типизации на компилятор / интерпретатор, примерами можно назвать PHP, Python, JavaScript [2].

2) Статическая / динамическая

- статическая – конечные типы переменных и функций устанавливаются на этапе компиляции, примеры таких языков – C, Java, C#;

- динамическая – все типы определяются в процессе выполнения программы, примерами таких языков являются Python, JavaScript.

3) Сильная / слабая

- сильная (или строгая) – не дает возможности смешивания в выражениях разных типов и не выполняет автоматические неявные преобразования, примеры таких языков: Java, Python;

- слабая (или нестрогая) – большое количество неявных преобразований производится автоматически, даже в случае если может произойти потеря точности или преобразование неоднозначно, это такие языки, как C, JavaScript, VisualBasic, PHP.

Кроме того, различные виды типизации могут пересекаться, например, язык С имеет явную, статическую, слабую типизацию. Язык Python - неявную, динамическую, сильную [3].

    1. Парадигмы программирования.

За весь период развития языки программирования разрабатывались под влиянием идей, определяющих возможности языка и стиль создания программ. Главную идею какого-либо сложного понятия принято называть парадигмой программирования [4].

Существует четыре парадигмы программирования:

  • Императивная, или процедурная
  • Функциональная
  • Логическая
  • Объектно-ориентированная.

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

  1. Императивная, или процедурная, является наиболее распространенной парадигмой.

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

Выполнение команды при этом состоит в последовательном выполнении заданных команд.

  1. Функциональная.

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

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

  1. Логическая.

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

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

  1. Объектно-ориентированная, дающая возможность программе описывать поведение и структуру через классы и их взаимодействие [4].

Объект включает в себя определенные данные (состояние, свойства объекта) и операции над ними (методы), характеризующие поведение объекта. Классы представляют шаблоны объектов со схожим поведением и структурой. Как правило, описание классов представляет собой иерархическую структуру [4].

Выполнение такой программы является обменом сообщениями между объектами, в результате чего происходит изменение их состояний [3].

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

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

Глава 2. Состояние и анализ изучаемого вопроса. Обзор современных языков программирования

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

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

Например, несколько лет назад популярным был язык Perl, в настоящее время его опередил PHP. Также разработчиками удачно применяются актуальные по сей день Ruby, Java, Python. Для более успешной работоспособности данных технологий используется подходящий хостинг, способный поддерживать существующие языки. Однако не все хостинг-провайдеры имеют возможность предоставить услуги размещения сайтов для определенных технологий [5].

Серверы баз данных тоже не имеют единого программного решения. Так, к примеру, помимо известного MySQL, могут применяться и иные базы данных – PostgreSQL, Firebird, SQLite [1].

    1. PHP.

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

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

  • База данных MySQL предоставляет все технологии и методы управления базами, где хранится информация. Главными преимуществами MySQL являются удобство использования и систематическое хранение данных, что значительно упрощает поиск.
  • Возможность выбора версии языка. Многие хостинг-провайдеры поддерживают как старые, так и новые версии PHP.
  • Такой хостинг станет отличным решением сложных коммерческих сайтов, таких как интернет-магазины, учитывая, что стоимость его будет достаточно приемлемой [2].
  • Существует тенденция к применению PHP-фреймворков, упрощающих создание веб-приложений – Zend Framework, CakePHP, Symphony. Если они установлены в хостинге, это будет значительным плюсом.
  • Все же идеальной альтернативы на настоящий момент в такой связке нет, и, несмотря на то, что провайдеры предлагают и иные варианты, как PostgreSQL, SQLite и т.д., функционирующие по схожему принципу, они ограничивают клиента в использовании определенных функций, что оказывает влияние на работу сайтов [4].
    1. Perl.

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

Предоставление хостинга для данного языка не предполагает особых возможностей. Хостинг с его поддержкой работает при помощи двух способов – CGI или mod_perl. Этот язык отличается быстродействием и надежностью. Для всех платформ доступны дистрибутивы Perl. При рассмотрении его в перспективе, можно сказать, что все планы связаны с выходом шестой версии языка и применение современных фреймворков на языке Perl, таких как Catalyst [2].

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

    1. Python.

Этот язык является языком программирования высокого уровня и применяется для разработки разноуровневых веб-приложений [6]. Его открытая разработка, легкость изучения и большое сообщество разработчиков являются ключевыми достоинствами интерпретируемого языка для скриптов. Python может использоваться для большинства задач и применяется такими корпорациями, как Google и Yandex. В связи с неограниченностью технологии, она может использоваться как в больших проектах, так и в мелких задачах, например, резервное копирование, чтение электронной почты и т.д.

На серверах для Python необходима установка плагинов, позволяющих работать с языком. Часто хостинг для данного языка необходим пользователям популярного фреймворка Django, позволяющий разрабатывать высокопрофессиональные приложения, шаблоны для сайтов и CMS [4].

Особенностями хостинга для Python являются:

  • Отдельный интерес к данному виду хостинга обозначен, в первую очередь, популярностью и интересом фреймворков Zope, Django, Pylons, TurboGears, web.py, непосредственно связанных с данным языком;
  • Достаточно широкая распространенность, в связи с тем, что практически каждый дистрибутив Unix имеет интерпретатор Python;
  • Процесс установки перечисленных выше фреймворков является не всегда возможной и зачастую сложной задачей, что является причиной препятствия развитию хостинга для Python.
    1. Ruby.

Язык программирования Ruby является также не менее известным, как и его фреймворк Ruby on Rails. Данный язык используется как в веб-разработке, так и в системном администрировании, функционируя в таких операционных системах как Linux, MS Windows и BSD, Mac OS X. Что касается фреймворка Ruby on Rails, он появился после самого языка и позволил создавать сайты с помощью Ruby. По структуре он схож с Perl, Smalltalk, Python, но имеет и свои специфические функции [2].

Такая комбинация применяется компаниями для разработки различных проектов и автоматизированных систем, решающих задачи бизнеса в виде учета, документооборота и т.д. [5].

Особенностями хостинга для Ruby и Ruby on Rails являются:

  • Способность поддержки баз данных MySQL, Firebird, PostgreSQL, IBM DB2, Oracle и Microsoft SQL Server, которые вполне могут мигрировать между собой;
  • Технология является достаточно требовательной к ресурсам сервера, на котором будет размещен проект;
  • Работает совместно с многими веб-серверами типа Apache или nginx+passenger;
  • Кроме самого интерпретатора Ruby on Rails подразумевает установку собственных компонентов системы;
  • Язык активно используется на западе, потому предложений хостинга для данной технологии там намного больше [4].
    1. Java.

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

Этот язык программирования изначально имел название Oak («Дуб») и применялся для программирования бытовых электронных устройств, после чего был переименован в Java и стал применяться для создания клиентских приложений и серверного программного обеспечения.

Данная платформа подразумевает комплекс технологий, предназначенных для серверов, которые исполняют приложения Java на клиентских компьютерах. Распространенные сервисы в Сети применяют в своей основе концепцию Java Enterprise Edition.

Назовем основные особенности хостинга для Java [4]:

  • Значительное количество полезных стандартных массивов, стеков и списков;
  • Унифицированный доступ к базам данных;
  • Легкость разработки многопоточных приложений;
  • Большое количество фильтров, возможность настройки ввода и вывода;
  • Наличие категорий для работы с запросами и ответами HTTP;
  • Реализовано автоматичное управление памятью.
    1. C#.

Данный язык является объектно-ориентированным и относится к семье языков с С-подобным синтаксисом, из них его синтаксис наиболее схож с С++ и Java [6].

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

    1. С++.

Язык С++ является одним из наиболее распространенных в мире компилируемым, статически типизированным языком программирования общего назначения. С помощью него были разработаны Google Chrome, Mozilia Firefox, Winamp, линейка продуктов Adobe. Также некоторые современные игры и операционные системы были созданы именно на основе С++ ввиду его быстродействия и компиляции [5].

    1. CSS.

CSS, или Cascading Style Sheets (каскадные таблицы стилей) является формальным языком описания внешнего вида документа, созданного с использованием языка разметки. Чаще применяется как средство описания, оформления внешнего вида веб-страниц, созданных с помощью языков разметки HTML и XHTML, но также может быть применен к любым XML-документам.

    1. С.

С является компилируемым статически типизированным языком программирования общего назначения [4], предшествующим появлению языков C++, Java, C#, JavaScript, Perl. Поэтому изучение данного языка способствует пониманию других. Имеет низкоуровневые возможности, позволяющие непосредственно работать с машинными ячейками, потому некоторые ученые относят язык к промежуточному, а не высокому уровню [6].

    1. Haskell.

Данный язык представляет собой стандартизированный чистый функциональный язык программирования общего назначения, и является одним из наиболее распространенных языков с поддержкой отложенных вычислений [5]. Его отличительной чертой выступает серьезное отношение к типизации. Haskell отлично подходит для обучения и экспериментов со сложными функциональными типами данных.

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

Глава 3. Критерии выбора среды и языка программирования

3.1 Среда разработки программ. Характеристики, критерии выбора

Средой разработки программного обеспечения (ПО) называется совокупность программных средств, используемая для разработки программного обеспечения [2].

Простая среда содержит в себе редактор текста, компилятор и/или интерпретатор, отладчик и средства автоматизации сборки. Объединение всех этих компонентов в единый программный комплекс называется интегрированной средой разработки (Integrated development environment-IDE). Такая среда выражена одной программой, без выхода из которой можно произвести весь цикл разработки. В состав комплекса кроме перечисленных выше компонентов могут включаться средства управления проектами, система управления версиями, различные инструменты для облегчения разработки интерфейса пользователя, стандартные заготовки, упрощающие разработку задач, и т.д. В современных средах разработки, которые поддерживают объектно-ориентированную разработку ПО, также тоже содержится браузер классов, инспектор объектов и диаграмма иерархии классов. Несмотря на то, что есть среды разработки, созданные для нескольких языков (Eclipse, Microsoft Visual Studio), как правило, среда разработки все же предназначается для конкретного языка программирования [5].

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

В некоторых случаях достаточно применять только одну интегрированную среду разработки, но чаще для крупных проектов в среду разработки включаются разнородные продукты разных фирм и версий [4]. Например, это файловый менеджер, набор вспомогательных утилит и пакетных файлов, С++Builder – как IDE, PLSQL Developer – для работы с СУБД Oracle, Cristal Reports – для формирования отчетов, StarTeam – для ведения версий и поддержки коллективной работы [4].

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

Все перечисленные выше понятия содержатся в технологии программирования, определяя ее инструментальное обеспечение [2].

История развития операционных сред тесно связана с историей развития вычислительной техники и базового ПО – операционных систем. Общая суммарная история вычислительной техники насчитывает чуть более 70 лет. Истории программных технологий около 35 лет, если брать за точку отсчета 1984 год согласно статье Кристофера Эберта. Термин «Программная инженерия» получил распространение 30 лет назад.

Серьезные изменения в области технологий были обусловлены применением алфавитно-цифровых, а затем графических дисплеев, разработкой операционной IBM OS/360, созданием микропроцессоров, появлением персональных ЭВМ, развитием Интернета [5].

Менялся метод общения программиста с ЭВМ. Первые появившиеся компьютеры вовсе не имели базового ПО. Программа могла вводиться вручную с пульта, а позднее – с помощью перфолент и перфокарт. Первые терминалы с электронно-лучевыми трубками (дисплеями) были созданы не для программистов, а для операторов ЭВМ. Программисты же работали с ЭВМ опосредованно, сдавая на вычислительный центр колоды перфокарт. Основным языком описания технологических процессов был язык управления заданиями (в ОС ЕС это JCL - Job Control Language) [5].

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

В период начала 70-х гг. произошел массовый переход на язык программирования, появились операционные системы первого поколения. С ростом мощности ЭВМ стал возможным коллективный доступ к ее ресурсам, и дисплей стал инструментом программиста [4].

Невзирая на развитие методов общения с ЭВМ, для программиста оставался неизменным основной цикл разработки и отладки программ: редактирование программы – компиляция – сборка – выполнение программы – анализ ошибок – редактирование. При оценке эффективности операционной среды следует всегда учитывать данный цикл [2].

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

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

Любая среда дает возможность производить настройку и адаптацию под определенные требования: изменение интерфейса, режимов работы, назначения горячих клавиш, установка «плагинов» и др. Каждый опытный программист владеет собственными приемами разработки и вспомогательными средствами, имеет свои вкусы и предпочтения. Применяя настройки, программист способен сделать работу в среде более удобной для себя, и, следовательно, более эффективной. По сути, он проецирует свою модель разработки на модель среды, что особенно важно, когда среди инструментов существуют программы с отличающимся интерфейсом (например, разное назначение горячих клавиш) [5].

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

При оценке эффективности и качества операционной среды нужно обращать внимание на интерфейсы инструментальных средств. Современный подход к пользовательскому интерфейсу был заложен в стандарте фирмы IBM, который воплотился во многих программных средствах, и инструментальных, и прикладных. Стандарт определяет оконный интерфейс, правила размещения в окнах компонентов управления, назначение горячих клавиш, рекомендует цветовые схемы интерфейса. В рамках данного стандарта возможно реализовать значительное количество множества интерфейсов, развитие и нововведения в которых можно проследить на линейках продуктов типа MS Office. Одно из ключевых свойств среды состоит в возможности настройки. К интерфейсу также относится замечание об избыточности и необходимости снижения количества возможностей [3].

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

Рассмотрим четыре основных вида среды разработки: JDK (Java Development Kit), Блэкбокс, MS Visual Studio, Eclipse и дадим их краткую характеристику:

  • BlackBox – легкая, комфортная для обучения;
  • JDK – легкая, многоплатформенная, хорошо распространенная;
  • Eclipse – многоплатформенная, многоязыковая, перспективная;
  • Microsoft Visual Studio – сложная, многоязыковая, широко распространенная [2].

Сюда же можно было отнести и достаточно распространенную систему Delphi, однако она и так широко известна.  MS Visual Studio с языком C# начинает применяться в учебном процессе, вытесняя языки C и С++. Система BlackBox не очень распространена, но содержит множество технологических новаций, дающих ей большое преимущество среди более распространенных систем.

Среда JDK отличается простой моделью разработки, отсутствием собственной IDE. В ней применяется любой текстовый редактор и имеются два основных исполняемых файла: компилятор javac.exe и исполнитель оттранслированных классов java.exe. Все исходные файлы имеют расширение java, оттранслированные - class. На уровне языка определяются иерархии пакетов, каждый из которых содержит один либо несколько классов. Естественным образом иерархия пакетов при трансляции отражается в файловую структуру. При трансляции файла с объявленным пакетом package s1.p1 формируется подкаталог s1, затем в нем - подкаталог p1, в который размещаются файлы с кодами классов. Каждому классу соответствует один файл, имя которого совпадает с именем класса [3].

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

Комплекс классов одного либо нескольких пакетов могут собираться и храниться в одном архиве, файлов с расширением jar. Такие файлы можно считать компонентами среды (подсистемами). Пути к этим подсистемам указываются в качестве параметров при компиляции и запуске программ. Несколько приложений могут использовать общие подсистемы, тогда для запуска компилятора и программ лучше применять bat-файлы, где указывается различный набор подсистем [5].

На базе JDK работают более развитые платформы, например, IDEA, NetBeans, Eclipse. В ходе совершенствования к среде постоянно добавлялись новые компоненты и сейчас среда имеет версию 1.6.

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

Блэкбокс (BlackBox Component Builder) представляет собой бесплатную и открытую систему для языка программирования Компонентный Паскаль [3], являющаяся вариантом языка Оберон и имеющая следующий ряд свойств:

  • Высокая быстродейственность (быстро компилирует даже на i386);
  • Простота (описание языка занимает всего около 30 страниц);
  • Хорошая компактность (занимает 20 MB на диске в максимальной конфигурации)
  • Несмотря на вышеперечисленное, обладает высокой мощностью (в том числе за счет лучшей в промышленности поддержки технологий компонентно-ориентированного программирования);
  • бесплатная для некоммерческого использования (с конца 2004 г. система доступна с открытыми исходными кодами) [4].

BlackBox  содержит очень простую модель операционной среды. В языке отсутствует вложенность модулей и классов и, следовательно, упрощается архитектурная модель. В отличие от языка Java, один модуль транслируется в один файл. Содержится два вида компонентов — модули и подсистемы. В случае успешной компиляции модуля создаются символьный и кодовый файлы, автоматически размещающиеся в подкаталогах Sym и Code соответственно. При этом эти каталоги размещаются в подкаталоге Блэкбоксе с названием подсистемы. Имя подсистемы является префиксом имени модуля. Исходные файлы хранятся в подкаталоге Mod. Символьный файл содержит всю информацию о внешних связях модуля по экспорту - импорту. Кодовый файл представляет собой двоичный файл с машинными командами и загружается в память для непосредственного выполнения при первом вызове какой-либо процедуры из этого модуля [5].

В связи с тем, что Блэкбокс разработан на языке Компонентный Паскаль, любой скомпилированный модуль является частью системы, в том плане, что как файл с машинным кодом, так и соответствующий символьный файл мгновенно становятся доступными для и импорта из других модулей, вызова процедур из меню и т.д. По этой причине приложение может иметь такой же интерфейс, как и сама среда, представленный обычным многоуровневым меню и возможностью назначения горячих клавиш. Меню хранится в файле Menus.odc и является доступным для редактирования при помощи функций модуля Text, кроме того, по команде меню может обновляться. Подсистемы из основного каталога могут быть использованы совместно, что значительно упрощает развертывание новой подсистемы в разработанном приложении [3].

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

Операционная среда разработки MS Visual Studio в данный момент является предпочтительным выбором большого числа разработчиков, работающих на платформе Windows. Среда дает возможность эффективного создания сложных приложений за короткий период времени. В отличие от рассмотренных выше операционных сред модель данной среды значительно богаче и содержит такие понятия как решение (solution), проект, пространство имен (namespace) и сборка (assembly). Понятие проекта содержится во многих средах, таких как Delphi. Файл проекта включает в себя перечисление исходных файлов и иных ресурсов, из которых система будет создавать приложение. Решение среды Visual Studio содержит несколько проектов, зависимых либо независимых друг от друга. Выделяется стартовый проект. Понятие сборки исходит из общеязыковой исполнительной среды CLR (Common Language Runtime), которая представляет собой наиболее революционное изобретение, с появлением которого процесс создания и выполнения приложений становится принципиально другим [7].

Компилятор преобразует файлы с исходными кодами в коды на промежуточном языке MSIL (Microsoft Intermediate Language). Одновременно с метаданными данные коды записываются в PE-файлы (Portal Executable) с расширением exe или dll, в зависимости от типа проекта. Может также быть получен модуль с расширением netmodule, не содержащий метаданных. Всего имеется 12 типов проектов. При загрузке PE-файлы «на лету» транслируются в команды реального процессора.

Каркас Framework.NET, который обеспечивает выполнение программ, не содержится в Visual Studio, а является настройкой над операционной системой. Это аналог виртуальной Java-машины [5].

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

На уровне языка C# пространства имен, как и в пакетах Java, предназначены для структурирования проекта. Пространство имен содержит один или несколько классов. В одном исходном файле может быть несколько пространств имен и одновременно одно пространство имен может быть определено в нескольких файлах, класс также может быть расположен в нескольких файлах (partial classes) [1].

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

Таблица 2. Сравнительная таблица операционных сред.

Операционная среда

Число каталогов

Число типов файлов

Блэкбокс

85

9

С++Builder

367

27

Visual Studio

3450

188

Операционная среда Eclipse является достаточно интересной и перспективной, она разработана в фирме IBM. Первоначальной целью проекта было создание корпоративного стандарта IDE для формирования программ на разных языках под различные платформы. Затем данный проект был переименован в Eclipse и выделен в открытый доступ. Лицензия дает возможность бесплатного использования кода и среды разработки, и при этом создавать закрытые коммерческие продукты, благодаря чему система получила широкое распространение и для многих предприятий стала корпоративным стандартом разработки приложений [7].

Экосистема Eclipse относится к консолидированным технологиям, получила широкое распространение она в 2007 году.

Система реализована на языке Java и первоначально являлась полноценной интегрированной средой для языка Java. Затем стали поддерживаться и иные языки. Первые версии были не очень удобны в том, что целевой продукт вынужденно содержал лишнюю функциональность. Начиная с третьей версии, архитектура всей системы была переработана для максимального разделения модулей и формирования взаимосвязи между ними [5]. Модули Eclipse, созданные из согласованных наборов классов, обеспечивали функциональность целых подсистем, - подсистемы помощи, обновления продукта, обучения, презентации, многоязыковой поддержки и др. При разработке приложения теперь стало возможным постепенное наращивание функциональности, подключая уже готовые бесплатные компоненты. В терминологии Eclipse данные компоненты носят названия «подключаемых модулей» или «плагинов» (Plugins). Данная технология уже является типичной для развитых операционных сред. Платформа на основе этой технологии получила название RCP (Reach Client Platform), а приложения, соответственно, RCP-приложениями [5].

Что касается графического интерфейса Eclipse, он построен с применением графической библиотеки SWT, опирающейся на графику используемой операционной системы. Существует возможность создания настраиваемых стилей, позволяющих произвольно изменять и внешний вид приложения, и поведение составляющих его элементов. Режимы работы могут быть объединены в одну панель, либо размещены в отдельных панелях, которые могут быть вызваны по необходимости кнопками [4].

Данные, используемые при создании приложения, размещаются в одном каталоге – рабочей области. Графическая среда разработки - инфраструктура для управления ресурсами рабочей области и навигации по ресурсам. Рабочая среда содержит одно или несколько окон, которые, в свою очередь, могут включать страницы. Каждая из страниц может содержать так называемые проекции, управляющие взаиморасположением редакторов и панелей для решения конкретных задач [2].

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

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

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

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

Также процессы разработки приложений, включающие модули расширений, отличаются от традиционных подходов. При запуске среды разработки формируется статический экземпляр рабочей среды, в котором создается программный код, происходит отладка и выполняются иные задачи производственного процесса. При запуске приложения на тестирование создается динамический экземпляр рабочей среды, включающий выбранные в конфигурации запуска разрабатываемые модули, и модули целевой платформы. Целевой платформой называется сборка продукта Eclipse, необходимая для развертывания разрабатываемых приложений [5].

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

В процессе рассмотрения перспектив программных технологий [2], можно было выделить технологические концепции и методологии, которые скорее всего повлекут изменения в операционных средах: программные шаблоны (паттерны), компонентная разработка, программы как сервис, сервисно-ориентированные архитектуры [4].

3.2 Критерии выбора языка программирования

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

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

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

  1. Скорость работы конечного продукта.

Наибольшие требования к скорости выполнения могут предъявлять программы со значительным объемом математических вычислений, например, моделирование физических систем, расчеты большого объема экономических данных, выведение трехмерной графики и др. [4]. Для этого хорошо подойдут компилируемые языки: ассемблер, С/С++, фортран и т.д. Дело в том, что после сборки программа не требует лишних процессов и содержит в себе машинные команды, выполняемые без лишних задержек. Схема работы таких программ следующая: 1) программа выполняется сразу, так как является самодостаточной и не требует дополнительных библиотек; 2) программа помимо кода включает в себя вызовы библиотек с машинным кодом, поэтому, кроме выполнения своих команд, программа вызывает функции из библиотек; 3) в дополнение к предыдущим пунктам, программа может работать через прослойку драйверов, написанных на языках низкого уровня и работающих по умолчанию быстро. Как видно, в схеме возможны максимум 4 блока: программа - библиотеки - драйвера – железо [3].

  1. Объем занимаемой оперативной памяти.

Это требование существует, когда программа разрабатывается для встраиваемых систем, мобильных платформ, микроконтроллеров и др. В данных случаях, значение имеет количество расходуемой памяти. К таким языкам также относятся ассемблер, С/С++, Objective-C и др.

  1. Скорость разработки программы.

Требование возникает при высокой срочности разработки программы. В этом случае выбор останавливается на высокоуровневых языках с максимально приближенным к человеку синтаксисом. Это, например, Java, Flash и т.п. Скорость выполнения программ, созданных на данных языках, не является оптимальной [5]. Схема выполнения на примере Java:
Программа в виде байт-кода - виртуальная машина-анализатор - системные библиотеки - драйвера - железо. Самым медленным блоком в данной схеме является анализатор. Поэтому быстрая разработка часто влечет медленное выполнение [3].

  1. Ориентированность на компьютер или человека?

Необходимо определиться, с кем будет работать программа в первую очередь, - с человеком, или компьютером. В первом случае программа должна иметь мощную графическую часть, отвечающую требованиям дизайна. Разработка графической части в большинстве случаев требует достаточно много времени, т.к. отличается немалой сложностью. Ведь вывод графики предполагает много математических действий, а значит, присутствует требовательность к скорости исполнения, а ввиду сложности разработки существует необходимость в высокоуровневом языке. В данном случае, хорошо может подойти С++/C# с их одновременной и высокоуровневостью, и скоростью выполнения программ. Однако возможно и использование Java и Flash, на которых создание красивых интерфейсов гораздо проще, чем на С++ и, тем более, на С [5].

  1. Кроссплатформенность.

Кроссплатформенность – это возможность работы программы на различных платформах, в различных ОС с минимальными изменениями. Здесь можно выделить такие языки: Java, C#, Flash, C++ с различными библиотеками и другие, менее используемые, языки. Java создавался с учетом того, что программы на нем должны работать на любой платформе, где есть JVM – Java Virtual Machine. Программы на Java не требуют никаких изменений – после компиляции получается .jar файл, способный работать и на Windows, и на Mac OS, и на Linux и на многих других системах [7]. Однако, например, на одном С++ создать кроссплатформенную программу довольно сложно, и при возникновении обширной избыточности теряется достоинство в скорости выполнения. Значительно облегчают задачу кроссплатформенные библиотеки, например, Qt, позволяющие добиться принципа «один код на все платформы», однако на каждую платформу необходимо программу собирать отдельно разными компиляторами. В этот раздел так же можно включить интерпретируемые, скриптовые языки – для их работы необходимо наличие интерпретатора языка в системе. Данные языки очень удобны в плане разработки, но по скорости достаточно медлительны. Схема их работы напоминает схему работы Java/Flash, но анализатор работает еще медленнее [2].

  1. Скорость внесения изменений, скорость тестирования.

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

Таким образом, тема выбора языка программирования достаточно обширна и имеет множество нюансов. Стоит учитывать, что большие программы могут создаваться на разных языках в зависимости от их функционала. Например, критичные к скорости работы части пишутся на низкоуровневых языках, графическая часть — на высокоуровневых и медленных. С и С++ являются действительно универсальными языками с большим количеством библиотек, высокой скоростью работы и многими другими достоинствами. Но, кроме них, они обладают еще довольно большим недостатком – по причине такой универсальности данные языки довольно трудны в освоении, имеют очень много особенностей. Язык Java также достаточно универсален, более прост в изучении, но обладает серьезным недостатком – крайне низкая скорость работы [4]. Это очень ограничивает его применение: большие программы на нем лучше не разрабатывать из-за возникающей потребности в мощном аппаратном обеспечении. Скриптовые/интерпретируемые языки хорошо подойдут для написания «одноразовых программ», автоматизации некоторых действий, а так же для работы вместе с другими языками. Ассемблер – группа языков со схожим синтаксисом, но многими различными параметрами в зависимости от платформы [5].

ЗАКЛЮЧЕНИЕ

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

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

В результате проведенной работы, были достигнуты поставленные задачи и получены следующие выводы:

  1. Анализ истории возникновения и развития языков программирования показал появление новых возможностей с течением времени и роста научно-технических разработок, позволил отследить скорость и особенности появления новых языков с учетом новых требований.
  2. Изучение классификации языков программирования позволило рассмотреть их особенности применения и критерии типизации, что позволит обратить внимание на те или иные признаки при выборе языка для разработки программы.
  3. Обзор современных языков программирования дал возможность оценить их возможности с учетом особенностей актуальных требований и современных технологий.
  4. Оценка и анализ критериев выбора среды и языка для разработки программ позволил изучить возможные их сочетания и характеристики, необходимые для формирования требований к поставленным задачам программирования и успешного их применения в реализации основных функций, а также обеспечения дальнейшей бесперебойной работы программы.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Быканов, Н.П. Классификация языков программирования // Международный журнал социальных и гуманитарных наук / Н.П. Быканов. – М. - 2016. – Т. 5. №1. – С. 229-232.
  2. Ершов, А.П. Эволюция языков программирования // Проблемы информатики / А.П. Ершов, С.Б. Покровский. – Москва. – 2017. - №2. – С. 72-79.
  3. Клейменова, Е.М. Анализ современных языков программирования / Е.М. Клейменова // Информационные системы и технологии : материалы VIII Международной студенческой конференции. – Москва: Балаковский инженерно-технологический институт, 2016. – С. 13.
  4. Орлов, С.А. Теория и практика языков программирования. Учебник для вузов. 2-е изд. / С.А. Орлов. – Спб: Издательский дом «Питер», 2017. – 688 с.
  5. Соколова, В. В. Вычислительная техника и информационные технологии. Разработка мобильных приложений. Учебное пособие для прикладного бакалавриата. - Москва: Издательство Юрайт, 2019. – 175 с.
  6. Тюгашев, А.А. Основы программирования: Часть I/ А.А. Тюгашев. СПб: Университет ИТМО, 2016. – 164 с.
  7. Шуляев, А. В. Критерии выбора языка программирования для разработки комплекса программных решений // Теоретические основы программирования / А.В. Шуляев. – Ростов-на-Дону: Южный университет (ИУБиП), 2016. – С. 133-137.