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

Классификация языков программирования. Критерии выбора среды и языка разработки программ. ( КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ )

Содержание:

ВВЕДЕНИЕ

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

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

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

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

Цели исследования:

  1. Рассмотреть общее сведения и уровни языков программирования.
  2. Изучить историю развития языков программирования.
  3. Выявить достоинства и недостатки современных языков программирования.

Задачи исследования:

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

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

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

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

Были использованы научно-исследовательские труды таких авторов, как Симонович С.В., Лафоре Роберт, Стенли Липпман, Стивен Прата, Тюгашев А., Харольд Абельсон, Джеральд Джей Сассман, были рассмотрены самые популярные зарубежные книги и статьи с сайта http://www.linuxlinks.com/beginnerbooks/, и многие другие авторы и практикующие программисты, которые делятся своим опытом написания программ как на современных языках программирования, так и на устаревших языках.

ГЛАВА 1. КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

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

Существует множество классификаций языков программирования по различным критериям. В настоящее время можно выделить самое простое и распространенное среди пользователей деление – это деление на языки высокого и низкого уровня [9].

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

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

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

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

Язык низкого уровня – это язык программирования, предназначенный для определенного типа компьютера и отражающий его внутренний машинный код. Языки низкого уровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, а также довольно сложно изучать, поскольку для этого требуется хорошо знать внутренние принципы работы компьютера [9]. Они же автокоды. Очень близки к машинному коду, что позволяет при умелом программировании получить высокую скорость выполнения, но заметьте в разработке сложных многоуровневых процессов они не подходят [4]. Знамениты автокоды тем, что написать код обычно быстрее, чем разобраться в существующем, таким как: Ассемблер, Forth.

Дональд Кнут в своей классической книге «Искусство программирования» приводил такой довод в пользу низкоуровневых языков: «Например некоторые комбинаторные вычисления нужно повторять триллионы раз, и мы сэкономим приблизительно 11,6 дней работы за счет того, что сократим время вычислений во внутреннем цикле всего на одну микросекунду». Даже один сэкономленный такт вычислений дает огромную экономию в крупном масштабе. Поэтому можно сделать вывод, что если вы используете невероятно эффективную и быструю программу, то она скорей всего написана с применением низкоуровневого языка [9].

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

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

Язык высокого уровня – это язык программирования, предназначение которого является удовлетворение требований программиста. Этот язык не зависит от внутренних машинных кодов компьютера какого-либо типа [14]. Языки высокого уровня используются программистами для решения проблем, и поэтому их часто называют проблемно-ориентированными языками [3]. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах.

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

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

Другая классификация делит языки на вычислительные и языки символьной обработки. К первому типу относят ФОРТРАН, ПАСКАЛЬ, АЛГОЛ, БЕЙСИК, С, ко второму – ЛИСП, ПРОЛОГ, СНОБОЛ и др.

Информацию об этих языках рассмотрим ниже.

1.2. Языки программирования, основанные на принципе их парадигме

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

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

В середине 80-х годов в программировании возникло новое направление, основанное на понятии объекта. До того времени основные ограничения на возможность создания больших систем накладывала разобщенность в программе данных и методов их обработки [1].

Реальные объекты окружающего мира обладают тремя базовыми характеристиками: они имеют набор свойств, способны разными методами изменять эти свойства и реагировать на события, возникающие как в окружающем мире, так и внутри самого объекта. Именно в таком виде в языках программирования и реализовано понятие объекта как совокупности свойств (структур данных, характерных для этого объекта), методов их обработки (подпрограмм изменения свойств) и событий, на которые данный объект может реагировать и которые приводят, как правило, к изменению свойств объекта [6].

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

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

Объектно-ориентированный язык программирования характеризуется тремя основными свойствами:

1. Инкапсуляция – объединение данных с методами в одном классе;

2. Наследование – возможность создания на основе имеющегося класса новые классы с наследованием всех его свойств и методов и добавлением собственных;

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

В процедурных языках программа будет описывать действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий. В эту большую группу входят, например, ПАСКАЛЬ, С, АДА, ПЛ/1, ФОРТРАН и БЕЙСИК [8].

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

