# Learning curve for Mathematica

May be some of you (moderators and custodians) would discard this question as opinion-based and requiring discussion, but I didn't want the effort to go to waste so felt compelled to ask. Please feel free to shut down/migrate/ignore this question.

My question is "At what point does the complexity of a system cross a threshold where users start adopting alternatives, not because the system doesn't offer benefits, but because the steepness of the learning curve/training costs start to get out of hand"?

I am plotting:

n=StringLength /@ Names["System*"];

pn = ListLinePlot[Sort[Tally[n]]]


for several versions of Mathematica. You can see the total count next to each curve. 1984 is the actual figure for Mma5.2. No pun intended.

Another graph shows the count of System Names on a simpler plot.

This comes to around 0.91 Names being added to Mma every day for at least the past 15 years. I don't have data for prior versions. I am using StringLength of System Names as a reasonable measure of complexity as I have seen such graphs for various language dictionaries that are now available to users.

I cite the example of the adoption of Python over the last 15 years. One of the main reasons it has permeated schools at all levels is the ease with which it can be used to teach CS while maintaining a reasonable number of primitives it is built upon (nothing compared to C of course). Compared to this, it would be instructive to see the adoption stats for Mma. I think many questions on MSE reflect the fact that Mma is getting harder to learn (for students) and to use (for workers) without some expert help available but that is my opinion.

Experiment: (without going to Google or using MSE)

For all newbies/students/casual users, learners, do a simple exercise: Plot four curves on one plot; anything would do. Goto Help for ListLinePlot or Plot and copy an example. Now add a legend yourself (at least try first and goto Help again), and put it on the plot as you see above using only the help system. If you have done this exercise before, others can be cooked up just as easily.

This would be a fair newbie questions but I want you to think about ease of learning on your own, and backward compatibility if you are a returning user as you do this trivial exercise. Share your experience, if you have a couple of minutes.

For a system of this ever-increasing size, are there any plans to initiate backward compatibility? Most computer languages take great pride in this sort of continuity and for good commercial reasons.

I know that the number of core functions and techniques in Mma are still manageable for the power these bring, but a casual user visiting this site (for instance) looking at some of the expert solutions wouldn't be able to say so. It is also true that nobody uses but a fraction of all the available functions but often times you will see users implementing available functionality that they are are simply unaware of.

I have been using Mma for a long time and recently I have been gravitating towards programming languages for the remote job opportunities they bring. Specifically, I am learning functional programming extensions in various languages to update my skills. Simply put, if Mma were ever taken from me, I would require therapy. It is a force with unbelievable reach. I wish everyone at Wolfram and MSE well. This surely is my tribe. Live long and prosper.

