

A strong math bg necessary for computer scientists?(CS professors' perspective) - deanchen
http://ocirs.com/2011/03/11/computer-science-education-and-math/

======
kingatomic
Urgh.

I personally think one of the underlying tenets of his argument is false --
there is NO ambiguity over what Computer Science is, at least not in the way
that he's suggesting. CS is and should be an academic pursuit coupled with a
strong mathematical background. CS is about understanding the underlying
principles of the what, why and how of computation. A couple of kids from
Stanford didn't create Google because they blindly hacked something together.
Seriously, check out their paper on PageRank.

A well-understood analogy is the difference between physics and mechanical
engineering: the physicist seeks to advance knowledge of the principles that
govern our universe, the ME applies that knowledge in practical applications.

A direct comparison should be drawn between Computer Science and Software
Engineering.

I've always maintained that students solely interested in learning how to
program should be enrolled in a Software Engineering associate's degree
program, not 4-year Computer Science. It would be a practical rather than
theoretical education.

~~~
kingatomic
s/his argument/the Academic\/Applied dichotomy/

I noticed that he doesn't really present the argument as his own, just
reporting what he's seeing.

~~~
deanchen
Hey OP here,

Just wanted to point out that it was my original intention to express a more
nuanced view regarding the role of math in computer science both in industry
and academia but decide to save that for another day after I realized the
professors' arguments were very interesting on their own and that they deserve
to stand on their own.

Part of the reason I went through such great lengths to analyze the multitude
of arguments from the entire thread was to point out that they were missing
the bigger picture, which I'm hoping to discuss in a later post.

Also wanted to point out that top U.S. universities do not offer associate
degrees in software engineering, in most cases it's a course or two lumped
under cs; if you want to go in to software engineering you must go through the
cs curriculum that is related/implied by my last point where the professors
were concerned that just the image of computer science as a mathy subject
scare students away from participating in the computing industry.

------
gersh
You may be able to code some stuff without math. However, you need math for a
lot of computer science, computer engineering, and programming.

If you want to do 3d animation or vector graphics, you really need to know
vector calculus. If you want to work with a codec, or do video processing, you
need math for the encoding algorithm. Analytics are useful for a lot of
things. It helps if you understand the standard deviation, and such.
Encryption and hashing algorithms use a lot of math.

Have you tried programming in Scala? Have you used generic functions? A lot of
this stuff ties back into Abstract Algebra.

I haven't started with talking about discrete math. Are you going to literate
enough to understand the difference between a hash-table and a b-tree?

I think it is a lot easier to teach yourself to code, than to teach yourself
math. Thus, universities should focus on teaching math. If you know math and
some basic programming, you should be able to learn the rest by reading the
coderature of good open source projects.

~~~
deanchen
Definitely agree with you regarding the fact that math is used extensively in
many projects but just wanted to point out that the math is very different for
3d animation vs video processing and only a very small subset of software
engineers or computer scientists will every need to know it.

I am able to fully understand the uses of and apply hash tables, btrees, kd-
trees or any data structure. Ex. although I can't prove to you the correctness
or to create a good hash function that still doesn't prevent me from
understanding basic concepts such as hash collisions due to excessive entries
or the look up speed O(1) of hash vs O(log(n)) for btrees. On the other hand,
if I actually were to implement search for a project I would just use MySQL(I
don't need to understand set theory at all to be able to write efficient
queries with a firm understanding of the role of indexes).

Never tried programing in scala, but I have no problems with functional
programming concepts like map/reduce(currently doing a lot of new projects in
couchdb because I think its more interesting to writing sql queries).

I also would like to point out that none of the example you gave require
calculus, which was the requirement that I found to be a bit ridiculous and
all of your examples involve very different branches of mathematics with very
little overlap and most computer algorithms can be applied to great effect
without a perfect understanding of the mathematical foundation or proof of
correctness. At what point do you stop and ask whether you are teaching too
much math and not enough computer science?

I would agree that its easy to pickup how to code but nearly impossible to
become a good coder on your own without criticisms and feedback from others.
The quality of code I've read some really atrocious code from cs graduate
students or engineers all of whom have a extremely good understanding of math.
And I would also argue that it is very unrealistic to expect someone to
download and read tens and thousands of lines of open source code and hop on
IRC to discuss why things were done certain ways with the maintainers. I would
also argue that a firm understanding in math does not mean that you can just
get map/reduce, MVC, design patterns, web services, distributed computing,
multi-threading, event driven programming and many more fundamental concepts
that programmers now a days need a firm understanding of to do anything
significant.

~~~
gersh
If you want any sort of physics in your 3d, you pretty much gotta know some
calculus. You need calculus to understand acceleration, gravity, etc.
Statistics also uses calculus. For example, the normal distribution, is
\integral{e^(x^2)}. If you want to do any A/B testing, regressions, machine
learning, etc. you will need it.

Map/reduce comes out of algebra. Is your operator associative? If not, you
better be careful how you map-reduce algorithm executes. If you don't
understand, associativity and your operator isn't associative, it can cause
problems.

Finite state machines are important too. It can be really hard to write a
parser, if you don't understand FSM. I suppose that ties in with design
patterns.

If you can write a good proof, I don't see how can be that terrible of a
programmer. How many CS graduates do you know, who can write a good proof, and
aren't good programmers?

