«Однажды вечером Резерфорд зашел в лабораторию. Хотя время было позднее, в лаборатории склонился над приборами один из его многочисленных учеников.
– Что вы делаете так поздно? – спросил Резерфорд.
– Работаю, – последовал ответ.
– А что вы делаете днем?
– Работаю, разумеется, – отвечал ученик.
– И рано утром тоже работаете?
– Да, профессор, и утром работаю, – подтвердил ученик, рассчитывая на похвалу из уст знаменитого ученого.
Резерфорд помрачнел и раздраженно спросил:
– Послушайте, а когда же вы думаете?»
Захотелось прикинуть наиболее вероятное возможное направление развития программирования.
- Краткая история языков программирования
- Имеющиеся на данный момент потенциальные возможности
- Выводы из вышеизложенного
Краткая история языков программирования.
Извиняюсь за избыточный для большинства текст, просто такое изложение мне кажется более наглядным, для дальнейшего объяснения.
К протоязыкам с некоторой натяжкой можно притянуть программирование при помощи обычных электрических переключателей. Но это для меня уже слишком…
Поэтому для собственного душевного спокойствия приму за первый язык — машинный код.
Hello World:
BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Который впоследствии привели к хоть немного читаемому виду — ассемблеру.
Hello World:
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100h
START:
mov ah,9
mov dx,OFFSET Msg
int 21h
int 20h
Msg DB 'Hello World',13,10,'$'
CODE ENDS
END START
Но ассемблер тоже не очень прост и интуитивно понятен при прочтении.
И после него приходят всевозможные Фортран, Паскаль, С и прочие.
Hello World (Паскаль):
program HelloWorld;
begin
write('Hello, World!');
end.
Думаю тенденция очевидна.
Имеющиеся на данный момент потенциальные возможности.
Распознавание голоса. Например — habrahabr.ru/post/157333/
Текстовые компиляторы (литературное программирование). Например — habrahabr.ru/post/72310/
Машинный перевод. Например — habrahabr.ru/post/155675/
Проверка орфографии. Например — habrahabr.ru/post/50137/
Системы АСУТП. Например — habrahabr.ru/post/139180/
Разумеется не указано сколько-нибудь существенной части возможностей, но их явно достаточно много.
Выводы из вышеизложенного
Из истории языков программирования особенно явно заметно их приближение к обычной человеческой речи.
А в имеющихся возможностях просматривается достаточно серьезная готовность к реализации чего-то подобного.
Есть практически всё необходимое, кроме полноценного компилятора. Вплоть до того, что базовую версию того-же Inform7, получается, можно создать прямо сейчас.
Каким-же должен быть данный компилятор?
Как я понимаю, если получить в качестве результата компиляции программу на каком-либо из языков верхнего уровня, например C, то дальнейшая компиляция в машинный код особых проблем доставить не должна.
Скорее наоборот в качестве бонуса будет обеспечена кроссплатформенность.
И тут вроде как 2 пути:
- Исходить из человеческой речи, подбирая к ней команды
- Исходить из языка программирования, подбирая к нему человеческие фразы.
Вариант отталкиваться от человеческой речи безусловно интереснее.
В определении части речи может очень помочь что-то подобное — habrahabr.ru/post/152799/
И это — habrahabr.ru/post/148124/
Существительное — имя или часть имени переменной
Прилагательное — имя или часть имени переменной
Числительное — константа, как вариант имя или часть имени переменной, возможен warning с уточнением у программиста
Местоимение — имя или часть имени переменной
Глагол — команда (в некоторых случаях возможно условие)
Союз, наречие, предлог, частица, междометие — имя им легион и каждое может быть как условием, так и переменной и командой и чем угодно.
Причем потребуют решения очевидно:
- Возможность переменных из нескольких слов (входная дверь, окно в детской, температура на улице и прочее)
- Какие-то финты ушами потребуются для математики и графики, которые на данный момент максимально не похожи на человеческую речь.
- Похожие проблемы с аббревиатурами, именами собственными (Дживахарлал Неру) и адресами интернет сайтов
- Прочее
И хотя для реализации нет задачи добиться понимания компьютером человека, а есть лишь задача перевести слова в действия — все равно этот вариант по видимому сложнее.
Чем вариант отталкиваться от команд компилятора.
Тут кажется уже проще.
Занести в базу весь имеющийся набор команд и каждой команде присвоить один или несколько голосовых аналогов (синонимов). Все, что отсутствует в базе — считать переменными, константами или мусором.
Но этот путь далек от совершенства.
Придется запоминать имеющийся набор фраз, соответствующих командам и втолковывать в микрофон только их. Соответственно фатальный контроль речи, выдержать который смогут не все.
Хотя возможно расширение функционала, в сторону слияния с натуральными языками. Но не думаю, что удастся настолько поднять функционал.
И наконец, компромиссный вариант — движение в обоих направлениях одновременно.
И у первого и у второго вариантов конечная цель, это некий набор правил, по которому речь становится программой. Таблица соответствий человеческих фраз, слов и их синонимов — командам или последовательностям команд компьютера.
Соответственно вполне можно допустить, что при развитии обоих направлений — рано или поздно они сойдутся в одну цельную систему.
Хотя тут куча нюансов. Например, если что-то подобное действительно будет реализовано — программистам с дефектами речи придется непросто.
Отечественным программистам потребуется отдельная запись соответствующая мату, и не приводящая к попыткам ее запрограммировать. А то так и Терминатора можно случайно получить…
Но с другой стороны по мне так одна только возможность программировать, отлаживать и запускать программы по телефону, гуляя по улице, или дожидаясь заказа в кафе — уже стоит того. Также нравятся то, что можно будет дистанционно одним звонком выключить дома плиту, закрыть краны, перед приходом зимой включить чайник и нагреть комнату до 28С.
Хотя для тех у кого жена возвращается с работы раньше — это уже не так актуально.
«Известно и другое суеверие того времени: Человек Книги. На некоей полке в некоем шестиграннике (полагали люди) стоит книга, содержащая суть и краткое изложение всех остальных: некий библиотекарь прочел ее и стал подобен Богу. В языке этих мест можно заметить следы культа этого работника отдаленных времен. Многие предпринимали паломничество с целью найти Его. В течение века шли безрезультатные поиски.»
Х.Л. Борхес «Вавилонская библиотека»
А вообще есть в этом что-то забавное — например возможность использовать кассетный магнитофон для хранения куска кода. Ну сначала его от Синклера отключить, а потом хранить. На кассетах TDK и BASF.
Автор: PM1630