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

Стивен Вольфрам: Рубежи вычислительного мышления (отчёт с фестиваля SXSW)

Время на прочтение28 мин
Количество просмотров27K
Всего голосов 32: ↑26 и ↓6+20
Комментарии27

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

Почти каждый раз, когда я вижу презентации и примеры Wolfram, меня не оставляет вопрос: зачем? Число Пи с точностью до какого-то знака. Планеты по порядку. Видимость с небоскреба. Распознание породы кошки и поворот на 300 градусов. И так далее. Все это похоже на: смотрите, а я еще крестиком вышивать умею!
Хотелось бы увидеть на хабре примеры использования этого самого-самого языка/пакета для решения каких-то хабровых задач. Например, я в удобной (естественной) форме задаю описание робота-манипулятора, а мне сразу выдают решение прямой и наброски к решению обратной задач кинематики. Я описываю несимметричную 5-ти колесную мобильную платформу, а мне выдаются формулы перехода от угловой-линейной скорости к скоростям каждого колеса. Я задаю электрическую схему, а мне выдают временные характеристики. Или даже лучше, я описываю характеристики, которые хочу получить, а мне предлагают варианты электрических схем. Я пишу нелинейные дифф. уравнения, а мне предлагают семейство функций Ляпунова. Я спрашиваю, какие есть функции сортировки упорядоченных подпоследовательностей (если что, то пример с потолка, я не программист), а мне выдается сравнительная таблица с характеристиками и примеры реализаций/библиотек на паре десятков ЯП.
Где вот это все, где вычисления для IT? Где примеры использования в реальных (осмысленных) задачах? А то пока похоже на вычисления для… да я даже не знаю для кого. Для кого-то, кому скучно и любопытно одновременно, наверное.
Статьи призваны в простой и ясной форме, на простых и ясных примерах продемонстрировать функционал системы. Специалист в своей области сразу сообразит как перевести идеи из какой-то, возможно, абстрактной статьи в свое русло.

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

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

Вот что интереснее было бы, это сравнение с Mаtlab-ом
Согласен с Arastas. Поясню мысль на конкретном примере. Я занимаюсь дифференциальными уравнениями и динамическими системами (+стандартные статистики и визуализации). Все свои задачи я решаю на R. И я прекрасно помню почему я перешёл именно на R: я нашёл в сети множество примеров того, как люди легко и изящно решают на нём задачи из моей повседневной жизни. И мне сразу захотелось тоже так уметь: написал несколько простых строк — и всё заработало.
Поймите меня правильно, Wolfram Language — безусловно потрясающий проект. Каждый раз с удовольствием читаю про него статьи. Несколько раз был на ваших выступлениях, надеюсь посетить будущее мероприятия. Но я ни разу так и не увидел примера, который бы меня воодушевил перейти на Wolfram. Ни разу во время программирования у меня не возникло мысли вида «А вот если бы я писал на Wolfram, то вот эту штуку было бы сделать проще». Я ни в коем случае не говорю, что Wolfram чем-то уступает R. Я просто говорю, что я не видел примеров того, как Wolfram превосходит R на моём стеке задач (мне не так часто нужны первые 1000 цифр числа Пи). Поэтому у меня нет мотивации, чтобы бросать всё и бежать изучать новый язык (того же мнения придерживаются многие мои коллеги). Возможно, если бы было больше узкоспециализированных постов про Wolfram из различных областей, то ситуация бы изменилась.
Спасибо, именно эту мысль я и хотел донести!
Мой стек задач — системы управления, немного робототехники. И тоже самое, ну нету во всех этих замечательных статьях примеров, которые я, как специалист, мог бы спроектировать на свою область.
Пока что самое прикладное в IT, что я видел в публикациях Wolfram на хабре, — работа с распознаванием изображений. Я не спец в этой области, то демки впечатляют меня-дилетанта.
Вольфрам ясно себя позиционирует как блокнотный математический решатель.
Проекты в нем размером с пару экранных страниц.
Я обычно для таких дел использую Mathcad.
Это вроде очень продвинутого калькулятора.
Mathcad-ом я пользуюсь постоянно, хотя тоже разрабатываю комплексные системы управления, симулирую схемы, делаю анализ электромагнитных полей и излучений и т.д.
И ясно, что Wolfram не заменит ни Simulink-а, ни ANSYS HFSS, ни COMSOL просто потому что в этих мощных пакетах огромную часть работы занимает рутинное забивание физического описания объектов моделирования и расчета.
Работа важная, но не интеллектуальная. Все силы брошены на борьбу с человеко машинным-интерфейсом. Как машине объяснить что надо решать.

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


