1.1. Введение

1.1. Введение

cucp.bitbucket.io
Следующая лекция1.2. Элементы программирования

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

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

Такие фундаментальные идеи были изложены в классической книге «Структура и интерпретация компьютерных программ», которая применяется во многих учебных заведениях для изучения компьютерных технологий. Используя язык Scheme (диалект языка LISP), авторы описали основные концепции программирования, включая абстракцию (данных и исполнения), рекурсию и метаязыковую абстракцию. Текст второго издания книги распространяется под лицензией Creative Commons (CC-BY-NC версии 3.0).

На сайте www.composingprograms.com преподаватель Калифорнийского университета в Беркли, Джон ДеНиро (John DeNero), опубликовал материалы  адаптированные для языка Python под лицензией Creative Commons (CC-BY-SA версии 3.0).

С разрешения автора материалы курса имеют множество заимствований с указанного сайта.

1.1.1. Програмирование на Python

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

— Жюль Анри Пуанкаре

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

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

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

Язык Python — результат многолетней работы сообщества разработчиков-волонтеров. В конце восьмидесятых годов Гвидо ван Россум задумал и создал первую версию языка. В первой главе учебника по Python’у автор объясняет, почему именно этот язык так популярен среди множества существующих сегодня языков.

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

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

Лучший способ начать изучение Python — запустить интерпретатор и начать непосредственное взаимодействие. В этом разделе будет описано как установить Python 3, запустить интерактивную сессию и начать программировать.

1.1.2. Инсталляция Python 3

Как и любое серьёзное программное обеспечение, Python имеет несколько версий. В этом тексте будет использоваться последняя стабильная версия Python 3. На многих компьютерах по умолчанию установлены более старые версии Python, например, версия 2.6 в которой некоторые представленные примеры, возможно, не будут работать. При изучении материала можно использовать любой компьютер, но важно чтобы была установлена версия не ниже Python 3. (Python, кстати, бесплатный, так что не надо беспокоиться.)

Для большинства платформ детальная процедура установки приводится в бесплатной, доступной в интернете книге «Погружение в Python 3». Несмотря на то, что в этой процедуре упоминается Python 3.1, наилучшим выбором будет последняя стабильная версия (хотя, честно говоря, в рамках этого текста различия будут незаметны).

Установка и выбор версии также подробно описан в видеоинструкции по установке Python 3 на Mac и Windows от ресурса yellow-duck.net:

https://www.youtube.com/watch?v=3xLIbD_5s-g

1.1.3. Интерактивные сессии

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

Для входа в интерактивную сессии следует запустить Python. Для этого под Mac/Unix/Linux в окне терминала нужно ввести python3 и нажать Enter, под Windows’ом нужно запустить приложение Python 3.

Если на экране перед курсором отображается >>>, значит интерактивная сессия была успешно запущена. Ниже приводится пример ввода выражения и получения результата:

>>> 2 + 2
4




Управление. Каждая запущенная интерактивная сессия ведет журнал (историю) всех введённых данных. Для перехода к предыдущему вводу используются сочетания Ctrl+P (previous — предыдущий) и Ctrl+N (next — следующий). Выход из интерактивной сессии Ctrl+D приводит к уничтожению журнала ввода. На некоторых системах перемещение по журналу возможно с помощью клавиш ⬆и ⬇.

1.1.4. Первый пример

Поэта взор в возвышенном безумье
Блуждает между небом и землей.
Когда творит воображенье формы
Неведомых вещей, перо поэта,
Их воплотив, воздушному «ничто»
Дает и обиталище и имя.

— Вильям ШекспирСон в летнюю ночь

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

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

>>> from urllib.request import urlopen




является инструкцией импорта, который позволяет получить доступ ко встроенным библиотечным функциям, отвечающим за доступ к данным через Интернет. В частности становится доступной функция urlopen, котора позволяет получить доступ к информации, располагающейся по указанному URL (uniform resource locator — единый указатель ресурса), то есть адресу в Интернете.

Инструкции и выражения. Программа на Python состоит из выражений и инструкций. Вообще говоря, любая программа состоит из команд для:

  • вычисления некоторых значений;
  • выполнения некоторых действий.

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