• One function a day to learn? No problem use (“The new function of the day”)[mathematica.stackexchange.com/q/97552/10397] button. Aug 12, 2021 at 8:15
• (1) Most of the increase is irrelevant to what needs to be learned. Whether it represents significant noise depends on the quality of the tools for learning Mma. (2) The questions on MSE might also represent the expansion of people learning Mma from those who know how to learn a new computational environment to people new to programming who don’t. (Also python is free.) (3) I’m not in CS, but I doubt Mma would be used for intro CS, for CS-theoretical reasons no matter what version you pick. It’s used in other fields at a beginning level, tho, and maybe that’s the place to compare with python. Aug 12, 2021 at 17:06
• 1) if something doesn't need to be learned, it can be made into a toolbox leaving behind a skeletal functionality in the main part of the software and if the bloat is due to this reason, then it can be safely ignored 2) Social networks have changed learning habits essentially lowering learning standards across the academia: from paid help to posting for help etc 3) I read somewhere that Mathematica is Turing complete. Hence there should be no theoretical problem. The practical problem with such an adoption would be the lack of OOP support. @Michael E2, I appreciate your response. Thanks.
– Syed
Aug 12, 2021 at 23:07
• I actually think the system help in MMA is pretty danged good. When you compare MMA to something like Python, I think you need to take into account that if you want to do anything like what you'd do in MMA you'd need to write a whole lot of code or use a bunch of packages. I don't think I could use numpy, or matplotlib without any outside help :) Aug 20, 2021 at 13:06
• Something likeNDSolve being as user friendly as it is actually pretty amazing. A lot of problems arise from new users just trying to use something pretty high-level without understanding the basics of MMA because most learning is very informal, and people often come to MMA because they want to solve a complicated math problem that would be tough in something like Python. (And sometimes they don't really understand the math they're trying to do, but that's another issue.) Aug 20, 2021 at 13:12

You ask "At what point does the complexity of a system cross a threshold where users start adopting alternatives, not because the system doesn't offer benefits, but because the steepness of the learning curve/training costs start to get out of hand?"

Well... my answer is never. The whole point is that what you've learned is still valuable and useful, and you needn't learn the new functions unless your problem demands it.

And the newbies can create your four-line Plot in Mathematica very easily indeed... or so I certainly think.

I will grant that for extremely simple computations, a language such as Python may be simpler. But no serious programmer wants to end with just such elementary tasks.

A better question is to ask: What would it take for a newbie programmer to draw a rotatable three-dimensional graphics model of a human head? I can't imagine addressing that challenge in Python, Matlab, etc. In Mathematica, you simply type: AnatomyPlot3D[ Ctrl=head] (control and equal sign at the same time to enter free text), as shown here:

Mathematica is smart enough to know that after AnatomyPlot3D the appropriate interpretation of (lower-case) "head" is a part of anatomy... not a word or the function Head in the Mathematica language.

Another benefit is the multiplicative value of learning. It takes two minutes to learn how to ask questions of Mathematica in natural language: Ctrl plus = (then type your question). That took you 30 seconds to learn. Now try it:

CTRL + = length of Golden Gate Bridge in inches


Bingo! 107772. in

I've used Mathematica from version 1.0, and currently spend perhaps two or three hours per day programming in it. I fully admit there are vast swaths of functionality I have never used—and likely will never use. Fine. Certainly no reason whatsoever to "jump ship."

I'm currently focusing on symbolic manipulation and am grateful indeed for the immense number of Mathematica's powerful functions in this realm. I learn lots of new things every day. And I never have to load some complex toolbox... I merely go to the documentation on the most-relevant function and search through the associated functions until I find what I need.

• This is something i still need to grapple with even though imm fully aware of it…there are more than enough functions i’ll never use or even know exist and it’s perfectly fine to not have mastered 80% of the language. Aug 12, 2021 at 7:41
• On top of that, the only real reason i would change or use python i have seen so far with python compared to mathematica is that it’s simply free… Aug 12, 2021 at 7:42
• It's easy to make peace with not mastering every function within Mma. Who among us has mastered all of mathematics, all of engineering, all of science, all of law, all of athletics, and all of history . . . ? Is it not better to have a million gallon aquifer available than just a bathtub of water ? Aug 12, 2021 at 14:23
• You say "simply type AnatomyPlot CTR = head." Huh? I have to type AnatomyPlot3D[Entity["AnatomicalStructure", "Head"]]. Am I missing something? Aug 12, 2021 at 15:09
• @murray: Yes you are... type control and equal sign at the same time to enter free text, as shown in my revised posting. Aug 12, 2021 at 16:33

I think that measuring the complexity of WL by counting the number of identifiers is misleading.

1. WL is organised in something I like to call "areas of interest": take a look at the WL documentation starting page. On the next level the WL documentation provides a variety of "Guides" detailing the functionality available in the "areas of interest".

2. Wolfram Research (WR) went to great lengths to achieve some degree of orthogonality between the various areas of interest. This means that it is relative easy to mix and match the available functions and their results between these different areas. And WR has taken great care in naming each global identifier, for functions and other entities. This is significantly reduces the effort for a programmer/user to learn how to combine functionality. Which, of course, is the essence of programming.

3. Most users by far will never venture in all areas of interest offered by WL; you only need some basics, a bit of background knowledge about the area of interest and you go a long way, a very long way. One small example: you can attempt to use the geometric algebraic functions as listed in the "Computational Geometry" guide, like GroebnerBasis[] to find solutions to equations, but Reduce[] uses GroebnerBasis[]` and is way easier to use.

4. The underlying computational model of WL is a term rewriting system (TRS) using substitution. WR has done an admirable job modelling imperative and functional programming styles in it by applying a lot of syntactical sugar which can't hide all subtle issues when using a TRS. These subtleties don't confuse only beginners.

5. The degree of orthogonality is pretty high, but not perfect. And it is not always clear when these imperfections throw a spanner in the works. WL has been using more and more external libraries and the interfacing between the "ideal" world of pure WL and these libraries (written in Java, C and the like) breaks one of the most important principles providing orthogonality: you can't always substitute into or from these results. Very inconvenient.

In conclusion, Yes, WL has a lot of functions and yes Wl encompasses a great wealth of functionality. But that doesn't define complexity in itself. To a very large degree you yourself can keep it simple or make complex. Which goes for virtually every programming language.

• Please take a look at my PieChart post (253487) from 2 days ago. Rotated text needs to appear on the piechart. Simple enough. We are not talking about orthogonality of toolboxes, though it is an impressive word. Can you solve it for me using the docs? I have no difficulty placing rotated text on a circle, so don't suggest that. Pie chart and Style commands are ancient, but should I spend another day/week learning about these. Please find doc page(s) that solve it. Let's try orthogonality on my toy example. The point about toolbox ortho is noted and it stands. @nanitous thanks for your post.
– Syed
Aug 20, 2021 at 15:34