Вольфрам ясно себя позиционирует как блокнотный математический решатель. Проекты в нем размером с пару экранных страниц.

Мне кажется, представители Wolfram с Вами не согласятся. Даже моего беглого знакомства с пакетом Mathematica достаточно, чтобы с Вами не согласиться.

И ясно, что Wolfram не заменит ни Simulink-а

Люди, работающие с SystemModeler, могут считать иначе.

Основная претензия к Роману была, что имея такой прекрасный инструмент, он (они?) популяризируют его на профильном IT ресурсе как-то… легкомысленно, что ли.
А я было решил, что обсуждаем по содержанию статьи Стивена Вольфрама.

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

Но даже эта статья меня завела.
Обязательно скачаю Mathematica для пробы.
Я занимаюсь распознаванием изображений, так что могу немного прокомментировать. В реальной жизни для применения каких-то простых фильтров отлично подходит любой вменяемый профессиональный графический редактор. ИМХО, для маленьких экспериментов — самый лучший путь. А если писать что-то серьёзное, то это чаще всего алгоритмы на базе opencv, реализованные на чём-нибудь вроде C++/Python/C#, чтобы можно было результаты работы нормально распространять. В общем, не вижу как мне Wolfram может помочь в области CV.
Посмотрите видео Андрея Макаренко ниже. Он довольно хорошо объясняет, чем именно может помочь Wolfram Language.
отличный пример, я в предыдущих постах автора спрашивал про анализ данных, но он обычно не отвечает на такие вопросы
я тоже постоянно у автора спрашиваю где, где же кроме учебных заведений используется все это дело, но ни разу ответа не получил, к сожалению
Я вам список компаний давал, с которыми только лишь я работал лично.
список компаний != примеры задача и способы решения
Приходите на наш семинар, я вам расскажу лично многое seminars.softline.ru/event/9212/detail

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

О части проектов я рассказывал, скажем, здесь «Разработка практических приложений на основе Wolfram технологий»:



Также будет полезно выступление Андрея Макаренко «Цифровая обработка сигналов в Mathematica»:

вово уже интереснее, спс за видяхи

а вообще раз нельзя что то из реальных примеров рассказывать тут, почему бы не взять любую задачу из http://archive.ics.uci.edu/ml/datasets.html и в статье не решить ее, это и будет отличным практическим примером (думаю ораторы из предыдущих коментов тоже могут накидать из своих тем кучу ссылок на задачи, получилась бы серия постов о том как решать реальные задачи, а не о том какие крутые и бесполезные фишечки есть у вас в системе)
Мы постараемся писать больше «конкретных» постов.

Также, много видео из цикла «success story» вы сможете найти здесь www.wolfram.com/solutions/?source=nav Также там вы сможете найти списки компаний по направлениям, которые активно используют Wolfram Language.
Также не могу не отметить запись выступления Леонида Шифрина «Разработка больших приложений в Mathematica», одного из разработчиков ядра Wolfram Language, автора RLink для Wolfram Language и многого другого.