Инструкция присваивания

>>> shakespeare = urlopen('http://composingprograms.com/shakespeare.txt')




связывает имя shakespeare со значением выражения следующим за знаком =. Это выражение означает вызов функции urlopen со значением аргумента равным URL, указывающим на полный текст 37 пьес Уильяма Шекспира в виде единого текстового файла.

Функции содержат внутри себя логику преобразования данных. Строка urlopen означает функцию, веб-адрес — одну часть данных, текст пьес Шекспира — другую. Процесс преобразования одних данных в другие может быть достаточно сложным, однако функция скрывает эту сложность и позволяет простым выражением преобразовать веб-адрес в текст пьес.

Другой оператор присваивания

>>> words = set(shakespeare.read().decode().split())




связывает имя words (слова) со множеством встречающихся в текстах Шекспира слов. Всего их 33 721. Последовательность команд read (читать), decode (декодировать), split (разделять) означает последовательное считывание данных с указанного адреса URL, декодирование данных (то есть превращение в текст) и, наконец, разделение текста на отдельные слова. Все полученные таким образом слова помещаются во множество (set).

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

Наконец, сложное выражение

>>> {w for w in words if len(w) == 6 and w[::-1] in words}
{'redder', 'drawer', 'reward', 'diaper', 'repaid'}




приводит к вычислению подмножества использованых Шекспиром слов, состоящих из 6 букв и читающихся в обоих направлениях. Загадочное выражение w[::-1] означает проход по всем буквам w в обратном порядке, что приводит к «развороту» слова. При подтверждении ввода выражения в интерактивной сессии Enter, Python после вычисления результата выводит значение этого выражения на следующей строке.

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

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

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

1.1.5. Ошибки

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

Основное уравнение компьютерных технологий:
компьютер = мощь + глупость




Компьютеры очень производительны и могут обрабатывать огромные объемы данных, выполняя миллионы простейших операций в секунду.
Компьютеры также шокирующе глупы и ненадежны. Операции, которые они выполняют бесконечно просты, бесхитростны и строги. Компьютер не может понимать…​ Нет никаких сходств с фантастическим компьютером HAL 9000 из «Космической одиссеи» Артура Кларка. Раз так, не нужно представлять себе некий грозный мозг. В глубине все очень механистично.
Программирование — это способность человека использовать свое вдохновение для создания чего-то полезного, построенного из небольших простых операций, которые могут выполнять комьютеры.

— Франциско Цай и Ник ПарлантВведение в принципы вычислений

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

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

  • Постоянное тестирование. Каждая хорошо написанная программа состоит из небольших законченных компонентов (модулей), которые могут быть протестированы индивидуально. Нужно проверять всё и сразу после написания, не откладывая на долго. Только так можно сохранить доверие к своему коду.
  • Изоляция ошибок. Сообщение об ошибке может указывать на компонент, в котором она произошла. При диагностировании и исправлении ошибки нужно стараться найти наименьший неправильный фрагмент кода.
  • Проверка предположений. Интерпретаторы выполняют инструкции точно — не больше и не меньше. Если результат действий итерпретатора неожиданен, значит поведение некоторого кода не соответствует представлениям (или предположениям) программиста. При поиске ошибки придется проверять справедливость всех предположений.
  • Обсуждение. Ты не одинок! Если сообщение об ошибке непонятно и наводит ужас, стоит попробовать спросить у друга, преподавателя или любимого поискового движка. Если ошибка найдена, но неясно как ее исправить — это повод позвать кого-нибудь на помощь. Большое количество знаний по программированию может быть получено при групповом решении задач и исправлении ошибок.

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

Следующая лекция1.2. Элементы программирования

Литература

  • [SICP] Абельсон, Харольд. Структура и интерпретация компьютерных программ [Текст] / Харольд Абельсон, Джеральд Джей Сассман, при участии Джули Сассман ; [пер. Г. К. Бронникова]. - 2-е изд. - Москва : Добросвет : КДУ, 2012. - 608 с. : ил.; 24 см.


Report Page