Вводная
"Информация - с середины XX века рассматривается в широком смысле как общенаучное понятие, включающее в себя обмен сведениями между людьми, человеком и автоматом, автоматом и автоматом, обмен сигналами между живой и неживой природой, в животном и растительном мире, а также генетическую информацию."
В данной лекции содержатся сведения, для чего гуманитариям нужно изучать программирование, даются основные определения понятий "информация", "алгоритм", даются основные положения дисциплины "информатика".
Процесс "глобализации" и "компьютеризации" современного общества стал необратимым. Стало ясно, что силами одних специалистов по компьютерной технике создать и поддерживать в своем развитии множество программ, которые требует современное общество, не представляется возможным. Постепенно в обществе начинает превалировать следующая система взглядов: "программировать, или хотя бы составлять алгоритмы, должен каждый работник, где бы он ни работал!". Навыки алгоритмического мышления нужны всем. Автором данного пособия поставлена задача ознакомления работников в основном гуманитарного профиля навыкам алгоритмического мышления вообще и написания алгоритмов и программ в частности.
1.1. Для чего нужно программирование гуманитариям?
1.1.1. Нужный алгоритм трудно найти
Как замечено автором данного курса, найти нужную программу, реализующую какой-либо "интеллектуальный" алгоритм очень сложно. Даже во всемирной сети Интернет! И это объясняется следующими причинами.
Во-первых, реализация любого "интеллектуального" алгоритма затруднена тем, что от программиста требуется квалификация "выше среднего". Здесь нужен не просто средний программист, а человек, имеющий познания в области искусственного интеллекта, владеющего инженерией знаний и способный понять рассуждения эксперта в той области знаний, в которой создается программа. Во-вторых, вследствие этого, большинство "интеллектуальных" программ являются платными и достаточно дорогими, что исключает их широкое распространение. В-третьих, все эти программы пишутся "на заказ", и, следовательно, их функциональность ограничена требованиями, предъявляемыми к программе заказчиком. Но Ваши требования к программе могут значительно отличаться от требований к программе первоначального заказчика, даже если Вы работаете с ним над одними и теми же задачами. В-четвертых, "интеллектуальные" алгоритмы не востребованы так широко, как обычные "офисные" программы, а значит найти их в сети Интернет гораздо сложнее, чем другие программные пакеты и утилиты.
Поэтому Вам, скорее всего, придется разработать свою программу для реализации нужной функциональности или, по необходимости, переработать чужой алгоритм. И это будет и проще, и дешевле, чем найти "универсальную" программу, реализующую все требуемые Вам функции.
1.1.2. 40% алгоритмов требуют переработки
Как уже отмечалось автором (см. п. 01.01.01, посвященный корректировке моделей), программы, сделанные по заказу для кого-либо, и даже готовые программные продукты могут не удовлетворять Вас по различным причинам:
- Они не обладают нужной функциональностью;
- Они долго загружаются или долго обрабатывают данные;
- Они выдают неверные данные;
- Они реализованы "коряво";
- Для работы с ними необходимо иметь квалификацию большую, чем квалификация обычного пользователя;
- Они не оптимизированы для исполнения требуемых задач на требуемом оборудовании.
Из личного жизненного опыта у автора сложилось мнение, что, по крайней мере, 40% алгоритмов, которые присутствуют в пакетах, закупаемых пользователем для решения своих задач, требует коррекции (и даже полной переработки). Не зная этого, Вы будете "рабом ситуации" и не сможете эффективно выполнять свою работу на компьютере.
1.1.3. Необходимо правильно составлять техническое задание программисту
Как правило, любой программист является, как и все (возможно, как и Вы) узким специалистом в своей области знаний. Он может досконально разбираться в языках программирования, системных библиотеках, уметь кодировать любой алгоритм, и обладать другими человеческими качествами. Однако, прежде чем "закодировать" программу, ему нужно составить техническое задание по установленной форме. В этом техническом задании должны отражаться требования к программе, к программному интерфейсу, к необходимой функциональности программы, а также приведен алгоритм работы программы, который был найден в результате Ваших научных исследований. Техническое задание является основным документом, на котором строится работа программиста (или группы программистов), пишется документация к программе, строится методика испытаний программы.
Порядок написания и оформления технического задания к программе или программному комплексу определяется ГОСТ 19.201-78. Вам, как заказчику программы, требуется ознакомиться с этими документами, а также с другими документами ГОСТ ЕСПД (Единой Системы Программной Документации)[38].
1.1.4. Научиться самому исправлять алгоритмы (высший пилотаж)
И, наконец, "высшим пилотажем" для гуманитария является его способность разбираться в алгоритмах и создавать новые программы на популярных языках программирования ("машинных" языках). На самом деле программирование на "машинных" языках высокого уровня (высокого в смысле абстрагирования от конкретной реализации ЭВМ) не является такой уж неподъемной задачей. Конечно, человек, занимающийся системным программированием, разработкой интерфейса (механизмов общения между машинами и между человеком и машиной), обязан знать особенности организации вычислений, досконально знать устройство ЭВМ и работу компьютерных сетей, уметь работать со множеством прикладных библиотек. Но для "кодирования" алгоритмов искусственного интеллекта такого "досконального" знания ЭВМ и математических доказательств работы алгоритмов и не нужно. Для "кодирования" этих алгоритмов необходимы знания:
- Сведения из области знаний, для которой создается программа и кодируется алгоритм;
- Основные принципы, используемые математиками для моделирования процессов искусственного интеллекта (в нужной предметной области);
- Основные принципы построения "безошибочных" (в смысле точных и однозначных), алгоритмов;
- Основные сведения о парадигмах программирования, используемых при создании моделей ИИ (искусственного интеллекта);
- Знания об основных алгоритмических конструкциях, используемых в различных "машинных" языках;
- Сведения о представлении (синтаксисе) конкретных алгоритмических конструкций в "машинных языках" (языках программирования);
- Навыки работы в операционных системах, прежде всего - работы в командной строке;
- Базовые сведения об интерфейсе оболочек, используемых для написания и отладки программ на машинных языках.
В принципе, любой алгоритмический язык для человека, умеющего мыслить логически и знакомого с основными парадигмами программирования, реально изучить за 2 - 2,5 недели, при условии его изучения в "практике" программирования, начиная сразу писать на нем тестовые программы и программы для своего проекта. Это верно при условии, что:
- Пользователь не занимается системным программированием, требующим досконального знания устройства и функционирования ЭВМ;
- Пользователь работает, используя "высокоуровневые абстракции", не отвлекаясь на детали интерфейса и организацию стандартных и пользовательских библиотек;
- Пользователь имеет знания по информатике в объеме курса средней школы, позволяющие ему понимать и использовать на практике циклы, ветвления, операторы и другие конструкции алгоритма.
Практика программирования также может помочь человеку объясняться "на равных" с программистами, точнее формулировать свои идеи, требования к функциональности и документации. Но учтите: для профессионального программирования необходимо математическое образование на уровне, по крайней мере, бакалавра по математике! В любом другом случае Ваши действия по написанию программ и алгоритмов будут в большей степени эмпирическими, а не научными.
1.2. А еще для чего?
1.2.1. Правильное понимание моделей Искусственного Интеллекта и Естественного языка.
… Однажды автор данной работы приобрел книгу, которая рассматривала перспективы развития компьютерной техники и искусственного интеллекта компьютеров с общих философских позиций. Книга была написана отечественным автором-философом в начале 80-х годов прошлого века. Из этических принципов имя автора и название книги опускаю. Данную книгу автор приобрел в конце XX века, и прочитал ее вместе со своим другом Михаилом Кацем. Мы тогда увлекались дисциплиной "Искусственный интеллект", и, прочитав эту книгу, мы долго иронизировали по поводу нее. Ни одно из предсказаний автора той книги не было реализовано! То, что автору книги казалось невозможным, в конце века стало общепринятым стандартом. Все факты, приведенные в книге, оказались нонсенсом.
Только недавно, перечитав эту книгу, автор понял, в чем ошибка данного философа. Он рассматривал "интеллект вообще", как он реализован в человеческом мозгу. Он понятия не имел о том, как можно моделировать интеллект с помощью простейших математических моделей. Также он не учел того момента, что задача моделирования компьютером сознания человека как личности вообще не стоит перед исследователями в области искусственного интеллекта, как бы заманчива она ни была. В самом деле, хотите ли Вы иметь робота, который вдруг захандрит, откажется делать работу по своим внутренним причинам? А робота, который однажды Вам заявит, что хочет иметь паспорт и водительские права, ежегодный оплачиваемый отпуск и социальный пакет? Робота, принимающего наркотики? Ответ на вопрос очевиден…
Тем не менее, более "простые" задачи, которые мог делать раньше только человек, в настоящее время достаточно просто моделируются на современных компьютерах с помощью различных моделей искусственного интеллекта. К задачам, которые в настоящее время легко моделируются методами Искусственного Интеллекта, относятся:
- Задачи распознавания образов (графической, графической текстовой, звуковой и т.п. информации). В начале развития компьютерной техники перевод распечатанной текстовой информации обратно в цифровую форму был затруднен: требовалось вручную "забивать" текст на перфокарты либо, в лучшем случае, через терминал компьютера. В настоящее время распознавание текста из графической формы в текстовую форму не является особо сложным - существуют программы типа Fine Reader, Read Iris, хорошо справляющиеся с этой задачей. Также большой прогресс достигнут в области автоматического поиска и сравнения различной графической (например, поиск конкретного человека по его фотографии), видео и звуковой информации (поиск речевого фрагмента среди всей базы прослушанных разговоров, мониторинга новостных телепрограмм на предмет обсуждения определенной темы);
- Полуавтоматического перевода текста, написанного на естественных языках. В настоящее время корректно переводятся технические тексты, инструкции и другая документация к бытовым приборам;
- Достигнуты некоторые успехи в понимании ЭВМ текста на естественных языках;
- Достигнуты впечатляющие результаты по обработке символьной информации, ее поиску, смене шаблона оформления, поиска и занесения ее в базу данных, синхронизации баз данных в реальном времени;
- Разработаны "интеллектуальные" алгоритмы определения местонахождения, идентификации, навигации и поиска человека, транспортного средства, груза по всему земному шару;
- Другие алгоритмы, используемые в современном мире, которые даже не прогнозировались писателями-фантастами.
Иметь представление о моделях, по которым работают современные системы искусственного интеллекта, необходимо для современного интеллигентного человека. Это является необходимым условием прогресса нации в условиях современного глобального общества. И нации, где число интеллигенции меньше определенного предела, неизбежно попадут в кабалу более "интеллектуальных" наций.
Второй необходимой причиной, по которой гуманитарии должны изучать программирование, является понимание естественных человеческих языков не только как средства общения и коммуникации между людьми, не только как средства написания литературных произведений, но и как средства, определяющего мыслительную деятельность и "источник и выразитель" мыслей целой нации! Умение правильно говорить тождественно умению правильно мыслить. Это характерно для языков разных народов. Представители национальностей, в языке которых отсутствовали какие-либо слова, оказываются неспособными оперировать понятиями, которые представляют данные слова. Нарушения речи характерны для многих психических заболеваний.
Язык порождает культуру. Поэтому всемирное распространение английского языка в качестве международного средства общения между народами имеет другую сторону - повсеместное распространение англосаксонской культуры и "размывание" традиционных культур. Это же определяет "сложное" вхождение в обиход таких искусственных языков, как Эсперанто и Токи Пона, несмотря на их некоторое превосходство над обычными языками. Главный их недостаток, по мнению автора - они не имеют за собой "естественного культурного пласта", а являются порождением уже существующих субкультур.
Тем не менее, чтобы понять логику естественного языка, как родного, так и иностранного, необходимо изучение его "искусственных" диалектов - "языков" описания математических моделей, языков формул, алгоритмов, языков программирования. Изучая различные "искусственные языки", Вы можете более точно выражать свои мысли на естественном языке. Понятие "модели" естественного языка является, наряду с изучением культуры нации - носителя языка, необходимым условием хорошего усвоения этого языка. Автор считает, что его "сносное" владение английским языком - это следствие его увлечения традиционным программированием.
1.2.2. Научиться алгоритмически мыслить.
Помимо "понимания" моделей искусственного интеллекта и естественных языков, одной из наиболее важных целей данного пособия является обучение человека алгоритмическому мышлению.
Алгоритмы приходят в нашу жизнь как бы незаметно, но "весомо, грубо, зримо", как говорил о своих стихах В.В. Маяковский. По сути дела, любая инструкция (к часам, сотовому или радиотелефону, стиральной машине, даже инструкция по завариванию чая) - это алгоритм. Правила составления и оформления деловой бумаги - тоже алгоритм. Правила написания художественного произведения, верстки текста, инструкция по пользованию фотоаппаратом или видеокамерой, монтажа фильмов, обработки фотографии в редакторе Photoshop - алгоритмы. И умение читать алгоритмы - необходимое условие для приспособления человека к условиям жизни в современном мире.
Однако, кроме "умения" читать и исполнять чужие алгоритмы, для современного человека также важно умение составлять алгоритмы ("прямой инжиниринг") и восстанавливать алгоритмы и документацию по написанной другим человеком программе ("обратный инжиниринг"). Действительно, жизнь "подкидывает" нам все больше задач, для решения которых не создано надежно работающих программ. При этом также существует множество алгоритмов, которые когда-то были созданы, которые применялись, применяются до сих пор, но документация к которым "исчезла". У программистов есть такое правило: "Программа начинает устаревать с того момента, когда прекратилось ее обновление". Естественно, разбираться с документацией к устаревшей программе очень сложно - многие модули, на которых она была сделана, уже не существуют. Но это приходится делать, если для ее реализации необходимо использовать "утерянный", но актуальный на сегодняшний день алгоритм. То же самое придется использовать, если для написания нового алгоритма используются старые наработки.
Нельзя сказать, что методы прямого и обратного инжиниринга не используются в практике работы обычной компании. Приведем пример из жизни. Допустим, увольняется один из сотрудников фирмы (не обязательно программист). Однако он был разработчиком одного из бизнес-процессов, которым пользуется большинство сотрудников компании, в том числе и руководство. Естественно, после ухода этого сотрудника организация продолжает использовать этот бизнес-процесс. Однако увольнение сотрудника - всегда болезненная ситуация, поэтому, вполне возможно, уволенный сотрудник не оставил документации (не только к программе, но даже инструкции по применению этого бизнес-процесса). Поэтому восстанавливать эту инструкцию придется вновь принятому сотруднику. Возможно, на его месте окажетесь и Вы…
1.3. Информация вокруг нас
Важнейшим компонентом вселенной, помимо материи (вещество + энергия, поле) является информация. Именно ей, а не сознанию, принадлежит право являться "второй первоосновой" мира.
1.3.1. Органы чувств
Информацию об окружающей среде способны воспринимать все живые существа (включая простейшие микроорганизмы), и даже некоторые неживые предметы (например, фотографическая пленка, магнитная лента, CD или DVD диск). За исключением некоторых неординарных случаев, живые существа воспринимают информацию с помощью органов чувств. У человека они следующие: зрение, слух, обоняние, осязание и вкус. С помощью них человек получает информацию, необходимую для своей жизнедеятельности. Однако возникает вопрос: "А как оценить и в чем измерять информацию, получаемую человеком?".
Сразу напрашивается "универсальный измеритель" любой меры - число. С возникновением у человека понятия числа у него появилась возможность количественного измерения самых различных элементов: предметов, объема, массы, яркости, цвета и всего остального.
Следующим этапом создания "измерителя информации" является выбор единицы измерения и мерного инструмента. Так, линейные размеры человек измеряет в метрах, массу - в килограммах, силу - в ньютонах и т.п. А чем измерять информацию? Сразу надо отбросить все имеющиеся измерители физических величин - информация не является ни веществом, ни полем. Тогда чем? Ответ на этот вопрос был дан только с развитием электронной вычислительной техники.
В качестве примера, иллюстрирующего суть измерения информации, рассмотрим поведение простейшего микроорганизма - эвглены зеленой (одноклеточная водоросль). Как и для всех водорослей, ее комфортная среда обитания - освещенные солнцем водоемы. Поэтому, поместив эвглену в тень, мы можем наблюдать, что эвглена плывет к ярко освещенному участку сосуда. Итак, эвглена может осуществлять выбор между двумя вариантами - "светлый сосуд" - "темный сосуд". Этими двумя вариантами ограничивается информация, воспринимаемая эвгленой.
Информация, воспринимаемая органами чувств человека, весьма разнообразна. Человеческое зрение способно воспринимать форму и цвет предметов. Глаз способен "почувствовать" один фотон света. Человеческое ухо способно слышать звук в диапазоне от 20 Hz до 20kHz. Ладони человека способны прочувствовать температуру в 0,5 градуса Цельсия. Отличительной способностью человеческих органов чувств является то, что они способны воспринимать информацию не только в статике (значение физической величины), но и одновременно ее изменение во времени (значение производной физической величины во времени). Человеческие органы, с помощью которых человек воспринимает информацию, уникальны в смысле количества и точности передаваемой ему информации.
Не менее сложным "обработчиком" информации, поступающей от органов чувств, является человеческий мозг. Человеческий мозг состоит более чем из миллиарда нервных клеток - нейронов. Они не только управляют жизнедеятельностью человеческого организма и не столько заняты обеспечением психологического здоровья человека. Большая часть головного мозга занята обработкой информации, полученной от органов чувств. Только благодаря мозгу мы воспринимаем красное красным, зеленое зеленым, разбиваем звуки на октавы, из четырех вкусовых рецепторов слагается все многообразие вкусов национальных кухонь.
В принципе, современное приборостроение и микроэлектроника достигли или вот-вот достигнут такого уровня "считывания" и "обработки" информации об окружающем мире, какой обеспечивают человеческие органы чувств и человеческий мозг. Однако у человечества в этих науках наблюдается значительное отставание от человеческих органов в плане "программного обеспечения". До недавнего времени человечество не интересовалось вопросом, как конкретно в мозгу человека, по каким алгоритмам у человека формируются зрительные, слуховые и т.п. образы. Только с развитием робототехники, микроэлектроники, решением задач искусственного интеллекта человек стал воссоздавать (именно воссоздавать, а не копировать) алгоритмы, по которым идет "обработка информации".
1.3.2. Представление информации в ЭВМ
В ЭВМ информация сохраняется либо в аналоговой форме (в т.н. АВМ, в виде значений сопротивлений, емкостей и операционных усилителей), либо в цифровой форме (в ЦВМ, в виде "переключателей" на транзисторах, конденсаторах, ферритовых сердечниках и т.п.) С точки зрения физиологов, функциональность переключателя много меньше функциональности нервной клетки - нейрона. Однако объединение этих "переключателей" в сложную схему: микропроцессор, регистры памяти, шину для передачи данных, - делает сложность этой системы сопоставимой со сложностью простых живых организмов. Однако, на уровне "программной части" функционирование живых организмов и ЭВМ отличаются. Живые организмы представляют собой сложную физико-химическую среду, которая создавалась и "программировалась" в течение многих лет биологической эволюцией, сменяя многие поколения. У ЭВМ тоже была своя "эволюция", но эти машины были созданы и создаются человеком для "усиления" возможностей своего мозга и для моделирования физических, химических, биологических и других природных процессов. Развитие ЭВМ происходит под полным контролем человека. В ЭВМ информация представляется не так, как она была воспринята прежними поколениями "организмов", а именно так, как это удобно человеку. А человеку оказалось удобным представлять любую информацию в виде числа (желательно - целого без знака).
Именно с помощью числа в ЭВМ передается цвет и форма предметов, кодируется высота, длительность звучания и громкость нот, температура окружающих предметов и т.п. Подробнее о представлении различных данных в ЭВМ будет рассказано в следующих лекциях (см. "Кодирование").
1.4. Резюме
В данной лекции Вы получили ответ на вопрос: "Почему всем, в том числе и мне, гуманитарию, необходимо изучать программирование?". Ответ на этот вопрос лежит не на поверхности, и автор курса попытался представить его Вашему вниманию. Вы, наверное, поняли, что такое информация с философских позиций, как ее получают человек и автоматы, что такое "техническое задание" на разработку программы, где и когда может потребоваться внесение изменений в алгоритм или документацию.