Языки программирования и среды разработки развиваются непрерывно, предлагая современному разработчику всё больше и больше вкусностей. Я уверен, что не за горами тот день, и наступит время, когда компьютеры научатся понимать живую речь и преобразовывать её в машинный код. Я решил представить, как это может выглядеть в реальности, быть может даже этому немного поспособствовать. Кстати, название данной статьи написано на ICQuery в том виде, как я его себе представляю, и является исходным кодом аналога её функции main.

День первый.

Прогер: привет!
ICQuery: День добрый! Чем могу помочь?
Прогер: надо написать программу…
ICQuery: помогу с удовольствием! Писать программы — моё главное и основное предназначение. Как назовёте готовый продукт?
Прогер: ХеллоВорлд
ICQuery: Какими функциональными возможностями обладает ХеллоВорлд?
Прогер: Выводит текст "Hello World"
ICQuery: Куда выводит?
Прогер: на терминал
ICQuery: Что в контексте программы означает терминал?
Прогер: стандартное устройство вывода
ICQuery: Принято. ХеллоВорлд — программа, которая выводит последовательность символов "Hello World" на терминал, который является стандартным устройством вывода. Всё верно?
Прогер: 0_o фигасе. Это всё, что надо было ввести для создания программы ХеллоВорлд?
ICQuery: Да. Благодарю за высокую оценку моей работы. Пока мы общались, я определила, что программы такого класса традиционно используются для создания первичного впечатления о неизвестном языке программирования, а также для проверки его возможностей. Могу заверить, что я являюсь квинтессенцией развития всех этих языков, а также всевозможных машинных архитектур, включая абак, швейные станки, механические пианино и аналоговые ВМ. Я сочетаю в себе лучшие черты чат-ботов, исследования искусственного интеллекта и мощность древних визуальных сред разработки. В результате я могу понимать программы, написанные на естественном языке, ничуть не хуже, чем живой человек. Более того, я могу перевести получившуюся программу на любой известный мне язык программирования, в том числе на машинный код, ассемблер, представить её в виде математических формул или блок-схем. И это лишь ничтожно малая часть моих возможностей. В каком виде желаете получить результат?
Прогер (всё более офигевая): бинарник виндовый…
ICQuery: Принято. Приступаю к работе по созданию бинарного кода приложения ХеллоВорлд под архитектуру Windows актуальной версии…
***ICQuery генерирует ХеллоВорлд.exe и передаёт его Прогеру. Принцип передачи не важен, важен тот факт, что Прогер, попытавшись запустить его в своей Windows 100500+, получает вожделенную надпись Hello World в окне терминала.
Прогер, благоговейно: и правда работает, спасибо большое.
ICQuery: было приятно помочь, если что-то понадобится, обращайтесь снова.

Как думаете, реально ли сделать такое? В следующей статье я попытаюсь объяснить, что ничего особо сложного в данной концепции нет, особенно если начать мыслить на ICQuery.

P.S. Раз уж пошли такие комментарии…
Автор утверждает, что создание сильного ИИ — плёвое дело.
Где я утверждаю, что это дело — плёвое? Создателю такого языка придётся проскочить миллионы лет эволюции за приемлемый срок, который явно будет короче его жизни, если он не забросит свои исследования и не передаст их другим людям. Он должен будет довести простейшее прокариотическое клеточное ядро до уровня развития выпускника детского сада, и если повезёт — до окончания начальной школы. Если сильно повезёт, его ИИ сможет закончить школу целиком.

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

