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

Обзор языков программирования высокого уровня (ИСТОРИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ)

Содержание:

ВВЕДЕНИЕ

Информационные технологии занимают очень важную нишу в моей жизни. Еще в далеком детстве я очень любил копаться в технике и изучать научные журналы. Помню, как отец купил нам первый компьютер и как быстро я его освоил. Для меня было важно освоить не только аппаратную его часть, но и программную. В начале я хотел писать курсовую работу на другую тему. Но посмотрев на список еще раз, я решил бросить себе вызов и написать на тему, знания о которой у меня минимальные, чтобы во время написания курсовой подтянуть свои знания в этой сфере. Таким образом темой курсовой работы будет Обзор языков программирования высокого уровня. Язык программирования — это своего рода способ для общения между человеком и машиной. В науке язык программирования известен как набор правил, с помощью которых программист записывает исходную программу. Это единственный способ, который позволяет управлять железом. В 1969 г. Саммет (Sammet) привел список из 120 достаточно широко использовавшихся в то время языков. В 70-е годы Министерством обороны США был составлен отчет, согласно которому установлено, что в различных оборонных проектах было использовано более 500 языков. В настоящее время список рабочих языков программирования насчитывает несколько тысяч экземпляров. Однако большинство программистов пользуются всего несколькими языками. Языки программирования делятся на две основные группы: языки низкого уровня и языки высокого уровня. В этой работе я в начале расскажу об истории и этапах развития языков программирования, после чего напишу о разновидности языков и их классификации и в конце концов сосредоточусь на главной теме моей работы, а именно обзоре языков программирования высокого уровня. В конце работы я подведу итоги и подробно расскажу о проблемах, с которыми столкнулся на разных этапах выполнения. Ссылаться я буду на литературу из университетской библиотеки и на работы, рекомендованные авторитетными педагогами и ресурсами. Среди использованной литературы я особенно выделю труды, которые мне показались самыми емкими: Федорова Д. Ю. «Основы программирования на примере языка Python», Алгоритмы. Построение и анализ. 3-е издание Т. Кормена, Ч. Лейзерсона, Р. Ривеста, К. Штайна и Стивена С. Скиены. Алгоритмы. Руководство по разработке.

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

Об истории программирования

Давайте начнём с самого начала. В самом начале у компьютеров не было даже клавиатуры! То есть всё было очень плохо — у них не было ни клавиатуры, ни экрана, были перфокарты (это такие штучечки с дырочками или с отсутствием дырочек). Соответственно, то ли штырьки туда засовывали, то ли там светом светили. Если есть дырочка (или наоборот нет) — это означало нолик или единичку. И программы в то время писали с помощью машинных кодов — у каждой операции в компьютере (сложение, вычитание, какие-то более сложные операции) был какой-то код машинный. Люди сами по табличке выбирали этот код, всякие адреса в памяти, всё это выбивали руками и засовывали в считыватель — и оно всё считалось. Конечно, работа программиста была, наверное, тогда не особо интересной — проделывать дырочки — и с развитием науки и техники, конечно, начали придумывать всякие, более «интересные» штуки. Например, ассемблер (Assembler), который уже несколько облегчал жизнь.[1]

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

Рисунок 1.1. Взаимодействие ЦП с компонентами