Я думаю, что в скором будущем мы напишем большой пост о том, что я и коллеги делаем в России, опираясь на Wolfram Language. Думаю, это будет как раз то, что нужно многим.
Не оспаривая большинство Ваших тезисов, со многими из которых я согласен, я бы хотел обратить внимание на эволюционную составляющую при сравнении разных пакетов и языков программирования. Wolfram Mathematica начала свой путь как система компьютерной алгебры плюс символьный язык программирования, построенный на очень общих принципах. Ее авторы выбрали бизнес-модель платной системы с закрытым кодом, что было вполне оправдано на мой взгляд, по крайней мере на момент создания и первичного развития системы. То, что происходит с системой сейчас, лично я рассматриваю как переход от нишевого продукта к системе и языку программирования общего назначения (с определенными оговорками, но тем не менее). Первоначальный характер системы и требование поддержки общности ее языка привели к определенному отставанию по функционалу, по сравнению с другими системами (Matlab, R), которое сейчас сокращается достаточно быстрыми темпами. Советую почитать весьма нейтральный и беспристрастный блог человека, работающего со всеми крупными системами и имеющего возможность провести сравнение:

How many MATLAB toolboxes make a Mathematica 8?
How many MATLAB toolboxes make a Mathematica 9?
A random walk through Mathematica 10

Как программист и разработчик, я (будучи безусловно пристрастен) считаю сердцем любой системы ее язык программирования. Я профессионально работал и работаю с рядом языков, таких как С, Java, Matlab, R (в меньшей степени), Python, Javascript, и Mathematica. Могу сказать по своему опыту, что ни один из других языков не давал мне той степени гибкости и интерактивности, и той скорости разработки, что Mathematica — разумеется, в тех областях, где Mathematica оптимальна (выкладки, расчеты, вычисления, определенные типы работы с данными, быстрое создание прототипов и пользовательских интерфейсов). В прошлом я занимался наукой (астрофизика, квантовая оптика, квантовая теория поля, случайные матрицы, мат. физика), и без Mathematica мне бы пришлось сильно тяжелее.

Многие языки и системы пошли по в каком-то смысле более простому пути, упрощая дизайн основного языка. При этом, язык может быть легче в освоении, но изначально ставит определенные, часто довольно серьезные, ограничения на то, что может быть достигнуто с его помощью, а также на «потолок» собственного развития. Очень ярким примером тут является, с моей точки зрения, Matlab. Я в свое время с него начинал, и написал в нем довольно много кода, так что имею свое мнение на этот счет. Основной язык Matlab не отличается, опять же с моей точки зрения, хорошим дизайном или поддержкой мощных абстракций, но зато предельно практичен и дает в руки профессионалов инструменты для работы здесь и сейчас. Но, с эволюционной точки зрения, ИМХО это тупик. Сейчас это осознано многими, кто переходит на использование Python и / или R, и даже привело к серьезным усилиям по созданию языков следующего поколения типа Julia. То есть, несмотря на то, что Matlab во многих областях является стандартом на данный момент, я не стал бы рекомендовать его изучение для человека, имеющего долгосрочные планы по работе в области technical computing, хотя с чисто прагматической точки зрения вполне допускаю ситуации, когда сам бы воспользовался им без раздумий, скажем при наличии там трудно-воспроизводимого функционала для решения конкретной задачи, отсутствующего в других системах. На эту тему есть весьма информативный блог:

Abandon MATLAB

автор которого опирался на обширный личный опыт, и с мнением которого я в целом полностью согласен.

Я выбрал Matlab не для того, чтобы очернить его, и признаю наличие у него массы сильных сторон для практика — профессионала на данный момент. Просто это яркий пример общей проблемы долгосрочного выбора основного инструментария для работы. Те же самые вопросы можно задавать и про другие языки и системы (R, Python, Julia, etc). Во всех этих языках, выбор определенного дизайна, модели развития, etc обусловил их сильные и слабые стороны. В контексте языков программирования общего назначения, об этом хорошо написал Paul Graham, в своем известном эссе

The Hundred-Year Language.