Яркий представитель данной группы из классификации языков программирования Алгол – это «прородитель» современных языков программирования. Если сказать коротко, то Алгол – это алгоритмический язык. Прямые потомки Алгола-58, откуда убрали оператор перехода. Хотя убрали это не подходящее слово, точнее будет сказать, что научились обходиться без него, а на уровне машинных команд прыжки вперёд через участки кода по-прежнему есть. Программы на них представляют собой последовательности действий, от «x:=2*2» до «господь Бог. Создать Вселенную()»: Алгол и Pascal; C, C++, C#, Java и Oberon; Ada, Simula и Modula; Smalltalk и Objective-C; ActionScript и Lua и так далее [8]. Если продолжать, то мы поймем, что их тысячи. Такой случайный язык, используемый или использовавшийся, ведь многие устаревшие языки уже не пригодны для написания современных программ, на практике ни возьми - с высокой вероятностью он будет принадлежать к описанной раньше группе. Что и неудивительно: само название «Алгол» происходит от «Algorithmic Language», то есть язык для описания алгоритмов. Но сам он, к сожалению, а может к радости разделив судьбу всех мертвых языков, ушел из современного мира программирования и стал частью истории технического прогресса. Упомянули такие языки, которые можно назвать старыми, но живыми.

Объясним почему именно так. Изучив историю создания языков можем проанализировать развитие нескольких из них. Алгол придумали в Европе, а Фортраном пользовались в основном в Штатах - больших отличий нет, всё равно это уже история. Сперва всё было сложно, и чтобы писать нужно было быть чуть ли не инженером, электротехником, понимать, где какие контакты замыкаются и ещё что-то для возможности программировать. Потом тоже нужно было сидеть с листочками и считать память, смотреть за ней. И постепенно всё становилось проще, проще, и дальше ещё проще для программиста - как можно меньше думать человеку, как можно больше делать автоматически. Примерно в конце вот периода «правления» Алгола и Кобола, начинают появляться языки, которые в каком-то смысле «дожили» до наших дней [7].

К примеру, BASIC. Можно предположить, что до сих пор некоторые люди на нём что-то пишут, во всяком случае, если обратиться в некоторые вузы, то увидим, что учат на QBASIC’е — такое синее окошко, где написано «1989». Данный язык придумывался как язык для непрограммистов. В то время программист была очень специализированная профессия. И говоря об этом языке, можно сказать смело, что тот Бейсик и современный Бейсик — это огромная разница. Пример: строки с нумерацией через 10, GOTO и прочее обозначения для написания программы на этом языке - они к современному Бейсику уже не имеют никакого отношения и даже к Бейсику 1989-го года практически не имеют отношения, этот язык эволюционировал, хоть и сохранил своё историческое название [11]. Возьмем ещё один пример – язык Паскаль, широко известный в вузовских кругах, в основном в России и в странах бывшего Советского Союза. Он использовался и продолжает использоваться на удивление как учебный язык [5]. Во всём остальном мире он поменьше распространён, но тоже существует в полном здравии, если так, можно сказать. Обратимся к истории, есть такой человек Вирт - он учёный, теоретик. Вирт участвовал в обсуждении Алгола, ему не понравилось то, что получилось, и он придумал свой язык - Pascal. А потом фирма Borland, а также до этого многие другие фирмы - Apple занималась, в частности, взяли и переделали буквально всё, если не сказать, что испортили. У него была красивая теория, стройная, а разработчики этих компаний взяли и заполнили, что людям «нужно» для работы. Разумеется, получилось не так красиво, как хотел Вирт.

Обратимся к языку С. «Си» придумали инженеры. Если Паскаль придумал учёный, то Си придумали Керниган и Ритчи, они работали инженерами в Bell. Во время «царствования» таких языков, как Fortran, COBOL, Algol, ничего системного написать было нельзя. Укажем, что такое «системное» - это, например, возьмем операционную систему, драйвера и т.д. Эти языки предназначались для математических расчётов, для бизнес-расчётов. А всё остальное писали на Ассемблере. Были какие-то языки, они сейчас умерли, то есть язык Си появился не сразу от Ассемблера, а через какие-то промежуточные вещи [5].

Несмотря на то, что язык С, строго говоря, является высокоуровневым языком, на фоне таких языков, как Java или C# его называют низкоуровневым, так как уровень абстракций неприлично низок. Более того, именно на нем в 95% случаев пишут около системные вещи, вроде драйверов и ядер ОС, используя, впрочем, тонны ассемблерных вставок. Поэтому однозначно отнести его к какой-то категории, невозможно. Иногда даже говорят, что C — «язык среднего уровня» [11], [13], [15].

