Live data from Hacker News

What every computer science major should know (2011)

matt.might.net

61–70 of 101 posts

Re: What every computer science major should know (2011)

#61
post #30

I graduated 10 years ago and never used calculus, differential equations, linear algebra, or physics in my job. I'm not saying this to say they aren't useful. But does anyone find them generally useful for their job? If so, what for? I'd like to know what I'm missing here, if anything. I don't want to go through a refresher just to forget it in another couple of years.

Anyone who does low-level storage will probably end up touching some form of error correcting code, which has quite a bit of mathematical basis: http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_corr... And anyone who deals with large distributed systems will inevitably deal with statistics with regard to failure rates and expected uptime, etc. I can't say I've used calculus or differential equations, though. B…

I'm not sure this is relevant to computer science, but as a mechanical engineer, I've used differential equations and topology quite a bit in my coding.

Topology has its important role in CAD and CAE softwares (particularly when dealing with manifold/non manifold objects) where it's important to understand the relation that various geometric entites have with one another (whether you're coding a tool or using one). There is also a good amount of research currently being done on automatic CAD model simplification for analysis (FEM/CFD) based on geometric simplification (various methods exist ranging from topology to fourier analysis [1]). Meshing theory also relies quite a bit on topology. [2] (but I don't think anyone denies the importance of topology in CS though)

As for differential equations and calculus, they are heavily used in FEM [3] and CFD [4] and there is therefore a need to numerically evaluate these equations in a efficient manner. They are also heavily used in controls (for instance, in a quadcopter PID controller [5]). So I'm guessing in that case, differential equations are used to describe something you're then modelling in your code through numerical integration. Numerical methods however rely both on understanding calculus and differential equations as a given numerical scheme may be more adapted to a particular type of DE than others [6][7][8][9] (sorry, couldn't find a comparaison of these schemes on a single link so I'm citing a few).

Signals processing and statistical analysis may also be used in conjunction with differential equations such as in turbulence modeling in CFD. RANS (Reynolds Averaged Navier-Stokes) equations essentially average the NS equations over time in order to locate areas of various turbulence strength [10]. LES (Large Eddy Simulation) filter small eddies out of the NS equations in order to be left with only the large eddies thus requiring less computational power [11] (the filtered eddies are modeled separately for the sake of energy balance).

Finally, I would argue that calculus is also used in optimization codes and neural networks with gradient based descents [12][13]

I hope I didn't go off topic with this post, all I was trying to say is that in some fields of computer science, you do have to come up with algorithms evaluating differential equations using numerical methods, and an understanding of calculus and DE is a definitely plus. I'm sure finance has its share of DE to model requiring their understanding.

[1] http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=7D3... or http://www.sciencedirect.com/science/article/pii/S0010448508...

[2] http://www.ann.jussieu.fr/frey/papers/meshing/Le%20K.H.,%20F...

[3] http://fenicsproject.org/documentation/tutorial/fundamentals...

[4] http://en.wikipedia.org/wiki/Finite_volume_method

[5] https://ghowen.me/build-your-own-quadcopter-autopilot/#toc4

[6] http://en.wikipedia.org/wiki/Lax%E2%80%93Friedrichs_method

[7] http://en.wikipedia.org/wiki/MUSCL_scheme

[8] http://en.wikipedia.org/wiki/Upwind_scheme

[9] http://en.wikipedia.org/wiki/QUICK_scheme

[10] http://en.wikipedia.org/wiki/Reynolds-averaged_Navier%E2%80%...

[11] http://en.wikipedia.org/wiki/Large_eddy_simulation

[12] http://en.wikipedia.org/wiki/Gradient_descent

[13] http://karpathy.github.io/neuralnets/

EDIT: added a paragraph on turbulence modeling

EDIT 2: Optimization methods can be used to find optimal solutions to differential equations [A]. I talked about gradient descent earlier, but there's also the simplex method [B] that makes heavy use of linear algebra and topology to navigate in a solution space in order to optimize a solution.

[A] http://en.wikipedia.org/wiki/Mathematical_optimization#Appli...

[B] http://en.wikipedia.org/wiki/Simplex_algorithm

Re: What every computer science major should know (2011)

#62
post #53

Earlier quoted context omitted.

I've gotten to the point where I won't write new JVM-based code in Java anymore. I think many companies that have tried and discarded Scala used too much of it. It has a lot of advanced features, and I'm not particularly good at using most of them (and some of them I probably don't even know exist). If people start off thinking of Scala as simply a "better Java", and only move to use its easier-to-understand features…

You mention the key points - in order to use it successfully, you have to agree to use a common, safe subset of the language (e.g. no implicits), similar to C++. You then have to make sure everyone adheres to this, if possible by using automated tools. As a startup, you often don't have the luxury to be able to invest in that kind of infrastructure. You have to train people to use the language correctly, which is a h…

And this, kids, is a great example of concern trolling.

It would be more credible if he wouldn't give it away so easily that his knowledge about Scala is limited to the stuff he read on the internet.

Re: What every computer science major should know (2011)

#63

Earlier quoted context omitted.

You mention the key points - in order to use it successfully, you have to agree to use a common, safe subset of the language (e.g. no implicits), similar to C++. You then have to make sure everyone adheres to this, if possible by using automated tools. As a startup, you often don't have the luxury to be able to invest in that kind of infrastructure. You have to train people to use the language correctly, which is a h…

And this, kids, is a great example of concern trolling. It would be more credible if he wouldn't give it away so easily that his knowledge about Scala is limited to the stuff he read on the internet.

