Wolfram Computation Meets Knowledge

Preface

I’ve been explaining what’s now the Wolfram Language to people for more than 30 years, and I finally decided it was time to take what I’d learned and write a minimal introduction that people could read on their own. This book is the result of that effort.
When we first launched Mathematicathe precursor of the Wolfram Languagein 1988, I published a book that provided both a tutorial introduction and reference guide to the system. The book was very popular and I think contributed substantially to the early success of Mathematica. Over the next decade or so, The Mathematica Book, as it came to be known, went through five editions, and steadily grew until it was nearly 1500 pages long.
My goal in The Mathematica Book was to systematically cover all aspects of the system. But when we released a huge new version in 2007, it became clear that this was simply no longer possible in a single book. Our online documentation had meanwhile steadily grown, and in 2007, with the introduction of a vast number of new examples, it reached the point where a printed version would have been well over 10,000 pages in length.
In 2009 Wolfram|Alpha arrived, with its natural language interface specifically built for use without explanation or documentation. But then, emerging from Mathematica and Wolfram|Alpha, came the Wolfram Language, and there was once again a need for both explanation and documentation.
I believe that the online documentation for the Wolfram Languagewhich in printed form would exceed 50,000 pagesdoes very well at explaining the specifics of how to use all the many capabilities of the system. But particularly for newcomers there’s also a need to understand the principles of the languagethat I’ve worked so hard over the years to keep coherent and consistent.
The Wolfram Language has the unique position of being not only a programming language but also a full-scale computational language, that incorporates vast amounts of computable knowledge and lets one broadly express things computationally. But for those already familiar with traditional programming, I wrote some time ago a Fast Introduction for Programmers (wolfr.am/fifp) that in about 30 pages gives at least a basic grounding in the principles of the Wolfram Language.
But what about those who don’t already know about computation and programming? The Wolfram Language provides a unique opportunity not only to introduce anyone to computational thinking and programming, but to take them quickly to the very frontiers of what can be done today.
So how should people learn the Wolfram Language? One approach is immersion: Be in an environment where the Wolfram Language is used. Explore programs that run, and learn from them as examples. In my observation, this can work very well so long as there is at least occasionally someone around to explain principles and help with issues when they come up.
But what about learning the Wolfram Language entirely on one’s own? Here I think what’s needed is a systematic introduction that progressively builds from one concept to another, answering every obvious question as it goes. And that’s what I’m trying to do in this book.
Learning the Wolfram Language is a bit like learning a human language. There’s a mixture of vocabulary and principles, that have to be learned hand in hand. The Wolfram Language is immensely more systematic than human languageswith nothing like irregular verbs to memorizebut still has the same kind of progression towards fluency that comes with more and more practice.
I wondered how to write this book. And eventually I decided to base it loosely on Latin textbooks, of the kind I used when I was a kid. Unlike living languages, Latin cannot be learned by immersion, and so there is no choice but to build step by step, as I do in this book.
In some ways learning to think computationally is a bit like learning to think mathematically. Both involve a certain precision, where one can get things either right or wrong. But with the Wolfram Language, computational thinking becomes much more concrete: at every step you can see what is happening, and whether what you’re doing is right. There are no hidden concepts that have to be explained abstractly from outside and cannot explicitly be seen.
Still, there’ve been two millennia of development in the teaching of mathematics, that have progressively optimized the sequence of presenting arithmetic, algebra and so on. The problem of teaching the Wolfram Language is something completely new, where everything has to be figured out from scratch. Existing programming education isn’t much help, because so much of it is about just the kinds of lower-level structure that have been automated away in the Wolfram Language.
Needless to say, the Wolfram Language has many sophisticated capabilities. Some of themlike identifying objects in imagesare sophisticated on the inside, but easy to explain. But otherslike computing Gröbner basesare also sophisticated to explain, and may require significant outside knowledge of mathematics or computer science.
My goal is to make this book completely self-contained, and to assume nothing beyond everyday common knowledge. I have avoided any explicit use of mathematics beyond basic arithmetic, though those who know advanced mathematics may notice many connections between concepts of mathematics and concepts in the book.
This is certainly not the only elementary introduction to the Wolfram Language that could be written, and I hope there will be many more. It follows a specificand in many ways arbitrarypath through the vast capabilities of the language, highlighting certain features but not even mentioning many other equally deserving ones.
Still, I hope that the power and beauty of the language that I have nurtured for more than half my life will shine through, and that many students and other people, with many diverse backgrounds, can use this book to get started with the Wolfram Language and get involved with the kind of computational thinking that is quickly becoming a defining feature of our times.
Next Section