Компьютер способен работать только с двумя видами сигналов: 1 или 0 (машинным кодом). Писать программы вида 1010101010010101010 для человека сложно, мышление его устроено иначе, поэтому появились программы-трансляторы с языка программирования, понятного человеку, на машинный язык, понятный компьютеру. Языки программирования, которые приближены к машинному уровню, называют языками низкого уровня (например, язык ассемблера). Другой вид языков – языки высокого уровня (например, Python, Java, C#), еще больше приближенные к мышлению человека. У языков программирования интересная история. Они создавались не на пустом месте, а под конкретные задачи, стоявшие на тот момент перед их разработчиками, отсюда становится понятной область применения того или иного языка программирования. На сегодняшний день существуют тысячи языков программирования, но наибольшую роль сыграли лишь некоторые из них.[3]

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

Ранее мы сказали, что началом общения с компьютером послужил машинный код. Затем в 50-ые годы двадцатого века появился низкоуровневый язык ассемблера, наиболее приближенный к машинному уровню. Он привязан к процессору, поэтому его изучение равносильно изучению архитектуры процессора. На языке ассемблера до сих пор пишут программы, он незаменим в случае небольших устройств (микроконтроллеров), обладающих очень ограниченными ресурсами памяти. Следующий этап – появление языка Фортран, предназначавшегося для математических вычислений. Со временем росла потребность в новых кадрах и необходимость в обучении программированию. Обучение на языках ассемблера или Фортране требовало много сил, поэтому непосредственно в 60-70-ые годы появляется плеяда языков для обучения: Basic, Pascal. Язык Pascal до сих пор используется в школах в качестве основного языка обучения программированию. В это же время ведутся исследования в области разработки операционных систем, что приводит к появлению системы UNIX. Первоначально эта операционная система была написана на языке ассемблера, что усложняло ее модификацию и изучение, тогда Д. Ритчи разработал язык С для системного программирования и совместно с Б. Керниганом переписал систему UNIX на этом языке. Впоследствии операционная система UNIX получила широкое распространение (в наши дни больше известны ее клоны GNU/Linux), а вместе с ней – появилось множество программистов, для которых язык С стал родным. Написание программ на этом языке требует хорошей квалификации от программиста, т.к. незамеченная ошибка способна привести к серьезным последствиям в работе программы. До сих пор язык С лидирует в качестве языка для системного программирования.[4] Следующий этап (80-ые годы) характеризуется появлением объектно-ориентированного программирования (ООП), которое должно было упростить создание крупных промышленных программ. Появляется ученый – Б. Страуструп, которому недостаточно было возможностей языка С, поэтому он расширяет этот язык путем добавления ООП.

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

Новый язык получил название С++. В 90-ые годы появляются персональные компьютеры и сеть Интернет, потому требуются новые технологии и языки программирования. В этот момент набирает популярность язык Java, который позволяет в кратчайшие сроки начать писать крупные приложения без опасений что-либо серьезно испортить в системе. Язык Java создавался с оглядкой на С++ и с перспективной развития сети Интернет.[5] Данный язык характеризуется переносимостью своих программ, т.е. написав Java-программу на персональном компьютере, можно запустить ее на кофемашине, если там присутствует виртуальная машина Java. Примерно в одно время с Java появляется Python. Разработчик языка – математик Гвидо ван Россум занимался долгое время разработкой языка ABC, предназначенного для обучения программированию. В одном из интервью он так ответил на вопрос о типе программистов, для которых Python был бы интересен: «Я представлял себе профессиональных программистов в UNIX или UNIX-подобной среде. Руководства для ранних версий Python возвещали что-то вроде «Python закрывает разрыв между Си и программированием оболочки», потому что именно это интересовало меня и моих ближайших коллег. Мне и в голову не приходило, что Python может стать хорошим языком для встраивания в приложения, пока меня не стали спрашивать об этом. То, что он оказался полезен для обучения началам программирования в школе или колледже, – счастливая случайность, обусловленная многими характеристиками ABC, которые я сохранил: ABC был специально предназначен для обучения программированию непрограммистов». К Python мы еще вернемся, а пока продолжим наш исторический экскурс. С ростом сети Интернет потребовалось создавать динамические сайты – появился серверный язык программирования PHP, который на сегодняшний день является лидером при разработке веб-сайтов. В 2000-ые годы наблюдается тенденция объединения технологий вокруг крупных корпораций. В это время получает развитие язык С# на платформе .NET.[6]

Так что же являет собой программа и какие шаги требуется выполнить для ее написания? На первом шаге у программиста есть набор «сырых» данных. Это, к примеру, могут быть разрозненные бухгалтерские отчеты, статистика и пр. Эти сведения необходимо структурировать и поместить в компьютер. Сравним написание программы с приготовлением салата: есть «сырые» овощи, которые нужно помыть и порезать, т.е. структурировать. Затем, если задачу можно разбить на отдельные небольшие подзадачи, то лучше так и поступить. Решить небольшие задачи, убедиться, что они работают и объединить их обратно. На научном языке это называется анализом и синтезом. С опытом приходит умение видеть и выделять подзадачи. Далее, программистом реализуется алгоритм, т.е. набор действий для обработки структурированных данных, исходя из поставленной задачи. Отмечу, что правильный выбор структуры данных влияет на создание (выбор) алгоритма. Мощь языка программирования отчасти заключена в структурах данных, которое он предоставляет для работы. После того, как алгоритм разработан и программа работает (в результате ее работы получается корректный ответ), можно создавать красивый и удобный интерфейс. Часто сталкиваюсь с мнением, что визуальные среды способствуют изучению программированию. Не соглашусь с этим, т.к. визуальная среда становится доминирующей и много сил уходит на ее изучение, вместо того, чтобы заниматься главным (структуризацией и алгоритмизацией). Посмотрите на сайт поисковой системы – поле для ввода с одной кнопкой. Простота скрывает за собой сложные интеллектуальные алгоритмы, которые работают на стороне сервера.[7]

Алгоритмы

Что такое алгоритмы? Говоря неформально, алгоритм — это любая корректно определенная вычислительная процедура, на вход (input) которой подается некоторая величина или набор величин и результатом выполнения которой является выходная (output) величина или набор значений. Таким образом, алгоритм представляет собой последовательность вычислительных шагов, преобразующих входные величины в выходные. Алгоритм также можно рассматривать как инструмент, предназначенный для решения корректно поставленной вычислительной задачи (computational problem). Чтобы представлять интерес, алгоритм должен решать общую, корректно поставленную задачу. Определение задачи, решаемой с помощью алгоритма, дается описанием всего множества экземпляров, которые должен обработать алгоритм, и выхода, т. е. результата, получаемого после обработки одного из этих экземпляров. Описание одного из экземпляров задачи может заметно отличаться от формулировки общей задачи.[8] В постановке задачи в общих чертах задаются отношения между входом и выходом. В алгоритме описывается конкретная вычислительная процедура, с помощью которой удается добиться выполнения указанных отношений. Например, может понадобиться выполнить сортировку последовательности чисел в неубывающем порядке. Эта задача часто возникает на практике и служит благодатной почвой для ознакомления на ее примере со многими стандартными методами разработки и анализа алгоритмов. Задача сортировки (sorting problem) формально определяется следующим образом.[9]

Вход. Последовательность из п чисел (a1, а2,..., аn).

Выход. Перестановка (переупорядочение) (а1, а2, ..., аn) входной последовательности, такая, что а1 < а2 < • • ■ < аn.

Например, если на вход подается последовательность (31, 41, 59, 26, 41, 58), то вывод алгоритма сортировки должен быть таким: (26,31,41,41,58,59). Подобная входная последовательность называется экземпляром (instance) задачи сортировки. Вообще говоря, экземпляр задачи состоит из входных данных (удовлетворяющих всем ограничениям, наложенным при постановке задачи), необходимых для решения задачи. Поскольку многие программы используют ее в качестве промежуточного шага, сортировка является основополагающей операцией в информатике, в результате чего появилось большое количество хороших алгоритмов сортировки. Выбор наиболее подходящего алгоритма зависит от многих факторов, в том числе от количества сортируемых элементов, от их порядка во входной последовательности, от возможных ограничений, накладываемых на члены последовательности, от архитектуры компьютера, а также от того, какое устройство используется для хранения последовательности: основная память, магнитные диски или даже накопители на магнитных лентах. Говорят, что алгоритм корректен (correct), если для любых входных данных результатом его работы являются корректные выходные данные. Мы говорим, что корректный алгоритм решает данную вычислительную задачу. Если алгоритм некорректный, то для некоторых вводов он может вообще не завершить свою работу или выдать неправильный ответ. Правда, некорректные алгоритмы иногда могут оказаться полезными, если в них есть возможность контролировать частоту возникновения ошибок. Тем не менее обычно мы заинтересованы только в корректных алгоритмах. Алгоритм может быть задан на естественном языке, в виде компьютерной программы или даже воплощен в аппаратном обеспечении.[10] Единственное требование — его спецификация должна предоставлять точное описание вычислительной процедуры, которую требуется выполнить.

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

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

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

Вычислительные Модели

Существуют четыре основные вычислительные модели, которые описывают большинство сегодняшних методов программирования:[11]

• императивная модель;

• аппликативная модель;

• модель, основанная на системе правил;

• объектно-ориентированная модель.

Императивные языки

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

Аппликативные языки

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

Языки, основанные на системе правил

Языки, основанные на системе правил, осуществляют проверку наличия необходимого разрешающего условия и в случае его обнаружения выполняют соответствующее действие. Наиболее распространенный язык, основанный на системе правил, — Prolog. Он называется также языком логического программирования, поскольку базовые разрешающие условия относятся к классу выражений логики предикатов. На рис. 2.2. языки, основанные на системе правил, схематически представлены с помощью набора фильтров, которые нужно применить к данным, находящимся в памяти. Выполнение программы на подобном языке похоже на выполнение программы, написанной на императивном языке, за исключением того, что операторы выполняются не в той последовательности, в которой они определены в программе. Разрешающие условия определяют порядок выполнения. Синтаксис таких языков выглядит следующим образом: разрешающее условие1 → действие 1 разрешающее условие 2 → действие 2 …… разрешающее условие n →действие n (Иногда правила записываются в виде действие If разрешающее условие, в котором выполняемое действие записывается слева.)[13]

Рисунок 2.2. Вычислительные модели

Объектно-ориентированное программирование

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

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

Язык программирования, близкий к программированию непосредственно в машинных кодах используемого процессора. Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских). Есть два типа языков низкого уровня: язык ассемблера (assembly language) и машинный язык (machine code).

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

