We are not teaching computer science in this course. We are not teaching programming per se either.
We are teaching students how to turn an idea into reality in the shortest time. What is important is to have an idea, and demonstrating that it is a great idea by bring it into reality. Mathematica is the shortest path from the idea to the reality. That’s why we chose it.
Any computer language can do what other computer languages can do. The only difference is the efficiency. (Think of shoveling snow with a tea spoon. It can be done, but not efficiently.) At the same time, there is no computer language that can solve all problems efficiently. (You can race driving a school bus, but not efficiently.) A modern day knowledge worker in science/engineering will end up learning multiple computer languages for multiple set of problems (A spoon for tea, a shovel for snow) over his/her career. No one can go through a modern career knowing only Mathematica, or any other one language alone. (You can have a sports car, but you need to drive a van when you move 12 people.)
Of many different and capable programming languages, many of them available for free, why does Sabio Research use the most expensive one, Mathematica? (Professional version is $2,495)
Here are the reasons.
Overview
We are neither choosing a final computer language, nor the only computer language the student will ever know. Here we are choosing the first computer language which will be used by pre-college students not only for science projects, but also through their college, graduate school and professional career working on many different types of work. In other words, we are choosing a computer language that can handle integral equations, differential equations, number theory problems, statistics, complex analysis, signal/image processing, optimization, graphing, visualization, 3D modeling, animation, physics simulations, genomic research, protein structure analysis, stock market prediction, environmental research, etc.
Cost is not an issue
While it is true that Mathematica is $2,495, student version (with the same capability) is $100/year. But rarely students need to spend even $100/year to use Mathematica. Many math and science competitions (ARML, ISEF, KSEA) also provide free Mathematica license to the participants or winners.
Many academically advanced high schools, and most prestigious universities, and graduate schools provide Mathematica license for their students for free.
Advantage over C++, C# or Java
Mathematica is an interpreted language. (It can also be locally compiled for a faster performance) Thus, students can see the results of their command immediately and this will allow students to tweak the code endlessly until it works just right. Such trial and error learning (which is the most common way of learning a computer language) would take 10 times longer on a compiled language.
Advantage over Matlab, Mathcad
Mathematica is superior in pure mathematics, and has the largest number of built-in mathematical functions. There are many advocates of Matlab, but they are all users of specialized applications for which Matlab is a superior tool. Those advocates do not have to solve a wide array of problems as our students do. And also, Matlab advocates usually don’t know much about the functional programming (as opposed to procedural programming) and how much faster it brings one’s idea to reality. Here is an example of Matlab’s code (the topic was chosen by and the code was written by Matlab to showcase Matlab’s capability) and Mathematica code (written by Mathematica to show how Mathematica handles it differently). The result: Matlab’s 90 lines vs Mathematica’s 13 lines of code to accomplish the same thing. You can see how much quicker Mathematica user would have finished the job.
Advantage over Python
Mathematica is an environment (almost an operating system) as well as a language. Mathematica not only solves problems, but also is an mathematical/technical word processor. Students can think, try, tinker, solve, then write report all in one environment, in one flow. Mathematica has a massive built-in library. Whatever functions students need, they are already available in Mathematica without having to link to a third party library. In Python, students have to look for a third party library of varying quality/reliability and must go through the process of linking them. Mathematica has everything students need, and it works out of the box. Here is a comparison result with an older version of Mathematica.
Incidentally, at the time of this writing (Nov 24, 2011) the readily available versions of Python (2.7 and 3.2) are not compatible with the most important scientific library (SciPy). It would take a few hours to find the obsolete version of Python so that it can work with the most current version of SciPy. Because the libraries are written by disparate group of people, this type of incompatibility is common. While patience is a virtue, waiting for the incompatibilities to resolve while science competition is drawing near is not desirable. Neither is having to spend hours to days to find the right versions to see which ones work together. For high school students pressed for time, the tool has to “just work.”
Common (and incomplete) perception of Mathematica
There are many people who think they know Mathematica. These people have used Mathematica to solve some math problems. They have entered a few lines of code at most (because usually that is all it takes to solve a math problem.) These people are not even aware of what Mathematica can do, especially in the latest version. If they have never written full fledged software using the latest version, whatever they know is too limited and obsolete.
Parallel Processing
Sooner or later, students will embark on computationally intensive projects that will require ever faster computers. One way to solve this requirement is by using multiple computers, i.e., through parallel processing. Unlike other languages, Mathematica code can readily be converted for parallel processing very quickly. Mathematica can run parallel processing across heterogeneous network. It means Mathematica can distribute the processing across Mac, Windows and Linux computers of different capacities across the network as well as the Internet to be leveraged for parallel processing task. This makes Mathematica code inherently scalable.
Conclusion
Students should master one versatile and powerful computer language early on so that they can use it for everything they work on to get answers/results in minutes, not hours or days. Mathematica is ideal for that role. By mastering Mathematica, students can turn their idea to a proof-of-concept demonstration in a record time. Here is an example.For example, if students were assigned to solve a difficult problem using a specific language (Python for example) during their summer internship, they can solve the problem quickly in Mathematica first, impress the daylight out of the supervising professor with a demonstration, then proceed to port the algorithm to the target language of supervisor’s specification.
Mathematica is the only computer language that is procedural (C, C++, Java style), functional (Scheme, Haskell style), and rule-based (Prolog style) at the same time. This versatility broadens the idea of what a “computer language” is supposed to be for the students preventing them from being pigeon-holed into the peculiarities of the first computer language they learn. This is similar to speaking with a thick accent, or unable to speak, in second and third human language they learn. Those who had Mathematica as their first computer language will understand functional or rule based programming concept later in their career.
One common complaint about Mathematica by software engineers is that Mathematica’s syntax is difficult to understand. What they really mean is that they don’t understand functional programming concept because their brain got already hardened with procedural programming in their formative years, i.e., they just could not get rid of the accent, or understand other languages.
It is important to remember that students are not yet software/electrical/mechanical engineers. In fact, they are still open to all possibilities. Students working in coursework, research, internship, science competitions never compete on scalability, security, objective-oriented-ness, execution speed of their code. They compete on ideas–the algorithm development–and they complete on the cycle time–how quickly they turned an idea into a working demonstration. Mathematica is the best tool for turning your idea to a living, moving, 3D demonstration in a record time.
Writing software to sell? Test the concept/algorithm in Mathematica then hire someone else to port the code to Java/C++/C# to commercialize their creation! Remember, in this modern economy, we don’t become a technology superstar by coding. We succeed by coming up with ideas that can be demonstrated to science competition judges, college admissions officers, professors and venture capitalists.