CS Profs Debate Role of Math In CS Education
theodp writes "Worried that his love-hate relationship with math might force him to give up the pursuit of computer science, CS student Dean Chen finds comfort from an unlikely source — the postings of CS professors on the SIGSE mailing list. 'I understand that discussing the role of math in CS is one of those religious war type issues,' writes Brad Vander Zanden. '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.' Dennis Frailey makes a distinction between CS research and applied CS: '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.' Frailey adds that part of the problem may be that some CS Profs — math gods that they may be — are ill-equipped to teach CS in a non-mathematical manner: '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?' So, how does this jibe with Slashdotters' experience?"
And, for that matter, do you want to learn in the classroom, or in industry?
The World Wide Web is dying. Soon, we shall have only the Internet.
If you don't want math with your computer science, learn computers / networks / shiny jargon at a trade school
We need some grammar nazis in the admissions offices.
I could understand CS majors being required to take linear algebra, but Calculus and Calculus 2? It's a waste of credits for the most part.
I don't know about calculus but doing formal proofs help me in learning programming because they are, in essence, the same thing. In a formal proof, you break down a problem into simple steps and state the authority for each. It is similar to programming. So some math is good.
Don't stop where the ink does.
There is nothing distinguishing about any of the examples noted; nor worth any study. I don't deny that the mathematics::programming link of overstressed.
Seems the problems are more rooted in basic experience. Many arts understand that imitate comes before create; despite the whining of the student/apprentices. While programming isn't quite an Art, its practice is close enough to deserve a different approach from the basic sciences.
Certainly the root of all evil is falling into the buzz-trap where studying and instance of a technology (java, cloud computing, multi-core(wtf?)) takes the place of learning something worthwhile, like planning, design, debugging.
bah, get off my lawn.
Once upon a time, CS was a field within applied mathematics. In my opinion, CS still is. The problem is most people who major in CS, especially at the Bachelor level, will likely end up become programmers once they graduate and won't be actual "computer scientists" per se. In most other engineering fields, there is a differentiation between mechanics, machinists, technicians, engineers etc. Most people wouldn't hire a mechanical engineer to do machine and tool making, or a civil engineer to dig holes, unless he was also so qualified. One alternative is for universities to have separate tracts for applied programmers and students who are more interested in the theoretical end of CS. I don't think you need to be a mathematician to implement most programming ideas, but you do need to be very well versed in mathematics to know how to find optimal solutions or design software to solve unique problems for which there is no simple recipe. Disclaimer, I am not a CS major. It is only my opinion from the outside.
So, the professor, Brad Vander Zanden, appears to be a professor at the University of Tennessee. Great, it seems to be an ok school; it's a top 50 public school, and a top 100 overall US school. That's a respectable ranking. He even has something of a research page. However (and I don't live anywhere near there so I don't have personal experience, and things could have changed since this list was compiled), their computer science program is ranked rather low, so I don't know if he's all that great an authority.
Here's my opinion (disclaimer: please don't trust my opinion, a random guy on slashdot, either): basically, if you know math, you will use it. You don't need it; you will still find a way to survive in the software world without knowing math, but math will open many doors for you. Would you really want to be shut out from understanding computer graphics, understanding artificial intelligence, and algorithmic complexity? That's just in computers, if you close your mind to math you'll be closing your mind to understanding the way the physical world works, too. You'll be losing the logical/mental discipline that comes from understanding math. Why would you want to give up all that, and try to live as a code monkey?
"First they came for the slanderers and i said nothing."
I have seen many outstanding programmers who struggled with calculus and never really got it.
That's because computer science is not programming. You won't find an outstanding computer scientist who doesn't have a solid mathematical background. The theory of computation and the basis for all we do is entirely based in math, and therefore understanding math is essential and inseparable to understanding computer science.
our students are overwhelmingly seeking careers in which they apply computer science.'
If you're looking to be a vocational institution, by all means, drop the math and train your students to be code monkeys. Yes, train, not teach, because teaching them would consist of providing them with a solid mathematical foundation on which to base their careers.
And it's patently false that applications of computer science do not require math. In my field, robotics, I do a lot of programming, but I do just as much theoretical work to understand the algorithms I'm using, and to develop new ones. Linear algebra, statistics, convex optimization.... these are all mathematical topics I use regularly, and I couldn't function without. Cutting topics like these not only take the Science out of CS, but the true value from the education itself.
I have seen many outstanding programmers who struggled with calculus and never really got it.
The summary is not absolutely clear on who makes this statement, but the article attributes it to "a professor". I don't know where this professor works, but the outstanding programmers I know can all do calculus in their sleep. Not all programmers, or even all good programmers, but the outstanding ones. It isn't about continuous versus discrete, which is a complete and utter red herring, but the ability to think abstractly. Hell the best programmer I know is a pure theoretical mathematician: his code is always beautiful, clear, easy to maintain, and, imporantantly, correct; he's prolific to boot. But he's an outstanding programmer. I know plenty of work-a-day programmers who are not outstanding, and whom I would suspect would have problems with integration by parts.
Based in part on my differing experience, I posit that the quoted professor does not work at a high-end institution where really outstanding programmers are likely to be found. This opinion is bolstered by the observation that discrete mathematics (the Z transform, difference equations, discrete Fourier transforms, and the like) and continuous mathematics really are not that different if taught properly. If an individual can't master continuous and discrete mathematics, then they are not going to be an outstanding programmer, because they can't think sufficiently abstractly.
Outstanding programmers can do system architecture, data structure design, algorithmic development. No one who can design and understand a Fibonacci heap is going to have problems with dx/dt.
Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
I would submit the math requirements are common in the core requirements of any Bachelor of Sciences degree, rather than specific to a Computer Science major.
If you don't want to master basic college-level math to earn a sciences degree, then perhaps you should be lobbying academics to offer a Bachelor of Arts with a Applications Development major instead.
Anyone seen my low uid? last seen 10 years ago while panning the #@$# out of Taco's 'web based discussion system'
University through AI had me taking computer courses -- which sounded like fun, since I was a computer guy all my life. It would have taken four years before even getting to an AI course, because of all the math courses along the way. I don't care what you say, when I walk through a room, my brain doesn't do any calculus to avoid walking into the desk. It just doesn't. But AI in CS said "calculus is the fastest way to approximate natural path finding".
So I left, and switched to psychology, where AI is called cognitive modelling.
The first day said "the goal is to model things after natural processes, if it takes ten days for the computer program to walk through the room, but it does so naturally, computers will be faster next year."
The third day of the course was to write a neural network in LISP -- oh, and to also learn LISP from scratch -- to solve a real-world decision-making problem. We had two weeks to complete the assignment.
Neural networks are fun, by the way. And ten years later, when I wrote an on-line ticketing program that needed to choose the best way to apply multiple coupons to multiple purchases (in a self-serve kiosk application), brute-force computation did it in 60 seconds, competent programming did it in 10 seconds, pre-computing did it in too much memory for the device, a neural network did it in 50 milliseconds. My client was very happy -- and never knew.
I used to think that too, until week before last. I'm a literature major who couldn't make it past second semester calculus. Until week before last I never needed to do any math in programming beyond arithmetic.
Then I landed on a project involving OpenGL. There's a heck of a lot of math there, and a lot of math/graphics jargon. What makes it even more frustrating are all the tutorials for beginners that assume you've majored in math and never bother explaining homogeneous coordinates, frustrums, etc. Almost as annoying as they're assuming you already know the syntax to glsl. I am good at geometry, and could write very complicated POVray models, but OpenGL has been kicking my butt due to my lack of linear maths.
Don't blame me, I didn't vote for either of them!
I started a Bachelor's in computer science and switched to an applied software engineering program. It's much less math, and the average course is far more useful in the real world. All the employers I've talked to so far have said that they prefer hiring out of the applied program because the students are ready to start working and have a broader range of skills.
As many have already pointed out, computer science != programming.
What we need is more schools that offer applied programming programs for those who want to become programmers and not computer scientists. And more students need to learn the differences between them and which one they want.
I think a better question is: Do these professors think their college should be an institution of higher learning or a trade school? (Disclaimer: I got a PhD from a top-20 university.)
Let me make a few points:
First, while it's true that numerical math is not used in many CS areas, discrete math is. Logic, set operations, and the like are used pervasively in CS. And learning numerical math is a core breadth area that instills mental discipline. Quite frankly, if math is not your strong point, then you should consider moving out of CS.
Second, the role of a university CS undergraduate curriculum is not to teach "cloud computing or multi-core systems or software engineering". It's to teach core CS topics. It's like like suggesting that a mechanical engineering student should be taught how to fix the engine of a Ford Mustang or that an electrical engineering student should be taught how to install video cards into a PC.
Let me make this clear: Any "hot topic" CS subject you teach in a university will be outdated in a few years, quite possibly between the student's freshman and senior year. This includes "cloud computing" and "multi-core systems". Back in my day, the hot topics du jour were ATM networking and grid computing, but fortunately I went to a good university that focused on core topics.
What's the difference, you ask? Here are you go:
Hot topic: cloud computing
Core CS topics: distributed systems, distributed algorithms, operating systems
Hot topic: programming in C#
Core CS topic: programming language structure, compilers, automata theory
Hot topic: multi-core systems
Core CS topic: computer architecture (x86, for example), instruction sets, digital systems
Hot topic: writing video games
Core CS topics: graphics, linear algebra, digital image processing
Learning math and these CS core topics allows students to learn new skills in the future. Case-in-point: Recently I have been working in a new area: machine learning algorithms (SVMs, bayesian inferencing, etc.). The importance of this area has grown in the Google-era and was not widely regarded when I was an undergraduate. My fundamental knowledge in mathematics is serving me well right now.
Finally, the professors quoted in the article are from U. of Tennessee and SMU, which are like 4th-tier universities. So don't take their word too seriously.
Dennis Frailey makes a distinction between CS research and applied CS: '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 get that the extent of math necessary in computer science is an open question and I won't pretend to have an answer to it, but challenging the presence of math, and the academic approach in general, in a university setting bothers me. Of course computer science ought to be taught as an academic discipline in an academic setting. Who cares if students will use it in their careers? The whole point of a university is to study academic disciplines—maybe you intend to apply them and maybe you don't, but either way they are considered worthy of pursuit for their own sake. And that goes not just for computer science (assuming that's your major) but for math, science, and humanities as well.
If you just want to get a job as a programmer without learning all that theoretical stuff, skip the university altogether and just buy a book, or go study at a technical college. Now, you might have a really hard time getting hired without that bachelor's degree, and that does indeed suck, but that's the fault of the labor economy—it's not fair to ask universities to change their philosophy to accommodate corporate culture.
"This algorithm runs in constant time. Come on, 2,147,483,648 is a constant..."
Sigh. My previous comment was horribly garbled. What I meant to say is - did you test a dynamic programming solution too? It sounds like the sort of problem that such a technique would do well at (but perhaps it would run into the same problems as pre-computation).
I don't get why I had to learn all the math in university. I agree some math is useful, but I have never in my 10 years working applied any of the advanced stuff, nor found learning it helpful.
And some other grad from your class will tell a completely different story. My first job was pure tech, embedded kernel software. My second job was molecular modeling. If I did not have the math (which I too never expected to use) I would not have been qualified for that job. Also, later when I went to business school I used more advanced math in marketing classes than I ever did in computer science (again, I never expected this).
So basically the CS program is preparing your for more advanced jobs, a wider range of opportunities. The fact that some members of your class never go for such jobs (and you may not be one of those, perhaps your next job will use the math) is no reason to drop math from the CS program.
Software engineering and computer science are two entirely different fields. I don't know why they're combined so often.
I'm not one to nitpick, but increasingly I find that nearly every single post on a story is off topic. There are hardly any posts about the topic itself. Joking is great, humor is great, side notes are great, but when on-topic stuff becomes under 10% of the comments, well... many repetitive comments about spelling, duplicates, personal attacks...
Build your own energy sources from scratch. http://otherpower.com/
CS is more about continuous math than ever.
Until the mid-1980s, computer science was mostly about discrete mathematics. Knuth is heavy on combinatorial and clever integer math. Mathematical logic and proof of correctness were big. I went through Stanford CS for a Masters in the mid-1980s, and and never had any class that required serious number-crunching.
But now it's completely different. Graphics, game programming, machine learning, robotics, control, audio and video processing, and even finance all involve heavy number-crunching. Differential equations come up everywhere. Statistics is far more important, and there have been major developments in the theory of statistics. (Much classic statistics assumes you're limited on compute power; that's why "least squares" methods were so popular once. Now there are better techniques, ones much better at handling outliers.) As a result, AI is working much better than it did during the "expert system" and "AI Winter" eras.
Basic calculus is not advanced math. Calculus is just what gets you to entry level so you can learn real math. Real people use this stuff. Last year I took a course at Hacker Dojo on machine learning, taught by a quant from Blackstone Capital using the Stanford course materials. They assumed everyone had a thorough knowledge of calculus. I'm not a "math person", nor an academic, but that's the price of staying active in this industry.
If you just want an "IT" degree, you may not need much math. The math parts will be bought with the package you install and administer. But in that case, you're probably better off getting a degree in business administration with some extra IT courses.
Most people are job seekers and college is just a hoop to jump through in that pursuit - I've run into plenty of people without passion for their subject of study; they are there for the job they want (influenced by the pay, stability, and misconceptions of what that job will be to them.)
Industry only ever cares about the bottom line; human resources are just another form of resource with some PR risks attached to it-- but otherwise quite removed from humanity. They pressure universities along with their drones to train workers... even complaining about graduates as not knowing enough of the buzzwords they are looking for (which is not the purpose of universities.)
3 Aspects are going on from what I see:
1) Trade school lacks prestige (pay) over college so the 'market' demand is for a university level prestige in a trade school.
2) Business philosophy(religion?) permeating all aspects of the culture. If you run a school with a business mindset you are going to rip it from its foundation. My university is in a culture war not inside the institution but inside the minds of its staff. Words like I.P. gain acceptance and warp perspectives. "Producing students", employers as the "indirect customer", and students as a "customer" are changing perspective as well as shunning those who stick to the traditional perspective that brought the world forward up to now.
3) Society bias for college. not having a degree is becoming as bad as being functionally illiterate. My former employer had no degrees in the building except mine yet even hiring a RECEPTIONIST they'd chuck out the applicants without a degree (in this economy they get a lot of applicants.) Nobody working there could be hired for their own position these days.
I create waves with staff when I argue the college model is not even good for programmers or even software engineering. IT as well. Those jobs are more like carpentry or plumbing and should have a better suited model. This is largely misunderstood and hopeless but i keep making the point hoping they at least get what i'm saying. I have a carpenter and a plumber uncle- there is a ton of experience involved but no PhD program for them-- they are masters of their field which is every bit as much (in some cases more so) as most PhD degrees. In their career, a degree wouldn't mean much because you can't book learn it all classrooms over a few years. It uses other kinds of learning and thinking. Our schools too often focus on 1 approach as if there is only 1 way to think about EVERYTHING; research shows there are different ways of thinking, different kinds of intelligence, and different learning styles. I've seen plenty of good students who are "smart" because they can navigate a system that happens to be suited to them but who can not function outside; they often go into academia -- not because they suck, they are great - but because it best suits their talents... this however results in a cycle of like minded people concentrated in an institution which is part of their own identity and therefore must retain the characteristics which were so beneficial to themselves (for the self-centered ones; not all are like this - others merely fail to see...sheltered and have a culture-shock reaction to alternatives.)
Democracy Now! - uncensored, anti-establishment news
Hot topic: writing video games
Core CS topics: graphics, linear algebra, digital image processing
FWIW. Graphics is only part of video game development. Most of the time the graphics is largely "outsourced" by licensing a graphics engine. Other parts of game development are in the areas of artificial intelligence, networking, databases, human/computer interaction, etc. Hovering over everything is data structures and design/analysis of algorithms, this is where so many things go wrong. Toss in a good understanding of architecture and compilers. The core CS topics necessary for developing a modern AAA game is pretty comprehensive.
Many aspiring to work in game development limit their chances to do so by focusing only on the graphics. Just as many interested in computer programming limit their opportunities by avoiding the advanced math. I will admit that in many of my jobs I did not need the math, however to my surprise I've had job opportunities that did require having had the advanced math classes. Not that I was doing much of the math myself but I needed to understand and communicate with the actual mathematicians. I've had to dig out those textbooks from that "extra" second year of math to implement some algorithms.
I think the distinction between pure "research grade" CS and applied "I want to get a job in the real world" CS is the important thing.
For too long it has seemed as though if you like computers then you should aspire to a CS degree. But as everyone finds out, the stuff you learn in a real in-depth CS program is often not applicable to much in the world of interesting application development. The stuff that IS could just as easily be taught in a more applied way without all the math.
We're supposed to be leveraging "re-use" and not re-inventing algorithms every time, so people should be able to use a library of algorithm objects (or whatever) for pretty much ALL applied programming, at which point all you have to understand is the trade-offs between different available choices and what they do but not necessarily how they do it or especially how to invent a better one.
I think of "real" CS as what you find in Knuth. If you want to publish papers on combinatorial algorithms then you probably want at least a master's in math before you even get started with the computer stuff. You will then aspire to getting a job as a CS professor, or possibly working in a corporate sponsored lab for IBM or maybe Google. But the things this type of scientist does may not be the kinds of things that actually got people excited about computing to begin with.
If what you really want to do is to build cool applications and Change The World(tm) then honestly hardly ANY math is needed, and while more knowledge and a better understanding of the fundamentals of what's going on will always make you better, there might be more effective and efficient things to expend your effort on, especially in cross-discipline areas that interest you and which you would like to work in.
Pure CS is really just pure math, and there are a limited number of applications (and jobs) in such a thing. What really makes computers interesting is their applications, so instead of CS, why not learn applied programming plus an application domain like Biology, Finance, etc. Ask yourself "what problems do I want to solve?" and if computing is going to be a tool to that end and not just an end unto itself, then a pure CS degree is probably a waste of effort.
G.
First, while it's true that numerical math is not used in many CS areas, discrete math is. Logic, set operations, and the like are used pervasively in CS. And learning numerical math is a core breadth area that instills mental discipline. Quite frankly, if math is not your strong point, then you should consider moving out of CS.
Are you kidding?
I was in a PhD program in Electrical Engineering at a top-10 university [not trying to start a pissing contest here]. Quite frankly, I had a much better opinion of CS until I started taking a lot of graduate-level CS courses there.
Saying CS people do a lot of math is like saying a bank teller or cashier does math all day.
I found undergrad and graduate CS students alike would go running for the hills as soon as someone said the words 'integral' or 'derivative' . Random processes and statistics were avoided.
Most 'numerically' focused papers/research was focused about speeding up raw calculations (such as matrix multiplication) without any understanding of the application and without any critical examination of the possibility for lowering complexity through close approximation, transforms, etc...
Many papers (especially related to CPU/compiler performance don't even average measurements properly). Even the industry-standard 'SPEC' CPU benchmarks use the wrong type of averaging which leads to incorrect results -- in some cases a faster computer (which completes all benchmarks faster than a slower computer) can have a *worse* score than the slower computer].
Computer architecture and programming are fine things to learn, but they are not enough in themselves. If a person wants to be an architect, they have to know not only about construction but also about design -- art, etc... Likewise, I think too much of CS is focused on either way-to-abstract stuff and/or trade skills without giving students a chance at actually learning something more domain-specific.
Programmers are a dime a dozen. Decent programmers that truly understand what they are implementing (in a specialized field - engineering, sciences, etc) are very rare.
I dislike this kind of dissing of math in favor of praising a "hands-on" approach to programming.
I don't know if developing math skills helps with what is mostly a craft such as programming, but I think that encouraging an anti-intellectual atmosphere in the programming community will only lead to an even greater abundance of insultingly crappy code that consumes more effort and causes more frustration than any other factor in the industry.