Лекция Стивена Вольфрама

ВНИМАНИЕ!!!

БЛОГ ПЕРЕЕХАЛ НА НОВЫЙ АДРЕС https://blog.wolframmathematica.ru

Онлайн машина вычисления знаний Wolfram|Alpha ®

Онлайн машина вычисления знаний Wolfram|Alpha ®

воскресенье, 24 февраля 2013 г.

Как следует назвать язык системы Mathematica
Kak_sleduet_nazvat_jazyk_sistemy_Mathematica_Large.png
Как следует назвать язык системы Mathematica?

Перевод поста Стивена Вольфрама (Stephen Wolfram)
В основе системы Mathematica лежит язык. Очень мощный символьный язык. Создаваемый под тщательным контролем на протяжении последних 25 лет и заключающий в себе огромное количество знаний и вычислительных возможностей. Миллионы и миллионы строк кода были написаны на этом языке для решения разнообразнейших задач. И сегодня, в особенности благодаря внедрению новых технологий — интернета и облачных ресурсов — этот язык находится на пороге существенного скачка по отношению к широте использования.  
Однако, у нас есть проблема. И эта проблема, над которой — к своему стыду — я думаю уже более 20 лет. И звучит она следующим образом: “Как назвать язык системы Mathematica”?  
Обычно в этом блоге когда я обсуждаю нашу деятельность как компании я рассказываю Вам о тех успехах которых мы достигли или о проблемах которые смогли решить. Но сегодня я сделаю исключение и расскажу Вам о проблеме которую мы не решили, но которую решить необходимо.
Вы можете спросить меня "Неужели настолько сложно придумать одно имя?". По своему опыту могу сказать, что некоторые имена придумываются легко, в то время как над другими приходится ломать голову ни один день. И в данном случае мы имеем дело со вторым классом имен (возможно даже длинна этого поста связана с указанными трудностями).
Kak_sleduet_nazvat_jazyk_sistemy_Mathematica_1.gif
Давайте в начале поговорим об именах. Есть имена, к примеру, “кварки” которые по своей сути лишь случайные слова и весь смысл того, что они описывают мы задаем извне. Другой класс имен непосредственно описывает существующий объект, в данном случае примером служит слово веб-сайт.
В свое время мне приходилось давать имена многим вещам: научным концепциям, технологиям, продуктам, функциям в системе Mathematica. И везде я использовал различные подходы — иногда случайные слова (для этих целей у меня есть генератор написанный в системе Mathematica, которые создает хорошо звучащие слова), но чаще всего я придумывал название из знакомых слов, отражающих суть того чему я хочу дать имя.
Когда мы пытаемся дать имена продуктам нашей компании у нас уже есть одно «случайное» слово — "wolfram". Одно время я был очень щепетилен по отношению к использованию этого слова, как никак это моя фамилия. Но с недавних пор мы часто используем его в качестве связки, которая соединяет названия большинства наших продуктов.
К примеру мы выпускаем продукты Wolfram Finance Platform или Wolfram SystemModeler на профессиональные рынки и в этих названиях присутствует «случайное» слово wolfram, однако это позволяет довольно точно описать что это за программы и для чего они предназначены.
Wolfram|Alpha нацелен на широкую аудиторию, поэтому представляет более сложный случай. Ведь в кратком названии необходимо выразить совершенно новую концепцию. Мы определяем Wolfram|Alpha как "computational knowledge engine" (машина вычисления знаний). Но как представить это в виде короткого названия?  
Я провел много времени обдумывая это и решил что в данном случае невозможно вложить концепцию в название. Поэтому мы решили что имя должны лишь отражать суть и облик системы. Так появилась «альфа» — структурированность по аналогии с алфавитом, работа с естественными языками, технический символ, первые версии программных продуктов, просто первый — все это олицетворяет «альфа» и я хочу сказать что в данном случае это оказалось крайне удачной идей.
А теперь вернемся к нашей проблеме. Как должен называться язык системы Mathematica?
Мне кажется что слово «язык» должно быть в названии или хотя бы логично дополнять его в конце. Ведь то о чем мы говорим является именно языком: набором конструкций, которые можно группировать различным образом образуя бесконечное множество значений.
Конечно, наш язык несколько отличается от обычного языка — и главное отличие это выполнимость. Любое выражение на языке системы отражает уникальную последовательность вычислительных команд.
И в этом отношении наш язык похож на типичный компьютерный язык. Однако есть важное отличие, как практическое, так и концептуальное. Классические компьютерные языки (такие как C, Java или Python) имеют небольшое число встроенных операций и нацелены на построение программ из этих операций. Язык системы Mathematica предоставляет множество вычислительных возможностей и различных данных встроенных в язык.
Также в типовом компьютерном языке могут существовать библиотеки для различных задач, не являющиеся частью языка. Поэтому может возникнуть проблема совместимости. В языке системы Mathematica наоборот с самого начала ставилась задача встроить в язык как можно больше возможностей, чтобы иметь когерентную максимально автоматизированную структуру. На практике это означает что в языке присутствуют тысячи тщательно разработанных функций и структур которые позволяют автоматизировать огромное количество вычислений и предоставлять различную информацию в удобной форме.
Несмотря на то что в некоторых аспектах наш язык схож с обычными языками программирования, его возможности и содержание ближе к обычным человеческим языкам. В этом смысле наш язык объединяет обе концепции.
Хорошо… Но как его назвать? Впервые я начал думать об этом очень давно в 1990 году. Мир программного обеспечения тогда был совершенно другим и другими были принципы разработки языка. Независимо от того что мы потратили уйму сил на разработку мы так и не выпустили его по одной простой но достойной нашего стыда причине — мы не смогли придумать имя которое бы нам нравилось.
В процессе разработки мы использовали имя M Language, где M — сокращение от Mathematica.  Но лично мне это имя никогда не нравилось. Оно было очень похоже на C, язык которым я много пользовался но чьи возможности и синтаксис совершенно отличались от нашего языка. M также предполагало бы, что язык основан на математике. Впрочем уже тогда и тем более сейчас ясно что наш язык это нечто намного, намного большее чем просто математика. Да с его помощью легко можно решать любые математические задачи. Но помимо этого с его помощью также можно решать колоссальное количество алгоритмических и вычислительных задач, не говоря о встроенном доступе к базам знаний.  
Кто-то может спросить почему систему назвали Mathematica. Это тоже было крайне тяжелой задачей. В начале мы хотели назать систему Omega (в системе существует тип файла связанный с этим названием). Затем был период когда мы хотели назвать ее Polymath. Потом Technique. После чего оставалось только записывать новые и новые варианты названия.
Kak_sleduet_nazvat_jazyk_sistemy_Mathematica_2.gif
Наконец, по совету Стива Джобса мы выбрали имя которое в начале отвергли из-за его длины: Mathematica. Изначально концепция системы заключалась в решении задач далеко не математических. Но именно математика была первой очевидной областью применения, именно поэтому когда система только появилась мы описывали ее как «система для решения математических задач на компьютере». Название Mathematica лично мне всегда нравилось. И когда она появилась в 1988 году это было первое подобное имя среди компьютерных систем, которому было присуще некоторое изящество. В последующие годы появились имитации этого стиля в названиях других продуктов (к примеру, язык для моделирования Modelica). В целом же стало ясно что для самой системы данное имя слишком узкое. Оно создает впечатление что все на что способна система — это решение разнообразных математических задач.
Поэтому придумывая названия языка мы хотим учесть и этот аспект. Мы хотим подобрать имя которое будет отражать все многообразие возможностей языка и при этом не будет связано с какой либо конкретной областью применения. Мы хотим придумать название которое будет отражать как возможность решения небольших интерактивных задач, так и работу над большими проектами в рамках целого предприятия. Название которое сможет отражать работу различных классов пользователей будь то профессионалы, любители или дети только начинающие знакомиться с программированием.  
Из анализа своих собственных наблюдений выяснилось что я думаю над этой проблемой уже 23 года с периодической активностью. Как я уже упоминал в начале мы хотели назвать наш язык M Language. Затем проектное имя сменилось на Wolfram Language. В начале 90-х мне очень нравилась идея назвать язык Lingua — на латыни это значит «язык» по аналогии с латинскими символом Mathematica. Но Lingua все-таки звучит слишком странно и звук «гва» труднопроизносим для людей в чьих родных языках это сочетание букв отсутствует. В течение непродолжительного времени мне нравились варианты Express (всплывают две аналогии — expression и express train).
Сообщество сайта MathGroup Mathematica предлагало варианты наподобие Principia, Harmony, Unity и Tongue (для последнего случая существует красивый пример обозначения багов — "slips of the tongue" — оговорки). Летом 1993 года интерном который работал над языком был тот самый Сергей Брин. Он предложил имя Thema — "сердце mathematica" ("ma-thema-tica"). В то время мною предлагались классические имена наподобие Radix, Plurum, Practica и Programos.
В дополнение к этому я общался с лингвистами, классицистами, маркетологами и поэтами, а также с людьми которые занимаются придумыванием названий профессионально. Но всякое предложенное имя несло в себе слишком мало или много информации, было слишком «тяжелым» или «легким» или просто звучало глупо. Поэтому после 20 лет поисков мы так и не нашли имя которое бы нам нравилось. Теперь же настало время выпустить язык — и чтобы сделать это нам надо решить обозначенную проблему. Именно поэтому сейчас я снова крайне много думаю о подходящем названии.
Постараемся ответить на вопрос — что мы хотим рассказать о языке при помощи названия? Главный пункт я уже описывал ранее — это то, что наш язык не похож на все остальные. Это новый вид языка. Это язык для вычислении имеющий реальное содержание: встроенные данные, структуры и алгоритмы. Это хорошо масштабируемый язык: на нем удобно писать как небольшие так и огромные программы. Это обобщенный язык с помощью которого можно решать задачи из самых разных сфер. Это символьный язык с четкими принципами, который может описывать любые структуры и данные. Это сплав различных стилей программирования, с уклоном на функциональное программирование и программирование на основе шаблонов. Это интерактивный язык. Его отличительной чертой является когерентность структуры и максимальная автоматизация.
На данном этапе ясно что в название языка должно хотя бы частично присутствовать слово "wolfram". Однако было бы хорошо чтобы у языка было хорошее короткое название или прозвище. Мы хотим, чтобы из названия языка становилось понятно что наша компания отвечает за него, но этот язык будет доступен бесплатно для широкого круга лиц.
Итак, очевидный вопрос — как обычно называют языки? В Wolfram|Alpha, содержатся данные о 16000 человеческих языков как мертвых так и используемых по сей день. Среди 13 наиболее распространенных 13% оканчиваются на -ese (Japanese), 11% — на -ic (Arabic), 8% — на -ian (Russian), 5% — на -ish (English) и 3% — на -ali (Bengali). Если продолжить исследование то -ian будет появляться чаще, так же будут появляться -an и -yi. Возможно нам следует назвать наш язык Wolframese, Wolframic, Wolframian, Wolframish или Wolframaic?  Или возможно Wolfese, Wolfic или Wolfish? Или Wolfian или Wolfan или Wolfatic, или попробовать что нибудь экзотическое Wolfari или Wolfala? А как Вам варианты Wolvese или Wolvic? Среди перечисленного найдется несколько интересных названий, но мне кажется что в большинстве своем они звучат как названия языков различных племен.
Что ж, тогда поговорим о компьютерных языках. Здесь можно наблюдать существенное разнообразие имен. Рассмотрим наиболее значимые языки в порядке их появления: Fortran, LISP, Algol, COBOL, APL, Simula, SNOBOL, BASIC, PL/1, Logo, Pascal, Forth, C, Smalltalk, Prolog, ML, Scheme, C++, Ada, Erlang, Perl, Haskell, Python, Ruby, Java, JavaScript, PHP, C#, .NET, Clojure, Go.
Как же появились эти имена? Некоторые из них — особенно ранние — просто аббревиатуры. К примеру, Fortran ("Formula Translation"), а APL ("A Programming Language"). Другие названы в честь людей (скажем, Pascal, Ada и Haskell).  Некоторые названы в честь компаний — Erlang ("Ericsson language") и Go ("Google"). Также мы можем найти языки, которые получили свои имена из-за причудливых последовательностей слов — например, от BCPL к B к C ("sea") к оболочке системы (shell — что также значит «раковина») к жемчужине ("pearl") Perl и Ruby. Существуют и просто эксцентричные названия — язык Питон (Python, комик-группа «Монти-Пайсон»). Эти тенденции в названиях лишь продолжатся если мы будем рассматривать менее популярные языки.  
Из выше перечисленного мы можем сделать два вывода. Во-первых, оказалось что языки программирования называют как угодно, в отличии от обычных языков (которые являются производными названий мест), то есть здесь нет какого либо лингвистического шаблона. Во-вторых, большинство названий языков программирования не отражают сути языка или предпосылок создателей. Иногда по ним можно отследить историю языка, но чаще всего это просто случайные слова.
Для нас это предполагает то, что мы должны использовать наше «случайное» слово и назвать язык Wolfram Language, или WL. Либо использовать короткую форму и назвать язык просто Wolfram.
Однако мы можем использовать наше «случайное» слово и пойти более изощренным путем. Одним из таких направлений является придуманное сотрудниками компании сокращение Wolf (Волк). К сожалению образ волка вызывает не самые приятные ассоциации, однако с таким названием легко придумать логотип для нашего языка. У нас даже есть прототип. Когда мы ввели символьные шрифты в Mathematica в середине 90-х мы включили в него символ «Волк» () который был срисован с моего собственного рисунка. Приукрасив немного этот символ мы получили хороший логотип для языка. Используя созданный нами символ на язык легко ссылаться в тексте.
Kak_sleduet_nazvat_jazyk_sistemy_Mathematica_3.gif
Также существуют варианты — WolframCode или WolframScript или Wolfcode или Wolfscript но звучат либо слишком непонятно, либо слишком просто. Есть и более жаргонные варианты — WolframLang, или короткие формы WolfLang и WolfLan, что очень созвучно с Wolfgang.  Были варианты WolframX и WolfX, но в данном случае не понятно что представляет собой X. То же самое и с вариантами WolframQ или WolframL. Мы рассматривали имена WolframPlus (Wolfram+), WolframStar (Wolfram*) и WolframDot. Или Wolfram1 (а когда будет 2?), WolframCore (помните ОЗУ?) или WolframBase. Мы также пробовали добавлять греческие буквы по аналогии с Wolfram|Alpha:  Wolfram Omega или Wolfram Lambda ("wolf (волк), ram (баран) and lamb" (ягненок): слишком много животных). Можно было бы предложить короткий вариант наподобие W Language, но уж очень сильно это похоже на язык C. Очевидно, что вариантов с «Волком» не счесть. Если мы прочитаем слово «Волк» задом наперед то получим слово «Flow» которое мало подходит для названия языка программирования за исключением описания графических схем (flowcharts). Также можно рассмотреть следующие имена - Howl (завывание) и Growl (рычание), но лично я не могу воспринимать их серьезно. Мы можем попробовать углубиться в народное творчество связанное с волками — но все что можно там найти это названия подходящие скорее для средних веков нежели для будущего.
Если обратиться к классическим языкам то по латыни волк будет Lupus, однако это совпадает с названием болезни (волчанка). По-гречески — Lukos [λυκος], но для современного человека это звучит просто как еще одно случайно слово. Можно попробовать изменять окончания в словах чтобы получить различные формы слов, но не один из этих вариантов мне также не кажется многообещающим (Lupum, Lupa или Lukon). Что ж по крайне мере мне удалось вновь использовать свои знания Греческого и Латыни (Английская форма слова Lupine — забавная, но тоже не подходит.).
Если мы и дальше продолжим двигаться в сторону причудливости то наткнемся на такое возможное название как Tungsten, английское название для химического элемента номер 74, чье обозначение W расшифровывается как вольфрам и добывается из вольфрамита. Хочу сразу сказать что моя семья не имеет к этому никакого отношения.  
Давайте попробуем более научный подход. Изучим пространство всех возможных имен по аналогии с New Kind of Science. К примеру, попробуем добавить к слову «вольфрам» все буквы по очереди. В результате мы получим такие ужасные названия как WolframaWolframz и Wolframé. Добавив по две буквы, получим что то из следующих вариантов: Wolframos, Wolframix и WolframUp. Если же мы попробуем добавлять все возможый короткие слова то получим WolframHowWolframWay и WolframArt. Написав всего лишь одну строчку кода мы получим варианты окончаний которые чаще всего встречаются в английском языке после "-am". В результате имеем Wolframsu, Wolframity или совсем уж ужасное слово Wolframble.
Но что если мы пойдем в другом направлении и попытаемся найти слова которые по смыслу связаны с тем что мы хотим рассказать о нашем языке?
Для этого вернемся к классическим или индоевропейским языкам и попытаемся создать такие комбинации слов. Ведь если мы будем использовать слова из обычных языков то это уже означает что данные слова пережили естественный отбор лингвистической эволюции. В прошлом человек мог произнести любое латинское или греческое слово и его легко понимали в образованной компании (к примеру, приставка кибер- из греческого [κυβερνητησ] означала штурмана или руль управления). Но сегодня мы весьма сильно должны ограничивать себя использованием лишь общепринятых слов. Что приводит к крайней загруженности интересующего нас семантического и лексического пространства. К примеру, «язык» на латыни это lingua ("linguistics") или sermo ("sermon"), и glossa [γλωσσα] ("glossary") или phone [φωνη] ("telephone") на греческом. "Вычисления" это computatio на латыни, и arithmos [αριθμος] ("arithmetic") или logismos [λογισμος] ("logistics") по гречески. "Знания" — это scientia ("science") или cognitio ("cognition") на латыни, и episteme [επιστημη] ("epistemology"), mathesis [μαθησις] ("mathematics") или gnosis [γνωσις] ("diagnosis") на греческом. "Рассуждения" это ratio ("rational") на латыни, и logos [λογος] ("-ology") на греческом. И так далее.
Но что из этого следует? Я не смог найти что либо привлекательное. В основном имена либо некрасивые либо вызывают неверные ассоциации (например Wolframology или Wolfgloss).
Если кто-то захочет изучить как обстоят дела с другими языками то Вам достаточно лишь набрать команду translate в Wolfram|Alpha и еще несколько раз нажать кнопку more. Вы увидите перевод на несколько сотен языков, но в основном за пределами индо-европейской группы для англоговорящих людей все слова кажутся странными и лишенными смысла (к примеру, транслитерация слова wolf на китайский это «lang»).
Куда же нам отправиться теперь? Существует еще одно возможное направление. До этого мы пытались различным образом модифицировать или дополнить слово Wolfram, в последствии добавив к нему слово "язык". Но давайте не будем забывать — то что мы хотим назвать является качественно новым видом языка. Возможно нам следует видоимзенять именно слово "язык"?
Как нам это сделать? Можно использовать различные префиксы из греческого или латинского языков. Такой поход используется в научных сферах для обозначения каких либо расширений исходного понятия:  ана-, альто-, диа-, эпи-, экза-, экзо-, голо-, гипер-, макро-, мега-, мета-, мульти-, нео-, омни-, пан-, плени-, праэтер-, поли-, прото-, супер-, убер-, ультра- и так далее. В данном случае самый хороший вариант на мой взгляд это Wolfram hyperlanguage (WHL?) — конечно нельзя избежать того, что это звучит несколько с большим возбуждением чем хотелось бы, да и наводит на мысли о гипертексте и гиперссылках. В греческом или латинском вариантах это могло бы выглядеть как Hyperlingua.
Wolfram superlanguage, Wolfram omnilanguage и Wolfram megalanguage звучат как что-то из прошлого столетия. Wolfram ultralanguage и Wolfram uberlanguage звучат слегка перегруженно, хотя вариант Wolfram Ultra (без слова «язык») звучит немного по лучше. Wolfram exolanguage, который можно сократить до хорошо звучащего Wolfex, наводит на неправильные ассоциации ("экзопланета").
Wolfram epilanguage (или Wolfram Epi) вызывает более подходящие ассоциации ("эпистемология"), но звучит слишком по технически.
Очень огорчает меня вариант Wolfram metalanguage (WML). Он вполне благозвучен и на греческом языке означает более менее подходящие вещи. Но в английском языке уже есть слово метаязык которое означает язык о языке — и это значение нам не подходит. Wolfram Meta  возможно вариант чуть получше, но проблема та же.
Что ж если мы не можем подобрать хороший префикс, давайте попробуем вставить какое нибудь слово между «wolfram» и «язык». Очевидно, что в данном случае мы получим длинное имя, однако будем надеяться, что его можно будет красиво сократить или подобрать изящную аббревиатуру.  
Первое что приходит в голову это Wolfram Knowledge Language (WKL), но проблема в том что, это выглядит так как будто язык служит лишь для представления знаний, а не как язык который включает в себя эти знания (не говоря уже об алгоритмах). Более точным был бы вариант Wolfram Knowledge-Based Language (Wolfram KBL), и как бы это не звучало, это вполне верно обозначает некоторые аспекты нашего языка.
Еще один возможный вариант — Wolfram Programming Language (WPL). Но в данном случае лучше конкретнее описать новый вид программирования, который возможен благодаря нашему языку. Он может называться к примеру гиперпрограммирование или метапрограммирование. Макропрограммирование тоже могло бы подойти но такое имя будет вызывать ассоциации с макросами. Итого у нас осталось несколько заманчивых вариантов: Wolfram Hyperprogramming Language (WolframHL, WolframHPL или WHL) или Wolfram Metaprogramming Language (WML) — в данном случае в качестве описания можно использовать "язык гиперпрограммирования или язык метапрограммирования".
Итак, что можно сказать в заключение? Я полагаю что в качестве метазаключения можно сделать вывод — найти имя для нашего языка сложно. Но самое страшное это как только мы найдем это имя, мой 20-летний поиск моментально закончится. Скорее всего мы остановимся на каком либо из рассмотренных вариантов, к которому по началу отнеслись со скептицизмом (как это было с Mathematica). А возможно нас посетит вдохновение и мы придумаем новое замечательное имя (как это было с Wolfram|Alpha).
Каким должно быть это имя? Я надеюсь услышать комментарии по тем идеям что я изложил в этом посте, а также новые предложения. Должен признаться я надеялся, что в процессе написания этого поста я смогу решить проблему сам, но этого не случилось. Но я буду счастлив если кто-нибудь рассмотрев предложенные варианты, предложит хорошее название которое мы сможем использовать. Но как я уже сказал существует множество ограничений, поэтому в качестве более реалистичного результата я надеюсь что люди смогут предложить концепции и подходы из которых мы сможем получить хорошее название.
Я чрезвычайно горд за наш язык который мы разрабатывали в течение всех этих лет. Поэтому я так пекусь о том чтобы он получил достойное имя. И как только мы подберем это имя мы будем готовы представить язык миру — я предвкушаю все те замечательные вещи которые будут возможны с использованием нашего языка

Блог принадлежит “Русскоязычной поддержке Wolfram Mathematica
При любом использовании материалов блога, ссылка на блог обязательна.
SpikeyСоздано с помощью Wolfram Mathematica 9

1 комментарий:

  1. Ну Erlang официально назван в честь математика Эрланга, работы которого важны в телефонии. Созвучие с названием фирмы считается случайным.

    ОтветитьУдалить