Unfortunately it's also the single tool most hampered by its licensing and silo-like ecosystem.
Unfortunately it's also the single tool most hampered by its licensing and silo-like ecosystem.
They were in the unique position of having one of the best symbolic differentiation engines and one of the best numeric engines and a Lisp-like REPL that allows one to write terse, elegant code.
What they were always missing was efficient bulk data structures.
In recent versions they've added a handful of "special cases" where some types of data are stored as a plain data array like in C-derived languages, but this is hit-and-miss.
Similarly, they've dabbled with GPU acceleration and parallelism, but it's half-baked. It feels like a proof of concept, not something you'd ever actually use.
Julia and the like will slowly but surely eat their lunch.
https://peertube.mastodon.host/videos/watch/df751bd5-5a26-44...
Wolfram has released good videos to that end, here's the latest:
https://www.twitch.tv/videos/569938853
I find R to also be a lot better than Python and closer to Mathematica (especially if you combine it with RStudio and Shiny) but still not quite as good overall on the interactivity/environment end.
R package Deriv for symbolic differentiation, it allows user to supply custom rules for differentiation.[1]
R package numDeriv[2] for calculating numerical approximations to derivatives.
R package gmp[3] and Rmpfr[4] provide multiple precision arithmetic and floating point operations. They also include some special functions, e.g. Rmpfr::integrateR for numerical integration.
R package mpc[5] available at R forge. It provides multiple precision arithmetic for complex numbers.
R package rSymPy[6] provides an interface to ‘SymPy’ library in python via rJava.
R package Ryacas[7] provides an interface to the ‘Yacas’ computer algebra system. It is easier to install compared to `rSymPy`.
R package symengine[8] is an R interface to the SymEngine C++ library for symbolic computation.
[1] https://cran.r-project.org/web/packages/Deriv/index.html
[2] https://cran.r-project.org/web/packages/numDeriv/index.html
[3] https://cran.r-project.org/web/packages/gmp/index.html
[4] https://cran.r-project.org/web/packages/Rmpfr/index.html
[5] http://mpc.r-forge.r-project.org/
[6] https://cran.r-project.org/web/packages/rSymPy/index.html
[7] https://cran.r-project.org/web/packages/Ryacas/index.html
There are also little nifty things like for image processing you can have a hard coded image show up in your code (I like plain text better but it's cool and future-techy). Distributions (as in normal, binomial, Poisson, etc) are a type and PDFs and CDFs can be obtained from them consistently rather than having to remember the different parameters of dnorm, dbinorm, etc.
I would love a real Mathematica expert to give us more. That's the real drawback of the closed ecosystem there is so much less information about it out there, fewer code samples, etc.
In ipython, matlab and octave it's much easier to repeat and modify last commands, which is something you seem to need all the time when experimenting with math.
What was I missing, usability/interactivity/rapid development wise?
> the way the command line works: no feature to repeat previous comnand with up arrow, have to edit previous existing one, requiring more mouse usage, weird forms of cursor placement, weird default enter key behavior.
It's not a command line. It's an interactive notebook. It's an entirely different experience. Repeating and modifying last commands can still be done with arrow keys, then Shift-Enter. Also, when you are doing math, you spend way more time thinking than typing and manipulating; the time needed to move your hands to the mouse is minuscule by comparison.
Although, as others have said, many prefer the style of editing and re-running, rather than leaving the history above.