Как стать автором
Обновить

Комментарии 56

Шум в опен-спейсах будет стоять почище, чем на бирже.
Имплементируйте, пожалуйста, потише — я не могу наговаривать контроллеры — постоянно просачиваются ваши фразы.
Было бы интересно, если бы были приведены подробности техник распознования голоса, представлен прототип или еще что-то. А так это напомнает банальную демагогию (точнее поток сознания).

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

А конкретная реализация может варьироваться.
Она ничего толком не решает — на С это будет или на чем то еще.
С использованием каких-то принципов или нет.
Будет использоваться данная иерархия — я не против.
Не будет — тоже собственно ничего страшного.
А вы не задумывались, что языки разрабатывали отталкиваясь от задач? Макросы, ООП, Шаблоны, Замыкания…

Новый язык стоит изучать только в том случае, если он кардинально меняет ваше представление о программировании.
Или изменяет интерфейс так, что он становится крайне популярен у большинства обычных людей.
Под которых зачастую приходится подстраиваться программистам.
Да, отсутствие в макроязыке С возможности передать кусок кода в качестве аргумента сыграло в программировании большую негативную роль…
Тут, правда, можно провокационно заметить, что Lisp появился раньше C.
Lisp вообще напоминает слона, которого не заметили…
Да всегда его можно было передавать. Оформив предварительно в виде функции. Вот кусок кода с привязанными данными — задачка посложнее.
А зачем их делать анонимными? Вынесите наружу. Язык позволяет.
Речь была о передаче куска кода в качестве аргумента в макрос. Были бы анонимные функции — можно было бы передать в качестве куска кода указатель на таковую.
Операторы «запятая» и "?: " половину кусков кода позволяют записать, как выражения — и передать тем самым аргументом. Разве что с циклами так поступить нельзя — но так ли часто это надо, чтобы получить «большую негативную роль» от отсутствия возможности?
По-моему направление развития могут описывать люди, которые работают над этой темой. Иначе это типичная журналистика типа «куда катиться мир». Даже на курсовую не тянет.
Да что-то не так часто, как хотелось-бы, они говорят об этом в широких кругах.
Или это только мне так не везет и я упорно попадаю в моменты затишья.
Учитывая получающуюся модульность — ничто не мешает возможности программировать с клавиатуры как в виде обычной речи, так и в виде кодов.
Из истории языков программирования особенно явно заметно их приближение к обычной человеческой речи.
извините, мне не очевидно.
Возьмем Scala, или Haskell придуманные относительно недавно. Ну или Go от гугла.
Они ближе к человеской речи чем придуманный в 50е годы Алгол? Или PL/I?
В таком случае надо рассмотреть и вопрос — насколько широкое распространение они получили.
Ну да — посмотрите какие самые используемые. Java, C, C++, C#, PHP, Visual basic — намного они человечнее старых языков?
Ни туда ни сюда — и не развитие и не откат.
Функциональностью набивают.
Первая версия Haskell была реализована в 1990 году, а Миранда, от которой он отталкивался — в 1985. Не совсем корректно его месить в один ряд с Go.
Если бы естественные языки хорошо подходили для формализации задачи, то не нужно было бы столько юристов.
Сейчас в письменном программировании присутствуют точно такие же ограничения.
Сказать while do не сложнее, чем написать.
В языках программирования while do означает строго определенные вещи, в естественном языке оно может означать всё что угодно. Если же формализовать естественный язык, то получится еще один SQL.
Если в обычной программе встречается непонятное что-то — обычно следует ошибка компилятора и warning.
Признаться не вижу причин, по которым данная система не сможет уточнить по телефону, что имел в виду программист.

А SQL жив уже лет 30 вроде и ничего для его замены я признаться пока не видел.
Хотя возможно просто не в курсе.
В обычной программе что-то непонятное легко определить, так как язык формальный. В естественном языке же этого не определишь так просто. Законы пытаются писать предельно формальным языком, но все-равно приходится выпускать большие книжки с комментариями и толкованиями законов.
А SQL жив и здоров, но он не является тем естественным языком работы с БД для людей не знакомых с программированием. А задумывался он именно таким.
И в то же время ГОСТы и стандарты меняются реже, как и толкований к ним меньше.
Законы — постоянно пытаются обойти, из-за чего и происходят постоянные уточнения для латания дыр.
Надеюсь…

Сложно. Да.
Но есть же и существенные ограничения функционалом. Можно сказать компьютеру «подумай» — но команды такой представить себе я пока не могу.

Каким задумывался SQL — не знаю. Но признаться не вижу связи между естественным языком и реляционными базами данных.
>>Каким задумывался SQL — не знаю. Но признаться не вижу связи между естественным языком и реляционными базами данных.

