Источник: https://commons.wikimedia.org/wiki/File:Edsger_Dijkstra_1994.jpg
Источник: https://commons.wikimedia.org/wiki/File:Edsger_Dijkstra_1994.jpg

От переводчиков. Хотя Эдсгер Дейкстра — одна из главных личностей в истории IT, эта его коротенькая публикация ранее не попадала на Хабр, да и сами мы узнали о ней лишь благодаря докладу на нашей конференции. Но при этом она выглядит очень любопытным документом эпохи, показывая, что ещё несколько десятилетий назад люди думали о перспективе писать программы на «обычном языке». Поэтому мы решили восполнить пробел и перевести.

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

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

Чтобы значительно облегчить использование машин, было предложено (попытаться) разработать машины, которые мы могли бы инструктировать на своем родном языке. Безусловно, машины стали бы намного сложнее, но, как утверждалось: перенести большую часть бремени на машину — значит упростить жизнь для нас. Звучит разумно, если источником трудностей вы считаете необходимость использовать формальный символизм. Но обоснованно ли это утверждение? Сомневаюсь.

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

Краткий взгляд на историю математики показывает, насколько оправдана эта критика. Греческая математика зашла в тупик, потому что оставалась словесной, наглядной деятельностью. Мусульманская «алгебра», после робкой попытки обратиться к символизму, зачахла, вновь вернувшись к риторическому стилю. А современный цивилизованный мир смог возникнуть — к лучшему или к худшему — только тогда, когда Западная Европа смогла освободиться от оков средневековой схоластики (безуспешной попытки добиться словесной точности) благодаря тщательно или, по крайней мере, сознательно разработанным формальным символизмам, которыми мы обязаны таким людям, как Виет, Декарт, Лейбниц и (позднее) Буль.

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

Вместо того чтобы считать обязательство пользоваться формальными символами бременем, следует относиться к удобству их использования как к преимуществу: благодаря им школьники могут освоить то, что в прежние времена удавалось только гениям. (Этого, очевидно, не понимал автор, который в 1977 году написал в предисловии к техническому докладу, что «даже базовые символы, используемые в логических функциях, опущены ради ясности». Само появление этого предложения говорит о том, что непонимание автора свойственно не ему одному). После всего сказанного понятно, что «естественность» использования наших родных языков сводится к легкости, с которой мы можем использовать их для утверждений, бессмысленность которых не очевидна.

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

Примечание. Как результат тенденции в образовании к уходу от интеллектуальной дисциплины, последние десятилетия показали резкое снижение в западном мире уровня владения людьми своим родным языком: многие люди, которые по меркам предыдущего поколения должны были владеть языком лучше, больше не в состоянии эффективно использовать свой родной язык, даже для целей, которым он вполне соответствует. (Достаточно взглянуть на и впрямь тревожащий объем бесцельного пустословия в научных статьях, технических докладах, правительственных публикациях и т. д.) Это явление, известное как «новая неграмотность», должно оттолкнуть тех сторонников программирования на естественном языке, которым не хватает технической проницательности предвидеть его провал. (Конец примечания.)

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

проф. д-р Эдсгер В. Дейкстра,

