Pull to refresh
3
0
Send message
Хочется спросить, а вы дали себе труд пройти по изначальной ссылке?

Xkcd-style-graphs

За этот вопрос проголосовали 467 человек (на данный момент), и 435 из них посчитали его достаточно интересным, чтобы добавить в закладки. Подобные вопросы сообщество Mathematica SE использует для «спуска пара» и разрядки, и как интересные упражнения.

В дальнейшем, эта тема стала популярной на всей сети Stack Exchange (и не только), и появилась масса вариантов реализации того же самого на других языках (Python, R, etc).

Ваш комментарий эквивалентен тому, что все те, кому понравилось это обсуждение, на Mathematica Stack Exchange и других площадках — идиоты. Хочется спросить — а вы не много на себя берете?
Этот комментарий адресован больше не вам, а тем, кто так лихо ставит плюсы. Мне интересно, что это, предвзятость, невнимательность или стадное чувство. Неужели так трудно проследить историю и найти первоисточник?
А со мной вы будете разговаривать?

Мне кажется, вы слишком строги к Роману и выставляете слишком высокую планку для публикуемой здесь информации. Насколько я могу судить, Хабр не является научной площадкой. Учитывая, что авторство статей (тех, о которых идет речь) принадлежит не Роману, критиковать можно две вещи: качество перевода и процесс отбора информации. По переводу, насколько я вижу, Роман принимает и учитывает замечания. По отбору — в конце концов, это его дело.

Я понимаю ваше стремление увеличить плотность информации и отношение сигнал / шум, но на таких ресурсах как Хабр, мне думается, это lost cause (да и вообще, задача совсем не из простых, и в первую очередь должна решаться создателями площадки, а не блоггерами, на таких площадках как Хабр). Я мог бы перечислить несколько причин, почему это так (как мне представляется), но скажу лишь, что, по моему мнению, это прямо заложено в бизнес и социальную модель Хабра и вполне устраивает его создателей. Это вполне в духе времени, нравится это или нет. Пытаться превратить площадку в то, чем она не является — неблагодарный труд. В конце концов, никто не мешает попробовать организовать площадку, где будут действовать другие правила, и сделать ее успешной и посещаемой.

Возвращаясь к постам этого блога, я бы посоветовал в первую очередь рассматривать их как иллюстрации к применению функционала Wolfram Mathematica, рассчитанные на широкую (и потому разно-уровневую, и в целом не очень взыскательную) аудиторию. Есть два подхода к подаче информации: можно либо предоставлять много разного и давать каждому возможность решать, что ценно, а что нет, либо давать «избранное», но тогда отбирающий во-многом принимает решение за читателя. И раз уж вы заговорили об отечественной науке, то позвольте мне, как человеку имевшему дело и с отечественным, и с зарубежным подходом, сказать вот что: во-многом, именно отсутствие упора на «единственном правильном пути к истине» помогает западным ученым выходить на высокий уровень и получать замечательные результаты (сравните, например, лекции Фейнмана с курсом Ландау, для начинающего физика-теоретика).
"Большинству людей, как показывает опыт Русскоязычной поддержки, после детального знакомства с Wolfram Language, обычно как раз другие языки программирования кажутся странно и нелогично устроенными." Проблема в том, что для того, чтобы такое суждение было обоснованным, требуется не менее детальное знакомство с внутренним устройством тех других языков, плюс серьезный общий опыт решения различных задач программирования в разных языках. Очень многие языки программирования имеют превосходный дизайн (навскидку — С, Scheme, Python, Haskell, и др.). Некоторые внешние странности других объясняются их определенной «заточенностью» и областью применения.