А зря… она есть через Пролог. SQL-> Prolog -> Mathematical Predicate Language -> NLP -> Natural Language.
На самом деле релияционная база данны -> предикаты -> язык математической логики -> грамматический разбор естественных языков
COBOL ещё вспомните. Говорят, чуть ли не самое большое количество строк кода написано на нём… (хотя я как-то сомневаюсь...)
Какова цель таких способов/языков программирования? Вы знаете, я, наверное, процентов 60 своего времени (а то и больше) провожу за чтением, переосмыслением и правкой того, что написал. И это нормальный рабочий цикл. А как быть с речью? Как ее править? Вы много людей знаете способных нормально с первого раза выразить свои мысли? Я уже не говорю про нормально с первого раза написать программу :)
Обратите внимание на непрерывное увеличение числа программистов.
Цель? Научить программировать всех видимо.

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

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

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

Кесарю — кесарево, слесарю — слесарево. Не смешивайте врожденную иррациональность и неоднозначность человеческих языков с математической беспощадностью машин :)
Вполне возможно :)
Я не собирался бить себя ушами по щекам и доказывать что будет именно так и никак иначе.

Однако машины определяющие дорогу на основе кучи всевозможных детекторов вместо глаз — уже есть.
Да. Только по городу.

Но и тут вроде как можно реализовать аналогично.
Требуется набить относительно простой кусок — диктуй.
Встретился кусок сложной дороги — производится передача управления человеку переходи на клавиатуру.
Можно на лету переводить на язык, более удобный для чтения и правки…
Ага, в «Чистом коде» читал, что большая часть времени программиста уходит на прокрутку.
Душевно и симпатично.
Если бы появился компилятор, способный компилить человеческую речь (записанную в виде текста), то… он бы прямым ходом отправился на помойку. Ну в лучшем случае остался бы игрушкой для гиков.
Потому что:
  • Тексты надо в чём-то набирать, где-то хранить, как-то структурировать и вести контроль версий.
  • Как вы планируете рефакторить такую «программу»? Вручную всё переписывать и разбивать на «главы»? А как разбивать на модули? Тоже вручную?
  • А теперь попробуйте прикрутить к такому юнит-тесты, отладчик и всё это автоматизировать. А как насчёт сгенерировать юнит-тесты автоматически?
  • А как вообще такое отлаживать? Попробуйте-ка провести трассировку, когда нет ни переменных, ни выраженных процедур/функций. Выезжать на логах? А что вы будете заносить в те логи, если у нас даже нет переменных?

Ну и т.д.
Конечно, все эти проблемы можно попытаться решить. Но, ИМХО, данный путь развития принципиально неверен. Сейчас просто мания какая-то — языки программирования плодятся как грибы после дождя. Даже такая крупная корпорация как Google умудрилась попасть под влияние моды, выдав не меньше двух мёртворождённых языков (Dart, Go).
Развивать нужно не языки, потому как язык сам по себе ничто. Для программирования нужна IDE, а не язык. С крутой IDE можно даже на ассемблере кодить чрезвычайно просто и продуктивно. А почему нет? Если у нас в одном флаконе есть сниппеты на любой вкус, если есть сворачивание/разворачивание кода, подсветка, куча крутого автодополнения, кодоанализатор, продвинутые возможности рефакторинга, идеально построенная система всплывающих подсказок, системы документирования кода, генератор модульной структуры с автоматическим созданием пакета тестов, встроенный отладчик с возможностью править код по живому прямо в работающей программе с динамической рекомпиляцией, построитель разного рода логических диаграмм, мастер форм, специальные генераторы «переходничков» ко всем популярным фреймворкам…
Согласитесь, что в такой IDE даже на asm'е кодить будет гораздо приятнее, чем к примеру вести C++ проект в каком-нибудь унылом Эклипсе, где всё собрано из кое-как подогнанных друг к другу модулей и плагинов, которые очень неохотно работают в связке, а компилятор с линкером и системой контроля версий вообще не являются частью IDE, а ставятся отдельно и требуют постоянной притирки.
Ещё раз: нужно развивать IDE, а не языки. И вот это из всех игроков IT-рынка похоже понимает одна лишь Microsoft. Поэтому C# сейчас на коне. Поэтому и TypeScript будет рулить, тогда как о Dart'е через два года никто и не вспомнит.
Я вижу что сейчас идет активное проталкивание всего, что угодно — в как можно более широкую аудиторию.
Начиная с коробок-автоматов на машинах, и кончая всевозможными АСУТП.

Потому-что это деньги для разработчика.
Чем больше людей сможет на этом программировать, включая бабушку Варю — тем больше денег и тем соответственно лучше.
Коробки-автоматы и АСУТП это средства автоматизации вполне определенных задач. И никакой «как можно более широкой аудитории» не существует. И все «проталкивание» касается только лишь отдельных конкретных решений внутри конкретной рыночной ниши внутри этого круга задач.