Проголосовало 192 человека. Воздержалось 75 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (35)


  1. lair
    25.09.2015 18:31

    Как думаете, реально ли сделать такое?

    Реально, но с оговорками.

    • Чтобы это действительно было удобно, понадобится искусственный интеллект
    • Если искусственного интеллекта не будет, программисту придется формулировать свои задачи очень четко
    • Для любой задачи существенного объема необходима возможность быстро читать и анализовать ее реализацию. Как это предполагается в случае с ICQuery?


    1. hopungo
      25.09.2015 18:46
      -2

      Определив понятие интеллекта и объяснив его машине, мы тем самым автоматически его и реализуем. Это основной принцип работы ICQuery. Проблема, как вы понимаете, в том, чтобы объяснить.

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

      XSD тоже как-то так хитро определён, что его синтаксис описывается в нём самом. Да и любой уважающий себя компилятор написан на том же языке, который он компилирует.


      1. lair
        25.09.2015 18:50
        +2

        Определив понятие интеллекта и объяснив его машине, мы тем самым автоматически его и реализуем. Это основной принцип работы ICQuery. Проблема, как вы понимаете, в том, чтобы объяснить.

        Ну да. Поэтому сначала очень много пункта два, а потом, если повезет, пункт один.

        Кстати, пункт два (много и четко формулировать) проще на искусственных языках, чем на естественных.

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

        … после чего снова понадобится IDE для анализа.


        1. hopungo
          25.09.2015 19:05

          Ну, я не отрицаю наличие визуальных компонентов в самой ICQuery… Более того, там не должно быть особой разницы ни между графическим представлением символа и его внутренней реализацией, ни между графическим представлением компонента и его описанием.

          И, скажем, код вы можете выгрузить в ИДЕ, проанализировать, и вернуть программе. И после этого она по идее должна перевести его на естественный язык, то есть на ICQuery…


          1. lair
            25.09.2015 19:06

            Более того, там не должно быть особой разницы ни между графическим представлением символа и его внутренней реализацией, ни между графическим представлением компонента и его описанием.

            Так не выйдет. Графический язык и вербальный язык сильно отличаются.

            И, скажем, код вы можете выгрузить в ИДЕ, проанализировать, и вернуть программе.

            Это к тому, что потребность в IDE не уменьшится.


            1. hopungo
              25.09.2015 19:27

              Хмм. Ну тогда предлагаю задать ICQuery какое-нибудь элементарное задание, с которым она не сможет справиться. Спрошу у неё, как она планирует выкрутиться.


              1. lair
                25.09.2015 19:38

                Что вы понимаете под «элементарным»?


                1. hopungo
                  25.09.2015 19:50

                  Что обычно пишут после ХеллоВорлда. Про организацию ввода данных можете не задавать, о ней я уже подумал. В процессе написания статей объясню.


                  1. lair
                    25.09.2015 20:01

                    Не знаю, никогда не писал hello world.

                    Но давайте начнем с простого: написать программу, решающую произвольное поданное на вход квадратное уравнение.


                    1. hopungo
                      25.09.2015 20:06

                      ICQuery после такого определения задачи спросит, что значит «произвольно поданное» и что такое «квадратное уравнение». В терминах классической постановки вы должны предоставить тестовые данные.


                      1. lair
                        25.09.2015 20:30

                        (в моем понимании уже не справилась, но ладно)

                        Произвольное поданное — значит, задается пользователем во время выполнения.
                        Квадратное уравнение — это уравнение, приводимое к… ладно, пусть будет «данное в» виде ax2 + bx + с = 0.

                        (а тестовые данные очевидны из того факта, что это уравнение)


                        1. hopungo
                          25.09.2015 21:59
                          -2

                          Допустим, что она этому уже обучена, тогда диалог будет выглядеть примерно так:

                          Прогер: мои коллеги хотят проверить твои возможности.
                          ICQuery: я умею очень многое. Прежде всего, я научилась писать программы, воспринимать данные в отличном от текстового формате и ассоциировать их с тем, что я уже знаю. Теперь можно сказать, что для меня нет разницы, подана на вход картинка, текст, звук, бинарный файл, архив или случайная последовательность данных. По умолчанию, я уточняю, правильно ли я интерпретировала то, что было подано мне на вход. Теоретически меня можно научить обрабатывать любые данные. Меня можно научить писать музыку и рисовать картины. Можно отключить текстовый интерфейс и общаться со мной непосредственно голосом. Если отключить подтверждение введённых данных, тогда я веду себя практически как человек.
                          Прогер: а квадратное уравнение решить сможешь?
                          ICQuery: Конечно. Когда-то давно меня научили делать и это.
                          Прогер: Как ты это сделаешь?
                          ICQuery: Квадратное уравнение вида ax2 + bx + с = 0 решается подсчётом дискриминанта, либо методами, определёнными во внешних источниках. Возможно определение собственного метода. Программе понадобится узнать коэффициенты a, b и с; их можно задать последовательно, либо с указанием имён, либо ввести уравнение целиком.
                          Прогер: реши тогда x2+2x+1=0
                          ICQuery:
                          Вы ввели уравнение:
                          x2+2x+1=0
                          Коэффициенты уравнения:
                          a=1, b=2, c=1
                          Вычислим дискриминант:
                          D=b2?4ac=22?4·1·1=4?4=0
                          (D=0), следовательно это квадратное уравнение имеет 1 вещественный корень:
                          x(1,2)=?b±vD2ax1=x2=?b2a=?22·1=?22=?1x2+2x+1=(x+1)2=0
                          Ответ:
                          x1=x2=?1

                          Уф… пожалуйста, пока не просите больше ничего сделать. Сейчас аська существует только в виде идеи, поэтому мне приходится гуглить решения за неё, а это крайне утомляет.


                          1. lair
                            25.09.2015 22:04

                            Конечно. Когда-то давно меня научили делать и это.

                            Вот тут, собственно, и конец истории.

                            Кто и как ее обучил?

                            (да, в пункте «меня можно научить писать музыку» мне отдельно смешно)

                            пожалуйста, пока не просите больше ничего сделать.

                            Вы сам предложили.


                            1. hopungo
                              25.09.2015 22:20

                              Проблема в том, что оказалось сложновато найти данные, которые на движке хабра покажут взаимодействие программы с пользователем. Да и мой стремительно опускающийся рейтинг показывает, что я куда-то не туда сделал пост. Наверно, следовало сначала всё-таки создать прототип программы, раскрутить бренд, а потом уже освещать его здесь.

                              А возможно, я просто пересмотрел фантастики…


                              1. lair
                                25.09.2015 22:41

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


                                1. hopungo
                                  27.09.2015 21:24

                                  Кто и как ее обучил?

                                  Задав такой вопрос программе, можно получить информацию и о создателе программы, и о том, как происходит процесс её обучения. По идее, выданная ей информация будет телом функции на языке ICQuery.

                                  Так-то изначально я подумал, что в этом языке повествовательное предложение может служить комментарием, вопросительное — запросом данных, а повелительное — командой. В таком случае, естественно, возникает вопрос, как поступать, если пользователь будет безграмотен, не использует знаков препинания, или же использует их сверх меры. Или если начнёт непредсказуемо нарушать правила тут и там, программа выработает принципы, по которым он строит свою речь, а потом он резко начнёт писать грамотно. Да и тот пример, который я привёл в статье, уже отходит от этой концепции, поскольку ХеллоВорлд написан повествовательным языком.

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


                                  1. lair
                                    27.09.2015 21:28

                                    Задав такой вопрос программе, можно получить информацию и о создателе программы, и о том, как происходит процесс её обучения. По идее, выданная ей информация будет телом функции на языке ICQuery.

                                    Я не у программы спрашиваю, а у вас.


                                    1. hopungo
                                      27.09.2015 22:12

                                      Ну, допустим, обучил я, а как обучил… Задал базовые операции вида Ответь, Спроси, Забудь, Объясни, Выполни, и определил, что текст в кавычках распознавать не надо. Естественно, всё это я сделал на формализованном языке, потому что ICQuery ещё не изобретён. После чего начал общаться. Долго общался, и наконец объяснил, что я от неё хочу.


                                      1. lair
                                        27.09.2015 23:33

                                        После чего начал общаться.

                                        На каком языке?


                    1. lostpassword
                      25.09.2015 20:41

                      никогда не писал hello world
                      Как?! Как такое возможно?)


                      1. lair
                        25.09.2015 20:44
                        +1

                        Не знаю, наверное, у меня было тяжелое детство, строгие учителя и никаких игр.


  1. may-cat
    25.09.2015 18:52
    +6

    Такая программа уже существует. И называется она — начальник айти отдела.


    1. hopungo
      25.09.2015 18:57

      Ага, причём чужого и ничем не занятого :)


  1. Infanty
    25.09.2015 21:15
    -3

    Ещё в 2009 делал прототип программы которая на основе 3 предложений могла отвечать на вопросы как по тексту так и по объектам описанным в тексте. Прикрутить к ней хоть компилятор, хоть распознавание речи не составляет труда и получить что то гораздо мощнее SIRI. Только не нужно это ни кому…


    1. hopungo
      25.09.2015 22:11
      -1

      Тут уже 27 человек сказали, что нужно :)


    1. hopungo
      27.09.2015 20:57

      А можно спросить, на каком языке вы её писали и сохранился ли исходный код?


  1. Kano
    26.09.2015 11:27

    Считаю что универсальные средства всегда будут проигрывать специализированным в своей области применения.


  1. EndUser
    26.09.2015 15:42

    Сошлюсь на прежнее высказывание: http://habrahabr.ru/company/gttf/blog/241127/#comment_8083983


    1. hopungo
      26.09.2015 19:10

      ICQuery последовательно избавляется от неопределённости, после чего запускает «программу», поданную ей на вход.


  1. PHmaster
    27.09.2015 19:56

    О чем вообще статья? Либо я все понял совсем не так, либо автор абсолютно голословно (и в самой статье, и в последующих комментариях) утверждает, что создание полноценного «сильного» искусственного интеллекта — совершенно плевое дело, а в качестве подтверждения приводит вымышленный диалог с «изобретенным» (в фантазиях, разумеется) им ИИ о_0


    1. hopungo
      27.09.2015 20:55
      -1

      Ох… Как же объяснить-то. Сейчас это очень маловероятно. По сути, создатель этого языка и ИИ должен проскочить миллионы лет эволюции за приемлемый срок. То, что я действительно утверждаю — это возможно в принципе, и что необходимо этот гипотетический язык, как и его компилятор, написать на языке, максимально приближенном к естественному.

      Почему-то никому не пришло в голову, что ICQuery можно ввести в тупик безграмотной речью, или зациклить сепульками. Или, что попросив её забыть себя, можно её попросту убить.


      1. PHmaster
        27.09.2015 21:28

        Так о чем ваша статья? А главное — зачем она? Что вы хотели донести миру? Что существует такое понятие, как natural language processing?


        1. hopungo
          27.09.2015 21:57

          Насколько я знаю, nlp (ох, как похоже на нейролингвистическое программирование) занимается тем, что анализирует язык и пытается имитировать общение. Скорее всего, его алгоритмы написаны на языках формализованных, и «общаясь» с программой, изменить эти алгоритмы крайне затруднительно, если возможно вообще. А статья о том, что ИИ должен быть описан на естественном языке и в терминах естественного языка, хотя в текущем виде она больше подходит для публикации в виде фантастического рассказа.


          1. lair
            27.09.2015 23:34

            ИИ вообще не должен быть описан, если что. Когда вы «обучаете» программу, то, что получается — это не программное описание.


          1. PHmaster
            28.09.2015 00:47
            +1

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