Итак, рассмотрев объектно-ориентированные языки перейдем к декларативным языкам в рассматриваемой классификации.

К ним относятся функциональные и логические языки программирования (приложение, рис. 1). Функциональное программирование – это способ составления программ, в которых единственным действием является вызов функции. В функциональном программировании не используется память, как место для хранения данных, а, следовательно, не используются промежуточные переменные, операторы присваивания и циклы. Ключевым понятием в функциональных языках является выражение. Программа, написанная на функциональном языке, представляет собой последовательность описания функций и выражений. Выражение вычисляется сведением сложного к простому. Все выражения записываются в виде списков [10]. Первым языком стал язык Лисп (LISP, LIST Processing- обработка списков) создан в 1959 г. Этот язык позволяет обрабатывать большие объемы текстовой информации. Логическое программирование – это программирование в терминах логики. В 1973 году был создан язык искусственного интеллекта Пролог (PROLOG) (Programming in Logic). Программа на языке Пролог строится из последовательности фактов и правил, затем формулируется утверждение, которое Пролог пытается доказать с помощью правил. Язык сам ищет решение с помощью методов поиска и сопоставления, которые в нем заложены. Логические программы не отличаются высоким быстродействием, так как процесс их выполнения сводится к построению прямых и обратных цепочек рассуждений разнообразными методами поиска [8].

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

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

Лисп когда-то был автокодом в скобочной записи, но этим дело не ограничилось:

  • Scheme и Common Lisp
  • Haskell
  • РЕФАЛ
  • ML с диалектами и расширениями (F#, Caml, OCaml, и т. д.)
  • Erlang
  • Agda
  • Pure (term rewriting)

В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается ПРОЛОГ. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста [4].

Изначально предназначались для создания экспертных систем aka искусственного интеллекта. Но на практике, при попытке создать что-нибудь действительно полезное, выявились недостатки, которые привели к появлению гибридных функционально-логических языков, таких как язык Prolog [2].

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

Глубокая идея функциональных языков на самом деле гораздо глубже, чем кажется на первый взгляд. Джон Маккарти, автор Лиспа, перевернул всё программирование 50-х и 60-х годов с головы на ноги: он поставил на первое место не данные, вокруг которых суетятся мелкие программки, а сами эти программки. Данные же он предлагал протаскивать через цепочки выполнения, а язык для описания этого дела был назван «List Processor», то есть Язык Обработки Списков.

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

Плавно перейдем к следующей группе языков нашей классификации – прикладные языки программирования.

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript [6].

Языком прикладного программирования считали Фортран, а не Алгол, на котором изначально предполагалось описывать вычислительные процессы. У него не было и до сих пор нет даже названия: «фортран» означает «транслятор формул», и так назывался не язык, а его компилятор. Изначально там не было даже правил видимости переменных, а все данные лежали в общей области данных: посчитал - и напечатал результат:

  • Фортран всех версий - классика
  • В нынешние времена благодаря Microsoft - Visual Basic (в том числе и VBA)
  • Javascript (в том числе и node.js)
  • Python, Perl, PHP, Ruby и Groovy

Иногда в прессе и на форумах поминают Фортран как что-то плохое. Возможно, так и было, но обижаться на то, что современные скриптовые языки происходят от него — глупость. Именно это направление развивалось больше всего (оно было прикладным) и именно на скриптах были обкатаны многие нововведения (такие, как словари), позже перенесённые в другие языки.

Теперь рассмотрим языки для написания проводок. Они же «бизнес-ориентированные языки». Первоначально эту нишу занимал простой, но не совсем понятный «Common Business-Oriented Language», который использовался в банках. Супермаркеты, рестораны, кафэтэрии, склады, турагентства, таксопарки, железные дороги, госструктуры – так до сих пор и используют его или один из его многочисленных диалектов:

  • Кобол и ABAP
  • PL/SQL
  • Caché Script

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

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

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

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

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

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

ГЛАВА 2. КРИТЕРИИ ВЫБОРА СРЕДЫ И ЯЗЫКА РАЗРАБОТКИ ПРОГРАММ

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

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

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

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

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

Требовательным к скорости выполнения могут быть программы с большим объемом математических вычислений, например, моделирование физических систем, расчеты большого объема экономических данных, выведение трехмерной графики и прочее. Для данных целей хорошо подойдут компилируемые языки: ассемблер, С/С++, фортран и т.д. Рассмотрим более подробно почему именно такие. После сборки программа не требует (грубо говоря) ничего лишнего и содержит в себе машинные команды, которые выполняются без лишних задержек [4], [6].

Схема работы таких программ такая:

1) программа исполняется сразу, так сказать она самодостаточна и не требует дополнительных библиотек;