научный сотрудник компании Burroughs

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


  1. kichrot
    24.03.2022 18:33
    -3

    О глупости «программирования на естественном языке»

    Это как на этот вопрос посмотреть, с каких позиций и с какого уровня обобщения (абстрагирования).

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

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

    С точки зрения вывода автора, наиболее "правилен" машинный код. Но мы знаем, что развитие пошло по пути рождения ЯП высокого уровня, т.е. по пути приближения ЯП к языкам человеческого общения.


    1. eandr_67
      24.03.2022 20:57
      +27

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

      Вместо того, чтобы кидать демагогическое «существует мнение», вы бы ознакомились с реальной историей языков программирования, однозначно опровергающей ваш тезис о приближении ЯВУ к языкам человеческого общения. Ни один получивший распространение язык программирования не позволяет записать алгоритм текстом, близким по грамматике к языку человеческого общения.

      P.S. Среди языков, ставших популярными, самым приближённым к «человеческому общению», является COBOL, но даже в нём текст программы, записываемый английскими словами, не имеет никакого отношения к грамматике английского языка.


      1. victor_1212
        24.03.2022 21:46
        +1

        вы правы, Turing и Wittgenstein оказали влияние на всех, кроме прочего, если не смотрели, операционная система "THE" очень интересный ранний проект был (1965-66)


      1. kichrot
        25.03.2022 20:55
        -2

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

        ...

        Лично я наблюдаю, что именно Вы не поняли существа моей критики статьи. :)

        Если бы Вы знали теорию познания, то Вы бы понимали, что любой язык является формальной системой, вне зависимости от его происхождения и области применения.

        Вы явно не понимаете, что все языки существуют и развиваются по единым объективным законам, отражающим процесс познания - от частного к общему.

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

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

        В настоящее время процесс, абстрагирования ЯП и приближения их к языкам человеческого общения, сдерживается множеством факторов, одним из которых является незавершенность стандартизации аппаратных средств.

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


    1. LordCarCar
      24.03.2022 20:57
      +5

      Высокоуровневые языки недалеко ушли от машинного кода. Реализация одного алгоритьма на разных ЯП приведет к генерации идентичного машинного кода, возможно с некоторвми вариациями/оптимизациями.

      А попытка программирования на естественном языке хорошо описан в анекдоте про цыпочку с длинными ногами и влажной киской.


    1. potan
      25.03.2022 17:32

      Автор явно указал, какое свойство высокоуровневых языков он считает ценным. Это свойство - невозможность (хотя бы сложность) выразить заведомо неправильные/бессмысленные действия. По этой характеристики ассемблер как раз не далек от естественных языков, только проще в обработке. Многие современные ЯП, такие как питон или джаваскрипт - тоже. Идеальным языком был бы какой-нибудь Idris2.


  1. victor_1212
    24.03.2022 21:11
    +2

    На мой вкус отличная статья, конечно лучше читать в оригинале, невольно вспоминаются слова John von Neumann о том что наиболее важный вклад который можно ожидать от использования компьютеров это не результаты научных вычислений, а опыт общения с иной формой мышления (по памяти)


    1. victor_1212
      24.03.2022 22:14
      +4

      ps

      пример характерного высказывание Dijkstra: "The question of whether machines can think is about as relevant, as the question of whether submarines can swim."


  1. action52champion
    24.03.2022 22:18
    +31

    Вся статья в одной картинке


    1. bookvaio
      25.03.2022 08:51
      -1

      один эсс - начало


  1. SaemonZixel
    24.03.2022 23:00
    +1

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

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


    1. zloddey
      25.03.2022 07:07
      +4

      Всё так, нужна модель окружающей реальности и хранение контекста. А ещё их надо регулярно обновлять - например, банально для того, чтобы созданные машиной вещи попали в модель реальности. Значит, идут в лес все подходы на базе долго "обучаемых" нейронок, например.

      Далее, даже если хоть что-то получится сделать, неизбежно возникнет вопрос специализации. Чем больше и подробнее модель мира, тем тяжелее её построить и тем медленнее она будет работать. А маленькая модель будет страдать от неточности предсказаний. И возникает сложный выбор: или мы делаем убер-модель реальности (с реальным риском никогда не закончить или получить тормозного монстра), или делаем модель только для части мира (т.е., для домена). И получаем программатор, который умеет в естественный язык, но только если вопрос касается его доменной области. А если вдруг нужна интеграция с соседней - извиняйте. Подождите N времени, тогда что-нибудь слепим.


      1. SaemonZixel
        26.03.2022 12:34

        Да, вобщем-то так оно и вырисовывается сейчас. Я работаю над разборкой и выполнением кулинарных рецептов сейчас. Точнее над рецептом приготовления горохового супа. Но на разных языках: русском, английском, испанском, немецком. И уже много кулинарно-специфических вещей всплыло)

        Но я верю, что есть нечто универсальное, базовое во всех сферах, предметных областях или доменах как Вы их называете. И после того, как я это выведу, дальше станет легче.


        1. LordCarCar
          27.03.2022 08:32
          +1

          А что будет делать программа когда встретит в рецепте строку "Посолить по вкусу"?


    1. kant2002
      25.03.2022 07:21

      Есть ли Гитхаб вашего проекта? Посмотреть или покритиковать, или помочь :) любопытно однозначно


      1. rsashka
        25.03.2022 08:09
        +1

        Или вот такой подход https://habr.com/ru/company/timeweb/blog/651999/, который, кстати, тоже начинался с разработки языка программирования на естественном языке https://habr.com/ru/post/531400/


        1. kant2002
          25.03.2022 13:06

          А какие причины отказаться от естественного языка были описанного в https://habr.com/ru/post/531400/ ? сложность распознавать языковые конструкции? Получилось хоть какую то идею в виде кода или спецификации оформить?


      1. SaemonZixel
        26.03.2022 12:39
        +1

        Да смысл выкладывать. Я уже третий вариант делаю. 1ый так и лежит поломанный на javascript. Второй уже делался частично на php, частично на smalltalk. Третий текущий уже полностью на smalltalk-e. Критиковать там много что есть: код сложный и не оформленный, очень много костылей. Это же наука. Тут главное провести эксперимент, получить результат, ценную информацию, а потом всё это можно выкинуть в мусорку)


  1. kant2002
    25.03.2022 06:57

    Я бы немного покритиковал беапелляционую позицию статьи.

    Да, формальные определения алгоритмов нужны, но предположение, что формальным может быть язык только со спец-символами, я бы рассматривал как гипотезу, которая имеет большое эмпирическое подтверждение.

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

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

    Одной из причин, как мне кажется, по которым естественные языки не взлетают, это потому что однозначный разбор грамматики пока не решенная проблема, и если лингвисты найдут на нее положительный ответ, то может быть ситуация поменяется. Примеры исследований в подобном направлении - http://attempto.ifi.uzh.ch/site/resources/ . Этот проект использует ограниченное и контролируемое подмножество английского языка для представления знаний. Я понимаю что это намного более простая задача. Посмотреть примеры можно по ссылке ACE in a Nutshell  на вышеупомянутой страница. Для меня подобные исследования говорят о том что вердикт не вынесен и люди хотят иметь более удобный для "чтения" формат кода. Опять таки, для чтения, а писать мучаться надо будет также.

    Кроме Дейкстры, есть еще Кнут с концепцией Literate Programming. Также есть математика, которая использует вставки спец-языка в естественный язык, может быть также возможно с программированием.


    1. rsashka
      25.03.2022 08:05
      +1

      Одной из причин, как мне кажется, по которым естественные языки не взлетают,

      Потому что это по факту это оказывается ненужным. Использование естественного языка вынужденно ограничивает пользователей только носителями данного языка с относительно сложной грамматикой. И выгода от такого использования отсутствует. Носителям языка все равно придется учитывать ограничения реализации, а остальным - учить более сложный естественный язык, вместо формализованной грамматики какого нибудь Python.


      1. kant2002
        25.03.2022 09:22

        Потому что это по факту это оказывается ненужным

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

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

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

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

        И выгода от такого использования отсутствует.

        Да, конечно сейчас отсутсвует. Но также стоит оговориться что у нас даже игрушечных пседо-промышленных примеров раз два и обчелся. Академики показывают идею, и до того чтобы она была выгодной еще шагать и шагать. Серьезные работы и деньги в НИОКР в данном направлении насколько я понимаю велись в районе 60х-70х, а потом все бабки рубили на том что уже работало и реинвестировали в существующие технологии.

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


    1. inkelyad
      25.03.2022 18:33
      +2

      . Косвенное подтверждение это законотворчество, юриспруденция

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

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


    1. hoegni
      26.03.2022 00:36
      +1

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


    1. LordCarCar
      27.03.2022 08:23
      +1

      Проблема, я думаю, не в сложности разбора текста на естественном языке, а в его неоднозначности. Если же из языка убрать неоднозначности, то мы получим еще один ЯП со своими ограничениями и правилами!


  1. semennikov
    25.03.2022 08:22
    +2

    Дело в том, что ни один естественный язык не является однозначным и не может являться таковым. Я не специалист в лингвистике, поэтому не могу точно сослаться на исследования на эту тему, но они точно были, надо погуглить на досуге.

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


    1. inkelyad
      25.03.2022 18:37

      Кажется, это достаточно легко:
      "Данное высказывание нельзя высказать в языке однозначной и точной интерпретации так, чтобы оно оставалось истинным".

      Могу наврать, конечно, но проблема в самоприменимости. Как только мы можем говорить на языке о самом языке - сразу начинается проблемы.


  1. Static_electro
    25.03.2022 09:30
    +12

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


    1. fotobred
      25.03.2022 13:03
      +1

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


      1. Static_electro
        25.03.2022 15:11
        +4

        Конечно встречал, но то, что их понимают, это заслуга не этих людей, а их собеседников.


      1. acsent1
        25.03.2022 17:29
        +5

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


  1. gnomeby
    25.03.2022 10:51

    Ну использование операторов &&, ! и || в противовес легко воспринимаемых и абсолютно аналогичных and, not и or я бы поставил под сомнение.

    А ведь некоторые извращенцы вообще любят по классике: ∧ ¬ ∨


    1. gnomeby
      25.03.2022 10:52

      Может поэтому питон и взлетел и до сих пор популярен, ну хотя бы в том числе поэтому?...


    1. omican
      25.03.2022 13:46
      +3

      Навскидку у них есть преимущество: эти символы не могут использоваться в названиях переменных и функций, и логические конструкции легче сканируются взглядом, т.е. быстрее заметны границы между названиями переменных и логическими операторами. Тогда как если используются and, not, or, то при таком сканировании приходится подключать свой "лингвистический анализатор" более высокого уровня - отличать одни слова от других.


      1. gnomeby
        25.03.2022 14:23
        +2

        Ну только если дело происходит в нотпаде, что в современном мире не актуально


    1. Certik
      25.03.2022 15:13
      +1

      по классике: ∧ ¬ ∨

      А что не так? Если бы они были на основной клавиатуре, я бы тоже их с удовольствием использовала. Хотя встает вопрос как обозначать не short-circuit операции. Хоть они и не очень часто нужны. Даже я бы сказала вообще не нужны (уменьшают читаемость и привносят хаос).


      1. gnomeby
        25.03.2022 15:21

        Весь вопрос не про вас конкретно, а про среднестатистического разработчика, которому чем меньше рунических символов, тем лучше.


        1. potan
          25.03.2022 18:01

          Тогда почему SML не популярен? Там даже при вызове функции спецсимволы, вроде скобок и запятых не требуются.


          1. gnomeby
            25.03.2022 22:24

            Ну скобки и запятые годами вбивались в школе, поэтому именно они не помеха. Насчёт SML не знаю. Почему он не популярен в СНГ более менее понятно, его не так много где преподают, а вот почему он не популярен в остальном мире, где его преподают не совсем понятно. Может потому что функциональная парадигма является непреодолимым порогом для среднего программиста.


        1. ApeCoder
          25.03.2022 19:09

          Чем меньше непривычных. А это уже зависит от того, к чему привык


          1. gnomeby
            25.03.2022 22:18

            Врядли люди привыкают к строгой математической записи всего. Оно то может и привычно в ВУЗе при изучении высшей математики, но вымывается ещё раньше его окончания обычно.


  1. Sun-ami
    25.03.2022 13:18

    На мой взгляд, программирование на естественном языке имеет большие перспективы, но это программирование не на уровне алгоритмов, а на уровне технических заданий. Фиксация алгоритма должна выполняться на формальном языке, но сами алгоритмы могут частично генерироваться компьютером на основе ТЗ и контекста (проектов, взятых за основу). Другая часть алгоритмов при этом по-прежнему будет писаться людьми на формальных языках, и распространяться как библиотеки и фреймворки. Процесс постановки ТЗ и получения программы при этом обязательно должен быть интерактивным и диалоговым. То есть изначально среде разработки ставится задача вида: "Берём этот функционал из этой программы, этот - из этой, добавляем новые функции с применением вот этих алгоритмов". После этого среда разработки задаёт уточняющие вопросы, и выдает черновой результат, который оценивается разработчиком, и корректируется по помощи изменения и дополнения требований, до тех пор, пока не удовлетворит ожиданиям. При этом, из базовых проектов берется не только алгоритм, но и контекст - способ интерпретации требований на естественном языке,например, в виде обученной нейросети.


    1. gnomeby
      25.03.2022 14:22

      BDD


  1. kirillk0
    25.03.2022 14:50
    +12

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


    1. supereuro2000
      26.03.2022 11:03

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


  1. avshkol
    25.03.2022 15:06
    -3

    ООП наиболее близко к человеческому языку. Например, код ниже можно описать так: "Возьмем человека, его зовут Иван, 23 лет), сейчас он работает дизайнером"

    class Man:

    def __init__ (self, name="Некто", age):

    self.name = name

    self.age = age

    def work(profession):

    pass

    ivan = Man('Иван', 23)

    ivan.work('Дизайнер')


  1. developer7
    25.03.2022 16:23
    +1

    Я вообще не понимаю почему здесь могут быть противоречия. Помойму всё очевидно. Современная программа — это точное описание того что должно происходить.
    Например на «человеческом» языке это будет выглядеть так.

    Возьми переменную и положи в аккумулятор a
    Возьми переменную и положи в аккумулятор b
    Сложи аккумулятор a и b
    И т.д.


    Собственно современные языки программирования недалеко ушли от этого текста. Просто люди которые не писали код не совсем представляют сколько инструкций нужно для описания поведения простейших ситуаций.

    А вот если люди хотят что то типа — компьютер задай мне сцену древнего замка. Ага — так. Добавь мне героя. Ага так. Дракона туда на задний фон. То тут это просто сильный ИИ. Который должен понять что человек имеет ввиду — и воссоздать в программе.


  1. potan
    25.03.2022 17:25

    Программирование на родном языке возможно, если родной язык - ложбан...


  1. blutang
    26.03.2022 11:09

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