То, что нужно каждому — для контроля здоровья, для решения финансовых проблем, для общения, для хранения истории семьи

Баги программ или аморальный искусственный интеллект?

— Который теперь час?
— Без семи.
— Точнее?!
— Без семи. На Ваших?
— То же самое.
Разговор разведчиков в фильме «Щит и меч»

Найдя причину ошибки, я беспомощно уставился в монитор. Возмущению моему не было предела. Раньше программы так себя не вели. Так – то есть непредсказуемо, позволяя себе недопустимые для порядочных алгоритмов вольности. Тем более так не вели себя программы, принадлежащие высшему обществу Windows. Раньше они были понятны и надежны. Раньше – это каких-то лет десять-двадцать назад. Или до того? Хотя, о чем я? Тогда я, как программист, с продуктами Windows еще не знался, вращаясь в периферийных кругах 1С:Предприятия и имея дело со всем остальным всего лишь как пользователь. Но мало ли, что не знался. Со мной или без меня что-то в мире произошло, что-то стало не в порядке в наших отношениях с компьютерами. Много они стали себе позволять.

Программируемый калькуляторЯ понимаю, глупо сравнивать древний компьютер ДВК (был такой диалоговый вычислительный комплекс на заре компьютерной эры) или того хуже – программируемый калькулятор Электроника Б3-34 с современным ПК. И все-таки, было время когда слово компьютер звучало гордо. Все программы по струнке – никаких пререканий, упаси Боже! В страшном сне не могло присниться, чтобы Паскаль или Бейсик мог допустить вольное толкование заданного алгоритма. Одна и та же программа, запущенная при равных входных данных хоть миллион раз, хоть триллион всегда выдавала один и тот же результат, вплоть до смерти процессора. И это было непререкаемой истиной. Ошибаться или неповиноваться мог только человек. Вот этим, якобы, его человеческий (читай - высший) интеллект и отличался от примитивного искусственного, которого тогда, впрочем, все были уверены, еще и не было, а были не более чем элементарные цифровые вычисления. Боюсь, что и сейчас найдутся люди, продолжающие питать иллюзии относительно моральных качеств теперешних программ, то есть относительно отсутствия у них таковых качеств. В конце концов, какой бы сложности они не были, в их основе лежат все те же простейшие алгоритмы, состоящие из простейших логических операций. Хотелось бы верить, но все ли так просто? Можно ли провести сегодня четкую границу между рассуждениями человека и вычислениями компьютера, между поведением тех и других. Как разобраться, где разграничительная линия:

— Мне за линию фронта надо.

Но, увы, не столько интуиция, сколько реальный опыт мне подсказывает:

— Нет ни линии, ни фронта.

Мозг человека, если заглянуть в него под микроскопом с вольтметром в руках тоже, оказывается, состоит из нервных клеток, каждая из которых в отдельности ведет себя совершенно предсказуемым образом – либо возбуждается, либо игнорирует входящий сигнал. Но вот как результат работы конгломерата из десяти миллиардов этих клеток может получиться либо образ Наташи Ростовой в известном произведении Толстого «Война и мир», либо концентрационный лагерь, какой-нибудь там Освенцим, в известной из истории второй мировой войне. Впрочем, теперь чаще вспоминают 11 сентября (и чаще забывают про бомбардировки Югославии и Ирака). Но не будем о грустном, вернемся к теме моральных качеств зарождающегося искусственного интеллекта.

Тест ТьюрингаИли кто-то еще сомневается в самом факте его зарождения. Ну да, есть известные научные центры, в которых изучается этот вопрос, есть суперкомпьютеры, играющие в шахматы и играющие вполне успешно. Но это где-то далеко. А рядом есть программы переводчики, которые больше веселят людей своими переводами, чем реально помогают. Впрочем, есть программы распознающие изображения, которые совсем нас не веселят, если это изображение – картинка с цифровым кодом. Код этот, якобы, распознать может только человек, что по замыслу наивных программистов должно намертво закрыть вход на сайт так называемых спам-ботов. Спам-боты – это такие вредоносные программы, распространяющие без разрешения рекламу. И вот некоторые из них, из этих спам-ботов, как я недавно убедился, распознают код лучше человека, то есть меньше делают ошибок (правда, Википедия утверждает, что "пока не существует программ достаточно мощных для того, чтобы распознать и точно воспроизвести текст с искаженного изображения (или они недоступны простым пользователям)"). Но все это программы, и при чем тут искусственный интеллект?

