I came across an interesting discussion regarding the role math should in computer science on SIGCSE’s(ACM Special Interest Group on Computer Science Education consisting of CS professors) mailing list. A professor starts the conversation with (I personally bolded the important bits):
“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 (I know that sounds really cheesy but it’s the only discipline I can make this statement about) but hate it because I’m terrible at it (it’s really interesting how shocked people are when I tell them that, I’ve really come to enjoy breaking that stereotype).
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 (Unintentionally broke that promise when I took what I thought was a statistics class but was cross listed as a math class). 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 (I paid for that stubbornness with a couple hundred basis points off my GPA). 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 (before and after he had friends) 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 (although to a much lesser degree than computer science), 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 been exposed to the actual subject yet, and I realized that and gave it another shot, the very next semester I cruised through both economics courses for which the calculus class was a perquisite for (thought I’d add I’m doing quite well with my computer science major despite my lack of talent or interest in calculus). And that’s what really bothered me, 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 (still have yet to figure out why calculus is a requirement in computer science and hoping it will stay that way).
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(there’s no finance major so it’s the closest there is to studying a subject that’ll get you on Wall Street) and it helps weed out the students who don’t care much for the actual study of economics (which does require a firm understanding of specific subsets of calculus) but I don’t understand why our comparatively tiny computer science department (which can definitely use more enthusiastic computer science undergrads) setting such a useless and intimidating course for many as a major requirement. I am by no means stating that either math or calculus are useless in computer science, just that there is much more computer science than math and that one does not need to be good at math to become a successful or great computer science graduate. Before attempting to support my previous statement I will to present a few excepts from the discussion regarding the relevance of math in the study of computer science to establish some context for me to build off of.
In my opinion, there was only compromising supporter for retaining the emphasis on math in the computer science curriculum and it was in response to another professor’s comment, which I believe was taken out of context:
> 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. – source message
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.
I’m trying really hard to refrain myself from jumping in now and tearing this statement apart, but I think it’ll be very helpful to present some more balanced/nuanced views first.There were some very insightful assessments on the relationship between computer science and math, most of which I wholeheartedly agree with. However, I believe there is a much more significant overarching conclusion that can be drawn from the aggregate of these statements, but I’ll present their assessments unmolested first, highlighting (doesn’t count as molesting in my book) the portions that epitomizes the major points the entire thread (definitely worthwhile to glance through on your own):
Note how the this professor was hesitant to outright state the trend of academic to applied computer science (by prefixing his statement with “As I see it”):
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 willgo 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 mathematicalbackgrounds. 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 the entire thread (I took great care (ok maybe not great but some) to avoid injecting my own opinion, hopefully the list below will be a faithful restatement the fundamental points of the discussion):
- 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…
P.S. FYI, this is the first post on my blog in more than a year, hopefully the sheer length of this post makes up for my absence (it’s like a lump sum of 100-200 word blog posts every month for a year)
UPDATE : Received some interesting comments on hackernews that I took some time to respond to in order to better explain what the purpose of this post was.
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 (also assuming that most Slashdotters didn’t get far enough where I actually implied it considering that the average time spent on this page is 41 seconds and I can speak from experience being a Slashdot addict myself). 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.