Язык высокого уровня - язык программирования, средства которого обеспечивают описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня относят Фортран, PHP, Бейсик, Паскаль, Си, Ада, Java и др.

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

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

Pascal

Язык Паскаль получил свое название в честь великого французского ученого, физика-математика Блеза Паскаля, который в 1642 г. изобрел счетную машину для арифметических операций – Паскалево колесо. История создания языка Паскаль начинается с 1965 года, когда международная федерация по обработке информации IFIP предложила нескольким специалистам в области информатики принять участие в разработке нового языка программирования – приемника АЛГОЛА-60. Среди них был швейцарский ученый, работавший доцентом информатики Стенфордского университета Николаус Вирт. В конце 1968 года Вирт и сотоварищи из швейцарского федерального института технологии в Цюрихе разработали первую версию Паскаля, а спустя 2 года – 1й вариант компилятора. В 1971 году Вирт выпустил описание своего языка. Создавая Паскаль, Вирт преследовал 2 цели: во-первых, разработать язык, пригодный для обучения программированию как систематической дисциплине; во-вторых, реализация языка должна быть эффективной и надежной на существующих вычислительных машинах.[15] Одним из достоинств языка Паскаль является то, что он воплотил в себе идею структурного программирования, суть которой заключается в том, что с помощью нескольких конструкций можно выразить в принципе любые алгоритмы: линейные, ветвление, циклические конструкции. При создании и совершенствовании языка Вирт ввел много новшеств, в частности, изобрел синтаксические диаграммы, с помощью которых удобно представлять конструкции языка, первый ввел в алфавит квадратные скобки, высказал идею решения проблемы переносимости программ в виде Пи-системы, которая заключается в том, что написанная на Паскале программа транслируется в Пи-код, в машинный язык некоторой идеальной машины, а затем интерпретируется на реальных машинных языках. Он выявил и ряд недостатков: отсутствие операции возведения в степень, понятие отдельно транслируемого модуля, затрудняющее тем самым создание больших программ и др.[16] Он является популярным языком программирования и в наши дни. Именно на нем обучают студентов на первом курсе университета и в старшей школе. На его основе построено множество других языков.