2) программа кроме своего кода содержит вызовы библиотек с машинным кодом (как системных, так и входящих в проект), поэтому, кроме исполнения собственно своих команд, программа вызывает функции из библиотек;

3) в дополнение случаям 1 и 2, программа может работать через прослойку драйверов, которые написаны на языках низкого уровня и работают по умолчанию быстро. Как видно, максимум в схеме возможны 4 блока: программа  библиотеки  драйвера  железо.

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

Данное требование появляется, когда программа разрабатывается для встраиваемых систем, мобильных платформ, микроконтроллеров и так далее. В данных случаях, чем меньше памяти расходует программа на данном языке – тем лучше. К таким языкам, опять же, относятся ассемблер, С/С++, Objective-C и другие. Список языков подобен списку пункта 1, так как чем меньше функциональных блоков в схеме исполнения, тем меньше занимается и памяти компьютера [5], [6].

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

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

Данное требование возникает тогда, когда заказчик/начальник говорит: «программа нужна не позже, чем вчера!» или еще подобной этой фразе срочность. Тогда выбор падает на высокоуровневые языки с максимально человеколюбивым синтаксисом. Это, например, Java, Flash и подобные. На данных языках время разработки может существенно сокращаться из-за обилия сторонних библиотек, максимально «очеловеченного» синтаксиса, и подобных вещей. Скорость выполнения программ, написанных на данных языках страдает, причем порой весьма ощутимо. Схема выполнения на примере Java:

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

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

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

Поставим ряд вопросов:

- С кем будет работать программа в первую очередь?

- С человеком, или с компьютером?

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

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

Если программа ориентирована в первую очередь на «скрытую работу» с минимумом взаимодействия с пользователем, тогда выбор должен ложиться в сторону быстрых языков (ASM, C) [6], [9].

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

Сразу же дадим определение этому критерию. Кроссплатформенность – возможность работы программы на различных платформах, в различных ОС с минимальными изменениями. В этой сфере можно выделить такие языки: Java, C#,Flash,C++ с различными библиотеками и другие, менее используемые, языки.

Java создавался с тем условием, что программы на данном языке должны работать на любой платформе, где есть JVM – Java Virtual Machine. Программы на Java вообще не требуют никаких изменений – после компиляции получается .jar файл, который будет работать и на Windows, и на Mac OS, и на Linux и еще немало где. Аналогичная ситуация и с Flash, только список платформ гораздо менее обширный. С С++ дело обстоит труднее. На чистом С++ написать кроссплатформенную программу довольно трудно, у кода возникает обширная избыточность, теряется достоинство в скорости выполнения. Облегчают задачу кроссплатформенные библиотеки, например, Qt, которые позволяют добиться принципа «один код на все платформы», однако на каждую платформу нужно программу собирать отдельно (при этом разными компиляторами) [4], [16].

В этот раздел так же можно включить интерпретируемые, скриптовые языки – для их работы нужно наличие интерпретатора языка в системе. Данные языки очень удобны в плане разработки, но достаточно медлительны. Схема их работы напоминает схему работы Java/Flash, только анализатор стал еще медленнее – полумашинный байт код анализировать «на лету» гораздо проще, чем человеческий код. Так же, это влечет к большему потреблению памяти.

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

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

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

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

2.2. Сравнение популярных языков программирования

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

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

Например, журнал IEEE Spectrum попытался составить самый объективную картину популярности языков программирования по двенадцати метрикам из десяти источников (приложение, рисунок 3).

По активности разработчиков на GitHub в 2017 году рейтинг представлен в приложении рисунок 4.

По каждой метрике может лидировать какой-то один язык, а по другой метрике — другой. Например, Cobol до сих пор доминирует в корпоративных дата-центрах, на нем написано много программ, хотя новых практически не пишут. Вариации языка C используются в системном программировании, а язык Java популярен для написания приложений под Android. Прочие языки регулярно используются для создания других разнообразных приложений. [6], [9].

За каким языком программирования будущее — покажет история, но исследователи отмечают, что по совокупности метрик в последнее время растет популярность Python, который сейчас вышел на 1-е место. Поднялись по рейтингу C# и Swift. По количеству вакансий для программистов C значительно опережает Python. В веб-программировании популярны JavaScript и PHP.

