Лучше использовать «естественный» язык для написания кода? - PullRequest
6 голосов
/ 01 мая 2010

Я недавно видел язык программирования под названием supernova , и они сказали на веб-странице:

Язык программирования Supernova современный язык сценариев и

Первый представляет концепцию программирование с прямой фантастикой Описание с использованием

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

и вы можете написать код как:

i want window and the window title is Hello World.
i want button and button caption is Close.
and button name is btn1.

btn1 mouse click. instructions are
   you close window
end of instructions

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

Ответы [ 10 ]

19 голосов
/ 01 мая 2010

Код может выглядеть как естественный язык, но на самом деле это обычный компьютерный код с разными ключевыми словами. В вашем примере I want, вероятно, является синонимом new. Это не значит, что вы можете использовать естественный язык напрямую и вместо этого сказать make me a window (и если бы вы могли, все стало бы еще ужаснее ...).

Давайте внимательно рассмотрим ваш код и языковые последствия:

i want window and the window title is Hello World. 

i want означает new, and обозначает начало списка аргументов. the <type_name> <member_name> is устанавливает переменную экземпляра member_name для создаваемого объекта. Обратите внимание, что вы должны написать type_name дважды.

i want button and button caption is Close.
and button name is btn1.

. заканчивает утверждение. Однако вы можете 'цепочкой' вызывать методы объекта, начиная следующую инструкцию с and. Кроме того, как вы ссылаетесь на переменную с именем Close вместо строки "Close"? Черт, у нас даже есть эта проблема на обычном английском: какая разница между «Скажи свое имя» и «Скажи« свое имя »»? *

btn1 mouse click. instructions are
   you close window
end of instructions

mouse click - идентификатор, содержащий пробел, должен быть mouseClick. instructions are определяет лямбду (см. Путаницу с ключевым словом is против are, вызывающую проблемы?). you close window звонки window.close(). end of instructions это конец лямбды. Все они длиннее, чем должны быть.

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

<ч />

Попробуйте этот перевод:

var myWindow = new Window( title="Hello World" );
myWindow.addButton( new Button( caption="Close", name="btn1" ) );

btn1.onMouseClick = function() {
    myWindow.close();
}

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

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

13 голосов
/ 01 мая 2010

Поскольку фундаментальная трудность программирования заключается в том, чтобы привести свои мысли в порядок, чтобы они указали компьютеру, что делать, то сделать язык более «естественным» вряд ли сделает его более доступным для непрограммистов; язык сам по себе никогда не был настоящей проблемой. Более того, весь этот дополнительный беспорядок естественного языка не помогает программистам (стоит того, чтобы их имя) делать то, что они делают, так зачем добавлять это?

Или у нас может быть настоящий язык программирования на естественном языке, в комплекте с «Um», «Er» и «О, я действительно не знаю»? : -)

7 голосов
/ 01 мая 2010
5 голосов
/ 01 мая 2010

Язык программирования, который вы показали нам выше, является чрезвычайно многословным (как кажется, даже больше, чем COBOL).

Это связано с несколькими проблемами:

  • Для выполнения простых задач требуется длинный код.
  • Код становится неуправляемым довольно быстро
  • Требуется много времени, чтобы выяснить, что делает код
3 голосов
/ 01 мая 2010
person.eBusiness[text.this.author].like(language.supernova.idea.reverse);
language.English[ambiguous[very]];
person.eBusiness.suggest(create(language.Codetalk));
language.Codetalk.grammar.inspiration=language.programming.grammar;
language.Codetalk[new,better,ambiguous[not]];
if(person.all.use(language.Codetalk)){
    person.all.understand(person.all.communication);
};
question(language.Codetalk.idea[good]);
3 голосов
/ 01 мая 2010

Я буду смелым и предложу здесь немного другое мнение.

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

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

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

В заключение:

  • удобочитаемость без программирования: отлично.
  • удобочитаемость программиста: без улучшений.
  • набор кодов: нет, просто ... нет.
  • кодируемая речь: возможно, намного проще.
3 голосов
/ 01 мая 2010

Независимо от того, лучше они или нет, это мнение, но это похоже на некое мутировавшее сочетание Кобола и Бейсика, что, безусловно, является эпически плохим.

Так что, на мой взгляд, нет. Я думаю, что в некоторой степени точные языки, в которых все еще используются читаемые глаголы / прилагательные / имена, лучше (C ++, C #, PHP и т. Д. - мои предпочтительные языки).

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

2 голосов
/ 01 мая 2010

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

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

1 голос
/ 02 мая 2010

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

0 голосов
/ 17 февраля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...