Программа записывается в виде последовательности символов, к числу которых относятся латинские и русские буквы, арабские цифры, знаки препинания, знаки операции. Для обозначения исходных данных и результатов вычислений употребляются переменные, которыми могут быт* не только любые буквы — a, b, X, Y, ш, щ и т. д., но и, например, последовательности символов вида хі, х2, time, Сила, alfalQQ, аІа2 и т. д., которые состоят из букв и цифр и начинаются с буквы. Соответствующее исходное данное или результат вычисления называется значением переменной. Пока мы будем иметь дело с переменными, значениями которых являются числа.[17] Числа в программе записываются в десятичной системе, вместо запятой пишется точка: 0, —17, 0.26, 3.1415, +1.567, —0.18 и т. д. Количество цифр в числе не может быть слишком большим; граница для этого количества в паскале не оговаривается — она определяется характеристиками используемой вычислительной машины. Это относится и к количеству букв и цифр в переменной.[‎6] Переменные и числа — простейшие частные случаи выражения. Более сложные выражения строятся из чисел и переменных с помощью знаков операций сложения, вычитания, умножения и деления. Эти знаки суть +, —, *, /. Кроме того, в выражении могут быть использованы круглые скобки и некоторые функции. Знак операции деления / позволяет записывать в строку выражения, которые традиционно записываются с выходом из строки: в паскале пишут а/b, с /\1, (a*x + 6)/(c + d) и т.д, Знак операции умножения * нельзя опускать или заменять точкой. Допустимое для математического текста выражение 0,6 (х + 7) • (х + 2) • (х— 3) в паскале должно быть записано в виде 0.5*(х + 7)*(х + 2)*(х— 3). Знак — (минус) может употребляться и для изображения величины, противоположной данной: —х, — (а*Ь+ у) и т. д. Нельзя размещать два знака операций рядом; последовательности символов 3»—2, х \/—х2 — это не выражения, выражениями будут 3*(—2), х \/( —х2). В выражении могут быть использованы следующие функции: sin(E)— синус Е, cos{E)— косинус Е, arctan(E) — главное значение арктангенса Е, Іп(Е) — натуральный логарифм Е, ехр{Е)— показательная функция Е, т. е. ее, abs(E)— абсолютная величина (модуль) Е, т. е. |Е |, sqr(E) — квадрат (вторая степень) Ё, т. е. JE2, sqrt(E)— квадратный корень из Е, т. е. л/Е; выражение, задающее аргумент, всегда заключается в скобки. Так, например, мы пишем sqrt(sqr(b) — 4*а*с). В ходе выполнения программы вычисляются значения выражений.[18] При вычислении действуют обычные правила старшинства операций: старшие операции—■ умножение и деление, следующие по старшинству — сложение и вычитание. Из двух операций одинакового старшинства первой выполняется та, знак которой в выражении встречается раньше. Круглые скобки изменяют этот естественный порядок: значением выражения (* + </)/2 будет половина суммы значений переменных X и у, в то же время значением выражения х + у / 2 будет сумма значения х и половины значения у. Последовательность букв и цифр, начинающаяся с буквы, называется идентификатором. Из рассмотренных примеров видно, что идентификатор не обязательно представляет собой переменную: sin, cos, arctan и т. д. — это не переменные, а имена функций.[19]

Python

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

Чтобы читатель не подумал, что Python – игрушечный язык программирования, на котором можно только обучать основам программирования и дальше о нем благополучно забыть, кратко перечислю области, где он активно применяется[20]:

1. Системное программирование.

2. Разработка программ с графическим интерфейсом.

3. Разработка динамических веб-сайтов.

4. Интеграция компонентов.

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

6. Быстрое создание прототипов.

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

8. Разработка игр.

Рисунок 3.1. Сферы применения языка Python

Python активно совершенствуется и в настоящее время. Часто выходят его новые версии. Официальный сайт http://python.org. Что нам потребуется для выполнения программ на языке Python? [21]

Python – это интерпретируемый язык программирования: исходный код частями преобразуется в машинный в процессе выполнения специальной программой — интерпретатором. Python характеризуется ясным синтаксисом. Читать код на этом языке программирования достаточно легко, т.к. в нем мало вспомогательных элементов, а правила языка заставляют программистов делать отступы. Понятно, что хорошо оформленный текст с малым количеством отвлекающих элементов читать и понимать легче. Python – это полный, можно сказать универсальный, язык программирования. Он поддерживает объектно-ориентированное программирование (на самом деле он и разрабатывался как объектно-ориентированный язык). Также Python распространяется свободно на основании лицензии подобной GNU General Public License.

Если интерпретатору Питона дать команду import this (импортировать "сам объект"), то выведется так называемый "Дзен Питона", иллюстрирующий идеологию и особенности данного языка. Глубокое понимание этого дзена приходит тем, кто сможет освоить язык Python в полной мере и приобретет опыт практического программирования.[22]

1. Beautiful is better than ugly. Красивое лучше уродливого.

2. Explicit is better than implicit. Явное лучше неявного.

3. Simple is better than complex. Простое лучше сложного.

4. Complex is better than complicated. Сложное лучше усложнённого.

5. Flat is better than nested. Плоское лучше вложенного.

6. Sparse is better than dense. Разрежённое лучше плотного.

7. Readability counts. Удобочитаемость важна.

8. Special cases aren't special enough to break the rules. Частные случаи не настолько существенны, чтобы нарушать правила.

9. Although practicality beats purity. Однако практичность важнее чистоты.

10. Errors should never pass silently. Ошибки никогда не должны замалчиваться.

11. Unless explicitly silenced. За исключением замалчивания, которое задано явно.

12. In the face of ambiguity, refuse the temptation to guess. В случае неоднозначности сопротивляйтесь искушению угадать.

13. There should be one — and preferably only one — obvious way to do it. Должен существовать один — и, желательно, только один — очевидный способ сделать это.

14. Although that way may not be obvious at first unless you're Dutch. Хотя он может быть с первого взгляда не очевиден, если ты не голландец.

