I came across an interesting discussion regarding the role math in computer science education on SIGCSE’s (ACM Special Interest Group on Computer Science Education consisting of CS professors) mailing list. Brad Zanden, a professor in the department of electrical engineering and computer science at the University of Tennessee, started the conversation with:

I understand that discussing the role of math in CS is one of those religious war type issues… After 30 years in the field, I still fail to see how calculus and continuous math correlate with one’s ability to succeed in many areas of computer science… I have seen many outstanding programmers who struggled with calculus and never really got it. I also constantly see how what I consider to be excessive continuous math requirements in our program (calculus 1, 2, and 3, plus linear algebra) stops students from entering computer science…

and goes on to say:

If one never goes any further into the field, one can make a huge societal difference in areas that require basic programming skills but nothing more, such as computer-human interaction, social networking, web programming, IT, and many business applications. If one later gets interested in computer graphics, scientific computing, certain aspects of gaming, image processing or many of the other areas of computer science, then by all means one needs to obtain a deeper understanding of math. But I think we kill much of the joy of programming by trying to conflate programming with math. I think we also scare off many students who could make valuable contributions to computer-related areas.

This debate really hits close to home for me and should for any other computer science undergrad who dislikes or has a hard time with math, but should also be of great interest to anyone thinking about majoring in computer science. I have a love-hate relationship with math, I love math for its uncompromising truthfulness and the beautiful way it unravels seemingly impossible problems but hate it because I’m terrible at it .

It’s interesting how the debate centers around the importance calculus, since that’s the class I took the first semester of my freshman year that caused me to promise myself to never take a math class again I can’t explain what happened and it still bothers me to this day, it was the first time that I wanted to be really good at something and failed. Nothing was intuitive or came easily, frustrated and irritated, I didn’t end up understanding much nor did I want to understand about half way through the semester. As someone whose first subject of curiosity was the computer and the world wide web when it was introduced to it by his father back in the mid 90′s, whose constant since early childhood was the computer, it is terrifying and shocking to imagine that if it wasn’t for my father I would have easily been the archetypal “programmer who struggled with calculus and never really got it”, someone who may have given up the pursuit of computer science due to fear of math.

Although I was determined to study computer science and pursue it as a career well before college, as a first semester freshman who was also captivated by economics, that calculus class made me seriously consider dropping the economics major. My first encounter with economics as a freshman in college left a bad taste in my mouth even though I haven’t even started to study economics yet. The very next semester I cruised through both economics courses for which the calculus class was a perquisite for. I felt cheated and bitter because I didn’t end up needing 95% of the content in the calculus prerequisite to excel at either major. Furthermore, the 5% of the course that was relevant to my economics major was not taught using the method that is used in the practice of economics, so I ended up learning the new way anyways.

I can understand why the economics department can justify the calculus requirement since there’s an overabundance of students at at my university studying economics and it helps weed out the students who don’t care much for the study of economics but I don’t understand why our comparatively tiny computer science department has such an intimidating course as a major requirement. I don’t think math or calculus are useless in computer science, rather one does not need to be good at math to apply computer science knowledge.

Both James and Peter agree that math is critical for “competent software professionals”.

Without a mathematical perspective, software development is just throwing code at a problem because it “feels right” and then hoping that eventually the thing works.

Well said Jim, succinct and clear. If we are simply training web developers, then the math is not needed. But if we are preparing well rounded, complete, and competent software professionals, or potential grad students, then math is required – both some calc and especially discrete.

There were some very insightful assessments on the relationship between computer science and math, most of which I wholeheartedly agree with.

Note how the this professor was hesitant to state the trend of academic to applied computer science:

I think a fundamental issue here is the difference between computer science as an academic discipline and applied computer science (at least a part of which is sometimes called software engineering) as a profession. As I see it, few applications of computer science and even fewer jobs associated with applying computer science (and thus few software engineers) require much knowledge of continuous math. However, when considered as an academic discipline, many aspects of computer science invoke continuous math. If you are going to be a CS researcher, you need continuous math. If you are going to apply CS, perhaps not.

For too long, we have taught computer science as an academic discipline (as though all of our students will go on to get PhDs and then become CS faculty members) even though for most of us, our students are overwhelmingly seeking careers in which they apply computer science.

Definitely agree with the importance of knowing how to think mathematically:

