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

Классификация языков программирования высокого уровня (Сопоставление современных языков программирования)

Содержание:

Введение

Актуальность. Мир IT сильно поменялся за последние годы, появились новые приоритеты и технологии – вместе с ним сильно изменился процесс разработки. Сегодняшние средства разработки — это совсем не те продукты, которые были лет десять назад, они построены на новейших технологиях, интегрируются со средствами групповой разработки, планирования и управления проектами, средствами оценки рисков, управления жизненным циклом приложений и позволяют создавать настоящую среду для индустриального программирования.

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

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

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

Достижение указанной цели определило постановку и решение следующих задач:

  • исследовать понятие и виды языков программирования;
  • провести обзор современных языков программирования;
  • сопоставить языки программирования.

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

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

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

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

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

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

1.1. Содержание понятия языков программирования и их история создания

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

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

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

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

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

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

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

Хотя к этому времени (40-е годы XX столетия) уже была известна модель хранимой программы фон Неймана, элементная база еще не позволяла создавать оперативные запоминающие устройства достаточного объема для хранения кодов инструкций, их едва хватало для хранения данных (память размером в 1000 машинных слов считалась огромной и стоила астрономическую сумму). Поэтому между теорией и практическим ее воплощением прошло несколько лет, пока, наконец, не появились действительно универсальные цифровые ЭВМ, позволяющие быстро менять программы путем загрузки их в оперативную память. Громоздкие коммутационные панели, опутанные клубками проводов, исчезли, их заменили массивы кодов инструкций, загружаемых с различных устройств хранения информации: перфолент и перфокарт, магнитных лент, барабанов[7].

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

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

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

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

  • формирование кода команды;
  • вычисление физических адресов ячеек с данными;
  • вычисление смещений для команд условного и безусловного ветвлений.

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

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

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

- языками ассемблера, или, кратко, тоже ассемблерами[10].

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

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

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

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

FORTRAN был первым успешно реализованным языком программирования высокого уровня. Разрабатывался он во времена жесточайшего дефицита оперативной памяти, который ставил под сомнение саму возможность практической реализации компилятора какого-либо из языков высокого уровня (ЯВУ)[12].

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

Несмотря на отсутствие опыта (откуда же ему было взяться у разработчиков первого компилятора, когда даже теория компиляции еще не была разработана), эта задача была решена разработчиками блестяще: компилятор FORTRAN I для мэйнфреймов IBM удерживал рекорд по степени оптимизации кода в течение 20 лет! Хотя этому меньше удивляешься, узнав, что во главе разработки стоял гениальный Джон Бэкус, а в его команду входили Ш. Бест, Х. Геррик, П. Шеридан, Р. Натт, Р. Нельсон, И. Зиллер, Р. Голдберг, Л. Хейбт и Д. Сейр. Немалую роль сыграла и поддержка коллектива руководством IBM, даже несмотря на то, что проект потребовал куда больше ресурсов, чем первоначально планировалось.

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

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

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

С мая 1962 г. началась работа по стандартизации языка, результатом которой стал FORTRAN 66 - первый в мире стандарт на ЯВУ. Язык заслуженно получил очередной титул "первый".

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

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

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

На этом эволюция языка-долгожителя не остановилась, и в 1990 г. увидел свет очередной стандарт, FORTRAN 90. Впрочем, он слишком опоздал со своим появлением, дав приличную фору по времени своим конкурентам, главным из которых явился, безусловно, C++. Несмотря на очевидные усовершенствования языка, FORTRAN 90 не получил такого ошеломляющего успеха, как его знаменитые предшественники, и удовольствовался весьма скромной нишей. Не прибавило ему популярности и появление следующего стандарта, FORTRAN 95. Новое поколение программистов ориентировано на C++, Java и C#, и старому доброму FORTRANу, увы, нечего им противопоставить[12].