Помимо универсальности, есть ещё критерии, такие как:

  1. Простота — спотыкаться о сложный синтаксис и застревать в дебрях нечитаемого кода — не самое приятное начало обучения.
  2. Популярность — язык должен часто обновляться, иметь большое сообщество разработчиков, быть востребованным в крупных компаниях. Ещё один плюс — чем популярнее язык, тем легче найти ответ на возникший рабочий вопрос. Под эти три описания лучше всего подходят языки Python, C#, Java и Ruby [2], [9], [13].

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

Python

Разработан в 80-е годы голландским программистом Гвидо ван Россумом. Большие технологические компании работают с Python: Яндекс, Google, Facebook и YouTube. Это так называемый скриптовый язык — на нём пишут то, что у программы под капотом. Его используют для веб-приложений, в разработке игр, софта для серверов. Python — пожалуй, самый простой язык программирования из нашего списка. Здесь минимум служебных символов, динамическая типизация, максимально понятный синтаксис. Несмотря на визуальную простоту, этот язык — один из мощнейших. С его помощью с одинаковой легкостью можно и работать с текстом, и строить нейронные сети.

Простота:

Код легко читается, у него понятная структура. Стандартного инструментария достаточно для начала обучения.

Популярность:

Занимает 1-е место в программах начального обучения программированию в университетах США.

Универсальность:

Регулярно обновляется — раз в 2,5 года. Входит в пятерку популярных языков по версии аналитической компании TIOBE Software на январь 2016 года.

На Python пишут почти всё: скрипты управления системами, веб-сайты, системы машинного обучения, игры.

С#

Язык был разработан в конце 90-х на базе C++ и Java. В основном используется для больших enterprise-проектов, но не ограничивается только ими. Например, скрипты в игровом движке Unity пишут на C#. Универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная).

Простота:

Структурно близок к C++ и Java — синтаксис (структура программного кода) сложнее, чем у Python и Ruby, но зато на изучение родственных языков уйдёт меньше времени. Интерфейсы библиотек хорошо вписываются в шаблоны проектирования — это упрощает изучение.

Популярность:

На C# пишут под Windows Phone, iOS и Android. Большое количество документации, но библиотек со свободной лицензией не много — это значит, что для обучения программист может использовать чужой код, но вот для использования в коммерческом продукте нужно платить.

Универсальность:

Последнее обновление было в 2015-м году

Язык придумали программисты из Microsoft для разработки Windows-приложений. Несмотря на это, его используют и в других системах. Также работает на встраиваемых, десктопных и серверных платформах.

Ruby

Создан японским разработчиком под влиянием языка Perl. Запущен в 1995 году. На Ruby написаны: Shopify, Github, Groupon, Yellow Pages, Twitter и Slideshare. Он набирает популярность, но чаще встречается в стартапах, нежели в крупных компаниях. Хорошо подходит для создания простого интернет-проекта.

Простота:

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

Популярность:

Большое и лояльное сообщество разработчиков — замыкает десятку самых популярных языков по версии TIOBE Software. Много библиотек в свободном доступе.

Универсальность:

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

Java

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

Кроме того, Java — великолепный язык, чтобы полноценно понять программирование: здесь реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием. Первая версия языка вышла в мае 1995 года. Java используется в Amazon, eBay, LinkedIn и Yahoo!

Простота:

Как было сказано ранее, у Java и C# очень похожий синтаксис — выучил один, почти знаешь другой. Но как и в первом случае, синтаксис сложнее, чем у Ruby и Python.

Популярность:

В мире 3 миллиарда смартфонов на Android — это значит, что Java ещё долго будет востребован. Первый по популярности по версии TIOBE Software.

Универсальность:

Чаще всего используется для enterprise-разработки и Android – приложений [2], [7], [14].

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

2.3. Критерии выбора среды разработки и их недостатки

Среда разработки программного обеспечения (ПО) — совокупность программных средств, используемая программистами для разработки программного обеспечения. Простая среда разработки включает в себя редактор текста, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Когда эти компоненты собраны в единый программный комплекс, говорят об интегрированной среде разработки (Integrated development environment- IDE). Такая среда представлена одной программой, не выходя из которой можно производить весь цикл разработки.

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

