Активные данные
Философское программирование
Сергей Федорович Толкачев
© Сергей Федорович Толкачев, 2022
НЕ ДОГМЫ
«Наша теория не догма,
а руководство к действию,
говорили Маркс и Энгельс»
Проект BeWiki
https://zoom.it/4VaM
Увертюра
Все люди немножко программисты.
Люди разные бывают
Программисты тоже.
Сетевой фольклор
Среди мудрых философских вопросов о смысле жизни, таких же древних, как и сама наша способность задавать вопросы, есть один, на который казалось бы легко найти ответ: «Почему мы задаем вопросы?» Однако и философ, и психолог, и Google все ответят на него по-разному, что и не удивительно, поскольку никто на Земле не имеет полного знания о том, как устроен человеческий мозг. Вопрос относится к категории «Познай самого себя», а это по всей видимости невозможно, так как познающая система должна иметь информационные ресурсы, существенно превышающие ресурсы познаваемой системы. И среди обычных людей, как сам вопрос, так и ответы на него, воспринимаются скорее как любопытные, но не имеющее никакой практической пользы.
Пабло Пикассо сказал однажды: «Компьютеры бесполезны. Они могут только давать ответы.» Если начало этого утверждения эпатажно и спорно, то его вторая половина, применительно к первому поколению вычислительных машин корректна и конструктивна. Но всё течет и развивается. И вот когда ЭВМ трансформировались в распределенные системы обработки знаний, у программистов появилась возможность ответить на вызов Пикассо: научить компьютер задавать умные вопросы. Ведь современный компьютер уже умеет задавать простые вопросы. А для поддержания «разумного разговора», нужны принципиально новые подходы не только к технической и программной архитектуре, но и к самой сути информационных процессов, с которыми придётся иметь дело следующему поколению программистов и пользователей.
«А что нужно, чтобы компьютер смог поддержать разумный разговор?» Для ответа на этот вопрос мало понимать, как он работает и что происходит внутри. К этому пониманию нужно будет добавить знания из самых разных областей науки, бизнеса, техники и искусства, и заодно ответить на сопутствующие вопросы: «Как обучается компьютер? Как передать знания наиболее эффективным способом? В чем принципиальная разница между человеком и компьютером?» Если мы сумеем соединить разные частички мозаики знаний вместе, эта увлекательная тема развернётся перед нами во всей своей многогранной гармонии. А с практической точки зрения раскроются секреты, лежащие в основе построения чат-ботов, виртуальных помощников и множества других интеллектуальных инструментов, для которых диалог является естественным интерфейсом.
Физики познают мир, наблюдая за внешними природными явлениями, а программистам, чтобы лучше понять компьютеры и научить их новым полезным навыкам, можно заглянуть внутрь самих себя. И иногда для этого достаточно поразмышлять над простыми последовательностями слов или букв.
«Мы живем, и мы учимся» тривиальная фраза для тех, кто понимает русский язык. Но если читатель любопытен, то прежде чем продолжить чтение, он хотя бы на несколько секунд задумается над взаимосвязью между этими простыми словами. Любопытство удивительно интересное свойство человеческого мозга, присущее от рождения всем людям. Иногда оно просыпается от одного простого слова, а иногда глубокие философские рассуждения проходят мимо и никакого интереса к ним человек не испытывает. Но каждый раз, когда любопытство просыпается, мы узнаём что-то новое.
«We live to learn and we learn to live» один из вариантов предыдущей фразы, записанный на английском языке. Использование другого языка сразу же разделило читателей на два класса тех кто его понимает, и кто нет. При этом любопытный читатель, не зависимо от того, знает он английский или нет, постарается сделать обратный перевод, сопоставит результат и возразит: «Хотя слова в этих предложениях и одинаковы, но смысл в них совершенно разный!».
Эта фраза похожа на код Морзе, только вместо двух привычных символов, она передана пятью точками разного диаметра. Необычность этой записи заключается в том, что в ней используется алфавит действий это фраза, которую можно отбарабанить пятью пальцами на столе или на «говорящем африканском барабане». Ведь самым первым техническим устройством, которое человек применил для передачи сообщений на расстояние, согласно Дж. Глейку, был именно барабан, и язык передаваемых сообщений был ритмически-тоновый. В ритмических языках временные интервалы между звуковыми символами позволяют конструировать достаточно сложные сообщения при помощи минимального алфавита и простейшего тонового генератора.
«GCA AGA GAT TGT» фрагмент ДНК, записанный при помощи кодонов алфавита из четырёх оснований (A,C,G,T). Объяснить его до конца на сегодняшний день не сможет никто. Наши знания заканчиваются пониманием соответствий и микро действий, которые выполнит рибосома, интерпретируя молекулярные буквы. У нас есть некоторые статистические данные, мы знаем алфавит, знаем как происходит интерпретация, но не понимаем самого главного смысла и логики программы, написанной неизвестным автором.
«CCHHHHHOH» хорошо известное описание молекулы этанола, принадлежащей к огромному множеству молекул, которые построены из алфавита, состоящего из 118 атомов. Химические формулы молекул похожи на лингвистические конструкции слова. Но в отличие от символов в алфавитах естественных или формальных языков, атомы активны, и связи (конкатенации) между ними многомерны!
Все разнообразные языки и алфавиты (молекулярные, лингвистические или технические), так или иначе, связаны с передачей, восприятием и преобразованием данных, информации и знаний в биологических, социальных или инженерных системах. При всём разнообразии этих систем, отличия между биологическими языками деления клеток, естественными языками общения людей и языками программирования, совсем не настолько велики, как это может показаться. Особенно для программистов, которые выполняют роль переводчиков, соединяя между собой мир людей и мир компьютеров, в каждом из которых говорят на своих языках. И этот уникальный опыт, накопленный программистами за многие годы, когда они по сути выполняют роль коммуникационного интерфейса между человеком и инженерными системами, может пригодиться самым неожиданным образом.
В этой книге речь пойдет о программировании активных данных. «Чего только не программируют в наше время» заметит тут ворчливый программист и будет абсолютно прав. Запрограммировать можно практически всё, и перефразируя известное высказывание Архимеда, настоящий программист может сказать: «Дайте мне объект, и я его имплементирую.» Правда, в отличие от Архимеда, которому не нужно было объяснять, что такое «точка опоры», программист должен быть готов определить грамматику, семантику и прагматику этой фразы, специфицировать протокол «дайте», перечислить свойства «мне» и «объект», уточнить чем является «и» конкатенацией или логической функцией, и т. д. Ведь он живет в мире, где все его слова, все его тексты, проверяет неумолимый компилятор, который только и делает, что снова и снова ищет ошибки. Стоило упомянуть слово «компилятор», как старый программист (старый это тот, кто читал книги Д. Кнута и К. Джермейн, и знает разницу между MIX и PSW) немедленно возразил: «Делать компилятору больше нечего он занимается исключительно преобразованием одних строк в другие, и, если не получается, кричит, что не могу, спасайте. Ну да, делают это не все компиляторы. Например, JavaScript весьма толерантен и игнорирует любые ошибки. (Ю.Ш.)». Таков удел всех книг для программистов. С одной стороны, программирование это формальная дисциплина, а с другой сколько программистов, столько и формализаций.
Приступая к работе над этой книгой, автор, который всю свою жизнь пишет программы, не может просто так взять и выключить профессиональный способ формулирования мыслей, ведь для него книга это та же программа, только написанная на другом языке. Но в отличие от программы, книгу мало написать корректно и оптимально, её важно написать к тому же и интересно! Наряду с этим, образованный программист, имеющий некоторое представление о «принципе минимальной длины описания» или «Колмогоровской сложности», понимает, что гипотетически, существует способ передать то, что он хочет сказать, в кратчайшей форме. Но читательское восприятие процесс сугубо индивидуальный, контекстно-зависимый и к тому же мультимодальный. Поэты и математики лучше других знают, как при помощи слов выразить человеческие чувства и рациональную логику, и для этого они используют одномерные языки. Музыканты и художники могут передавать гармонию и видение мира, в пространствах с бо́льшим количеством измерений. В идеале, сочетание слов, ритмов, логики и рисунков создаёт в голове у человека самые глубокие и прочные ассоциации, основанные на фундаментальных формах сознания. А если помимо форм, прислушаться как в диалогах Пушкина о роли автора, Реньи о математике или в философских спорах Валентинова с Лениным о материальном и идеальном, возникает процесс обмена сомнениями, в котором каждый может поучаствовать со своими идеями и возражениями, то конечно нам нужно добавить в книгу виртуальный диалог с читателем и взгляд со стороны, например, в форме замечаний собеседника-оппонента