The aspect of math that I think is important for all computing professionals is “mathematical thinking”–willingness to see the world and pose questions about it in mathematical terms, willingness and ability to use mathematical models or methods to answer those questions, ability to use logic even if semi-rigorously and only in one’s own mind to convince oneself that an answer is correct (oops, that’s getting awfully close to the “P” word :-) , etc. These aren’t unique to any subfield of computing, they are elements of rigorous thinking that are tremendously helpful when dealing with any sort of complexity or abstraction (both of which are rife in computing, of course).

There’s nothing inherent in continuous math that makes it the right place to develop these skills; there’s no reason continuous math couldn’t develop them either

Similar idea as above but the point regarding the speed of change of technology is definitely valuable and also really like the seed analogy

We can’t anticipate the domains the students will work in. The world changes too fast for that. None of the technology I see all around me all the time was here for the most part twenty years ago. What was here was much more limited in its abilities. What students gain from both discrete and continuous math from finite state machine theory, etc. is conceptual models of relatively great power which can form a nucleus of tinker-toys to inform their imaginations. Often, the well prepared student can use these as a foundation for his own innovations. Lacking that foundation of mental building blocks he’s at a substantial disadvantage.

The biggest problem is that we don’t do nearly enough to model the usefulness of underlying mental models. A larger emphasis on numerical methods, finite element models, illustrative examples that build on underlying kernels … I suppose I ought not to criticize since I’m as guilty as anyone else of letting someone else do it. But I do think that the functions of many of these topics is to populate the mind with fertile seeds that can grow and for that to work they must be fecund and rich to begin with and the supply of those is rather limited.

Interesting point regarding the ability for the faculty to teach in a non-mathematical manner:

And let’s be honest about another aspect of the problem -what can the faculty teach? For a variety of reasons, a typical CS faculty consists mainly of individuals who specialize in CS as a discipline, often with strong mathematical backgrounds. How many of them could teach a good course in cloud computing or multi-core systems or software engineering or any of the many other topics that the graduates will find useful when they graduate? Are such courses always relegated to instructors or adjuncts or other non-tenure-track faculty? (This is what I’ve seen frequently while doing accreditation visits.)

Think it would do the computer science majors to take classes with and associate people whose primary interest is something other than computer science or electrical computer engineering and statement regarding higher level tools is definitely something I want to touch on later:

… not everyone is interested in studying theory, and maybe we should be happy with a smaller group of majors that want to learn/develop the best ways, rather than trying to get more and more not-so-sure students to become CS majors.

In some ways, the success of CS has made computing more available to non-programmers. e.g. Solving problems using spreadsheets and Matlab and other tools that are designed to not require detailed CS knowledge (of say, hash tables, etc.) to use. Students that used to be CS majors because that was needed to compute, can go to other majors, such as Biology, etc. and compute using those higher-level tools.

To summarize in my own words:

There are ambiguities regarding the definition of computer science. It is no longer clear what it is or what it should be but it does seems that the general consensus on an abstract definition includes applied computer science outside of academia.

Even though computer science is not just an academic discipline anymore but continues to be taught as one.

There is a significant difference between applied and academic computer science, there are many applications of computer science that do not require extended mathematical abilities.

Computer science is a rapidly evolving discipline, much more so than most other disciplines, and special care has to be taken to ensure that education of computer science does not lag behind the field itself as it expands.

The underlining models of computer science should be the focus of undergrad computer science education since that’s a skill that will continue to be valuable over time.

Mathematical knowledge or concepts are important for computer scientists not only because of the direct application of math in practicing computer science but more importantly because of the fundamental abstract and analytic thinking skills math provides.

Although math encompasses many attractive qualities to develop the thought process of a computer scientist, it is by no means the only (or best?) way.

The well established link between the math and computer science curriculum are intimidating potentially valuable and capableÂ students from entering the field.

Unfortunately I have to end on this note since I really need get back to trying to start on my philosophy paper, it turns out that the introduction to the rant I wanted to write contains quite a few interesting points that deserves some attention before I pollute this clean, orderly discussion with my own opinions. To be continued…

UPDATE: Discussion on Hacker News

UPDATE 2: Slashdotted also… after glancing through the comments it seems that I wasn’t forceful enough in stating the fact that I don’t think math is useless in CS but rather that the way it is being integrated in to the curriculum at most U.S. universities is very flawed. Didn’t really present an argument myself here just some personal anecdotes and my impression on how it is viewed within the C.S. education community. Fully intending on following this up with improvements to the C.S. curriculum I think would make the subject more interesting to a wider range of students while also not abridging the development of analytical skills that are fundamental to the development of a computer scientist.