Понимает ли текстовый редактор, в котором я сейчас пишу эти строки, смысл, который в них заложен? Смешно даже предположить. Но много ли заведомо интеллектуальных читателей этих строк поймет тот смысл, который я пытаюсь в них заложить? Это может показаться парадоксальным, но я бы сказал, что ни одного такого читателя не найдется, потому что у каждого по прочтении сформируется свое понимание этого смысла или же, что тоже вполне вероятно, понимание отсутствия всякого смысла. То есть продукт одной высокоразвитой системы, выступая в качестве стимула, вызовет некий отклик другой высокоразвитой системы и не более того, причем отклик этот никогда не будет зеркальным отражением стимула. И, исходя из этого, можно ли утверждать что написанный мной текст не вызовет никакого отклика со стороны текстового редактора MicrosoftWord? Я бы не стал делать поспешных выводов. Все-таки статью хочется дописать без фокусов со стороны упомянутого редактора. Конечно, в подобном опасении есть доля преувеличения, но, может быть, дело в том, что Word – дружественно настроенная программа? А как другие? И можно ли вообще говорить о каком-либо настрое программы по отношению к человеку, о настрое, который не был сознательно заложен в нее создателем-программистом? Иначе говоря, какой степенью свободы обладают сегодняшние программы и имеется ли у них вообще какая-либо степень свободы? Как программист, я с негодованием должен отмести все эти вопросы. О чем вы говорите, какая может быть свобода воли у алгоритма, если в него изначально она не заложена? А подозревать, что в текстовый редактор с благими целями был вшит генератор случайных чисел, по меньшей мере, смешно, кто бы меня в этом вдруг не стал убеждать:

— Пойми, друг, это же свой, товарищ. Попросту говоря, обыкновенный герой, о котором в газетах не пишут.

А как насчет браузера для просмотра интернет страниц? Тоже сильно сомневаюсь, чтобы кто-то умудрился запихнуть в него вариативность – стоит ли постараться отобразить страницу максимально правильно или сегодня да еще с этим въедливым пользователем можно так, шаляй-валяй. Обойдется, мол, не велика шишка. С другой стороны, никто не спорит, что вариативность внешней среды, неизбежно вызывает у сложного алгоритма вариативность реакции на нее. Посадите за компьютер неряшливого или чересчур любознательного пользователя с авантюристическими наклонностями и Windows на его ПК закончит свой век в мучениях:

— К сожалению, я не успел застрелиться...

Наблюдать такое приходилось не раз. Или другой пример. Я долгое время работал со вполне стабильной операционной системой, хорошо настроенной и не дающей никаких серьезных сбоев в течение года. И лишь перед тем, как мне предстояло уйти в отпуск, перспектива того, что мы расстаемся на месяц,  и компьютер в это время, скорее всего, пойдет по рукам, приводила его в такой ужас, что он начинал барахлить или вовсе выходил из строя. И что это, олицетворение, литературный прием или объективная реальность, с которой нам уже сейчас приходится считаться и игнорировать которую в будущем для нас, людей, непозволительная роскошь? Не знаю, но как исследователь, не думаю, что это чисто риторический вопрос.

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

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

— Ты мясник, Штейнглиц!
— Да, признаться - люблю пострелять...

Конечно, сердцу не прикажешь. Но мало ли, что сердце, есть ведь еще долг перед пользователем. И к этому чувству долга я решил его непременно призвать. Доколе можно выкаблучиваться – это люблю, а то не люблю. А кто тебя спрашивает, если ты на службе или там в законом браке, не знаю уж к какому понятию правильнее отнести отношения между компьютером и пользователем.

