1) Term rewriting systems are a beautiful and powerful model of computation that a lot of people know nothing about.
2) The "everything is data" philosophy is life changing. This same philosophy can be seen in the Clojure community (there are more than a few Mathematica-isms that Rich has admitted being influenced by). Mathematica goes further to say that all data is expressions, which is really a subpoint of #1, but I think that data is the more fundamental important idea than expressions. Even though expressions have extremely wide applicability.
3) Having some mastery over the basics of Mathematica is like having a bunch of secret programming super powers. One time, I came across an exceedingly complex if/and/or/else clusterfuck and reduced it to a trivial truth table in only a few minutes of fiddling with Mathematica. There are lots of cases where experimenting in Mathematica was just a much faster way to understanding and solving a problem prior to implementation.
Thanks for the response, I have not found it to well matched for all of my tasks but it is definitely well set up for certain types of programming tasks, has several high level abstractions and a diverse set well documented libraries.
I haven never tried to write a script or algorithm or anything in Mathematica. It's not useful for that (at least to me). I use it more to explore and to understand problems.
That's why I mentioned truth tables. Being able to quickly perform symbolic simplifications is awesome. If nothing else, learn how to do that!
A quick Googling will show you that Rich has popped his head into a bunch of conversations where both Clojure and Mathematica are mentioned. He's also mentioned it in a talk or two.
Well let me ask you this, then: what do you recommend as a way to learn Mathematica? I feel like I should know more about it. My interest is less in the details of using the software and more in its computational model and its approach to language design. Any suggestions on what a natural approach would be?
Start with Mathematica's builtin documentation. The overview pages are actually quite good. They are also online [1].
Of course, given that the early drafts were written by Wolfram himself, you'll have to ignore absurd statements like this one: "Long viewed as an important theoretical idea, functional programming finally became truly convenient and practical with the introduction of Mathematica's symbolic language." [2]
In short:
1) Term rewriting systems are a beautiful and powerful model of computation that a lot of people know nothing about.
2) The "everything is data" philosophy is life changing. This same philosophy can be seen in the Clojure community (there are more than a few Mathematica-isms that Rich has admitted being influenced by). Mathematica goes further to say that all data is expressions, which is really a subpoint of #1, but I think that data is the more fundamental important idea than expressions. Even though expressions have extremely wide applicability.
3) Having some mastery over the basics of Mathematica is like having a bunch of secret programming super powers. One time, I came across an exceedingly complex if/and/or/else clusterfuck and reduced it to a trivial truth table in only a few minutes of fiddling with Mathematica. There are lots of cases where experimenting in Mathematica was just a much faster way to understanding and solving a problem prior to implementation.