15. Now is better than never. Сейчас лучше, чем никогда.

16. Although never is often better than *right* now. Однако, никогда чаще лучше, чем прямо сейчас.

17. If the implementation is hard to explain, it's a bad idea. Если реализацию сложно объяснить — это плохая идея.

18. If the implementation is easy to explain, it may be a good idea. Если реализацию легко объяснить — это может быть хорошая идея.

19. Namespaces are one honking great idea — let's do more of those! Пространства имён — прекрасная идея, давайте делать их больше![23]

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

Работать в интерактивном режиме в ОС Linux можно в консоли. Для этого следует выполнить команду python. Запустится интерпретатор, где сначала выведется информация об интерпретаторе. Далее, последует приглашение к вводу (>>>). Запустите интерпретатор Питона. Поскольку никаких команд мы пока не знаем, то будем использовать Питон как калькулятор (возможности языка это позволяют). 2 + 5 3 * (5 - 8) 2.4 + 3.0 / 2 и т.д. Наберите подобные примеры в интерактивном режиме (в конце каждого нажимайте Enter). Ответ выдается сразу после нажатия Enter (завершения ввода команды). Бывает, что в процессе ввода была допущена ошибка или требуется повторить ранее используемую команду. Чтобы не писать строку с самого начала, в консоли можно прокручивать список команд, используя для этого стрелки на клавиатуре. Другой вариант работы в интерактивном режиме — это работа в среде разработки IDLE, у которой есть интерактивный режим работы. В отличие от консольного варианта здесь можно наблюдать подсветку синтаксиса (в зависимости от значения синтаксической единицы она выделяется определенным цветом). Прокручивать список ранее введенных команд можно с помощью комбинаций Alt+N, Alt+P. Запустите IDLE. Попробуйте решать математические примеры здесь. Несмотря на удобства интерактивного режима работы при написании программ на Питоне, обычно требуется сохранять исходный программный код для последующего использования. В таком случае подготавливаются файлы, которые затем передаются интерпретатору на исполнение.[24] По отношению к интерпретируемым языкам программирования, исходный код часто называют скриптом. Файлы с кодом на Python обычно имеют расширение py. Подготовить скрипты можно в той же среде IDLE. Для этого, после запуска программы в меню следует выбрать команду File → New Window (Crtl + N), откроется новое окно. Затем желательно сразу сохранить файл (не забываем про расширение py). После того как код будет подготовлен, снова сохраните файл (чтобы обновить сохранение). Ну и наконец, можно запустить скрипт, выполнив команду меню Run → Run Module (F5). После этого в первом окне появится результат выполнения кода. (Примечание: если набирать код, не сохранив файл в начале, то подсветка синтаксиса будет отсутствовать.) Подготовьте скрипт (с примерами). Запустите его на выполнение.

На самом деле скрипты можно готовить в любом текстовом редакторе (желательно, чтобы он поддерживал подсветку синтаксиса языка Python). Кроме того, существуют специальные программы для разработки. Запускать подготовленные файлы можно не только в IDLE, но и в консоли с помощью команды python адрес/имя_файла. В консоли передайте интерпретатору Питона на выполнение подготовленный файл. Кроме того, существует возможность настроить выполнение скриптов с помощью двойного клика по файлу (в Windows данная возможность присутствует изначально).[25]

Не бойтесь совершать ошибки! Python поправит и подскажет, на что следует обратить внимание.

В случае сомнений в порядке вычислений будет не лишним обозначить приоритет в виде круглых скобок.[26] Выражаясь в терминах программирования, только что мы познакомились с числовым типом данных8 (целым типом int и вещественным типом float), т.е. множеством числовых значений и множеством математических операций, которые можно выполнять над данными значениям. Язык Python предоставляет большой выбор встроенных типов данных.

Java

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

Java-технология используется для разработки приложений, предназначенных для широкого спектра систем – от мобильных устройств до корпоративных систем. Язык Java был создан в 1995 году Джеймсом Гослингом (James Gosling) в корпорации Sun Microsystems (в настоящее время дочерняя компания корпорации Oracle) с целью получения упрощенной платформенно-независимой альтернативы языку C++.[27] Сходство языков C, C++ и Java, прежде всего, проявляется в том, что блоки кода выделяются фигурными скобками {и}, а переменные должны быть объявлены перед их использованием. Кроме того, многие языковые конструкции Java заимствованы из C, например, операторы организации цикла, условные операторы, сравнения и многие другие. Java является объектно-ориентированным (ОО), что позволяет легко связать программные конструкции с объектами-сущностями предметной области в процессе разработки программных систем.

Компилятор Java

Существуют различные типы языков программирования. В некоторых из них программист пишет текст программы (исходный код) и может выполнить ее в исходном виде непосредственно. Это т.н. интерпретируемые языки (например, JavaScript, Python, Ruby). При программировании на платформе Java программист пишет исходный код в файлах с расширением .java, а затем компилирует его. Компилятор проверяет код на соблюдение правил синтаксиса языка, а затем записывает байт-коды (bytecode) в файлы с расширением .class. Байт-коды - это стандартные инструкции, предназначенные для работы на виртуальной машине Java (Java Virtual Machine – JVM).[28] Кроме проверки программы на наличие синтаксических ошибок, компилятор Java добавляет некоторые другие библиотеки (связывает) к программе после завершения компиляции (этап развертывания). Использованием этого уровня абстракции компилятор Java отличается от компиляторов других языков, которые создают инструкции для процессора, на котором впоследствии будет выполняться программа.

Java Development Kit и Java Runtime Environment