Возвращаясь к Wolfram Mathematica, имеет смысл спросить, где в этом ряду стоит она, и когда будет достигнут ее «потолок». Я не знаю точного ответа, но идеология Mathematica, а также многие аспекты ее языка программирования, близки к языкам семейства LISP. В частности, Mathematica построена на очень общих принципах, имеет гибкий язык с обширными возможностями мета-программирования, плюс самую мощную поддержку символьного программирования из всех известных мне языков. Что это значит на практике? Например, то, что опытный пользователь Mathematica имеет практически неограниченные возможности автоматизировать свою собственную работу, «выращивая» свой собственный диалект языка для решения того класса задач, которые его интересуют. Это значит в свою очередь, что чем больше опыт работы с языком, тем эффективнее пользователь может его использовать. Еще одним очень существенным преимуществом Mathematica является возможность синтетического мышления для решения сложных задач. За счет доступности «из коробки» большого количества готового функционала, разработанного в единой системе принципов, соглашений etc, плюс символьной парадигмы, можно быстро создавать решения, использующие сразу несколько существенно различных областей знания. Символьная парадигма и единство принципов здесь играют ключевую роль, так как позволяют работать на высоком уровне абстракции без переключений — и в этом смысле Mathematica ИМО далеко впереди всего остального, что есть на данный момент.

Есть еще одно применение Woflram Mathematica, которое как мне кажется имеет очень большой и пока что совсем еще не раскрытый потенциал — как системы-интегратора технологий сверх-высокого уровня. Степень интерактивности системы позволяет использовать ее как некий лабораторный стенд, подключая туда различные языки и системы с их функционалом, и получая возможности быстрого тестирования и кросс-тестирования идей в символьной среде с мощными возможностями визуализации. Уже сейчас Wolfram Mathematica имеет линки к другим языкам и системам (C, Java, .Net, R, Matlab), и скорее всего число таких линков будет расти в будущем. Мне это представляется очень перспективным направлением.

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

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


Тем не менее, с моей точки зрения, большая часть этих сложностей временная, и связана с тем переходом из нишевого продукта в систему общего назначения, о котором я говорил выше. Есть надежда, что большая часть этих проблем будет решена в достаточно скором времени. В частности, одна из наиболее критичных на мой взгляд проблем отсутствия достаточного количества релевантной информации, решается достаточно успешно. На данный момент уже имеется сильное экспертное online — сообщество энтузиастов системы, полностью независимое от компании Wolfram Research, и проживающее тут:

mathematica.stackexchange.com

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

В общем, если подытожить этот несколько сумбурный и затянутый пост, то, будучи согласным с рядом Ваших замечаний, я призываю разделять то, что есть на данный момент, и те тенденции, которые, на мой взгляд, говорят в пользу Wolfram в долговременной перспективе. Ваше предложение о публикации большего количества практически ценных примеров решения реальных задач я считаю очень здравым, и надеюсь что это будет реализовано достаточно скоро. Disclaimer: как разработчик Wolfram Mathematica, я безусловно пристрастен, хотя моей работе в этом качестве предшествовал долгий период работы с системой в качестве пользователя (я начал пользоваться системой с 1997 г.). Также, обычное замечание — я представляю лишь свою собственную точку зрения, и говорю лишь от себя лично, а не от лица компании WRI.
Леонид, я, видимо, плохо сформулировал свой первый комментарий, раз сторонники Wolfram Mathematica (WM) его воcприняли как нападки на WM. Я сам очень хорошо отношусь к WM, хоть и знаком с ней очень поверхностно. Я регулярно пользуюсь Alfa для необъемных символьных вычислений. И в моем списке ToDo стоит более глубокое освоение WM, особенно в области символьных вычислений. Более того, если ко мне придет студент и спросит, какой пакет для символьных вычислений ему изучать, то я его отправлю к WM. /*Другой вопрос, что когда студент спросит меня, какой пакет ему изучать для работы в области Control Systems Design, то я, если опустить вопрос цены, без колебаний укажу ему на Matlab и, на мой взгляд, буду совершенно прав. И на сейчас, и с точки зрения развития. Естественно, не ограничиваться знанием одного только его, но Matlab — в первую и главную очередь. */
Так вот, смысл моего первого комментария — ну сколько же можно переводить выступления Стивена, рассчитанные на «широкую аудиторию»? Где блестящие примеры использования WM в чем-то более IT-специализированном? Да один только Ваш комментарий вызывает, на мой взгляд, у хабр-сообщества больше интереса к WM, чем три подряд перевода «общей тематики»! Я не к тому, что Роман зря переводит, нет. Но я (мы?) устал от некоторой однообразности. У нас у всех плотный рабочий график, много точек обучения, рыскать почти вслепую через документацию и демонстрашки нет, по большому счету, ни сил ни времени. Как правильно сказал DreamWalker, покажите, как я с помощью WM могу эффективно решать свою задачу, и я начну инвестировать в WM свое время. Покажите мне, как отсортировать планеты и оценить дальность обзора с небоскреба, и я скажу «ну да, прикольно. Наверное, кто-то этим воспользуется.»
Несколько эмоционально, но, я думаю, общий смысл понятен.
Да, смысл вполне понятен. Собственно говоря, я Вас понял правильно изначально. Как я уже сказал, я в общем с Вами согласен по большей части, в том плане что я прекрасно понимаю желание профессионалов в различных технических дисциплинах увидеть на понятных и близких им примерах, как решать те или иные задачи из их области интересов. Это вполне правомерные пожелания, и я уверен что они будут учтены, и на этом блоге появятся и более специализированные технические посты с конкретными примерами.

