Hacker News new | ask | show | jobs
by andrewfong 4567 days ago
Speaking from experience, this is true. You also don't really know when true CS is useful until you run into it.

I graduated with the equivalent of a minor in CS. When I started coding for an web-based gaming start-up in 2007, it was mostly irrelevant. You don't need a CS degree to learn Ruby on Rails, nor is it necessarily useful (beyond your basic intro courses) to have taken CS courses.

Flash-forward a year, after we raised our seed round. Our online game had grown in complexity quite a bit, and we found ourselves having to deal with things like complex image rendering, AI, and pathfinding. While it's possible to get a decent grasp of these topics through Google and O'Reilly books, it's definitely an order of magnitude more difficult than figuring out a new web framework. As mentioned before, I only have a minor in CS so my exposure to these topics was minimal, and there were definitely nights where I found myself wishing I had taken another AI or advanced algorithms course.

3 comments

These "hardcore" problems like AI and pathfinding are definitely tough problems. The issue is that there's an infinite supply of such problems and there's no way a 4 year degree can cover them all. In fact, even if they did, most lessons would be forgotten before they could be proven useful in the real world.

Why not just learn these areas when needed? Taking an Advanced AI course in just a 2-3 month semester is how many hours? Just spend a week or two hitting the books and you'll be good to go, and you're knowledge will be bleeding edge and up to date. Plus, you'll have been paid to learn it!

Surprisingly many problems are similar, so in the end you can often apply the methods from one domain to another. If you use your study time well you will remember the general principles even though you might forget the exact implementations and most of the details.

Most importantly, you have a much greater chance of knowing when a solution exists and where to look for it, and more importantly know when no solutions are known.

E.g., the computer scientist recognizes the travelling salesman problem even when it doesn't involves salesmen, travelling or cities. She knows that it's NP-hard so she doesn't spend a few months trying to find an efficient exact solution for her millions of nodes, but she knows where to look to find "good enough" solutions for the problems she is trying to solve.

The autodidakt might not even recognise his problem as a TSP and thus doesn't even know that her problem is hard and which books she needs to start reading.

While it's true that there is an "infinite supply of these problems", a good CS program it's supposed to teach you how to think, hence teaching you how to learn.

If you have a very solid understanding of the fundamentals, you should be able to go and solve problems you've never seen before. If you don't, you could be stuck using other people's solutions to your problems, hence not being able to solve new ones that you might encounter.

What I value most about my degree is understanding the full technological stack of the computer. You never know where your next improvement might come from, and knowing CS broadens your possible angles of approach so you can tackle a problem from any part of the stack from a high level to a low level, not just within a framework.
CS doesn't make you rote learn solutions to individual problems. It teaches you how to reason about entire classes of problems.
Here is the thing -- algorithms are NOT an order of a magnitude more difficult for everyone. That is simply an unjustified blanket statement.

Believe it or not, some people pick up merge sort or balanced binary trees faster than they can learn Rails (which has a BIG amount of content to master, by the way).

My difficulties were the other way round: knowing all the theory doesn't actually make you a better (or even a good) coder. Only when you run into the problems you mentioned, does academics help at all.