Hacker News new | past | comments | ask | show | jobs | submit login
A strong math bg necessary for computer scientists?(CS professors' perspective) (ocirs.com)
13 points by deanchen on Mar 11, 2011 | hide | past | web | favorite | 6 comments


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.

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.

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.

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.

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.

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?

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact