I'll start by addressing relevant points in his argument and try to clear up perceived misconceptions.
- The skills that make a good mathematician are not the same as the skills that make for a good software developer.
- Math is the process of breaking down complex problems into simpler problems, recognizing patterns, and applying known formulae.
Math is often taught in a way where students learn how to solve problems by identifying patterns. Once the student identifies the pattern, they can solve the problem using the approach they memorized. It's unfortunate that math is taught this way because people like Ross come away with a very incomplete and distorted picture of math. I would call this "computation" rather than math.
The reason we have "known formulae" is precisely because of the practice of actual mathematics. In my mind, mathematics is the process of analyzing a formal system with logic. A mathematician starts by defining the basis of a formal system by specifying an initial set of rules by way of axioms, or statements which are held to be true without proof. Next, the mathematician recursively applies logic to determine what the implications of the axioms are and if any additional rules can be then be defined. As more and more rules are proven, the system becomes more powerful.
Often times, mathematicians will be looking to see if a specific rule can be implied from the initial set of axioms. If they find that this is not the case, the mathematicians may apply creative thinking to look for more specific cases where the rule does hold true or may change the axioms. A good example is the complex number system. When faced with the square roots of negative values, mathematicians had to define a new mathematical object (the imaginary number) to be able to reason about such results. This process can actually be quite creative.
Speaking from personal experience and comments made by others, a good math education can be a significant advantage. Reasoning through complex arguments and formal systems has made me much more detail oriented than I was before. Math has improved my problem solving skills. It's also enabled me to reason formally about software, which can be very important when developing distributed systems, for example.
It's unfortunate that the way math is often taught fails our students. Students are often taught the results found over thousands of years, but not the methodology for discovering the results. Classes like algebra, calculus, and introductory statistics are examples which focus on results rather than methodology. Unfortunately, these are also the most popular math classes since they are required in most high schools and college science majors!
Ross points out that he loved his discrete math class. Discrete math, along with others such as geometry, graph theory, and combinatorics, are much better courses for teaching students the methods rather than results. All of the subject material can be derived from a few simple definitions and axioms, giving students the opportunity to learn the mathematical process. Imagine the benefit for students if they were taught Real Analysis or Modern Algebra instead of calculus? As Ross rightly argues, in many cases, a solid foundation in logical thinking can more broadly applicable than calculus.
(I would also like to correct Ross's description of discrete math. Ross implies that discrete math only consists of logic and boolean algebra. This is, of course, wrong -- discrete math covers a range of topics such as set theory, combinatorics, and graph theory as well.)
- In Math, there is only one right answer, but in software development, there is rarely a singular right answer.
Ross assumes that if a student is trained in mathematics, they will not be able to deal with grey situations. Maybe Ross assumes that people are only studying math? Or maybe he assumes that people are not capable of learning new ways of thinking or analyzing situations critically? Either way, this argument doesn't hold water.
Like any skill or way of thinking we have developed, learning where and when to apply it is an important part of gaining experience. Ideally, a student would also be exposed to the humanities or cutting edge problems in the sciences where there are not clear answers. (Science education faces a similar problem -- a focus on results, not methods.) Even if the student only studies math, it would be safe to assume that people can learn and adapt as they gain experience. That is fundamentally part of being human.
There are also cases where math rarely involves a single correct answer. A mathematician may have multiple ways of defining the initial axioms, each with their own trade offs. For example, there are variations on Euclidean geometry that change the initial axioms and end up with very different properties.
Math IS Useful:
Although math education is not necessary for software development, it is useful. I've already described how math teaches good problem solving skills and critical thinking. With the shift towards "internet scale" systems and big data, math is even more important than before.
Consider the case of evaluating and tuning a complex software system to squeeze out every last bit of performance. A well-controlled experiment and appropriate use of statistics is necessary to accurately access the response of the system under various conditions. A software developer doesn't want to waste time performance tuning the areas of the system contributing least to the run-time -- they want to know what's eating up all the time so they can use their time efficiently.
A better example would be the rise of machine learning and data mining. Users leak data left and right, which is collected by nearly every internet company. The data is then processed to predict what the user might like to target ads or improve the user experience. Machine learning is also used in the banking apps on our cell phones to read hand-written checks. The popularity of machine learning is exploding as more and more uses are found. I predict that many software developers will need to be proficient in machine learning techniques in the future. Since machine learning is based on math and statistics, there may be a time when most software developers will need to know some linear algebra, statistics, and calculus.
All Knowledge is Useful:
Every subject offers an opportunity to apply our skills in a new way and train our brains to be even better. One of the benefits of a liberal arts education is that students are expected to take a number of courses outside their major. A programmer who decides to study math, literature, history, or art may find that they have developed a number of skills and tools that traditional Computer Scientists lack.
So is Experience:
Experience is a great teacher, especially in software development. Spending hours debugging code is a great way to learn how a project works and to remember what caused the bug in the first case. The next time you see a similar bug, you won't have to spend nearly as much time hunting its source down.
Experience also offers the benefit of knowing what works best in practice. Ross points out that sometimes clever people will write code that is TOO clever. They have sacrificed readability and effort for laziness or intellectual satisfaction. This is not a problem of mathematicians, though. This is a problem that comes from a lack of experience.
In the end, I agree that math is not necessary for software development (yet) . I also think that we could and should change the required math courses for computer science majors to reflect courses that will focus on logic and reasoning. But, we shouldn't be attacking math or implying that it has no value. For some of us, math education has been a valuable part of our training.