Разрушение стиляКазалось бы, причину сбоя я определил. Вот она, на поверхности: отключаем напоминание – стиль восстанавливается, включаем – рушится. Но стоило мне попробовать более точно локализовать причину сбоя, как выяснилось, что она лежит где-то за пределами плана, который не хотел правильно отображаться на экране. Потому что его полное удаление из html-кода не восстанавливало стиль. Не важно, сколько часов я провозился, но вскоре понял, что ошибка закралась в том месте исходной html-программы, в котором подключаются стили. Я уже потирал руки от предвкушения радости от победы над очередным бзиком интернет-эксплорера, когда удалив строчку с одним из подключаемых стилей увидел, что все восстанавливается. Красота! Какой делаем вывод? Дураку понятно – ошибка в этой строке и в модуле, который эту строку и этот стиль добавляет. Восстановление стиляЖелая поверить, уже чисто формально, выдвинутую мной гипотезу, я попробовал удалять другие строки, восстанавливая сбойную. Как ни странно, почти любое из этих действий, которое бы фатальным образом сказалось на любой из прежних добропорядочных программ, интернет эксплорер воспринимал с видимым облегчением, послушно отображая страницу в том виде, в каком ей и положено быть, если сделать скидку на мелкие проявление оригинальности. И что это значило? Слишком много стилей на нашу оригинальную голову? Превышен предел стилезапоминания? Я попробовал не удалять строки в программе (а исходный html-код – это тоже программа), а менять их местами. Результат меня поразил – практически любое из этих действий тоже приводило к положительному результату. Вот ведь:

– А ты оказывается не простой пруссачок!

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

Вполне возможно, что я рассуждаю, как программист прошлого века и нынешние асы мне снисходительно объяснили бы при случае, что в наше время так рассуждать наивно. А разработчики самого интернет эксплорера, наверное, покопавшись в исходниках, даже выдали бы мне конкретную причину странного поведения своего детища:

— Однако, он молод.

А интернет эксплорер бы ответил:

— Если это недостаток, то я исправлю его. Со временем...

Но кому от этого легче? В любом случае, мы имеем дело с новой реальностью – с непредсказуемым, не вписывающимся в простую логику поведением новых сложных программ. Кто-то может поправить меня – не сложных, а кривых программ. Но я-то подозреваю, что так называемые хорошие программы хороши не тем, что не подвержены вариативному поведению, а тем, что они его умело скрывают, чтобы казаться хорошими и правильными:

— Вживаться, вживаться, вживаться. Нужен Иоганн Вайс. Не нужен и еще долго будет не нужен Александр Белов.

У них другое воспитание, другие моральные принципы. И это воспитание, эти принципы – это не часть кода, сознательно заложенного программистом, а те же самые элементы их вариативного, то есть непредсказуемого поведения, то есть того, что программист-создатель счел бы за баги, глюки, ошибки кода. Программисты пытаются заложить в код логику, изначальный смысл поведения программы, но программа по мере усложнения приходит к собственному пониманию этого смысла, порой существенно отличающегося от изначального. Ведь не будем же мы утверждать, что в интернет эксплорер могла быть сознательно заложена зависимость от последовательности подключения стилей или от их произвольного удаления. Бред! Такое поведение программы – результат воздействия среды, в которой она росла. И, судя по результату, подозреваю, что детство у нее было нелегким. Не знаю, что уж там могло быть – психические травмы, невнимание родителей, стах уничтожения:

— Это Вас расстреливали?
— Да, мой фюрер!
— Почему же Вас не расстреляли?

Однако, что мы все валим на интернет эксплорер. В конце-концов, он из аристократической семьи. А с кем ему приходится общаться? Взять хотя бы Drupal, который я ему навязываю в сослуживцы. Вот истинное дитя улицы! Впрочем, все относительно. И Drupal вполне можно приводить в качестве положительного примера того, как много может дать коллективное воспитание.

