# Computer Science and Math

I came across an interesting discussion regarding the role of 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 of 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 excel 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 after half of 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-90s and whose constant since early childhood was the computer, it is terrifying and shocking to imagine that if not for these early experience I could 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.

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. The very next semester I cruised through both economics courses for which the calculus class was a perquisite. 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 regardless.

I can understand why the economics department can justify the calculus requirement given the 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. Nevertheless, I don’t understand why our comparatively tiny computer science department has such an intimidating course as a major requirement. Calculus is not useless in computer science; rather, one does not need to excel in calculus to apply computer science knowledge.

Both Prof. Heliotis and Prof. Henderson 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.

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.

I 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…

The following quote from Prof. Schneider is similar to the idea above but the point regarding the speed of change of technology is a good one.

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.

All the professors seem to agree on the importance of math as a foundation for computer science but Prof. Frailey raises an interesting point. Is there an overemphasis on math because that is what these professors understand best?

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.)

… 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.

I agree that it would do the computer science majors some good to take classes with and associate with people whose primary interest is something other than computer science or electrical computer engineering.

To summarize the discussion between these professors 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. It does seems that the general consensus on an abstract definition includes applied computer science outside of academia.

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 must be taken to ensure that education of computer science does not lag behind the field itself as it expands.

The underlining models/theories of computer science should be the focus of undergraduate computer science education since that’s a skill that will continue to be valuable over time, unlike the hottest new language.

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 way.

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

I do feel strongly about this discussion and would like to eventually follow up with thoughts of my own.

Thanks to Emily Gall for being a reliable editor.