О понимании между человеком и машиной
Sep. 28th, 2010 03:26 pmПопалась на глаза довольно старая статья Пола Грэма "Языки программирования через сто лет". Как пишет сам автор, "Конечно, уже в самой постановке вопроса о том, какими станут языки программирования через сто лет, есть немалое допущение. А будут ли тогда вообще писать программы? Может быть, мы просто будем говорить компьютерам прямым текстом, чего от них хотим?"
Мне, как программисту и пользователю, безусловно, нравится последний вариант: научить компьютер понимать язык человека. Обычно это подразумевает создание искусственного интеллекта, достаточно мощного, чтобы найти общий язык с людьми. На самом деле, эту задачу можно решить двумя способами: научить компьютер понимать естественный человеческий язык либо обучить человека логически, формально мыслить;) Думаю, каждый из этих вариантов имеет право на существование:
1. С одной стороны, естественный язык основан на абстрактном мышлении, опыт использования в программировании которого уже есть - та же объектно-ориентированная парадигма. Принципиальная разница между человеком и машиной состоит в том, что для компьютера абстрактный код - это только верхний слой алгоритма, внизу которого лежат строгие дискретные инструкции, нолики и единицы. В человеческом же мозге абстракции формируются на уровне "машинных команд", сигналов нейронов, которые по своей природе недискретны. Тут опять программирование имеет возможные пути решения: нейронные сети как модели биологических систем и нечеткая логика. Таким образом, остается надежда, что при должном развитии парадигм программирования и моделирования рано или поздно получится создавать настоящий код на том же уровне абстракций, который использует для мышления и обычный человек.
2. С другой стороны, сложность обучения человеческому языку может быть преодолена тем, чтобы не использовать двусмысленные и избыточные языковые конструкции при общении с компьютером. Если исходить из того, что есть, то есть пытаться избавить используемый человеческий язык от двусмысленностей, это потребует от человека, как минимум, превосходной дисциплинированности и самоконтроля. В этом случае задача с программирования компьютера перенесется на программирование человеческого мышления. Такой подход не исключен, и тут уже будут свои гении программирования, люди, способные мыслить настолько же четко, как компиляторы, и не пропускающие ни одной лексической, синтаксической и, вдобавок, семантической ошибок.
Но можно просто отказаться от использования современных естественных языков, сложность которых порождена тысячами лет использования разными людьми в разных ситуациях. Можно придумать и освоить искусственный язык, и такие попытки уже неоднократно осуществлялись. О результатах подобных экспериментов написано, например, в статье Станислава Козловского "Скорость мысли". Подобное серьезное увлечение заведомо ограниченным языком чревато, на мой взгляд, тем, что человек в своем мышлении "опустится" до мыслительных способностей машины, вместо того, чтобы развивать машинное восприятие, а потому это решение не может восприниматься, как конечная цель. Хотя надо принимать во внимание, что словарный запас любого человека тоже ограничен, а значит, ограничено и количество возможных метафор, которые он использует в своем мышлении.
По-видимому, проблему общения с компьютером и написания программ на человеческом языке все же удастся решить, насколько это будет необходимо. Но, возвращаясь к заданному в начале вопросу, стоит задуматься о том, является ли язык универсальным средством мышления? В конечном счете, в нашей голове хранятся не слова и тексты, а мыслительные символы и образы, которые обязательно будут искажены в процессе языковой передачи. И если мы хотим создать действительно полноценный человеко-машинный интерфейс, надо научить машину понимать их как можно ближе к источнику их возникновения, возможно, полностью минуя языковые конструкции. Но думаю, это будет уже совсем другое программирование.
Мне, как программисту и пользователю, безусловно, нравится последний вариант: научить компьютер понимать язык человека. Обычно это подразумевает создание искусственного интеллекта, достаточно мощного, чтобы найти общий язык с людьми. На самом деле, эту задачу можно решить двумя способами: научить компьютер понимать естественный человеческий язык либо обучить человека логически, формально мыслить;) Думаю, каждый из этих вариантов имеет право на существование:
1. С одной стороны, естественный язык основан на абстрактном мышлении, опыт использования в программировании которого уже есть - та же объектно-ориентированная парадигма. Принципиальная разница между человеком и машиной состоит в том, что для компьютера абстрактный код - это только верхний слой алгоритма, внизу которого лежат строгие дискретные инструкции, нолики и единицы. В человеческом же мозге абстракции формируются на уровне "машинных команд", сигналов нейронов, которые по своей природе недискретны. Тут опять программирование имеет возможные пути решения: нейронные сети как модели биологических систем и нечеткая логика. Таким образом, остается надежда, что при должном развитии парадигм программирования и моделирования рано или поздно получится создавать настоящий код на том же уровне абстракций, который использует для мышления и обычный человек.
2. С другой стороны, сложность обучения человеческому языку может быть преодолена тем, чтобы не использовать двусмысленные и избыточные языковые конструкции при общении с компьютером. Если исходить из того, что есть, то есть пытаться избавить используемый человеческий язык от двусмысленностей, это потребует от человека, как минимум, превосходной дисциплинированности и самоконтроля. В этом случае задача с программирования компьютера перенесется на программирование человеческого мышления. Такой подход не исключен, и тут уже будут свои гении программирования, люди, способные мыслить настолько же четко, как компиляторы, и не пропускающие ни одной лексической, синтаксической и, вдобавок, семантической ошибок.
Но можно просто отказаться от использования современных естественных языков, сложность которых порождена тысячами лет использования разными людьми в разных ситуациях. Можно придумать и освоить искусственный язык, и такие попытки уже неоднократно осуществлялись. О результатах подобных экспериментов написано, например, в статье Станислава Козловского "Скорость мысли". Подобное серьезное увлечение заведомо ограниченным языком чревато, на мой взгляд, тем, что человек в своем мышлении "опустится" до мыслительных способностей машины, вместо того, чтобы развивать машинное восприятие, а потому это решение не может восприниматься, как конечная цель. Хотя надо принимать во внимание, что словарный запас любого человека тоже ограничен, а значит, ограничено и количество возможных метафор, которые он использует в своем мышлении.
По-видимому, проблему общения с компьютером и написания программ на человеческом языке все же удастся решить, насколько это будет необходимо. Но, возвращаясь к заданному в начале вопросу, стоит задуматься о том, является ли язык универсальным средством мышления? В конечном счете, в нашей голове хранятся не слова и тексты, а мыслительные символы и образы, которые обязательно будут искажены в процессе языковой передачи. И если мы хотим создать действительно полноценный человеко-машинный интерфейс, надо научить машину понимать их как можно ближе к источнику их возникновения, возможно, полностью минуя языковые конструкции. Но думаю, это будет уже совсем другое программирование.
no subject
Date: 2010-09-28 06:52 pm (UTC)Так все и будет - http://vedmitriev.livejournal.com/1582.html. Но не через сто лет, а гораздо, гораздо позже.
no subject
Date: 2010-09-28 07:22 pm (UTC)no subject
Date: 2010-09-29 10:39 am (UTC)