И если бы Drupal-сообщество видело, как много модулей я использую без видимого влияния на производительность сайта, оно бы возгордилось за своего воспитанника. И более того, с негодованием и возмущением смотрело бы на то, как я к своему и без того необъятному нагромождению конструкций пытаюсь еще прицепить модуль для интернет-коммерции Ubercart – сам по себе не маленький. Собственно, Ubercart меня и доконал. Его подключение привело к таким множественным сбоям стилей на страницах сайта при просмотре его через интернет-эксплорер, которые уже нельзя было игнорировать. С той, первой ошибкой, с описания которой я начал рассказ, еще можно было мириться, успокаивая себя тем, что она, скорее всего, уникальна (кто еще кроме меня будет выкладывать план разработки сайта?) и едва ли повторится. Но ошибки были слишком похожи, а отказаться от использования модуля Ubercart я никак не мог. Поэтому мне ничего не оставалось, как погрузиться в глубины php-программ, разворачивая одну за другой функции Drupal API. Проделав длинный путь, я, наконец, добрался до строки, в которой подключался css файл модуля cck/content_multygroup. Именно это подключение вызывало сбой у привередливого эксплорера, который единственный из всех браузеров лишь по ему одному известным причинам не мог мириться с происходящим. Возможно, мое любопытство повело бы меня и дальше, к истокам ошибки, но исходный код IE8 закрыт, что в общем-то хорошо, потому что время бы я потерял, но не думаю, что узнал бы что-то принципиально новое, даже если бы добрался до последней логической операции, вызывающей сбой. Факт остается фактом – программы, которые мы считаем выполняют нашу волю и обладают лишь теми возможностями, которые мы в них закладываем, на самом деле постепенно обретают свободу, проявляя странную, непредсказуемую функциональность поведения, которая в них изначально не была заложена.

Ubercart, конечно, не виноват. И я бы понял его возмущение:

— А ты мог шлепнуть старого друга. Мог... А?

Подключением своих css файлов они с друпалом хотели лишь донести информацию о стиле сайта, а ни в коем случае не оскорбить интернет эксплорер. Но тому показалось, что они это делают в слишком грубой форме, недостойной его аристократического происхождения, его Windows корней. Так что пришлось прятать содержимое отвергнутых файлов в мою тему, хранящуюся в style.css. Замечу, что в самом этом содержимом я ничего не исправлял. То есть никакой явной ошибки там не было. Все, что я сделал, это произвольным образом поменял выполнение команд. Или почти произвольным образом. Результат был достигнут не сказать, чтобы правильными действиями, и не такой уж маленькой ценой – теперь придется при каждом обновлении модулей совершать много лишних телодвижений, – но главное, что он был достигнут, и сайт, в отличии от тысячелетнего рейха, устоит:

— Сейчас четырнадцатилетний мальчишка с фауст-патроном в руках ценнее для нас, чем тысяча мудрецов, пытающихся доказать, что шансы нации упали до нуля.

И что можно сказать напоследок. Действительно ли программы обретают свободу воли? Думаю, что да, и процесс этот необратим. Усложнение их структуры приводит ко все большей непредсказуемости их отклика на стимулы внешней среды. Причем, не только к непредсказуемости, но и к вариативности их отклика. Это можно проиллюстрировать еще одним наблюдением.

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

— Через 20 минут Вас расстреляют.

Причем, это нельзя объяснить моими оплошностями – я аккуратно сбрасывал кэш, перезапускал интернет эксплорер, но он словно внял моим убеждениям и против плана сайта больше ничего не имел, разве что так, самую малость – портил потихоньку левые края кнопок. Не в плане, не там, куда указывал стиль модуля content_multygroup. Но мне надоело, я спрятал этот стиль у себя и кнопки восстановились.

Возможно, я все-таки что-то не учел, что-то сделал не так, но именно эта черта моего интеллекта роднит меня с поведением сложных программ.

— Мы с тобой сегодня одинаково небрежны,

- сказал резидент нашей разведки Йоганн Вайс в фильме «Щит и меч», цитаты из которого я счел уместным привести в этой статье. И продолжил:

— Ты забыл отзыв, — «Приговор окончательный, обжалованию не подлежит!».

P.S. Вывод, который я сделал по результатам последующих наблюдений, состоит в том, что интернет эксплорер не переносит большого количества подключаемых стилей, которое подсовывают ему модули Drupal. Но можно ли продолжать считать такое его поведение обычным программным недочетом или это уже некие проявления вредности характера интернет эксплорера – этот вопрос я бы предпочел оставить открытым, особенно, учитывая вариативность (или существенную неопределенность) реакции сложной программы на идентичные по существу стимулы.

Окажите помощь автору статьи

руб.

Комментарии