Я согласен с тем, что многие идеи, заложенные в Mathematica, делают ее достаточно мощным и гибким языком, но этим свойством обладают и другие языки (Lisp, Haskell, etc). И если мне скажут, что в качестве языков общего назначения они более мощные, более логично устроенные и предоставляют больше возможностей (чем Mathematica), я не рискну с этим спорить, просто потому, что недостаточно компетентен для этого. Так же как Mathematica дает, с моей точки зрения, больше возможностей в других областях (формализация символьных вычислений). Языки — это инструменты, в общем случае их нужно выбирать под задачу, и тут вряд ли есть какой-то абсолют (хотя стремиться к нему — дело хорошее).
"Wolfram Language на самом деле один из самых старых языков программирования и поэтому он имеет свой собственный вид с минимумом сторонних влияний" — Роман, это заблуждение. WL — достаточно молодой язык, существенно моложе многих (Fortran, Lisp, C, APL, SmallTalk, etc), и он безусловно был создан под влиянием идей по крайней мере Lisp, APL, Fortran и C.
Re: «зачем было делать язык настолько отличающимся» — этот вопрос выдает, что задавая его, Вы мыслите как программист mainstream языков (не в обиду сказано). Программирование, по своей сути, это способ формализации определенных действий, для последующей автоматизации их с использованием компьютеров. Вопрос лишь в том, что мы автоматизируем.

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

Язык Wolfram Mathematica оптимизирован под формализацию и автоматизацию, прежде всего, некоторых процессов нашего (человеческого) мышления и работы. Изначально, его основная цель была автоматизация работы ученых в точных науках. Сейчас область применения намного шире, и мне нравится определение Андрея Макаренко «система автоматизации интеллектуального труда». Процесс мышления человека достаточно сильно отличается от процессов, происходящих в промышленных системах — по крайней мере в аспекте его автоматизации. В этом, если хотите, философская составляющая моего ответа на Ваш вопрос.

Если вернуться к программированию, но начать смотреть на менее известные в mainstream (хотя это сейчас меняется) языки, в частности функциональные языки программирования — то Вы увидите, что у Mathematica с ними весьма много общего (возьмите например диалекты Lisp). Это не случайно. Абстракции, предоставляемые функциональными языками — и в частности, возможности метапрограммирования — не что иное, как средства автоматизации труда самого программиста (помимо средств имплементации). Более «привычные» языки не позволяют автоматизировать повторяющиеся действия самого программиста дальше определенного уровня, поэтому появляются монстры вроде шаблонов проектирования, Generics и иже с ними.

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

Что тут можно ответить — наверно, каждому свое. Mathematica, как и Lisp, дает в руки программиста дополнительные мощные возможности писать программы по-другому, быстрее и продуктивнее, и получать код лучшего качества. Они платят за это своей некоторой «необычностью». Вы можете либо оценить эти новые возможности и научиться ими пользоваться, либо отмести их как несущественные для Вас и пользоваться тем арсеналом, к которому Вы привыкли. Думаю, это выбор глубоко индивидуален и тут нет единого правильного ответа. Кроме того, это зависит еще и от поставленных задач. Лично я предпочитаю функциональные языки (хотя работаю на всяких, включая C, Python, js, Java, Mathematica и еще несколько).
Кстати, в дополнение — один из примеров, что я привел выше (CodeFormatter), как раз и появился на свет из-за того, что лично меня (и не только) не устраивала ситуация с плохо оформленным кодом, и хотелось автоматизировать процесс форматирования (сделать pretty-printer). К сожалению, у меня пока что не было времени, чтобы полностью довести CodeFormatter до ума, хотя во многих случаях он работает очень неплохо. Более подробное его описание и пара screenshots есть тут:

Programmatic formatting for Mathematica code — possible?
Re: «почему оформляется как попало» — Вы просто вероятно не видели много профессионально написанного кода в Mathematica / WL. Я не претендую на истину в последней инстанции, но можете глянуть, например:

LazyTuples

или

CodeFormatter

У разработчиков, как правило, код выглядит достаточно красиво. Почему — тоже понятно: во-первых, внутри компании передаются определенные традиции оформления. Но это не главное. Главное — необходимость поддерживать в структурированном, модульном и удобном для работы и внесения изменений виде большие объемы кода.

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

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

Разработка больших приложений на Wolfram Mathematica / WL

я в частности говорил об этих моментах (гранулярность кода).

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

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

Symbolic linear algebra

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

Symmetric tensors

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

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

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

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

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

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

Не оспаривая большинство Ваших тезисов, со многими из которых я согласен, я бы хотел обратить внимание на эволюционную составляющую при сравнении разных пакетов и языков программирования. 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.
2

Information

Rating
Does not participate
Registered
Activity