...

понедельник, 20 июля 2015 г.

Wolfram Language (Mathematica) — это просто игрушка

Хочу поговорить о Wolfram Language (далее WL). Прошу прощения за сумбурность изложения, пост вырос из попытки ответить на этот коммент от Nilis.

WL — это всё-таки узкоспециальный язык. Просто Wolfram решил подзаработать денег, и для этого стал продвигать свой WL ещё и как язык общего назначения. Если вам понравился именно WL — значит, вы просто ещё не познали другие языки. Также замечу, что WL — это не свободное ПО, в отличие от кучи других языков, включая тот же питон.

Лет 6-10 назад, когда я учился в школе, я знал лишь BASIC, Pascal/Delphi, C/C++ и WL. Из ОС имел дело лишь с Windows. Не знал, что такое скриптовые языки (perl, python, bash), не знал самого понятия «скрипт». Думал, что командный интерфейс — это устаревший интерфейс и что единственный правильный интерфейс программы — это графический. Программировал я на Delphi и WL. Программы на Delphi всегда были графическими. За исключением олимпиадного программирования, там в требованиях к программам было, что они должны быть текстовыми, я их писал на Delphi и C++. Когда я узнал о WL, я был им очарован, также как и вы. Потому что код на WL был гораздо короче, чем на Delphi/C++. И вообще, потому что WL был совершенно не похож на Delphi и C++. Потому что там была возможность программировать функционально. Я познакомился с функциональным программированием на примере WL, я не знал, что существуют «стандартные» функциональные языки — Haskell, Lisp и ML.
Когда мне нужно было написать программу для каких-нибудь манипуляций с файлами, я писал её на Delphi. Причём с гуём. Писал окошки, кнопочки. Поля «введите папку, с которой будете работать» и т. д. Я не понимал, что это можно было сделать однострочником на баше.

Например, меня попросили написать программу для конвертации имён файлов в папке с латиницы на кириллицу. Я написал программу с гуём на Delphi. «Введите папку, где нужно сконвертировать». Код, наверное, был на 100 строк как минимум, если не тысячу. Сейчас я понимаю, что это делается одной командой в GNU/Linux типа такой: prename 's/abc.../абц.../' *.avi.

У меня появилась идея написать файловый менеджер для Windows (разумеется, для Windows, других ОС я не знал), в котором была бы возможность скриптинга на WL (при этом слова «скриптинг» я не знал). Чтобы там, скажем, была функция Flatten из WL, которая бы делала Flatten для папок, т. е. уничтожала всю иерархию папок внутри данной папки и просто сваливала бы все файлы в кучу.

Потом, 6 лет назад я поступил в университет, познакомился с GNU/Linux, начал программировать на C/C++ и bash под GNU/Linux. Я понял, что всё моё программирование на Delphi и WL (кроме математики) — ерунда. Что все мои программы на Delphi можно было реализовать однострочниками на баше. А WL нужно использовать только для математических задач. Я понял, что командный интерфейс — не устаревший. И понял, что та идея файлового менеджера — ерунда. Потому что весь GNU/Linux в целом представляет собой такой файловый менеджер (а заодно и IDE) с возможностью скриптинга на всех скриптовых языках.

Там у нас началось программирование, преподавателя зовут Богачёв. От него (и от других людей) я узнал, что WL — это просто игрушка, причём даже для математических задач. WL нужно использовать, когда нужно по-быстрому построить график какой-нибудь функции или найти производную. Для задач посложнее его использовать нельзя. Потому что:

Богачёв помимо своей преподавательской деятельности работает в RFD ( rfdyn.ru ) техническим директором, и я там у него работал. Мы там делали симулятор месторождения нефти, я думаю, не нужно пояснять, что деньги в этой области крутятся огромные. Так вот, симулятор написан на C++, в том числе код, выполняющий расчёты (решение диффуров и систем линейных уравнений). И разумеется, не на WL, потому что нет нужного быстродействия, нет должного доверия к этому WL, и вообще WL здесь было бы использовать несерьёзно.

Затем я познакомился с формальной математикой, в том числе с системой Isabelle ( isabelle.in.tum.de ). Так вот, я вам скажу, что формальная математика — это единственный способ проводить математические манипуляции на компьютере так, чтобы быть уверенным в их математической правильности. И всех этих косяков с Simplify, Solve и т. д. в формальной математике нет.

Но такие системы (т. е. системы для работы с формальной математикой) не похожи на WL. Работа с ними происходит так: вы вводите в систему формальное доказательство, а она вам говорит, правильное оно, или нет. Возникает вопрос: можно ли смешать способ работы WL с правильностью формальной математики? Да, можно.

Mathematica, Maple и т. д. относятся к так называемым системам компьютерной алгебры. Так вот, все такие системы грешат отсутствием математической строгости. В связи с этим существует идея написания по-настоящему правильной системы компьютерной алгебры, основанной на формальной математике. Вот здесь специалисты в формальной математике показывают результаты первых экспериментов в этом направлении: http://ift.tt/1TKUT1s, прочитайте, пожалуйста, хотя бы первые две страницы.

Итак, по поводу математики на WL: если нужно по-быстрому построить график, вычислить производную и т. д. — юзайте WL. Если серьёзные математические вычисления — пишите код сами на языках общего назначения (типа C++), как это делает Богачёв, либо используйте профессиональные библиотеки, опять-таки для языков общего назначения. Если нужно проводить математические манипуляции, которые не являются вычислением, т. е. не являются численными — то делайте ваши манипуляции вручную, либо с использованием формальной математики (например, Isabelle), либо с использованием формальных систем компьютерной алгебры, например, представленной в статье выше (правда, такие системы на данный момент находятся на начальной стадии развития).

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

Итог. WL — это просто игрушка. Это инструмент студента, но не учёного. Вряд ли, скажем, данные с большого андронного коллайдера обсчитываются на WL. WL как 1С: плохой, узкоспециализированный, коммерческий, несвободный язык.

Если что-то заинтересовало в этом посте (формальная математика, функциональное программирование, и т. д.), спрашивайте, я отвечу.

UPD от 20 июля 2015 г. Почему WL похож на Lisp: http://ift.tt/1IdmQNF

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий