Программирование для гуманитариев
Покупка
Новинка
Тематика:
Программирование и алгоритмизация
Издательство:
ИНТУИТ
Автор:
Денисов Ю. А.
Год издания: 2016
Кол-во страниц: 275
Дополнительно
Вид издания:
Курс лекций
Уровень образования:
Дополнительное образование взрослых
Артикул: 834477.01.99
Курс лекций предназначен для обучения гуманитариев основам программирования и искусственному интеллекту.
Обучение производится на основе школьного курса информатики. В курсе приводятся примеры, содержащие только обработку символьных данных. Курс рассчитан на широкий круг лиц.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 00.03.03: Информатика
- 01.03.02: Прикладная математика и информатика
- ВО - Магистратура
- 01.04.02: Прикладная математика и информатика
- ВО - Специалитет
- 00.05.03: Информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Программирование для гуманитариев 2-е издание, исправленное Денисов Ю.А. Национальный Открытый Университет “ИНТУИТ” 2016 2
Программирование для гуманитариев/ Ю.А. Денисов - М.: Национальный Открытый Университет “ИНТУИТ”, 2016 Курс лекций предназначен для обучения гуманитариев основам программирования и искусственному интеллекту. Обучение производится на основе школьного курса информатики. В курсе приводятся примеры, содержащие только обработку символьных данных. Курс рассчитан на широкий круг лиц. (c) ООО “ИНТУИТ.РУ”, 2009-2016 (c) Денисов Ю.А., 2009-2016 3
Вводная В лекции обсуждается вопрос: “Для чего гуманитариям нужно программирование?” И даются основные сведения по дисциплине: “Информатика”. “Информация - с середины XX века рассматривается в широком смысле как общенаучное понятие, включающее в себя обмен сведениями между людьми, человеком и автоматом, автоматом и автоматом, обмен сигналами между живой и неживой природой, в животном и растительном мире, а также генетическую информацию.” Информатика в понятиях и терминах под ред. В.А. Извозчикова В данной лекции содержатся сведения, для чего гуманитариям нужно изучать программирование, даются основные определения понятий “информация”, “алгоритм”, даются основные положения дисциплины “информатика”. Процесс “глобализации” и “компьютеризации” современного общества стал необратимым. Стало ясно, что силами одних специалистов по компьютерной технике создать и поддерживать в своем развитии множество программ, которые требует современное общество, не представляется возможным. Постепенно в обществе начинает превалировать следующая система взглядов: “программировать, или хотя бы составлять алгоритмы, должен каждый работник, где бы он ни работал!”. Навыки алгоритмического мышления нужны всем. Автором данного пособия поставлена задача ознакомления работников в основном гуманитарного профиля навыкам алгоритмического мышления вообще и написания алгоритмов и программ в частности. 1.1. Для чего нужно программирование гуманитариям? 1.1.1. Нужный алгоритм трудно найти Как замечено автором данного курса, найти нужную программу, реализующую какойлибо “интеллектуальный” алгоритм очень сложно. Даже во всемирной сети Интернет! И это объясняется следующими причинами. Во-первых, реализация любого “интеллектуального” алгоритма затруднена тем, что от программиста требуется квалификация “выше среднего”. Здесь нужен не просто средний программист, а человек, имеющий познания в области искусственного интеллекта, владеющего инженерией знаний и способный понять рассуждения эксперта в той области знаний, в которой создается программа. Во-вторых, вследствие этого, большинство “интеллектуальных” программ являются платными и достаточно дорогими, что исключает их широкое распространение. В-третьих, все эти программы пишутся “на заказ”, и, следовательно, их функциональность ограничена требованиями, предъявляемыми к программе заказчиком. Но Ваши требования к программе могут значительно отличаться от требований к программе первоначального заказчика, даже если Вы работаете с ним над одними и теми же задачами. В-четвертых, 4
“интеллектуальные” алгоритмы не востребованы так широко, как обычные “офисные” программы, а значит найти их в сети Интернет гораздо сложнее, чем другие программные пакеты и утилиты. Поэтому Вам, скорее всего, придется разработать свою программу для реализации нужной функциональности или, по необходимости, переработать чужой алгоритм. И это будет и проще, и дешевле, чем найти “универсальную” программу, реализующую все требуемые Вам функции. 1.1.2. 40% алгоритмов требуют переработки Как уже отмечалось автором (см. п. 01.01.01, посвященный корректировке моделей), программы, сделанные по заказу для кого-либо, и даже готовые программные продукты могут не удовлетворять Вас по различным причинам: 1. Они не обладают нужной функциональностью; 2. Они долго загружаются или долго обрабатывают данные; 3. Они выдают неверные данные; 4. Они реализованы “коряво”; 5. Для работы с ними необходимо иметь квалификацию большую, чем квалификация обычного пользователя; 6. Они не оптимизированы для исполнения требуемых задач на требуемом оборудовании. Из личного жизненного опыта у автора сложилось мнение, что, по крайней мере, 40% алгоритмов, которые присутствуют в пакетах, закупаемых пользователем для решения своих задач, требует коррекции (и даже полной переработки). Не зная этого, Вы будете “рабом ситуации” и не сможете эффективно выполнять свою работу на компьютере. 1.1.3. Необходимо правильно составлять техническое задание программисту Как правило, любой программист является, как и все (возможно, как и Вы) узким специалистом в своей области знаний. Он может досконально разбираться в языках программирования, системных библиотеках, уметь кодировать любой алгоритм, и обладать другими человеческими качествами. Однако, прежде чем “закодировать” программу, ему нужно составить техническое задание по установленной форме. В этом техническом задании должны отражаться требования к программе, к программному интерфейсу, к необходимой функциональности программы, а также приведен алгоритм работы программы, который был найден в результате Ваших научных исследований. Техническое задание является основным документом, на котором строится работа программиста (или группы программистов), пишется документация к программе, строится методика испытаний программы. Порядок написания и оформления технического задания к программе или 5
программному комплексу определяется ГОСТ 19.201-78. Вам, как заказчику программы, требуется ознакомиться с этими документами, а также с другими документами ГОСТ ЕСПД (Единой Системы Программной Документации)[38]. 1.1.4. Научиться самому исправлять алгоритмы (высший пилотаж) И, наконец, “высшим пилотажем” для гуманитария является его способность разбираться в алгоритмах и создавать новые программы на популярных языках программирования (“машинных” языках). На самом деле программирование на “машинных” языках высокого уровня (высокого в смысле абстрагирования от конкретной реализации ЭВМ) не является такой уж неподъемной задачей. Конечно, человек, занимающийся системным программированием, разработкой интерфейса (механизмов общения между машинами и между человеком и машиной), обязан знать особенности организации вычислений, досконально знать устройство ЭВМ и работу компьютерных сетей, уметь работать со множеством прикладных библиотек. Но для “кодирования” алгоритмов искусственного интеллекта такого “досконального” знания ЭВМ и математических доказательств работы алгоритмов и не нужно. Для “кодирования” этих алгоритмов необходимы знания: 1. Сведения из области знаний, для которой создается программа и кодируется алгоритм; 2. Основные принципы, используемые математиками для моделирования процессов искусственного интеллекта (в нужной предметной области); 3. Основные принципы построения “безошибочных” (в смысле точных и однозначных), алгоритмов; 4. Основные сведения о парадигмах программирования, используемых при создании моделей ИИ (искусственного интеллекта); 5. Знания об основных алгоритмических конструкциях, используемых в различных “машинных” языках; 6. Сведения о представлении (синтаксисе) конкретных алгоритмических конструкций в “машинных языках” (языках программирования); 7. Навыки работы в операционных системах, прежде всего - работы в командной строке; 8. Базовые сведения об интерфейсе оболочек, используемых для написания и отладки программ на машинных языках. В принципе, любой алгоритмический язык для человека, умеющего мыслить логически и знакомого с основными парадигмами программирования, реально изучить за 2 - 2,5 недели, при условии его изучения в “практике” программирования, начиная сразу писать на нем тестовые программы и программы для своего проекта. Это верно при условии, что: 1. Пользователь не занимается системным программированием, требующим досконального знания устройства и функционирования ЭВМ; 2. Пользователь работает, используя “высокоуровневые абстракции”, не отвлекаясь на детали интерфейса и организацию стандартных и пользовательских библиотек; 6
3. Пользователь имеет знания по информатике в объеме курса средней школы, позволяющие ему понимать и использовать на практике циклы, ветвления, операторы и другие конструкции алгоритма. Практика программирования также может помочь человеку объясняться “на равных” с программистами, точнее формулировать свои идеи, требования к функциональности и документации. Но учтите: для профессионального программирования необходимо математическое образование на уровне, по крайней мере, бакалавра по математике! В любом другом случае Ваши действия по написанию программ и алгоритмов будут в большей степени эмпирическими, а не научными. 1.2. А еще для чего? 1.2.1. Правильное понимание моделей Искусственного Интеллекта и Естественного языка. … Однажды автор данной работы приобрел книгу, которая рассматривала перспективы развития компьютерной техники и искусственного интеллекта компьютеров с общих философских позиций. Книга была написана отечественным автором-философом в начале 80-х годов прошлого века. Из этических принципов имя автора и название книги опускаю. Данную книгу автор приобрел в конце XX века, и прочитал ее вместе со своим другом Михаилом Кацем. Мы тогда увлекались дисциплиной “Искусственный интеллект”, и, прочитав эту книгу, мы долго иронизировали по поводу нее. Ни одно из предсказаний автора той книги не было реализовано! То, что автору книги казалось невозможным, в конце века стало общепринятым стандартом. Все факты, приведенные в книге, оказались нонсенсом. Только недавно, перечитав эту книгу, автор понял, в чем ошибка данного философа. Он рассматривал “интеллект вообще”, как он реализован в человеческом мозгу. Он понятия не имел о том, как можно моделировать интеллект с помощью простейших математических моделей. Также он не учел того момента, что задача моделирования компьютером сознания человека как личности вообще не стоит перед исследователями в области искусственного интеллекта, как бы заманчива она ни была. В самом деле, хотите ли Вы иметь робота, который вдруг захандрит, откажется делать работу по своим внутренним причинам? А робота, который однажды Вам заявит, что хочет иметь паспорт и водительские права, ежегодный оплачиваемый отпуск и социальный пакет? Робота, принимающего наркотики? Ответ на вопрос очевиден… Тем не менее, более “простые” задачи, которые мог делать раньше только человек, в настоящее время достаточно просто моделируются на современных компьютерах с помощью различных моделей искусственного интеллекта. К задачам, которые в настоящее время легко моделируются методами Искусственного Интеллекта, относятся: 1. Задачи распознавания образов (графической, графической текстовой, звуковой и т.п. информации). В начале развития компьютерной техники перевод 7
распечатанной текстовой информации обратно в цифровую форму был затруднен: требовалось вручную “забивать” текст на перфокарты либо, в лучшем случае, через терминал компьютера. В настоящее время распознавание текста из графической формы в текстовую форму не является особо сложным - существуют программы типа Fine Reader, Read Iris, хорошо справляющиеся с этой задачей. Также большой прогресс достигнут в области автоматического поиска и сравнения различной графической (например, поиск конкретного человека по его фотографии), видео и звуковой информации (поиск речевого фрагмента среди всей базы прослушанных разговоров, мониторинга новостных телепрограмм на предмет обсуждения определенной темы); 2. Полуавтоматического перевода текста, написанного на естественных языках. В настоящее время корректно переводятся технические тексты, инструкции и другая документация к бытовым приборам; 3. Достигнуты некоторые успехи в понимании ЭВМ текста на естественных языках; 4. Достигнуты впечатляющие результаты по обработке символьной информации, ее поиску, смене шаблона оформления, поиска и занесения ее в базу данных, синхронизации баз данных в реальном времени; 5. Разработаны “интеллектуальные” алгоритмы определения местонахождения, идентификации, навигации и поиска человека, транспортного средства, груза по всему земному шару; 6. Другие алгоритмы, используемые в современном мире, которые даже не прогнозировались писателями-фантастами. Иметь представление о моделях, по которым работают современные системы искусственного интеллекта, необходимо для современного интеллигентного человека. Это является необходимым условием прогресса нации в условиях современного глобального общества. И нации, где число интеллигенции меньше определенного предела, неизбежно попадут в кабалу более “интеллектуальных” наций. Второй необходимой причиной, по которой гуманитарии должны изучать программирование, является понимание естественных человеческих языков не только как средства общения и коммуникации между людьми, не только как средства написания литературных произведений, но и как средства, определяющего мыслительную деятельность и “источник и выразитель” мыслей целой нации! Умение правильно говорить тождественно умению правильно мыслить. Это характерно для языков разных народов. Представители национальностей, в языке которых отсутствовали какие-либо слова, оказываются неспособными оперировать понятиями, которые представляют данные слова. Нарушения речи характерны для многих психических заболеваний. Язык порождает культуру. Поэтому всемирное распространение английского языка в качестве международного средства общения между народами имеет другую сторону повсеместное распространение англосаксонской культуры и “размывание” традиционных культур. Это же определяет “сложное” вхождение в обиход таких искусственных языков, как Эсперанто и Токи Пона, несмотря на их некоторое превосходство над обычными языками. Главный их недостаток, по мнению автора они не имеют за собой “естественного культурного пласта”, а являются порождением 8
уже существующих субкультур. Тем не менее, чтобы понять логику естественного языка, как родного, так и иностранного, необходимо изучение его “искусственных” диалектов - “языков” описания математических моделей, языков формул, алгоритмов, языков программирования. Изучая различные “искусственные языки”, Вы можете более точно выражать свои мысли на естественном языке. Понятие “модели” естественного языка является, наряду с изучением культуры нации - носителя языка, необходимым условием хорошего усвоения этого языка. Автор считает, что его “сносное” владение английским языком - это следствие его увлечения традиционным программированием. 1.2.2. Научиться алгоритмически мыслить. Помимо “понимания” моделей искусственного интеллекта и естественных языков, одной из наиболее важных целей данного пособия является обучение человека алгоритмическому мышлению. Алгоритмы приходят в нашу жизнь как бы незаметно, но “весомо, грубо, зримо”, как говорил о своих стихах В.В. Маяковский. По сути дела, любая инструкция (к часам, сотовому или радиотелефону, стиральной машине, даже инструкция по завариванию чая) - это алгоритм. Правила составления и оформления деловой бумаги - тоже алгоритм. Правила написания художественного произведения, верстки текста, инструкция по пользованию фотоаппаратом или видеокамерой, монтажа фильмов, обработки фотографии в редакторе Photoshop - алгоритмы. И умение читать алгоритмы - необходимое условие для приспособления человека к условиям жизни в современном мире. Однако, кроме “умения” читать и исполнять чужие алгоритмы, для современного человека также важно умение составлять алгоритмы (“прямой инжиниринг”) и восстанавливать алгоритмы и документацию по написанной другим человеком программе (“обратный инжиниринг”). Действительно, жизнь “подкидывает” нам все больше задач, для решения которых не создано надежно работающих программ. При этом также существует множество алгоритмов, которые когда-то были созданы, которые применялись, применяются до сих пор, но документация к которым “исчезла”. У программистов есть такое правило: “Программа начинает устаревать с того момента, когда прекратилось ее обновление”. Естественно, разбираться с документацией к устаревшей программе очень сложно - многие модули, на которых она была сделана, уже не существуют. Но это приходится делать, если для ее реализации необходимо использовать “утерянный”, но актуальный на сегодняшний день алгоритм. То же самое придется использовать, если для написания нового алгоритма используются старые наработки. Нельзя сказать, что методы прямого и обратного инжиниринга не используются в практике работы обычной компании. Приведем пример из жизни. Допустим, увольняется один из сотрудников фирмы (не обязательно программист). Однако он был разработчиком одного из бизнес-процессов, которым пользуется большинство сотрудников компании, в том числе и руководство. Естественно, после ухода этого 9
сотрудника организация продолжает использовать этот бизнес-процесс. Однако увольнение сотрудника - всегда болезненная ситуация, поэтому, вполне возможно, уволенный сотрудник не оставил документации (не только к программе, но даже инструкции по применению этого бизнес-процесса). Поэтому восстанавливать эту инструкцию придется вновь принятому сотруднику. Возможно, на его месте окажетесь и Вы… 1.3. Информация вокруг нас Важнейшим компонентом вселенной, помимо материи (вещество + энергия, поле) является информация. Именно ей, а не сознанию, принадлежит право являться “второй первоосновой” мира. 1.3.1. Органы чувств Информацию об окружающей среде способны воспринимать все живые существа (включая простейшие микроорганизмы), и даже некоторые неживые предметы (например, фотографическая пленка, магнитная лента, CD или DVD диск). За исключением некоторых неординарных случаев, живые существа воспринимают информацию с помощью органов чувств. У человека они следующие: зрение, слух, обоняние, осязание и вкус. С помощью них человек получает информацию, необходимую для своей жизнедеятельности. Однако возникает вопрос: “А как оценить и в чем измерять информацию, получаемую человеком?”. Сразу напрашивается “универсальный измеритель” любой меры - число. С возникновением у человека понятия числа у него появилась возможность количественного измерения самых различных элементов: предметов, объема, массы, яркости, цвета и всего остального. Следующим этапом создания “измерителя информации” является выбор единицы измерения и мерного инструмента. Так, линейные размеры человек измеряет в метрах, массу - в килограммах, силу - в ньютонах и т.п. А чем измерять информацию? Сразу надо отбросить все имеющиеся измерители физических величин - информация не является ни веществом, ни полем. Тогда чем? Ответ на этот вопрос был дан только с развитием электронной вычислительной техники. В качестве примера, иллюстрирующего суть измерения информации, рассмотрим поведение простейшего микроорганизма - эвглены зеленой (одноклеточная водоросль). Как и для всех водорослей, ее комфортная среда обитания - освещенные солнцем водоемы. Поэтому, поместив эвглену в тень, мы можем наблюдать, что эвглена плывет к ярко освещенному участку сосуда. Итак, эвглена может осуществлять выбор между двумя вариантами - “светлый сосуд” - “темный сосуд”. Этими двумя вариантами ограничивается информация, воспринимаемая эвгленой. Примечание. На самом деле эвглена способна воспринимать довольно сложную информацию. Но описание этих возможностей выходит за пределы этой лекции. 10