gaearon / ama

Ask me anything!
222 stars 5 forks source link

Do you think getting a computer science degree is necessary? #53

Closed ankurkaushal closed 9 years ago

ankurkaushal commented 9 years ago

This question follows up this one, https://github.com/gaearon/ama/issues/47

Or let me phrase it this way, would you recommend going to a university? I currently have a college diploma & have always toyed with the idea of going back to university. What are your thoughts?

gaearon commented 9 years ago

I’d recommend doing anything that feels good if it doesn’t hurt you or other people. University can definitely be one of those things.

There are many pros, cons and open questions. Here’s what I would consider:

ankurkaushal commented 9 years ago

Thanks for the reply Dan, you gave some interesting points. One more question, do you ever feel knowing little (like for instance, certain algorithms)? How do you overcome that? I am a developer too, I want to make things too but there are certain times when knowing little comes in the way.

sebmck commented 9 years ago

I'm not @gaearon but I think this applies to him too, but the only reason not having a (comp sci) degree has been an issue for me is that all of the US work visas require one.

robwormald commented 9 years ago

@ankurkaushal i had a similar experience as dan - I'll say that we are incredibly lucky to live in an age where almost anything you could possibly want to know is out there on the internet. I didn't go to Harvard or Stanford, but I've taken Computer Science courses from both of them - for free! The Harvard CS50 course is a brilliant intro to algorithms, and they make a real effort to make it accessible online.

gaearon commented 9 years ago

Oh, I feel that all the time. The best you can do is to try exploring what exactly you don’t know. Create a map, so to say, of the things you might never learn. For example, you may not know machine learning, but you should have a solid idea of what machine learning is so if you ever see the problem requiring it, you can at least recognize it.

Peter Norvig puts it way better than me in an interview about one of his blog entries:

(Backstory: http://ravimohan.blogspot.ru/2007/04/learning-from-sudoku-solvers.html)

Seibel: Though your job now doesn’t entail a lot of programming you still write programs for the essays on your web site. When you’re writing these little programs, how do you approach it?

Norvig: I think one of the most important things is being able to keep everything in your head at once. If you can do that you have a much better chance of being successful. That makes a small program easier. For a bigger program, you need extra tools to be able to handle that. It’s also important to know what you’re doing. When I wrote my Sudoku Solver, some bloggers commented on that.

They said, “Look at the contrast—here’s Norvig’s Sudoku thing and then there’s this other guy, whose name I’ve forgotten, one of these test-driven design gurus. He starts off and he says, “Well, I’m going to do Sudoku and I’m going to have this class and first thing I’m going to do is write a bunch of tests.” But then he never got anywhere. He had five different blog posts and in each one he wrote a little bit more and wrote lots of tests but he never got anything working because he didn’t know how to solve the problem. I actually knew—from AI—that, well, there’s this field of constraint propagation—I know how that works. There’s this field of recursive search—I know how that works. And I could see, right from the start, you put these two together, and you could solve this Sudoku thing. He didn’t know that so he was sort of blundering in the dark even though all his code “worked” because he had all these test cases.

Then bloggers were arguing back and forth about what this means. I don’t think it means much of anything—I think test-driven design is great. I do that a lot more than I used to do. But you can test all you want and if you don’t know how to approach the problem, you’re not going to get a solution.

Seibel: So then the question is, how should he have known that? Should he have gone and gotten a PhD and specialized in artificial intelligence? You can’t know every algorithm. These days you have Google, but finding the right approach to a problem is a little different than finding a web framework.

Norvig: How do you know what you don’t know? Seibel: Exactly.

Norvig: So I guess it’s two parts. One is to recognize that maybe there is a known solution to this. You could say, “Well, nobody could possibly know how to do this, so just exploring randomly is as good as everything else.” That’s one possibility. The other possibility is, “Well, probably somebody does know how to do this. I just don’t know what the words are for it, so I have to discover those.” I guess that’s partly just intuition and saying, “It seems like the kind of thing that should be in the body of knowledge from AI.” And then you have to figure out, how do I find it? And probably he could’ve done a search on Sudoku and found it that way. Maybe he thought that was cheating. I don’t know. Seibel: So let’s say that is cheating—say you were the first person ever to try and solve Sudoku. The techniques that you ended up using would still have been out there waiting to be applied.

Norvig: Let’s say I wanted to solve some problem in biology. I wouldn’t know what the best algorithms were for doing gene sequencing or whatever. But I’d have a pretty good idea that there were such algorithms. Then I could start looking around. At another level, some of these things are pretty fundamental—if you don’t know what dynamic programming is, then you’re at a severe disadvantage. It’s going to come up time and time again. If you don’t know this idea of search in general—that you can make a choice and backtrack when you don’t need it. These are all ideas from the ’60s. It was only a few years into programming that people discovered these things. It seems like that’s the type of thing that everyone should know. Some things that were discovered last year, not everybody should know.

Seibel: So should programmers go back and read all the old papers? Norvig: No, because there are lots of false starts and lots of mergers where two different fields develop completely different technology and terminology, and then they discover they were really doing the same thing. I think you’d rather have a story from the modern point of view rather than have to follow all the steps. But you should have them. I don’t know what the best books are for that since I picked it up the hard way, piecemeal."

ankurkaushal commented 9 years ago

@sebmck I see. I am in Canada though & I have been lucky enough to be in a company where having a degree wasn't so important.

@robwormald You're right, we are indeed lucky to be in a age like that. I would certainly look into those courses, may be after all I might not have to think about going back to university. :)

@gaearon Then I should probably start keeping a notepad or something to keep track of things I don't know, that might be good start. Thanks for your kind words Dan.

ghost commented 9 years ago

The only reason I go to college is so that I can get a U.S. work visa.

jhorneman commented 9 years ago

@gaearon While I cannot quibble with the principle, I do note that Norvig doesn't explain HOW to build a map of everything one doesn't know.

suederade commented 8 years ago

+1 for not going into debt