This is the reason language wars are looked down upon on HN - someones going to feel offended. Its pointless. But be reminded that ad hominem is not welcome here either. You are welcome to add to the discussion, in case you are knowledgeable in the subject. You have not done much to factually counter any arguments brought up so far, and in case your goal is to persuade anyone of your contrary position, you have done that goal a disservice.

Re: What every computer science major should know (2011)

#64
Fail article...no you don't have to know all these things... Mathematics for 3D Game Programming and Computer Graphics??? OMG!! Thats totally not what everyone should know, thats a very "narrow" field of software engineering that it's suitable for those who really like it...jesus just don't read it.

Re: What every computer science major should know (2011)

#65
> I've tried to answer this question as the conjunction of four concerns:

> ∙ What should every student know to get a good job?

> ∙ What should every student know to maintain lifelong employment?

> ∙ What should every student know to enter graduate school?

> ∙ What should every student know to benefit society?

I'm having difficulty articulating why, but I can't help feeling that this approach goes against the idea of education as a good in its own right; that the things that every computer science major should know are those things that are fundamental to the field, defined without reference to e.g. whether it'll get you a good job.

My degree is history, and it would be difficult to provide any sensible answers to those questions for that subject, except perhaps #3. There is an argument that studying the humanities provides transferable skills in critical thinking, which I would dispute; apart from the importance of questioning and evaluating sources, and a large pool of counter-examples for many arguments of the form "people have always done X", most of my (limited) abilities in critical thinking derive from my amateur digressions into science and logical fallacies. The only quantifiable benefit to society I can identify is the nuggets of interesting information I can sometimes throw into discussions and comment threads (my favourite being "Gandhi wasn't a pacifist and the British were bombed out of India", which I don't get to use often enough).

But a society without students of history (or French literature, or ancient Japanese ceramics) would be poorer; so would one without computer scientists, even if the field had no practical applications. Human knowledge advances best with a broad and deep body of ideas to bounce off each other. (No, I can't provide a concrete defence of that statement.)

The things every computer science major should know are those things that, if he or she did not know them, would make it ridiculous to call him or her a computer science major. Ditto for every other formal field of study.

Re: What every computer science major should know (2011)

#66

Prefacing this I am only 20 years old so I have some time to figure it all out but I feel like I am missing out a fair bit on not pursuing a degree in computer science. A lot of the content, especially the focus on algorithms, seems really interesting to me. Straight out of high school I did not have the math grades for CS so I went to the American equivalent of community college and am on track to get a diploma from…

Right now, I'm prepping for a Computer Science degree. I find I just can't study mathematics at a pace that's as fast as a Uni course goes. I really find I need to understand the underlying concepts of the math, so it takes me a bit longer but I seem to be able to hold a lot more info, and my progress is getting quicker.

As an example, it took me some time to grasp that the determinant is the size of a square matrix, and that a one-dimensional matrix gives the distance, a two dimensional matrix gives the area of a parallelogram, and a three dimensional matrix gives the volume of a parallelopiped. After that it became easier to understand how to get the determinant of an n-dimensional matrix.

Same with vectors and trigonometry.

I'm finding that self study with a little help from Google is really paying off!

Re: What every computer science major should know (2011)

#67

Fail article...no you don't have to know all these things... Mathematics for 3D Game Programming and Computer Graphics??? OMG!! Thats totally not what everyone should know, thats a very "narrow" field of software engineering that it's suitable for those who really like it...jesus just don't read it.

That's a very solid book that deals with things not just restricted to 3D programming. It covers vectors, matrices and linear transformations, which are useful in other areas of Computer Science.

Although an excellent book that covers these things is The Manga Guide to Linear Algebra, by O'Reilley.

Re: What every computer science major should know (2011)

#68
post #35

There is more harm in the notion that there is anything at all that absolutely everyone needs to know to succeed than there is benefit from the contents of such lists themselves (which boil down to "everyone needs to know what I know"). To succeed, all you really need to know is enough to be able to do meaningful contributions to society in any way whatsoever. This is all there is to it and there are thousands of ind…

As someone with a useless line manager I would say all you need is to bullshit your way through the interview enough to get the job.

Re: What every computer science major should know (2011)

#69

Suggested revisions: - More on databases (including non-relational). We all need to know a lot of this for day-to-day work yet it but it barely made the list. - More on writing clean, readable code (this isn't on anyone's list, damn it!) How to name variables appropriately, how to comment, how to not write 150-character lines, etc. Fail them if they can't produce code that other students can quickly read. - Corporate…

No machine learning? Really? It seems like for every problem out there - at least some tiny bit can be solved by machine learning. General pattern recognition (identifying peaks, predicting disk outages, etc) at the minimum seems like a requirement that will show up in the next few years.

Most problems out there are probably solved in an excel sheet at present. No need for machine learning.

Re: What every computer science major should know (2011)

#70

Earlier quoted context omitted.

And this, kids, is a great example of concern trolling. It would be more credible if he wouldn't give it away so easily that his knowledge about Scala is limited to the stuff he read on the internet.

This is the reason language wars are looked down upon on HN - someones going to feel offended. Its pointless. But be reminded that ad hominem is not welcome here either. You are welcome to add to the discussion, in case you are knowledgeable in the subject. You have not done much to factually counter any arguments brought up so far, and in case your goal is to persuade anyone of your contrary position, you have done…

This is not about being "offended". This is me being bored to death by the umpteenth dude – you – thinking that repeating random stuff written on the internet adds anything to the debate.

It has made people shake their heads 5 years ago, and it hasn't changed since then.

There is no need for persuasion. Those who are motivated enough try the language can discard non-sense on their own, and those who keep spewing the same old and tired stuff are not the people I want to deal with anyway.

Post reply on HN