I'm enjoying slowly learning Mathematica but noticing one skill I'm lacking is a comprehensive vocabulary of Mathematica functions. I was wondering if members would mind sharing some strategies they have or experiences they've had about how they expanded their knowledge of Mathematica functions to ultimately be more fluid and expressive in the language. Was it flash cards? A practice website? A pressing project deadline?
6 Answers
Few resources
I always liked this Wolfram site http://reference.wolfram.com/legacy/flash/
It has the most commonly used functions, and it animates each one also to help learn how it works. Need Flash to run the animations
WolfLang Tip at twitter always have small good examples
https://twitter.com/MathematicaTip
Alphabetical Listing of all Mathematica functions
http://reference.wolfram.com/language/guide/AlphabeticalListing.html
-
$\begingroup$ Took me a while to get the site working. (Shame it uses flash.) I was skeptical it would be helpful, but I have to admit with some of the more esoteric functions it makes things very clear. Following Mathematica tips now. $\endgroup$ Aug 10, 2017 at 14:30
This is actually a decent soft question. I have been doing this for years, and have used most mathematical modeling and simulation products in existence for several years now. While there are times when something like a straight C routine makes more sense for me, I always try to get things done in Mathematica. It is my favorite. I hope you stick with it!
I would say that the best way to expand your Mathematica vocabulary is to do it in time with loads of projects. That is how I did it. When I started, Mathematica was an infant. 3D plots did not rotate. I did not know much either. I copied and pasted and modified functions back then and just played. As an undergraduate math major, I started minoring in computer science, and that broke me into the realization that I could do most things done in other languages here in Mathematica. Well I was always very experiment oriented, and always had things I wanted to do, test, or make, and I just always tried to do it in Mathematica.
I would say the Documentation Center in the help feature has been my biggest help. I think of something I want to do, make, or test, and then work up a pseudocode on paper or in my head as to how I will make it happen. Then I just go for it. Efficiency and code reuse is the order of the day, so typically I will either look for functions in Documentation Center, and I also google for things to make sure I'm not reinventing the wheel. Frequently I am sent to either this site, or the online Mathematica documentation! I put it all together, and when it matters, I try to make it work as efficiently as possible. Sometimes it matters desperately, and those Mathematica functions you're interested in are really the key there to efficiency!
I am tempted to list all of the things I have done in Mathematica, but the list would be broad and too long. It would take me a long time to collect up the list of my random explorations using Mathematica. The craziest part, is that there are so many thousands of functions, it is amazing. Just knowing that the function exists is really valuable, but because there are so many thousands of functions, it is quite impossible to just get that up to speed except by exploration. My advice is to come up with tasks, projects and explorations, and then just struggle to implement them in Mathematica. Use the Documentation Center, and google search always in trying to achieve your goal. Code reuse is paramount, and using the highest level built in Mathematica functions is also paramount. Through time, you will be completing your projects much more quickly, and Mathematica will just become a part of you.
-
1$\begingroup$ Thanks for offering your insights. I have a background in self-directed learning and really enjoy how MMA just goes way above and beyond what a graphing calculator can do. Your 2nd and last paragraph especially reminded me I need to go back and give the Doc Center another try. $\endgroup$ Aug 10, 2017 at 4:46
I’ve been using Mathematica daily almost since the beginning, mostly on projects in theoretical physics and quantitative finance.
Some techniques for expanding facility with Mathematica that have worked for me are -
Notebooks are wonderful repositories of knowledge. I keep all the notebooks I have generated in a directory farm that can be accessed with an indexable search engine. If you can just remember a keyword associated with prior work involving a particular function, a search brings up examples of your prior use of that function that you can adapt to the problem at hand. Repetition builds virtuosity.
Over the years I have refined that idea by creating reference notebooks focusing on specific Mathematica operations such as operations on lists, examples of pattern use, scientific visualizations, examples using Manipulate, etc. On the first line of my standard template notebook, I have a hyperlink to a master reference notebook with a menu hyperlinking to the various reference notebooks. When faced with a situation involving some infrequently used function I can, with a few mouse clicks, see examples of how I and others have used that function. In my experience, when you think about using an unfamiliar function, coming up with the required syntax is one of the main obstacles. Having examples of proper syntax at your fingertips helps overcome that problem.
In retirement, I have had the time to start editing my notebooks and publishing them on a personal website. Check my profile for the location - hope something is useful for you.
Saving old work helps but from the standpoint of expanding Mathematica vocabulary, probably the most productive thing I have done is to study closely the work of Michael Trott. By analyzing the code in his masterful Mathematica Guidebooks, I have learned so much. I analyze, deconstruct and re-express his methods in my own notation/style, which is typically much more verbose. Tight code and short hand notations may be elegant and efficient but, in my case, saving mental cycles is more important than saving CPU cycles.
Finally, Stack Exchange is quite useful. Some very good Mathematica coders frequent this site, and you have the added advantage of hearing them motivate the reasons for their design choices.
There is a community post by @VitaliyKaurov describing the development of an educational game called bughunter that creates problems using the Wolfram documentation center. Here is an example problem:
Try it out!
-
$\begingroup$ Carl, would you mind expanding your answer by including a description of the website you linked to? You know, links ultimately die, and all that. $\endgroup$– MarcoBAug 10, 2017 at 3:36
-
$\begingroup$ Exactly the sort of tool I was looking for. I'm sure other students will appreciate the link too. $\endgroup$ Aug 10, 2017 at 4:40
After thinking about it I do have a short answer that should probably be included here for students. It's appropriate to suggest An Elementary Introduction to the Wolfram Language. The 2nd edition notebooks of which I worked through about 80% of the content I was interested in. I would recommend it for people trying to get a head start on learning the language or were self-directing their efforts like myself.
I know it's cliche but when I first started (and I'm still a beginner) I found the sheer number of functions and the myriad ways of solving problems was paralyzing. I set myself the goal of learning 100 functions that could get me through most scenarios for a beginning uni STEM student ie, assignments and lab reports. Then I made cue cards each time I found something on-line that seemed really generic and drilled them until they became routine.
This has some odd side effects that you should accept up front ie, you find some round-about ways of doing things that you get used to and then find more elegant solutions over time. So long as you're aware of it, it's not a big problem. For instance, I find the use of Table
is a generic workhorse function for checking things in a list and then using Select
with a simple T/F criteria - it's long winded, wasteful and hardly elegant but it almost always works. Once I got bored with typing, I was far more open to say, pattern matching using Cases
and getting the answer directly.
The other thing I've found really useful is to create an inner narrative that translates easily into code ie, /;
means 'whenever' and ->
means 'and set it to'. I use mental models similar to to the flash animations above to visualise what the function will do - Fold
didn't make any sense to me at all until I'd figured out a way to do it with paper and pencil. Many problems seem to become quite trivial if you are able to translate them into words/phrases that feel natural to you and use the correct function name - I am starting to appreciate the naming conventions in WL more and more as I practice this.
100 functions isn't that many to shoot for and now that I can find a way to wrangle some sort of answer I'm able to ask better questions and able to actively use the documentation. The See Also sections are always worth exploring.
I wrote myself a guide as a learning project - you're welcome to a copy if you want but it's not the sort of thing that is on-topic for this site. I think I uploaded a copy here and on the Wolfram Community site so it's pretty easy to find. In general, forcing yourself to write "the introduction that you wished you could have started with" is often a good first project ;-)
BTW I think this is a generic problem with learning (any) language - if you are interested in creating an on-line peer study group I'd be interested.
-
$\begingroup$ I think your 2nd paragraph kind of captures my mindset. And I am interested in joining an online study group with a bit more structure than chat at some point in the future but need a bit more stability in my life first. I am active on the Mathematica Community boards too. Thanks for sharing your experiences. $\endgroup$ Aug 10, 2017 at 23:25
See Also
section of the documentation page for any function and look at the documentation for any associated function you do not recognize or do not feel comfortable with. $\endgroup$Details
section). Play around with their examples, too. Also (time allowing) for anything you need to achieve, see if you can find at least two different ways of doing it. $\endgroup$