Что касается моего комментария, я просто постарался дополнить картину некоторыми не всем известными деталями. Ситуация с системой с огромным потенциалом и мощью (на мой взгляд), которая часто в целях маркетинга преподносится как универсальное решение для всех и на все случаи жизни, но при этом не предоставляет достаточного количества примеров и иллюстраций таких заявлений для профессионалов, вызывает недоумение у тех, кто мало с ней знаком, и досаду у тех, кто, как Вы, знакомы с ней в большей степени, и понимают необходимость таких материалов. Мой комментарий был призван объяснить, что ситуация не вполне обычная, поскольку система претерпевает бурное развитие (экстенсивная фаза роста) в последнее время, после длительного периода интенсивного (в смысле направленности) развития, и проходит в данный момент некий процесс фазового перехода. Это не очень типичное явление в сфере IT — систем, которые обычно к такому почтенному возрасту ( > 25 лет) уже достигают некоторого состояния насыщения. Для того, кто смотрит на это со стороны, это может не быть понятно, но если проследить историю развития системы как процесс, то многие нынешние дефекты роста становятся более объяснимыми.

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

Некоторые новые результаты для аналитического интегрирования функций Бесселя

Роман и Андрей Макаренко в своих выступлениях приводили ряд других примеров практического использования Mathematica.

Кстати, раз уж есть возможность задать вопрос разработчику. Вот скажите, а умеет ли Wolfram работать с матрицами без перечисления элементов? Скажем, я пишу функцию f=A*B+B*A и указываю, что A и B это матрицы некоторой размерности n на n, не перечисляя их поэлементно. И далее при всех операциях должно учитываться, что A*B не равно B*A, если только я не указал их симметричность, осуществляться контроль размерностей и так далее. Я такой возможности пока не нашел, к сожалению, ни в одном пакете символьных вычислений.
В готовом виде есть только операция некоммутативного умножения, NonCommutativeMultiply. Она не покрывает все Ваши требования, но достаточно несложно будет написать программу, которая научит Mathematica всему тому, что Вы указали. Мне приходилось во время научной работы реализовывать конструкции такого типа в Mathematica, и я уверен что Mathematica — подходящий инструмент для этого. Хотя вообще говоря, это в любом случае нетривиальная задача, и вопрос достойный. Вот ссылка с обсуждением похожих тем:

Symbolic linear algebra

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

Symmetric tensors

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

Топ-программист конторы в которой я работаю в качестве хобби на Вольфраме пишет систему имитации физических испытаний разных конструкций. Когда увидел впервые — сильно удивился.
Несмотря на всё удобство получившейся системы, я не считаю, что это действительно прорыв в математике и программировании. Действительно прорыв, имхо — это создание HoTT, вероятностного программирования и языка Church, создание языка с зависимыми типами Idris и повсеместное распространие разнообразных солверов, например SMT. Ну и нахождение более тесных связей между топологией, геометрией, теорией чисел и теорией групп.
Забыл добавить о практическом применении вероятностого программирования — вот, довольно забавный пример — probmods.org
Зарегистрируйтесь на Хабре, чтобы оставить комментарий