Если вы планируете использовать определенный компьютер для разработки программ на Java, то необходимо загрузить и установить Java Development Kit (JDK). Загрузив JDK, вы получите – в дополнение к компилятору и другим инструментам – полную библиотеку классов готовых утилит, которые позволят решить практически любую общую задачу разработки приложений. Если вы планируете использовать этот компьютер только для запуска программ Java, которые были скомпилированы в другом месте, вам просто нужно Java Runtime Environment (JRE). Если JDK установлен на вашем компьютере, он включает в себя JRE. Среда исполнения JRE включает в себя JVM, библиотеки кода и компоненты, необходимые для исполнения программ на языке Java. Независимость от платформы Java исходит от того, что Java программа не знает, под какую операционную систему (ОС) или на каком аппаратном обеспечении она выполняется. Она работает в предустановленным JRE, что означает возможность исполнения на всех платформах, для которых имеется JRE. JRE можно свободно распространять с собственными приложениями в соответствии с условиями лицензии, предоставляя пользователям платформу для работы с вашим ПО.[29]

JVM

Во время выполнения кода JVM читает и интерпретирует файлы с расширением .class и выполняет команды программы на той аппаратной платформе, для которой написана JVM. JVM интерпретирует байт-коды так же, как процессор – инструкции на языке ассемблера. Разница в том, что JVM – это программа, написанная для конкретной платформы. JVM составляет основу принципа языка Java "написано однажды – работает везде" (write-once, run-anywhere). Ваш код будет работать на любом процессоре, для которого есть реализация JVM. Реализация JVM существует для всех основных платформ, таких как Linux и Windows, а подмножества языка Java реализованы в виртуальных машинах для мобильных телефонов и встраиваемых устройств.

Java SE и EE

Прежде, чем перейти к процессу загрузки, вам нужно ознакомиться с еще двумя понятиями: Java SE (Standard Edition) и Java EE (Enterprise Edition). Java EE содержит серверные инструменты и компоненты, которые будут рассматриваться в последующих дисциплинах. Однако уже сейчас можно обозначить разновидности приложений, которые можно разрабатывать на Java, в том числе:  приложения десктопные и распределенные, в том числе для мобильных телефонов. Простые приложения с интерфейсом командной строки или графическим интерфейсом;  апплеты (Applet) – приложения, выполняемые на браузере. Приложение на Java, которое хранится на сервере, загружается браузером и выполняется на клиентском компьютере на виртуальной машине, расширяющей возможности браузера;[30]

 серверные программа Java - Servlet, Java Server Pages (JSP), Java Server Faces (JSF). Серверные программы, предназначенные для выполнения серверных вычислений и организации графического интерфейса Web-приложения;  Enterprise Java Beans (EJB) – серверные компоненты архитектуры Java EE для реализации бизнес-логики;  Web Services - идентифицируемая веб-адресом программная система со стандартизированными интерфейсами взаимодействия.  Распределенные сервисы, использующие RMI (remote method invocation - удаленный вызов процедур). Ниже представлены ряд программ, которые требуют компонентов, не входящих в Standard Edition JDK (доступны в Enterprise Edition):  Servlets;  Web Services;  Enterprise Java Beans. Кроме перечисленных, в состав JavaEE входит большое количество других технологий, которые способствуют эффективной разработке корпоративных распределенных инфокоммуникационных систем. Упомянутые технологии требуют специального рассмотрения и не являются предметом настоящего пособия.[31]

Язык Java специально разработан для качественного рывка в создании интерактивных распределенных приложений для сети Internet и основными достоинствами языка являются:

  • наибольшая среди всех языков программирования степень переносимости программ между платформами (процессорами/операционными системами). Практически любой процессор позволяет использовать программы на Java, также как и практически все операционные системы поддерживают программирование на этом языке, включая Windows, Linux, MacOS, iOS и Android;
  • мощные стандартные библиотеки (frameworks), предназначенные для использования при разработке программ;
  • встроенная поддержка работы в сетях (как локальных, так и Internet/Intranet – сети с использованием TCP/IP).[32]
  • простой сходство с C и C++ устранение проблематичных элементов
  • объектно-ориентированный чистая реализация объектно-ориентированной концепции
  • распределенный поддержка сетевого взаимодействия, удаленный вызов методов • интерпретируемый байт-код выполняется виртуальной машиной Java (JVM)
  • надежный устранение большинства ошибок на этапе компиляции
  • безопасный контроль и ограничение доступа
  • архитектурно-нейтральный работа на любых платформах
  • переносимый независимость спецификации от реализации
  • высокоэффективный приближенность байт-кода к машинному сочетание производительности и переносимости
  • многопотоковый встроенная поддержка многопотокового выполнения приложений
  • динамический загрузка классов во время выполнения приложений.[33]

К недостаткам платформы Java можно отнести:

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

C#

