Celebrating Mathematica’s First Quarter Century
blog.stephenwolfram.com
blog.stephenwolfram.com
I myself stopped using the software about a decade ago for one simple, painful reason: I don't want my work to be trapped inside of a system that prevents others from freely building upon it. (And, no, Wolfram's CDF and "player" software are not substitutes for real, live code that I can give to others and have them use, change, and build upon -- without having to license a proprietary software system.)
As I've written before, Mathematica is one of the world's great works of software, mathematics, and engineering. But, as I've also written before, it can't achieve but the smallest portion of its potential to do good for humankind until all humans can use it. For real.
If Google wanted to do the world a big favor, gain itself some serious PR points, and perhaps increase its supply of potential math-savvy engineers two decades hence, it ought to buy Wolfram Research, continue to fund WR's work, and release Mathematica as free software backed by an open development process. Maybe this feat is too big for Google to pull off. Maybe it would take a consortium -- Google, Facebook, Apple, Yahoo!, Microsoft, and IBM together -- but maybe it could happen.
And, if it did, that would be a great day for humankind.
What? Why not develop a Mathematica alternative?
Or "adopt" one of the existing open source projects developed as Mathematica alternatives.
A New Kind of Science even has some good points in it, but it's written in such an over-the-top, "I have revolutionized all of science" way that it actively hinders its message, so a lot of people in the computing-and-philosophy intersection it wants to reach just don't take it seriously or even read it. If someone were really charitable and wanting to put some work into it, it could be greatly improved by being edited into a "what Wolfram really meant to say in that book" precis that includes the main points in maybe 1/4 the space, and with a different tone.
I do think a massively edited down and more humble version of the book could at least present interesting positions to argue against or develop. Part of the problem with his writing approach is that so much of the response is (correctly) pointing out that he didn't invent certain things, or that he's giving new names to things that already have names in either CS or philosophy or both, etc., that it obscures the contents, and the reader has to do a lot of work to get something out of it.
If you remove the claims to novelty and take it instead as a description of a certain contemporary paradigm of simulation-oriented science that resolves around computational models and complex systems, and take Wolfram as just your narrator digging into its philosophical implications (with a particular set of biases), it's not a bad read either, although it could also use an editor to move along more engagingly and not talk about Stephen Wolfram so much. So I'll admit it's not great for that purpose either; it maybe wants to be like a Douglas Hofstadter book but isn't really. I think some HN readers might actually like it, though. At the very least you can take it as an experimental attempt to answer the question: just how much of a philosophy can you hang almost entirely off of a study of cellular automata?
That's a pretty lukewarm endorsement, because honestly I don't think it's a good book as written, but some of the negative reviews are exaggerating its lack of contents.
1. Cellular automata are not the "point" of the book. The point of the book is the study of simple computational systems: cellular automata, mobile automata, Turing machines, register machines, tag systems, string rewriting systems, graph automata, lattice automata, etc..
What are they?
How powerful are they?
What is the distribution of complexity of these systems?
How might they hint at an unexplored scientific territory that we could profitably investigate?
What systems in nature can they qualitatively model?
How well does traditional mathematics work in analyzing and predicting their behavior?
The complexity manifested by these systems have been sporadically encountered by various people. A classic example being of course being Conway's Game of Life. But that was seen as pure recreation. Not until much later did anyone engage in systematic enumeration of similar systems in order to determine if Conway's game of life was special in any sense, if its universality was a unique feature of such systems.
Even the genius John von Neumann, who invented CAs, didn't simulate any to see what they actually did. He just saw them as models for engineering, and went about designing a somewhat pointless and brittle self-reproducing CA that has about zero significance for the [then non-existent] field of artificial life.
Similarly, Turing used Turing machines them to build a universal machine, and that's as much as he cared about running Turing machines. He almost immediately went on to oracles and supercomputation, which are pretty abstract and arguably far less important ideas.
2. Wolfram didn't invent many of the things in the book, and as far as I'm aware, doesn't claim to. In the very detailed notes you'll find plenty of attribution (although many academic fields are necessarily summarized very briefly). What he does claim to be the first to have done is articulate a common thread of argument that connects these existing ideas in a coherent and explanatory way.
3. This isn't about simulation. Simulation is precisely the WRONG way to look at what he's saying. What follows is a particular case he covers in the book, one of many such cases, but it is a nice illustration.
Turbulence in fluids is one of those 'puzzling' things that we often describe as a complex and interesting phenomenon in nature [0]. The traditional approach to understanding what causes turbulence is to use non-linear partial differential equations to describe the interplay between velocity, density, and pressure in fluids [1].
When you ask what these equations "really mean", there is a sense in which you have to first explain some pretty complex mathematical machinery, culminating in the very idea of a real number -- that take tens of years for modern-day students to learn in detail, that took hundreds of years for professional mathematicians to construct. These aren't trivial, or even particularly natural, ideas [2].
For some very simple cases it is possible to use the same mathematical machinery that expresses these equations to then solve them -- although enough fundamental stuff is still missing to warrant a $1m Clay prize [3].
But many questions (include almost all practical ones) are far too difficult to solve using the same "mathematical machinery" that expressed the equations. So we end up instead discretizing time and space and finding approximations to the solutions of these equations (using floating point numbers that are themselves approximations to the reals).
But wait a minute! Fluids are COMPOSED of discrete particles. The Navier-Stokes are just an approximation in the case of large numbers and statistical independence of momenta. So we've built approximations of approximations of approximations, at great computational expense and effort, with very little of the clarity and elegance of Newton's original work in classical mechanics [4].
We've got this very tall tower of ideas, with many answers still unclear (eg [5]). Can we refactor?
A natural question to start with is the following: if you don't limit yourself to continuous mathematics, how much "computational machinery" do you need to get fluid turbulence? It turns out, as Wolfram and others showed, all you need a system that is simple enough to explain to a 5-year-old [6]. (In fact, if you have ever played Chinese Checkers, you have a rough feel for how it would work).
These lattice gas automata have subsequently led to industrially useful CFD solvers [7].
In short, you can discretize both space, time, momentum, and break Galilean invariance, and my god it still works! That is a remarkable result!
What's the point of all this? The point here is that many of the traditional assumptions one makes in mathematical physics turn out not to be critical to reproduce the behavior one is interested in. And this appears to be a general phenomenon in many fields: the "unreasonable success of mathematics" has lead us to in some sense define science to be about building idealized mathematical systems.
Sometimes our ignorance of the 'spikiness' of computation has lead to some wild goose chases. [8]
And science has in turn ignored many problems that weren't amenable to mathematical analysis. Not out of pride or incompetence, but because no-one had made a particular effort to articulate what other kinds of analysis were possible. That's what the book tries to do, and that is why it perhaps seems quite hubristic. It is a manifesto. You can't write a manifesto in the form of 60 consecutive peer-reviewed papers.
I think there are faults with the book, particularly its length, its pedantry, and the assumptions it makes about its readers. But it is a radical scientific view, makes some quite big claims and predictions, perhaps wrong, perhaps right. I think it is definitely worth dipping dipping into at random for an educated generalist (rather than reading sequentially, which can be quite tiring).
Anyway, this post is far too long, and I'm not getting paid for defending Wolfram's work. I have Mathematica kernel functionality to write, dammnit!
[0] http://www.wolframscience.com/nksonline/page-377
[1] https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equation...
[2] http://plato.stanford.edu/entries/mathematics-constructive/
[3] http://www.claymath.org/millennium/Navier-Stokes_Equations/
[4] https://en.wikipedia.org/wiki/Philosophi%C3%A6_Naturalis_Pri...
[5] https://en.wikipedia.org/wiki/Turbulence#Kolmogorov.27s_theo...
[6] https://en.wikipedia.org/wiki/Lattice_gas_automaton ; http://www.wolframscience.com/nksonline/page-378#previous
That said, I found some of the philosophy interesting. I didn't get all the way through the book, but the one that stuck out to me (which I also recognize is not something that Wolfram himself came up with) is the thing about how random outputs can come from systems with very simple inputs.
The implications there are interesting because it means that you can't always reverse-engineer. ("Computational Irreducibility") It also means that reductionism isn't the end-all be-all of analysis, and that "systems thinking" and models-based analysis might be the only way to come to certain classes of insights.
It also means that the existence of highly complex systems is not evidence of a higher power, or a soul. We cannot always reverse engineer the outputs of a highly complex systems down to a simple system with simple inputs, but that doesn't mean that simple system doesn't exist.
So it starts tying into the free will vs determinism philosophical argument - the point being that we as people can be non-deterministic complex systems, and that might feel like free will to us. Which isn't the same thing as saying that we are highly complex deterministic systems, with response patterns that would be completely predictable if we could analyze it enough.
Of course, Wolfram didn't come up with the proof himself. That was done by Matthew Cook while he was working for Wolfram Research. Stephen Wolfram obtained a court order preventing Cook from presenting his result before NKS was published, because he claimed that publishing this result violated an NDA Cook signed.
BTW, this provided insight into question exactly what was Wolfram's results and what was taken from his colleagues/employees.
It very much confused me when I first read about the court order: Did he really not have enough of his own results in NKS that he needed to hide the fact that the results were not originally his? And merely by asking the question, the answer seems obvious.
In a very direct sense, this was a software development task, where the program that was being written was precisely a universal program (through several layers of emulation, of course; rule 110 -> 'particle computer' -> cyclic tag system -> Turing machine). It's an impressive program, but also quite mechanical. More details: http://www.wolframscience.com/nksonline/page-681#previous
Here's the timeline as far as I've been able to determine, mostly from sources inside the company:
0. Wolfram tasked Cook with finding a proof that 110 was universal.
1. With encouragement and help, Cook finished the proof many years before the book was ready.
2. Cook tried to publish the program/proof at some complexity conference.
3. Wolfram asked him not to, because it was against the terms of his contract.
4. Cook agreed not to, but then did it anyway.
5. Wolfram threatened legal action to prevent the proof being published.
This kind of thing is clearly a breakdown of the relationship between Cook and Wolfram. Is there a good guy and a bad guy? Maybe, maybe not. But if we see this proof as a program, I'm sure many people would agree that publishing code one was paid to write, without permission, is kind of a no-no.
To my mind, this doesn't so much paint Wolfram as a lawsuit-happy egomaniac as it does expose some of the contradictions of a running a private company as a commercial venture and as a vehicle for one's own research.
edit: I work for Wolfram, as probably some HN users already know and as I mention elsewhere on this thread. But when I heard about the whole Cook thing a couple of years ago, I asked around about what happened to make sure I wasn't working for a company that was unethical. The above is what I was able to determine.
As a language it use an M-expression-like syntax. See http://en.wikipedia.org/wiki/M-expression
So your point about symbolic versus numeric flavor might have been correct prior to version 6, but it is no longer true (Mathematica 10 will be released later this year). In fact, they now use many of the same libraries for pure numeric work.
Numeric (as well as hybrid numeric+symbolic) computation is possible in Mathematica. In MATLAB, symbolic math requires a clunky add-on that is far from competitive with what Mathematica can do.
I work at Wolfram.
If memory serves, 5.2 was the then-current version. It's an amazing piece of software.
This is compounded with the fact that Mathematica's main advantage is in its combinatorial possibilities (just like other more popular programming languages), and not in any specific application.
Think of it as marketing Lego blocks as a business-to-business product.
So your university / company has a licence, and you are naturally sceptical about something that has a definitely weird syntax, they need to tell you "this can help you somehow" and "it's actually better this way".
And if your employee asks you for a licence, and you are naturally sceptical, they need to tell you "this is actually useful in tons of other problems".
As with many applications or languages (or, in this case, both), being exposed to it at the right time creates a client for life. Those lifers become evangelists in the same way lispniks do (and watch out for those of us who are both), requesting that employers license the software.
If you are between, say, 35 and 45, went to a "decent" university (i.e., one Wolfram and/or NeXT targeted), and have an applied math background of any sort (CS, physics, engineering, etc.), you were very likely exposed to Mathematica. It's just a few steps from there to having a prof use it in a lab or using it because an employer had made a previous investment in development.
At that point, much as with C, or Java, or CLISP, or whatever, it becomes a fallback computational tool. SAS acquires many of its licensees in a very similar way.
So as a non-Mathematica user, it certainly appears to be a very effective technology, and in the right hands and right domain, it seems like it could pay for itself very, very quickly.
Solve[{x + y + z == 3, y + x == 4, z + y == 7}, {x, y, z}]
gives: {{x -> -4, y -> 8, z -> -1}}
Refactoring our documentation a bit for M10 will help, the predictive interface in M9 helps, and there are some cool "code hint" ideas that are coming in M10 that will hopefully make it easier to keep learning.
We'll also soon be launching a community site to make it easy to discuss functionality, seek answers, and share code. For now, http://mathematica.stackexchange.com is a good resource.
We're also working on getting some materials about the Wolfram Language that should make it easier for people with existing programming experience to grok what is unique and different about WL, and how they might go about learning it.
Probably the best resource remains the existing Mathematica documentation. It is vast -- containing for example more than 100,000 evaluatable code snippets that demonstrate each function being used in multiple ways.
It is available online (http://reference.wolfram.com/mathematica/guide/Mathematica.h...) as well as in-product (double-click function you want to know about, then press F1 or Cmd+Shift+F). Following hyperlinks from familiar territory can get you a long way.
It's quite easy to get lost in it, of course, so here's a short list of "bread and butter" functions that I think every WL programmer should know really well: https://gist.github.com/taliesinb/5848321
Lastly, here is an eclectic mix of guides that might serve as good 'anchors' for some documentation spelunking:
http://reference.wolfram.com/mathematica/guide/LanguageOverv...
http://reference.wolfram.com/mathematica/guide/RulesAndPatte...
http://reference.wolfram.com/mathematica/guide/Patterns.html
http://reference.wolfram.com/mathematica/guide/StringPattern...
http://reference.wolfram.com/mathematica/tutorial/BlocksAndL...
http://reference.wolfram.com/mathematica/tutorial/LevelsInEx...
http://reference.wolfram.com/mathematica/tutorial/ApplyingFu...
http://reference.wolfram.com/mathematica/tutorial/Manipulati...
http://reference.wolfram.com/mathematica/tutorial/Introducti...
http://reference.wolfram.com/mathematica/guide/SymbolicGraph...
http://reference.wolfram.com/mathematica/Compile/tutorial/Ov...
http://reference.wolfram.com/mathematica/guide/GraphsAndNetw...
http://reference.wolfram.com/mathematica/guide/MatricesAndLi...
Thing is, if the creator of any piece of software has earned their arrogance, it's Stephen Wolfram. Mathematica is really, properly amazing stuff. It's the closest thing I've ever seen to that Star Trek vision of a computer you can ask anything of. It's orders of magnitude more impressive than, say, a glorified address book, but Stephen Wolfram never put the word 'bitch' on his business cards. He just talks about the stuff his company has built and doesn't bother with humility. There are worse faults.
If what he says is true--the fundamental architecture of Mathematica has been fairly consistent over a 25 year period--that's an exceptional thing in the software world. It's rarified air, so I'm going to say he earned this one. :)
http://www.computerworld.com.au/article/329191/a-z_programmi...
It's very emblematic of the differences between the two systems. Wolfram talks about how he got it all right, and that there is no limit to Mathematica. Moler talks about his delight in seeing Matlab results in the real world, and the decisions he got wrong.
Can you ever imagine Wolfram saying (as Moler does) his target is upping the game of Excel users? I'm laughing just thinking about it.
Having just attended our 25 anniversary celebration in Illinois, it's clear there is an enthusiastic and long-lived community around Mathematica that is only going to grow.
With any luck, 2014 will be a "breakout" year in which the Wolfram Language that underlies Mathematica will start playing a more mainstream role in the software engineering industry.
Curating the data sets behind Wolfram Alpha (and Mathematica) is a hugely labour-intensive endeavour. Mathematica itself depends on a large team of extremely well educated people; the pan-scientific domain expertise is significant in that company. Jeopardising that with a radical change of business model, like open sourcing Mathematica, would not be the choice of a sane businessman.
The system has to self sustain somehow.
If you want a similar system that is completely free and GPL, look at Maxima. It originates in DOE Macsyma and is Mathematica's direct predecessor. Since the company went bankrupt, the development went on at a glacial pace. Mathematicas commercial develompent model overtook it several times.
Specifically, I would be very surprised if small programs are not free for anyone to run, and if we don't offer some free tier (X minutes of kernel time a month).
Really, we have a strong interest in making WL ubiquitous for doing algorithmic and knowledge-based work. That does certainly mean opening it up more, though as some other people have pointed out, that is probably not going to take the form of open-sourcing the kernel [at least, not until we have different revenue streams in place].