Третье поколение языков программирования представляет Algol 60[13]. Algol разрабатывался комитетом, специально созданным для разработки языка высокого уровня общего назначения, пригодного для научных вычислений (хотя в промышленности в то время царила эйфория, навеянная успехом FORTRAN'а, в академической среде находились люди, способные заглянуть дальше и видящие, в какой тупик со временем неизбежно заведет FORTRAN).

Как и в большинстве других языков программирования, программа на Algolе состоит из главной программы и набора подпрограмм. При их построении используются блоки - наборы описаний и последовательности операторов, ограниченные "скобками" begin и end. Структуры данных, созданные внутри блока, локальны в его пределах и при выходе из блока уничтожаются. Таким образом можно управлять временем жизни данных и областью видимости их идентификаторов[13].

Четвертое поколение представлено языками поддержки сложных структур данных. Ярким примером можно назвать язык SQL[14].

Язык SQL был разработан в конце 70-х годов в компании IBM и был впервые реализован в реляционной СУБД IBM System R. В дальнейшем, благодаря своей элегантности, независимости от специфики компьютера и поддержке лидерами в области технологии реляционных баз данных, SQL стал и в обозримом будущем останется стандартом "де-факто" для всех реляционных систем обработки данных.

Первый международный стандарт языка SQL был принят в 1989 году ANSI. Этот стандарт называют SQL/89. Подавляющее большинство СУБД поддерживают этот стандарт полностью. В связи с развитием информационных технологий через некоторое время возникла необходимость расширения стандарта. В 1992 году был принят новый стандарт SQL/92. Затем в 1999 году был принят стандарт SQL/99 и, наконец, самый последний стандарт языка SQL был принят в 2003 году и носит название SQL/2003. Стоит, правда, сказать о том, что не все СУБД ограничиваются полной поддержкой стандарта и часто добавляют в язык SQL какие-то специфичные возможности с целью повышения конкурентоспособности СУБД[14].

Следующее поколение – это языки искусственного интеллекта.

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

В 1977 году в Эдинбурге Уоррен и Перейра создали очень эффективный компилятор языка Пролог для ЭВМ DEC–10, который послужил прототипом для многих последующих реализаций Пролога. Что интересно, компилятор был написан на самом Прологе. Эта реализация Пролога, известная как "эдинбургская версия", фактически стала первым и единственным стандартом языка. Алгоритм, использованный при его реализации, послужил прототипом для многих последующих реализаций языка. Как правило, если современная Пролог-система и не поддерживает эдинбургский Пролог, то в ее состав входит подсистема, переводящая прологовскую программу в "эдинбургский" вид. Имеется, конечно, стандарт ISO/IEC 13211– 1:1995, но его поддерживают далеко не все Прологсистемы.

В 1980 году Кларк и Маккейб в Великобритании разработали версию Пролога для персональных ЭВМ.

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

На сегодня существует довольно много реализаций Пролога. Наиболее известные из них следующие: BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, МПролог, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic Knowledge Workbench, Strawberry Prolog, SWI Prolog, UNSW Prolog и т. д.

В нашей стране были разработаны такие версии Пролога как Пролог-Д (Сергей Григорьев), Акторный Пролог (Алексей Морозов), а также Флэнг (А Манцивода, Вячеслав Петухин).

Следующее поколение – это языки нейронных сетей (самообучающиеся языки). Исследовательские работы в этой области начались в середине 80-х годов XX века.

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

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

По уровню реализации:

Низкоуровневые (C, C++, Assembler)

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

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

Среднеуровневые (C#, Java)

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

Минусы: Требуется дополнительно установленная среда для выполнения байт-кода (Java Runtime Environment для Java); сложно для освоения новичку, так как надо понимать, как устроена память, сборка мусора;

Высокоуровневые (PHP, Python, Ruby, JavaScript)

Плюсы: значительно проще синтаксис, абстракции упрощают жизнь, большие стандартные библиотеки (не надо изобретать велосипед), в целом все просто и интуитивно понятно

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

По способу реализации:

Компилируемые (C++, Objective-C, Delphi, Go)

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

Интерпретируемые (Python, Ruby, Perl, PHP)

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

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

По парадигмам программирования:

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

Процедурное программирование (C, Pascal, MATLAB)

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

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

Объективно-ориентированное программирование (C++, PHP, Python, Ruby, JavaScript), ООП.

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

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

Декларативное программирование (Haskell, Lisp, SQL)

Эта парадигма в отличие от двух предыдущих описывает, не КАК мы получаем результат, а ЧТО мы хотим получить.

Вот вы захотели пиццу: вы просто звоните в пиццерию и заказываете ее. Вам неважно, где и как ее приготовили, вы просто декларируете ваше желание.

Кстати, язык разметки web-страниц HTML является хорошим примером такого программирования. Если вы хотите отобразить на вашей странице изображение, вы просто пишете тэг <img> в вашем html-файле. Как браузер получит эту страницу с сайта, как выведет  изображение – это его проблемы, вы лишь хотите видеть на странице картинку с котиками и получаете это.

Выводы по главе 1:

Язык программирования — формализованный язык для описания программ и алгоритмов решения задач на ЭВМ. Языки программирования являются искусственными; в них синтаксис и семантика строго определены, они не допускают свободного толкования выражения, что характерно для естественного языка. Языки программирования разделяются на три основные категории: языки высокого уровня, языки среднего уровня и языки низкого уровня.

Мы рассмотрели разные классификации языков программирования:

1.По уровню реализации: низкоуровневые, среднеуровневые и высокоуровневые.

2. По способу реализации: компилируемые и интерпретируемые.

3. По парадигмам программирования: процедурные, объективно-ориентированные и декларативные языки программирования.

Глава 2. Современные языки программирования

2.1. Обзор современных языков программирования

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

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

1. Java[6]

Java — один из самых практичных языков программирования для изучения. Его популярность нельзя переоценить, так как большинство (90%) компаний из списка Fortune используют Java для разработки бэкэнд-систем и десктопных приложений. Кроссплатформенность достигнута благодаря JVM.

В Java, как и во многих современных языках, включая C++, Python, etc, используется принцип объектно-ориентированного программирования (ООП). Java в основном используется для создания серверных приложений и мобильных ПО. Также это основа нативных приложений под Android. Данный язык чрезвычайно популярен среди разработчиков, хоть и есть вероятность, что в плане мобильных приложений всю популярность вскоре может отобрать Kotlin.

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

class SomeExample {

public static void main(String[] args) {

System.out.println("Всем привет!");

}

}

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

Когда рубеж изучения Java будет преодолён, стоит рассмотреть перспективу изучения подобных языков, работающих на JVM. К лидерам в сфере может отнести Scala и Kotlin. При их помощи удаётся ускорить процесс написания кода и сделать его более красивым. Дополнительно удаётся задействовать библиотеки Java. Для нормальной работы с этими языками необходимо разобраться с основой на Java, иначе череда ошибок будет нескончаема.

2. C

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

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

#include <stdio.h>

int main (void) {

printf("Привет мир!");

return 0;

}

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

3. C++

С++ был создан в 1983, как альтернатива С, и сразу же приобрел заслуженную популярность. Его главной особенностью являются предопределенные классы. Microsoft Windows и Google Chrome являются самыми известными примерами проектов, созданных на С++. Этот список могут пополнить проекты Adobe и Amazon’a. Данный язык программирования остаётся востребованным и по сей день, поскольку имеет мощный инструментарий, который может быть адаптированы в различных сферах, таких как финансы, банки, игры, связь, электронные платежные системы, розничная торговля и многое другое.

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

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

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

#include <iostream>

using namespace std;

int main() {

cout << "Привет мир!";

return 0;

}

Лично для себя взял одну из стандартных библиотек STL, даже её вполне достаточно для большинства проектов и некоторых специфических. Если уж так случится, что функционала окажется недостаточно, пригождается Boost.

4. C#

Разработанный Microsoft, этот мультипарадигмальный язык программирования общего назначения использовался для разработки приложений на платформе Microsoft. C# — это объектно-ориентированный язык, который используется для разработки приложений, основанных на .NET frameworks. И, если это ваш рынок, то C# — лучший язык для создания нативных приложений для платформы Microsoft. Кроме того, он является рекомендуемым языком для разработки игр с использованием движка Unity Game.

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

На C# вы можете написать что угодно: веб-сервисы, мобильные ПО, серверные приложения и так далее. И в то время, как эксперты утверждают, что спрос на C# падает, Xamarin опровергает эти утверждения, поскольку оказывается, что эта платформа упрощает создание приложений для Android и iOS.

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

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

using System;

namespace SomeExample {

class Example {

public static void Main() {

Console.WriteLine("Привет мир!");

}

}

}

Когда C# станет пройденным этапом стоит развиваться за счёт изучения языка Go, который заточен под создание сетевых программ. Освоение Goприводит к формирования единого стиля, что крайне удобно для командной работы.

5. Python

За этим языком будущее, и это не преувеличение. Во-первых, он прост в понимании и использовании: Python постепенно вводят в учебную программу, повсеместно вытесняя отживший свое Паскаль и прочие «деревянные» языки. Во-вторых, это нейронные сети: если разработчик ударяется в машинное обучение, то сразу же обращает свое внимание на Python. Почему? Да просто данный ЯП оброс достаточным количеством библиотек, ориентированных на нейронные сети (Ruby в этом плане сильно проигрывает).

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

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

print("Привет мир!")

Причины для начала изучения именно этого языка: большое разнообразие библиотек, встраивается машинное обучение. Python можно назвать лучшим выбором из-за наличия ML-библиотек.

6. JavaScript

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

Ввод современных стандартов приносит радость глазам. Если будет недостаточно функций или потребуется поддержка устаревших движков, можно присоединить трансплитеры. Среди лучших – TypeScript, Babel, CoffeScript.

console.log("Привет мир!")

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

7. PHP

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

<?php

echo "Привет мир!";

?>

8. Visual Basic.NET

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

Module SomeExample

Sub Main()

MsgBox("Привет мир!")

End Sub

End Module

Для становления программистом лучше подобрать один из предыдущих вариантов. Работа вас найдёт сама и она будет значительно интереснее и более оплачиваемой.

9. Assembly Language

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

.model small

.stack 100h

.data

msg db 'Привет мир!$'

.code

start:

mov ah, 09h ; Display the message

lea dx, msg

int 21h

mov ax, 4C00h ; Terminate the executable

int 21h

end start

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

10. Ruby

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

puts 'Привет мир!'

Согласно тенденции, сегодня программисты на Ruby постепенно уменьшаются. Большинство специалистов переквалифицируются в другие русла.

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

Вышло ежегодное исследование TIOBE Index for January 2018, где определены самые популярные языки программирования 2018 года. 

Заметим, что по рейтингу TIOBE вовсе нельзя судить о качестве или универсальности для изучения языка программирования, главный критерий отбора индекса заключается в количестве поисковых запросов по каждому конкретному языку. То есть, чем больше через самые популярные в мире поисковые системы (Google, Yahoo!, Baidu, Wikipedia, YouTube) ищется тот или иной язык программирования, тем выше он будет находиться в рейтинге.

Рисунок 1. Индекс популярности языков программирования по исследованию TIOBE

Итак, на январь 2018 года рейтинг самых востребованных языков программирования по версии TIOBE выглядит так:

  1. Java
  2. C
  3. C++
  4. Python
  5. C#
  6. JavaScript
  7. VisualBasic.NET
  8. R
  9. PHP
  10. Perl

Рисунок 2. Сравнение рейтинга популярности языков программирования в 2017 и 2018 годов

Возглавляет рейтинг популярности язык программирования Java. Практичный и перспективный язык программирования для изучения. 90% компаний из списка Fortune используют Java для разработки backend’а и десктопных приложений. Ценится за кроссплатформенность благодаря JVM.

На второй строчке подряд и 2017, и 2018 год стоит язык С. C относится к низкоуровневым языкам и работает на «машинном уровне», что ускоряет процесс обработки информации и позволяет писать код под «железо» (микроконтроллеры, процессоры). Он работает практически на всех вычислительных платформах. Dropbox, eBay и Spotify используют C-программирование, а вся ОС Linux полностью написана на C.

На третьей строчке также второй год подряд обосновался С++. Его главной особенностью являются предопределенные классы. Microsoft Windows, Google Chrome, Adobe, Amazon — знакомые вам проекты, созданные на С++. Этот язык до сих пор востребован работодателями, поскольку имеет мощный инструментарий и может быть адаптирован в различных сферах.

Финансы, игры, связь, электронные платежные системы, розничная торговля — знание С++ позволяет писать игры и сложные коммерческие системы наряду с простыми приложениями.

Если сравнивать языки программирования по быстродействию, то рассмотрим рисунок 3. На рисунке на котором указано время выполнения в секундах (столбцы с пометкой t) и требуемая память в мегабайтах (столбцы с пометкой m) при тестировании нескольких программ (рис.3). Проверялись реализации алгоритма решения головоломки судоку (sudoku), умножение матриц (matmul), обработка регулярных выражений (patmch) и подсчёт числа повторяемости слов в тексте (dict). Первые две задачи в большей степени показали производительность реализаций самих языков программирования, остальные – эффективность дополнительных библиотек.

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

По данным, приведённым в исследовании, самым быстрым можно считать язык программирования C/C++; за ним с небольшим отрывом следуют Java и C#; затем идут различные реализации компиляторов Python; заметно отстают интерпретаторы Python; а замыкает список (с большим отставанием) язык статистических вычислений R.

Глава 3. Пример использования языков программирования Java и C++

3.1 Отправка электронной почты с помощью Java:

Для отправки электронной почты необходимо установить соединение с сокетом по порту 25, который обычно используется для протокола SMTP(Simple Mail Transport Protocol - простой протокол передачи почты). Протокол SMTP описывает формат электронных сообщений. Вы можете подключаться к любому серверу, на котором выполняется служба SMTP. Однако сервер должен быть готов к приему запроса на соединение. 

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

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

Создайте сокет на компьютере:

В выходном потоке передайте следующую информацию:

В спецификации протокола SMTP(документ RFC 821) требуется, чтобы строки заканчивались символами /r и /n.

Приведем пример с надписью «Hello World» на языке Java, С++ и на С.

Java.

С

С++

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

Строка 3. В C/C++ выполнение программы всегда начинается с функции main.

Строки 7 и 11. В заголовке цикла через точку с запятой указываются начальная установка, условие продолжения и правило пересчета параметра цикла. Операции ++ и -/- - известнейшие из сокращений языка С, означающие инкремент и декремент переменной, то есть увеличение и уменьшение ее значения на единицу.

Строка 8. Функция scanf вводит по формату, заданному первым параметром, значения переменных, адреса которых заданы остальными параметрами. Здесь адрес, куда вводится значение, вычисляется с помощью адресной арифметики, к адресу расположения массива М прибавляется смещение на N элементов. Тот же эффект можно получить, записав &M[N].

Строка 12. Операция % вычисляет остаток от деления. Условие оператора if считается выполненным, если численное значение выражения отлично от нуля.

Строка 13. Функция printf - печать по формату действует аналогично scanf, но вместо адресов ей передаются значения, подлежащие выводу.

Строки 3-13. Объявляется темплетный класс Аrray с параметром Т. Он представляет собой массив переменного размера объектов типа Т. Конечно, в нашей задаче нет никакой необходимости использовать темплетный класс. Однако нам хотелось продемонстрировать, как на C++ создается полиморфная структура данных, способная работать с любым типом элементов.

Строка 5. Конструктор класса. В нем инициализируется представление объекта. Например, в поле М заносится адрес блока памяти, заказанного операцией new T[Size].

Строка 8. Пример перегрузки операции []. Функция operator [] будет вызываться, когда квадратные скобки будут появляться справа от объекта класса Array .

Строка 9. Эта функция основная в реализации. Она добавляет элементы в массив, расширяя его при необходимости. Поскольку она сложнее остальных, ее определение вынесено из описания класса. Функции, описанные в теле класса, реализуются в C++ не вызовом, а inline-подстановкой. Это ускоряет работу программы, хотя увеличивает ее размер.

Строки 15-24. Определение функции Аrrау::Add(T) (между прочим, это ее полное имя).

Строка 27. Создаем объект типа Array. Темплет Аггау параметризируется типом int.

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

Заключение

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

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

Рассмотрены так же реализации одной и той же задачи в совершенно различных языках программирования. В обзор включены практически все широко используемые языки. Сюда вошли 5 языков, во всех рейтингах называемые в числе наиболее используемых в реальных проектах: C, C++, Java, C#, Python. Рейтинг самых популярных языков программирования второй год подряд возглавил Java.

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

В третьей главе мы рассмотрели примеры использования Java и С: пример с надписью «Hello World», отправка электронной почты с помощью Java и ввод из файла ряд целых чисел, а затем вывести только нечетные из них, причем в обратном порядке следования на языке С++.

Список литературы

  1. Александреску. А. Язык программирования D / А. Александреску. — СПб.: Символ-плюс, 2014. — 544 c.
  2. Керниган. Б. Язык программирования C. 2-е изд. / Б. Керниган, Д.М. Ритчи. — М.: Вильямс, 2016. — 288 c.
  3. Хорстманн, К. С. Java. Библиотека профессионала, том 1. Основы: пер. с англ. // Кей С. Хорстманн, Гари Корнелл. – Т. 1. – 9-е изд. – М.: ООО «И.Д. Вильямс», 2014. – 684 с.
  4. Шохирев. М.В. Язык программирования Perl 5 / М.В. Шохирев. — М.: Интуит, 2014. — 279 c.
  5. McALLISTER N. InfoWorld. «10 языков программирования, которые могут перевернуть мир IT» // Компьютерные вести [Электронный ресурс]. URL: http://www.kv.by/content/325498-10yazykovprogrammirovaniya-kotorye-mogut-perevernut-mir-it (дата обращения: 20.01.2020).
  6. Отличия Java от C++ [Электронный ресурс] // Справочник CodeNet – все для программиста. – URL: http://www.codenet.ru/ webmast/java/02.php (дата обращения: 20.01.2020).
  7. Развитие языков программирования. Эволюция вычислительных систем [Электронный ресурс]. URL: http://referatwork.ru (дата обращения: 20.01.2020).
  8. Сравнение с языком Java [Электронный ресурс] // C++. – URL: https://sites.google.com/site/programme666/home/istoria-cozdania/ filosofia-c/sravnenie-s-azykom-java (дата обращения: 20.01.2020).
  9. Языки программирования [Электронный ресурс]. URL: http://lifeprog.ru (дата обращения: 20.01.2020).
  10. Лин, В. PDP-11 и VAX-11. Архитектура ЭВМ и программирование на языке ассемблера / В. Лин. - М.: Радио и связь, 2016. - 320 c.
  11. Калашников, О. Ассемблер? Это просто! Учимся программировать (+ CD-ROM) / О. Калашников. - М.: СПб: БХВ, 2017. - 384 c.
  12.  Немнюгин, М.А. Современный фортран. Самоучитель / М.А. Немнюгин, О.Л. Стесик. - М.: [не указано], 2016. - 874 c.
  13. Лавров, С.С. Универсальный язык программирования (Алгол 60) / С.С. Лавров. - М.: Наука. Главная редакция физико-математической литературы, 2015. - 172 c.
  14. Аллен, Г. Тейлор SQL для чайников / Аллен Г. Тейлор. - М.: Диалектика, Вильямс, 2015. - 416 c.