Язык программирования – это набор правил, с помощью которых программист записывает исходную программу. Далее из полученного текста специализированные программы (трансляторы, компоновщики и др.) практически без участия человека формируют код, предназначенный для процессора. По степени соответствия конструкций языка машинному (процессорному) коду языки программирования делятся на низкоуровневые (машинно ориентированные) и высокоуровневые. В свою очередь, языки высокого уровня делятся на структурные (процедурно ориентированные) и объектно ориентированные. В первом случае концепция программирования может быть определена как набор функций (центральный элемент системы), обрабатывающих данные (второстепенный элемент). В объектно ориентированных языках центральное место отведено данным, а выполнение функций так или иначе организовано вокруг этих данных. Типичным представителем процедурных языков считается язык Си, объектно ориентированных – Си++.[35] Последний до недавних пор считался универсальным для решения широкого круга задач.[‎9] При этом использование Си++ в конкретных инструментальных системах (например, Builder) и для конкретного вида приложений (например, сетевых приложений) требовало специализированных добавлений (надстроек) языка и в ряде случаев приводило к созданию своего рода диалектов, в которых базовые конструкции зачастую оказывались не всегда различимым фоном. Когда суммарный вес специфических добавок превысил некоторый порог, появился новый язык программирования С# (произносится как си шарп, хотя разработчики предполагали название си-диез), вобравший в себя наиболее значимые черты своих предшественников и в большей степени отвечающий современным потребностям. Объектно-ориентированный язык программирования. Разработан в 1998—2001. Руководителем группы разработчиков языка С# был Андерс Хейлсберг, сотрудник компании Microsoft (ранее входил в группу разработчиков инструментальной системы Builder). Цели, которые преследовались созданием этого языка, были сформулированы им следующим образом:

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

• создать первый компонентно ориентированный язык программирования семейства C/C++;

• упростить C++, сохранив по возможности его мощь и основные конструкции;

• повысить надёжность программного кода. Язык С# разработан прежде всего для платформы .NET (произносится как дот-нет), которая является средой, объединяющей программные технологии, для разработки Web- и Windows-приложений (отсюда и название).[36] Основу среды .NET составляет CLR (Common Language Runtime) – общеязыковая среда исполнения, которая состоит из двух основных частей:

  • ядра (набор служб, управляющих загрузкой приложения в память, собраны в библиотеке mscoree.dll);
  • библиотеки базовых классов (главная сборка в библиотеке mscorlib.dll).

В составе библиотеки базовых классов выделяется CTS (Common Type System) – общая система типов и подмножество этой системы CLS (Common Language Specification) – общеязыковая спецификация (содержит типы данных, которые гарантированно поддерживаются во всех языках .NET). Процесс создания приложения на C# в среде .NET представляет собой последовательность этапов, изображённую на рис. 1. Наряду с языком C#, в среде .NET в рамках указанной технологии могут быть использованы такие языки, как C++, VB.NET, VisualBasic, Jscript, J# и другие (всего более 30 языков). С одной стороны, язык С# можно считать непосредственным преемником языков С и С++. С другой стороны, нельзя не заметить в его составе многочисленные признаки языка Java.[‎9]

Как уже отмечалось выше, программирование на C# основано на системе (библиотеке) типов CTS. Эта библиотека насчитывает более 4000 различных типов, которые для удобства работы объединены в функциональные группы – пространства имён. Пространство имён может включать классы, структуры, интерфейсы, делегаты, перечисления.[37] Пространства имён структурированы в иерархическую древовидную систему. Часть этой системы представлена на рис. 3.2.

Рисунок 3.2. Очередность этапов создания приложений[‎9]

C++

Современные системы программирования на С++ состоят из нескольких составных частей. Это такие части, как сама среда программирования, язык, стандартная библиотека С-функций и различные библиотеки С-классов. Сразу заметим, что C++ является объектно-ориентированным языком. Основное отличие его от прежних, структурных, языков (примером таких является Турбо-Паскаль или С) является то, что он (С++) способен оперировать не только с переменными и структурами (функциями и процедурами), но и с целыми объектами. Объекты есть комплексы переменных и процедур (функций) по их обработке.[38] Как правило, чтобы выполнить программу на С++, необходимо пройти через 6 этапов: редактирование, препроцессорную (то есть предварительную) обработку, компиляцию, компоновку, загрузку и выполнение. В данном пособии мы будем рассматривать программирование в среде Visual С++ 2008, входящей в состав Visual Studio 20081. Первый этап представляет создание и редактирование файла с исходным текстом программы. Он может выполняться с помощью простейшего редактора текстов программ. Программист набирает в этом редакторе свою С++ программу. При необходимости он снова обращается к ней и вносит с помощью этого редактора изменения в исходный текст программы. Далее программа запоминается на диске. Имена файлов С/C++ программ оканчиваются на «c» или «cpp». Однако, пакет программ Visual С++ 2008 имеет встроенный редактор, которым также можно пользоваться. На втором этапе компилятор начинает препроцессорную обработку текста программы, прежде чем ее компилировать. (Что же делает компилятор? Он переводит программу в машинный код. То есть в результате получаем объектный код программы, но это третий этап.). Следует знать, что в системе С++ программирования перед началом этапа самой трансляции всегда выполняется программа предварительной обработки. Что она делает? Она отыскивает так называемые «директивы трансляции» или «директивы препроцессора», которые указывают, какие нужно выполнить преобразования перед трансляцией исходного текста программы. Обычно это включение других текстовых файлов в файл, который подлежит компиляции. Препроцессорная обработка инициируется компилятором перед тем, как программа будет преобразована в машинный код. Это позволяет забирать нужные программы-функции в текст компилируемой программы до начала процесса компоновки. Третий этап – это компиляция. Как правило, программы на языке С++ содержат ссылки на различные функции, которые определены вне самой программы. Например, в стандартных библиотеках или в личных библиотеках программистов. Объектный код, созданный компилятором, содержит «дыры» на месте этих отсутствующих частей. Четвертый этап – компоновка.[39] Компоновщик связывает объектный код с кодами отсутствующих функций и создает, таким образом, исполняемый загрузочный модуль (без пропущенных «дыр»). Пятый этап – загрузка. Перед выполнением программа должна быть размещена в памяти. Это делается с помощью загрузчика, который забирает загрузочный модуль программы с диска и перемещает его в память. Наконец шестой этап – это выполнение. Программа редко заработает с первой попытки. Каждый из названных этапов может заканчиваться ошибкой или неудачей из-за ошибки. Тогда программист должен вернуться к редактированию исходного текста программы. Он должен внести необходимые изменения в текст программы, предварительно его хорошо проанализировав. Затем снова пройти через все этапы работы с исходным текстом программы до получения работающего без ошибок загрузочного модуля.[40]

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

