(This post was originally published on the Wolfram Blog.)
In the middle of last year, we finished our decade-long project to reinvent Mathematica, and we released Mathematica 6.
We introduced a great many highly visible innovations in Mathematica 6—like dynamic interactivity and computable data. But we were also building a quite unprecedented platform for developing software.
And even long before Mathematica 6 was released, we were already working on versions of Mathematica well beyond 6.
And something remarkable was happening. There’d been all sorts of areas we’d talked about someday being in Mathematica. But they’d always seemed far off.
Well, now, suddenly, lots of them seemed like they were within reach. It seemed as if everything we’d built into Mathematica was coming together to make a huge number of new things possible.
All over our company, efforts were starting up to build remarkable things.
It was crucial that over the years, we’d invested a huge amount in creating long-term systems for organizing our software development efforts. So we were able to take those remarkable things that were being built, and flow them into Mathematica.
And at some point, we realized we just couldn’t wait any longer. Even though Mathematica 6 had come out only last year, we had assembled so much new functionality that we just had to release Mathematica 7.
So 18 months after the release of Mathematica 6, I’m happy to be able to announce that today Mathematica 7 is released!
You can find lots of details of what’s new in Mathematica 7 on the web.
I think it’s pretty impressive.
One metric is that Mathematica 7 introduces about 500 new functions. Some of them are pretty trivial, but a remarkable number are “superfunctions” that automate huge areas of functionality, and each of those contains many separate large algorithms.
The plot below is quite striking, too. It shows the growth in the number of functions in Mathematica over the past 20 years.
Watching our development process from the inside, I’ve definitely had the feeling in the past few years that we’ve been entering a new regime of growth. That everything we’ve integrated into Mathematica is interacting to let us somehow build almost exponentially more.
And the plot above suggests that something like that is really happening.
But what’s perhaps most striking is that even as the number of functions and the breadth of functionality have been growing so dramatically, we’ve succeeded in maintaining the unity of Mathematica—and of making sure that every piece of the system fits together in a coherent way.
That’s not been easy, of course. It’s the result of our long-term company culture and of a lot of systems that we’ve built up over the course of more than 20 years. (As well as thousands of hours of personal work by me.)
It’s very satisfying, though. Because it means that the things we so carefully built five, ten, twenty years ago are still there today, making possible our new achievements.
From the very beginning, I always thought that the underlying symbolic paradigm of Mathematica was a powerful one. But it seems like every version of Mathematica proves that it’s even more powerful than I ever imagined.
And Mathematica 7 is no exception.
For in Mathematica 7 there are a whole collection of new constructs that are represented as symbolic expressions—and so can be completely integrated into the system.
One example is images.
Mathematica 7 lets you drag an image from anywhere into Mathematica, then start computing with it.
Mathematica now has all sorts of highly efficient image processing functionality built in. But what’s really powerful is how deeply images are integrated into the whole system.
You can make lists of images; you can use an image—inline—as an argument to a function.
You can apply all the power of Mathematica to images.
This kind of extreme integration is one of the unique strengths—and guiding principles—of Mathematica.
Another guiding principle is automation.
The idea that we, as humans, should just be able to specify what we want Mathematica to do, and then Mathematica should automate the process of doing it in the best possible way.
In Mathematica 7 we’ve brought automation to all sorts of new areas.
Automatically picking the best algorithms for solving delay differential equations, or for simplifying huge Boolean expressions, or for plotting streamlines of a complicated vector field.
Quite often what we’re automating includes how results are going to be presented. Doing what we call computational aesthetics: having Mathematica automatically choose the best way to present things.
And in Mathematica 7 we’re doing that a lot, not only when we work with images, but also with enhancements in typesetting large expressions, and with many new forms of graphics and information visualization.
Another thing we’re automating in a major way is parallel computation. Most computers one buys these days have multicore CPUs. And in Mathematica 7 you can automatically make use of those cores by using the new parallel computing primitives that we’ve built into Mathematica.
Many times in my life I’ve wanted to do parallel computation. And occasionally with great effort I’ve managed to do it. But with Mathematica 7 I can now just do it immediately—right inside Mathematica. So for the first time ever, I’m actually doing parallel computation routinely, every day. And within our company I’ve seen the number of internal software systems that use parallelism skyrocket.
Another new area in Mathematica 7 is automated charting. Bar charts, pie charts, and all that.
There’ve been packages for creating these kinds of graphics in Mathematica forever. But in Mathematica 7 we’ve taken the whole idea of charting and information visualization to a new level.
It’s kind of interesting. One might not have thought that charting would be an area where the symbolic character of Mathematica would be important. But it is.
The key idea is that one can use symbolic wrappers to encode features of data—like how a particular element should be labeled, or styled, or what dynamic behavior it should have. And this lets one immediately organize charting in a new, more streamlined way. And both interactively and programmatically go much further than before.
With Mathematica 6 we launched our concept of computable data: of making real-world data immediately available in computable form directly inside Mathematica.
In the last couple of years, we’ve greatly expanded our in-house data curation effort—updating our existing data, and bringing in large amounts of additional data.
In Mathematica 7 we’ve added several new areas—like genomic data and weather data.
I’ve always had a wonderful time making abstract discoveries with Mathematica. But with our computable data it’s now possible to make discoveries directly about real-world things, right from within Mathematica.
Talking of discoveries: there are lots of people at our company who are involved with discovering new algorithms. And in Mathematica 7 there are some pretty spectacular achievements in that area.
One that particularly impressed me is transcendental roots.
There’s a whole lot of great mathematics done on roots of polynomial equations. But when it comes to transcendental equations, there’ve really only been fragmentary results, scattered over the past several centuries.
And I’d assumed that that was just the way it had to be. But a few years ago we discovered that it isn’t—and we invented a whole algorithmic theory of transcendental roots, which is now implemented and running in Mathematica 7.
Perhaps even more interesting are the new differential and difference root constructs. That symbolically represent solutions to differential and difference equations—and in effect allow us to vastly generalize the notion of special functions.
There’ve been lots of big mathematical and algorithmic projects for Mathematica 7. Another is implementing discrete calculus.
If there’s one thing everyone knows about Mathematica, it’s that it can do calculus—integrals, derivatives, and so on. Well, for hundreds of years people have also talked about discrete calculus—the discrete analog of ordinary continuous calculus, with sums and differences and so on.
And these days, with more and more things we care about being discrete and digital, discrete calculus is becoming more and more important. So for Mathematica 7 we’ve done for discrete calculus what we did for continuous calculus in Mathematica 1: we’ve systematically automated it.
There’s a long list of algorithmic achievements in Mathematica 7. And sometimes it begins to seem almost bizarre. As what seems to us like a fairly minor part of the new Mathematica ends up being as big and deep as some whole existing other software system.
But that’s what happens when we let loose the kind of R&D teams we have, and they get to do long-term development with the extremely integrated system we’ve been steadily building for the past two decades.
I’ve of course been using versions of Mathematica 7 for some time now. And great though Mathematica 6 is, it already looks horribly dated to me. I can’t imagine not being able to do image processing immediately. Or automated charting. Or parallel computation. Or taking advantage of all those little innovations in the user interface.
There’s lots in Mathematica 7 for every kind of potential user. And the compatibility with Mathematica 6 is perfect (except, of course, that there are many new functions).
So… enjoy Mathematica 7!
We’re already hard at work on Mathematica 8, Mathematica 9, and beyond. We’ve got a very impressive R&D pipeline going. With lots of exciting stuff coming. Including, I think it’s fair to say, some serious future surprises. Which I look forward to writing about…