I have a huge bias towards self-learning. Most people I know get a degree/diploma to get a job. The people who self-teach are doing it more because they're curious cats. I'll take the curious cat.
What about people who do both at the same time? Personally I find this model to really work for me, Uni opens up my eyes to what exists out there, and I dig deep into the specifics of what piques my interest on my own time.
I find that most programmers who are only self taught are missing breadth. They're great with what they encountered and had to try, but usually suck at even knowing of the existence of what lies just beyond the edge.
Or at least the ones I've had the pleasure of talking to :)
> They're great with what they encountered and had to try, but usually suck at even knowing of the existence of what lies just beyond the edge.
That is one area where the internet could use improvement.
Google can teach you anything... if you know what you're looking for; but there doesn't seem to be a good system for exploration beyond that. If you follow the right discussion/link services and keep a general watchful eye out, the stuff out beyond the edge will eventually flow to you, but there is certainly room for improvement.
I believe it is a solvable problem and the company that gets it right will have amazing growth potential.
The problem is the start. Self taught folks usually find it hard to break into the mainstream, unless they have already done stuff on their own (startup) or are known in the open source community. The CS degree guarantees a channel to enter a company.
I was reading a related article from Prof. Vivek Wadhwa about this (his take on students dropping out to do startups), and he encourages going to school (any school).
Though, there is some truth I think in school providing a bigger picture/research that is hard to for some self taught folks to get to.
I self-taught myself programming for a while, discovered I liked it, and decided to go back to school in CS so that I could learn even more about it. (The first time through school, I was interested in different things and ended up with a philosophy degree.) While some of people I encountered in the CS department were there to line up a job, school can just be an efficient, focused learning method for the curious.
In general, one nice thing about hiring CS students as opposed to purely self-taught programmers is that, in my experience, they're more likely to have a good understanding algorithms and data structures. Self-taught coders often only learn as much as they think they need to know about the topic to complete the task in front of them. (Obviously, for those interested, it's as straightforward to teach yourself analysis of algorithms as any other topic.) For some types of programming positions, having a rigorous background in this area is crucial, though in others not so much.
It really depends on the person. Self-taught people are proven to be curious and like to learn, but you can also find people with degrees that are like that. They start with the a degree but never stop the learning process.
Damn, that's a good anecdote to counter my argument. So I'm going to have to provide my own. I took electrical engineering. In third year I was doing a lab, and the guy next to me didn't know that capacitors are used in analog filters. I would have asked him how he got to 3rd year knowing so little, but I was too depressed.
I find that most programmers who are only self taught are missing breadth. They're great with what they encountered and had to try, but usually suck at even knowing of the existence of what lies just beyond the edge.
Or at least the ones I've had the pleasure of talking to :)