ЗАКЛЮЧЕНИЕ

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

Из плюсов работы я выделю:

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

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

Минусы работы:

- Тяжело написать что-то новое в теме, которая изучается уже больше полувека.

- Невозможно по-настоящему изучить такую огромное количество материала за столь короткое время.

- Было сложно найти нужное количество качественной литературы.

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

СПИСОК ЛИТЕРАТУРЫ

  1. Богазова З. Разные языки программирования и их области применения. Лекция Густокашина М. в Яндексе URL: https://habr.com/ru/company/yandex/blog/272759 (Дата обращения: 27.09.2019)
  2. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – 152 с.
  3. Алгоритмы. Построение и анализ. 3-е издание Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн. 2013 г. – 1324 с.
  4. Стивен С. Скиена. Алгоритмы. Руководство по разработке 2011 г. – 722 с.
  5. В.Н. Харин, И.С. Кущева Информатика Языки программирования Часть I 2007 г. – 79 с.
  6. Вабищевич С.В. Язык программирования Pascal. Краткий курс лекций. 32 с.
  7. C. A. Абрамов, Е. В. Зима Начала программирования на языке паскаль. 1987 г. – 112 с.
  8. Шапошникова С. Основы программирования на Python Вводный курс Версия 2. 2011 г. – 44 с.
  9. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – 248 с.
  10. А.В. Гаврилов, С.В. Клименков, Е.А. Цопа Программирование на Java Конспект лекций. 2010 г. – 132 с.
  11. Котов О. М. Язык C# краткое описание и введение в технологии программирования 2014 г. – 210 с.
  12. В.Н. Кирнос Основы программирования на языке C++. 2012 г. – 223 с.
  1. Богазова З. Разные языки программирования и их области применения. Лекция Густокашина М. в Яндексе URL: https://habr.com/ru/company/yandex/blog/272759 (Дата обращения: 27.09.2019)

  2. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 6

  3. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 6-7

  4. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 7-8

  5. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 8

  6. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 8

  7. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 9

  8. Стивен С. Скиена. Алгоритмы. Руководство по разработке 2011 г. – С. 22

  9. Алгоритмы. Построение и анализ. 3-е издание Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн. 2013 г. – С. 26

  10. Алгоритмы. Построение и анализ. 3-е издание Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн. 2013 г. – С. 27

  11. В.Н. Харин, И.С. Кущева Информатика Языки программирования Часть I 2007 г. – С. 5

  12. В.Н. Харин, И.С. Кущева Информатика Языки программирования Часть I 2007 г. – С. 5-6

  13. В.Н. Харин, И.С. Кущева Информатика Языки программирования Часть I 2007 г. – С. 7-9

  14. В.Н. Харин, И.С. Кущева Информатика Языки программирования Часть I 2007 г. – С. 9

  15. Вабищевич С.В. Язык программирования Pascal. Краткий курс лекций. C. 2

  16. Вабищевич С.В. Язык программирования Pascal. Краткий курс лекций. C. 2

  17. C. A. Абрамов, Е. В. Зима Начала программирования на языке паскаль. 1987 г. – C. 8

  18. C. A. Абрамов, Е. В. Зима Начала программирования на языке паскаль. 1987 г. – C. 8-9

  19. C. A. Абрамов, Е. В. Зима Начала программирования на языке паскаль. 1987 г. – C. 9

  20. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 10

  21. Шапошникова С. Основы программирования на Python Вводный курс Версия 2. 2011 г. – C. 7

  22. Шапошникова С. Основы программирования на Python Вводный курс Версия 2. 2011 г. – C. 7

  23. Шапошникова С. Основы программирования на Python Вводный курс Версия 2. 2011 г. – C. 8

  24. Шапошникова С. Основы программирования на Python Вводный курс Версия 2. 2011 г. – C. 8-9

  25. Шапошникова С. Основы программирования на Python Вводный курс Версия 2. 2011 г. – C. 7

  26. Федоров Д. Ю. «Основы программирования на примере языка Python» 2019 г. – С. 11-12

  27. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 4

  28. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 4-5

  29. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 5-6

  30. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 6-7

  31. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 7

  32. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 4

  33. А.В. Гаврилов, С.В. Клименков, Е.А. Цопа Программирование на Java Конспект лекций. 2010 г. – С. 5

  34. Дубаков А. А. Объектно ориентированное программирование в Java учебное пособие 2016 г. – С. 5

  35. Котов О. М. Язык C# краткое описание и введение в технологии программирования 2014 г. – C. 4

  36. Котов О. М. Язык C# краткое описание и введение в технологии программирования 2014 г. – C. 4-5

  37. Котов О. М. Язык C# краткое описание и введение в технологии программирования 2014 г. – C. 5

  38. В.Н. Кирнос Основы программирования на языке C++. 2012 г. – C. 8

  39. В.Н. Кирнос Основы программирования на языке C++. 2012 г. – C. 8-9

  40. В.Н. Кирнос Основы программирования на языке C++. 2012 г. – C. 9