I think that most of Calculus is useless for computer programming. Furthermore any subject which is taught because it teaches "analytical thinking" deserves to suffer the fate of Latin and Euclidean geometry. (If you have to think about what Proposition 1.47 is, then you didn't learn classical Euclidean geometry, no matter what delusions you may have to the contrary.)

As for other areas of advanced math? Each area should stand or fall on its own merits. Linear algebra, graph theory, number theory and combinatorics all make sense for programming, if only to give people some background for understanding how scalability works. (Which is definitely applicable if you are trying to understand why your web application server is falling over!) Differential equations, analysis (complex and real), topology and the like generally are not as applicable to CS.

The entire field of machine learning is pretty much
entirely applied calculus. Integer and real calcului are
also rather important when it comes to solving
constraint-satisfaction and constraint-optimization
problems. Really abstruse, ivory-tower stuff with no
real application to the real world. Like job scheduling.
Oh, wait.... Many code optimization problems are NP-hard,
like register sufficiency, code generation with unlimited
registers, program equivalence or inequivalence, etfc...
these kinds of problems are often best solved with
constraint-optimization techniques. Is writing an
optimizing compiler too theoretical and academic for you?

Furthermore any subject which is taught because it
teaches "analytical thinking" deserves to suffer the fate of
Latin and Euclidean geometry.

Why?

Update:coreolyn, I didn't mean to imply that
math was the only solution to the problem of teaching people
to think analytically and abstractly, although I believe
it's a good solution. The point is, though, that "good"
software engineering practices are useless unless you know
when and how and why to apply them, and you can't learn
that merely by learning the syntax and semantics of a
programming language. It's like knowing how to play an
instrument, but not how to play in a given key or put
together a chord progression.

I agree with most of your examples. (The notable exception being constraint satisfaction, whose dose of Calculus can be largely replaced with an appeal to common sense.) And to your examples I would add that numerical modelling (applicable in lots of places) often uses calculus very intensely. Lots of areas in programming use calculus, shouldn't we conclude that Calculus should be core for CS?

Not necessarily.

It isn't hard to see that every area of knowledge could apply to any other area in some way. But no academic program can hope to teach more than a fraction of that information, and so needs to not only direct the firehose of knowledge at students, but also filter it. Trying to not filter is merely choosing to filter based on running out of time, and excess verbiage leaking out of apathetic brains.

Given this reality, it is possible to validly disagree on which useful topics make the cut, but it isn't possible to disagree that something potentially useful will be cut. And when that choice comes, subjects that can offer no other reason for their being taught other than that they teach analytical thinking do not deserve to be spared the chopping block. After all, there are many places where students can be exposed to analytical thinking. Include one that does something else for you as well.

Man do you sound like my brother... and niether of us can figure how the other functions to this day.

While your in there solving constraint-satisfaction problems, some of us are left to make these systems work for people that can't spell scheduling. Your math skills enhance your relationship to the machine in the way that works best for you.

Granted calling Calculus useless in a monestary full of math monks is like spreading your cheeks for the Bulls in Pompolona and it begs a response, however to imply that there is only mathmatical resolution to the problems surrounding application development is stretching things as well.

I think that most of Calculus is useless for computer programming. Furthermore any subject which is taught because it teaches "analytical thinking" deserves to suffer the fate of Latin and Euclidean geometry.

From your comment, I infer that you think learning Latin is a waste of time. I disagree.

If you're in the field of law, medecine, or science, you probably use Latin every day. If you're learning English, French, Italian or Spanish, Latin gives you a great basis for starting a vocabulary.

Note that I included English in the list .. the English language is quite a mongrel, with words from lots of other languages inside it. Well-rounded developers should be able to document their work and communicate with others. That requires a decent vocabulary, something that learning Latin definitely helps with.

Well-rounded developers should be able to document their work and communicate with others. That requires a decent vocabulary, something that learning Latin definitely helps with.

yes, people who use calculus in PERL scripts are the same people who would document their code in Latin.

neither are necessary or even desired. people with CIS degrees are the people working on help desks and doing data entry. they are not developing cutting edge encryption algorithms.

fine, when you're going for your doctorate learn calculus and latin. but for a BA in CS why not skip the higher math and try to teach them how to debug and optimise code. so that everything that they write for the first couple of years after getting their degree doesn't have to be re-written by someone with more experience.

yes, people who use calculus in PERL scripts are the
same people who would document their code in Latin.

Congratulations, you've completely missed the point. We
should teach CS majors calculus not so they can write
numeric-integration code (which they'd be better off
getting from Numerical Recipes instead), but so they
learn how to analyze and solve problems in the context of
formal rule sets. Programming fits that description.

I've taught undergraduate programming labs for the past
three years: very concrete, applied stuff (the course is an
introduction to software engineering; we teach them how to
write programs, not how to write code that compiles). The
classes are very eclectic: many CS majors (some interested
in theory, some in practice), many engineers, and a strong
minority of other Science, Arts and Business majors. The
students who've taken courses involving more abstract formal
reasoning (Math, Philosophy, Physics, etc) are consistently
better able to understand the concepts and do much better on
the coursework than the ones who focus on nuts and bolts.
The best student I've had in that course was an English
major with a minor in Philosophy.

people with CIS degrees are the people working on help
desks and doing data entry.

Then what are they doing at a university?

for a BA in CS why not skip the higher math and try to
teach them how to debug and optimise code.

You can't teach someone how to debug or optimize code.
(Glub knows I've tried.) The best you can do is teach them
how to think logically and abstractly about the code, which
involves teaching them how to think logically and
abstractly.

Math tends to be better at that than software
engineering.

(CS theory/algorithmics is also good, but that's just
another math course, really.)

so that everything that they write for the first couple
of years after getting their degree doesn't have to be re-
written by someone with more experience.

The problem, in my experience teaching students and in
the private sector, isn't that people know calculus, but
not how to code: it's that they can't think abstractly about
the code. They can catch syntax errors, but can't solve
logic errors to save their lives (or jobs). With a very
few exceptions, the people whose code has to be rewritten
are the same ones whose reply to required math courses was
"when am I ever going to have to use this?"

First of all learning Latin had a definite use. In an era where every educated person learned Latin, not knowing it shut you out of many areas. And even today if you need to access historical records, it is critical to know Latin. But as I said elsewhere, saying that a subject has a use doesn't mean that it is useful enough that everyone should go out and learn it. Quite the contrary, because of constraints on time we do not learn many useful subjects, and should choose wisely.

It also doesn't mean that your examples are well-chosen.

Law I cannot comment on, knowing Latin may be useful there. But people I have known in various sciences and medicine have told me point blank that learning Latin is not very useful for what they do. Yes, they use Latin-derived words. But most of what they have to know isn't those words, and learning the ones that they need to know is such a small part of what they do that it would make no sense to learn Latin first.

So I have to decide whether to believe a random stranger on the net making sweeping claims about various professions versus accepting what PhDs and MDs have told me about what they do. I would that all my decisions were that easy!

Going further, what you say about various Romance languages (and about English - which got a lot of vocabulary from French in particular) is definitely true. However it is a disingenuous argument since learning any Romance language for the same effort both teaches you a language used by millions alive today and gives you the same head start on other related languages. Which makes Latin an inefficient path to that result.

And that is why Latin is no longer a basic part of our general education. Most of the reading and writing people do is in their own vernacular language(s), scholarly discourse takes place almost exclusively in them, and even Christian worship is no longer generally conducted in Latin (a process that took from Martin Luther to the late 1960's). Given this, learning Latin simply doesn't make very much sense for most people. It held on for a long time based on inertia and general acceptance that somehow someone who didn't know Latin wasn't really educated. Learning Latin taught, so the argument went, "analytic thought". Those declensions had to be good for something!

That proved not to be enough. So eventually Latin was discarded, more useful topics replaced it, and life went on. As with the loss of Euclid's Elements as a basic textbook a few decades earlier, something was lost and on the whole rather more was gained.

PS I know that spelling flames are silly, but I have to admit to finding it ironic when someone who is telling me the importance of developing a better vocabulary gets the spelling of "medicine" wrong...

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other