Современные среды разработки, поддерживающие объектно-ориентированную разработку ПО, также включают браузер классов, инспектор объектов и диаграмму иерархии классов. Хотя существуют среды разработки, предназначенные для нескольких языков — такие как Eclipse или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования.

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

IDE (или интегрированная среда разработки) — это программа, предназначенная для разработки программного обеспечения. Как следует из названия, IDE объединяет несколько инструментов, специально предназначенных для разработки. Эти инструменты обычно включают редактор, предназначенный для работы с кодом. Приведем пример:

- подсветка синтаксиса и автодополнение;

- инструменты сборки, выполнения и отладки;

- определённую форму системы управления версиями [2], [8], [15].

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

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

Требования для хорошей среды разработки

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

  1. Сохранение файлов. Если IDE или редактор не дают вам возможности сохранить работу и позже всё открыть в том же состоянии, в котором оно было во время закрытия, то не такая уж это и IDE;
  2. Запуск кода из среды. То же самое, если вам нужно выйти из среды для запуска кода, то это не более, чем простой текстовый редактор;

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

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

- автоматическое форматирование кода. Любой редактор или IDE, который действительно таковым является, распознает двоеточие после while или for выражения и автоматически сделает отступ на следующей строке.

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

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

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

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

История развития операционных сред непосредственно связана с историей развития вычислительной техники и базового программного обеспечение – операционных систем. Вся история вычислительной насчитывает немногим более 60 лет. 4 декабря 2008 годы было отмечено 60 лет отечественной информатики. Что касается истории программных технологий, то ей всего 25 лет. Именно 1984 года был взят за точку отчета в статье Кристфера Эберта [1]. Сам термин «программная инженерия» стал широко использоваться 20 лет назад.

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

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

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

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

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

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

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

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

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

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

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

Начнём с официальных представителей лидеров мобильного рынка: Windows, Google и Apple.

Visual Studio 2015

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

Недостатки: новичку будет просто невозможно самостоятельно разобраться с Visual Studio без прохождения специальных курсов и чтения литературы. Это продукт скорее для опытных разработчиков, обращающих внимание на качество редактора и функции тестирования.

Android Studio

Описание: относительно молодая и стремительно развивающаяся IDE, ориентированная на разработчиков приложений для Android.

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

XCode

Описание: IDE, ориентированная на создание приложений для OS X и iOS. Для использования языков Objective C и Swift на сегодня это лучшее, а для некоторых задач и вовсе единственное решение.

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

От официальных представителей перейдём к универсальным кроссплатформенным средам разработки:

Xamarin Studio

Описание: популярный инструмент разработки приложений под Windows, Phone, Android и iOS, использующий по сути только один язык — C#. Помимо непосредственно Xamarin Studio вы также можете пользоваться плагином для Visual Studio.

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

IntelliJ IDEA

Описание: IDE, разработанная компанией JetBrains, позволяющая создавать программы на множестве популярных языков, среди которых Java, JavaScript, Python, Ruby, Groovy, Scala, PHP, C, C++.

Недостатки: производительность. Томительное ожидание выполнения компиляции, перекомпиляции, тестирования порой действительно раздражает.

Appcelerator Titanium

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

Недостатки: возможности, предоставляемые Appcelerator Titanium имеют и обратную сторону: генерируемые ошибки в коде, искусственные ограничения, недостаточно качественная документация.

Eclipse

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

Недостатки: существенная нехватка документации, нет единого сообщества разработчиков.

Netbeans

Описание: мощная IDE для разработки приложений на Java, JavaScript, Python, PHP, C, C++ и даже Ада.

Недостатки: невысокое быстродействие из-за концепции «всё в одном». Некоторые плагины (в том числе для разработки приложений для Android) имеют существенные ограничения функциональности.

PhoneGap

Описание: необычная среда разработки кроссплатформенных приложений, не требующая знания «родных» языков. То есть для того, чтобы создать приложение для Android, знание Java вам не потребуется. Используются JavaScript в связке с HTML5 и CSS3.

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

MS Visual Studio

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

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

PyCharm

Одной из лучших полнофункциональных IDE, предназначенных именно для Python, является PyCharm. Существует как бесплатный open-source (Community), так и платный (Professional) варианты IDE. PyCharm доступен на Windows, Mac OS X и Linux.

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

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

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

Язык Java тоже универсален, более прост в изучении, но обладает на мой взгляд просто огромным минусом – крайне низкая скорость работы. Это сильно ограничивает его применение: большие программы на нем лучше не писать из-за возникающей потребности в мощном аппаратном обеспечении.

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

