Файл: Обзор языков программирования высокого уровня (ИСТОРИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ).pdf
Добавлен: 29.02.2024
Просмотров: 36
Скачиваний: 0
Содержание:
ВВЕДЕНИЕ
Информационные технологии занимают очень важную нишу в моей жизни. Еще в далеком детстве я очень любил копаться в технике и изучать научные журналы. Помню, как отец купил нам первый компьютер и как быстро я его освоил. Для меня было важно освоить не только аппаратную его часть, но и программную. В начале я хотел писать курсовую работу на другую тему. Но посмотрев на список еще раз, я решил бросить себе вызов и написать на тему, знания о которой у меня минимальные, чтобы во время написания курсовой подтянуть свои знания в этой сфере. Таким образом темой курсовой работы будет Обзор языков программирования высокого уровня. Язык программирования — это своего рода способ для общения между человеком и машиной. В науке язык программирования известен как набор правил, с помощью которых программист записывает исходную программу. Это единственный способ, который позволяет управлять железом. В 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] Единственное требование — его спецификация должна предоставлять точное описание вычислительной процедуры, которую требуется выполнить.
КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Языки программирования делятся на две основные категории: языки низкого уровня и языки высокого уровня. Также они делятся на категории, исходя из вычислительной модели, к которой они принадлежат.