А, «бабушка Варя» программирующая с помощью голоса коробку-автомат, это, простите, «больше денег», только для автосервиса.

Поймите, какое-бы естественно-языковое средство вы бы не вручили в руки обезьяне, эффект все равно все упрется «ограничения формализации», и «реализованный программный продукт» никак не сможет быть выше чем «обезьяний уровнь».
Как можно более широкая аудитория в случае АСУТП — эксплуатационный персонал.

Во времена DOS считалось, что обычным людям на компьютере делать толком нечего.
Однако же сидят. Иногда интересуются, что такое CapsLock…
Скорее всего, будет что-то вроде: «Джарвис, сделай мне трёхмерную модель...».
Само понятие «язык программирования», на этом уровне скорее всего сотрётся, а наиболее важную роль будет играть окружение. Собственно оно и сейчас играет не последнюю роль (IDE, фрэймворки, библиотеки и так далее).
Хрена лысого! Это будет диалог вроде: — «Компутер, сделай чтобы было все пи$&ато!» / — «А как?» / — «Ну, ты же умный компутер, придумай что нибудь!» ;)

Если не верите, попробуйте спросить любого, кто занимался переговорами с заказчиком, что такое «проблемы с формализацией». Это называется «хочу чего-то сам не знаю чего, но чтоб, все было з@#&ись»!

На самом деле, что быстрее — набивать код в современном Eclipse или надиктовывать устно — это ещё вопрос…
Детям, людям далеким от IT и бабушкам полагаю все-таки будет проще говорить.
Как набирается код в Eclipse? Три буквы, две из которых заглавные — ctrl+space, выбор из меню, вправо, опять три буквы +ctrl+space+выбор из меню, вправо, опять три буквы +ctrl+space+выбор из меню, в конец, shift +home, alt+shilt+L, ввести имя переменной, enter. Как это сделать словами и не дольше ли это будет чем руками?
Простите, но очень дилетантский взгляд:
1. Ничего про модели вычислений, которых штук 10 и от которых зависит семантика языков программирования. Тот же ваш Inform 7 очень похож на Пролог с большим количеством синтаксического сахара из-за которого его грамматика похожа на английский.
2. Не учли, что языки и компиляторы во многом со временем не усложнились, а наоборот — упростились. Например, старые компиляторы Фортрана раньше умели сами исправлять часть синтаксических ошибок (иногда даже успешно). Графических языков тоже много изобретали.
3. Распознавание речи к вопросу не имеет ни какого отношения — это всего лишь метод ввода. Туда же проверку офографии — это функциональность IDE, и моя Visual Studio умеет это делать.
4. Ни слова про DSL.

Простите, но статья ни о чем.
Еще более дилетантский ответ.

1.Если я правильно понял вопрос — то как я понимаю языки со всеми семантиками и парадигмами, функции или обьекты — решают в общем-то одни и те же задачи. Утрированно — занимаются быстрыми преобразованиями Фурье, апроксимируют и выводят на экран. Различен лишь способ, то есть операторы которые должны выполниться.
Соответственно при возможности записи соответствий голосовым командам — «умножить», «взять интеграл методом трапеций», нарисовать кнопку «Ok» — модели уже по идее не должны оказывать существенного влияния. В одном случае создастся функция, во втором вызовется конструктор обьекта…

2. Графические языки, как я понимаю также выполняют вполне обычные действия. Ladder Diagram например может быть переведен в Structured Text машинными средствами.

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



Возможно ни о чем.
Модели — это процедурное, функциональное, логическое, автоматное и так далее программирование. Семантика. Смысловая нагрузка элементов языка.

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

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

Что вы говорите? Разрешите тогда маленькую добавку в к вашей исторической справке: язык COBOL, один из самых первых ЯП высокого уровня, как раз пытался быть максимально близким к человеческой речи (хоть и не устной). И идея была (она до сих пор всплывает примерно с периодичностью раз в десятилетние), что бы «не-програмисты» (в данном случае бизнесмены) могли сами писать программы для своих нужд. Что получилось — мы все прекрасно знаем. Идея неоднократно себя дискредитировала — «не программисты» не могу писать программы вне зависимости от языка, будь это обычный ЯП, графический ЯП, генератор приложений или человеческая речь. У них нету соответствующих навыков. А вот программистам удобнее всего выражать свои программистские мысли на классических формальных языках. «Please forgive my English, my native language is C++» :)
Ага, COBOL inference:
“This reminds us of what I call the COBOL inference — that most technologies that are supposed to eliminate professional programmers do nothing of the sort.”

Статья 2005 года. Мы обречены на периодическое появление «идей» и «средств», которые позволят программировать клеркам и домохозяйкам. Но в настоящее время работа программиста состоит в формализации требований к ПО в виде кода.

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

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

Публикации

Истории