Ассемблер – вообще говоря это группа языков со схожим синтаксисом, но многими различными параметрами в зависимости от платформы (Например, ассемблер х86 это совсем не одно и то же, что и ассемблер SPARC).

Выбор языка зависит от задач, которые хочет решить программист. Для интернет-проектов популярен Python, который используют в своих проектах Google и Facebook, для мобильных приложений под Android лучший друг — Java, а под iOS — Swift.

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

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

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

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

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

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

  1. Беляев М., Лысенко Л, Малинина Л. Основы информатики. Учебник для студентов вузов -  изд. Ростов-на-Дону: Феникс, 2006 год - ISBN: 5-222-09776-5 - 352 с.
  2. Бьянкуцци Ф., Уорден Ш. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования. — СПб.: Символ-Плюс, 2010. — 608 с. — ISBN 978-5-93286-170-7.
  3. Воройский Ф.С. Информатика. Новый систематизированный толковый словарь-справочник (Введение в современные информационные и телекоммуникационные технологии в терминах и фактах). - 3-е изд., перераб. и доп. - М.: ФИЗМАТЛИТ, 2003. - 760 с. ISBN 5-9221-0426-8
  4. Гавриков М. М., Иванченко А. Н., Гринченков Д. В. Теоретические основы разработки и реализации языков программирования. — КноРус, 2013. — 178 с. — ISBN 978-5-406-02430-0
  5. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования: Учеб. пособие. - М.:ФОРУМ: ИНФРА-М. 2004. - 432 с. - (серия "Профессиональное образование") ISBN 5-8199-0046-4 (ФОРУМ), ISBN 5-16-000992-2 (ИНФРА-М)
  6. Дал У., Дейкстра Э., Хоор К. Структурное программирование / пер. с англ. С.Д. Зеленцкого, В.В. Мартынюка, Л.В. Ухова ; под ред. Э.З. Любимского, В.В. Мартынюка. — М.: Мир, 1975. — С. 247. http://padaread.com/?book=23294
  7. Дейкстра Э. Дисциплина программирования // М.: Мир, 1978. - С. 275.
  8. Кауфман В.Ш. Языки программирования. Концепции и принципы. – М.: ДМК Пресс, 2010. 464 с.: ил. ISBN 978-5-94074-622-5 (оформление, издание ДМК Пресс, 2011 Москва)
  9. Кнут Д. Э. Искусство программирования. Том 1. Основные алгоритмы (The Art of Computer Programming. Volume 1. Fundamental Algorithms) / под ред. С. Г. Тригуб, Ю. Г. Гордиенко и И. В. Красикова (разд. 2.5 и 2.6). - Москва: Вильямс, 2002. - Т. 1. - 720 с. - ISBN 5-8459-0080-8.
  10. Роберт В Себеста. Основные концепции языков программирования - 5-е издание, (Sebesta, Robert W. Concepts of Programming Languages, 5th Edition) ISBN 5-8459-0192-8, 0-201-75295-6; формат 70x100/16; 2001, 3 кв.; Вильямс. – 672 с.
  11. Тюгашев А., под ред. Каляевой Е. Языки программирования. Учебное пособие. Стандарт третьего поколения (Учебник для ВУЗов) – изд. Питер, 2014 г. – с. 336 - ISBN: 978-5-496-01006-1
  12. Тюгашев А. Основы Программирования. Часть I (Учебное пособие) – СПб: Университет ИТМО, 2016. – 160 с.
  13. Э.Дейкстра «Взаимодействие последовательных процессов» (сборник статей «Языки программирования») – М.:, Мир, 1972
  14. Эдсгер В. Дейкстра 1930 - 2002 Рукописи (EW Dijkstra Archive) http://www.cs.utexas.edu/users/EWD/
  15. Разные языки программирования и их области применения. Лекция в Яндексе – январь 2016 г. - https://habr.com/ru/company/yandex/
  16. Керниган Б. У., Ритчи Д. М. Язык программирования C = C programming language. - 2-е изд. — М.: «Вильямс», 2007. - С. 304. - ISBN 0-13-110362-8.

ПРИЛОЖЕНИЕ

Рисунок 1.

Рисунок 2.

Рисунок 3. График популярности языков, IEEE Spectrum

Рисунок 4. Количество правок кода в Open Source-проектах в 2017 году. Источник: GitHub