Fairly Unremarkable Backgrounds
bigcontrarian.com
bigcontrarian.com
It really is like the difference between a degree in physics and being a car mechanic. You can be a great car mechanic without a degree in physics, but the intent of the physics degree isn't to create great car mechanics.
I was probably a better C programmer at age 15 than most professional programmers I've run across in my career. With that said I didn't know about the Halting problem nor the Chomsky Hierarchy nor even things like amortized cost nor really any asymptotic complexity analysis. Do any of those things help me at my day job... maybe a little, but not much. Certainly I'd be better served reading the .NET Fx docs or Java docs or some JQuery books. But that's not why I got a degree in CS.
Are you getting at the pursuit of higher understanding angle i.e. separating the pragmatic pursuit of workplace advancement from the more selfless or idealistic pursuit of knowledge?
It's goal is to take great ideas over time and teach those ideas to new students of the field. And computer science as a field is more about the science of computing, than it is about programming. Generally programming is taught as a way to understand different manifestations of computing.
To answer your first question, pursuing a profession in programming doesn't require a CS degree. And it's probably only marginally beneficial to improving the quality of your work in _most_ programming jobs. I do think we can view programming as more of a vocational skill. There will be some jobs that require CS backgrounds, but for the most part it's a lot closer to writing in that there is a suitable job for almost every level of skill.
It's not a misunderstanding. You just can't get a degree in programming. 90% [1] of students in CS departments are there to be industry coders.
[1] True bogus fact.
These degrees are a mix of various proportions of traditional Computer Science, Electrical Engineering and software craft, depending upon your focus.
But in the case of programming, it's the opposite. Computer Science is a subset of what you need to know to be a programmer.
Though I think pwim may have been pointing that out. There are elements of each discipline that overlap, but you don't need to know any of the physics/mechanics pieces that overlap to get a degree in one, and the same is true of CS/programming.
In fact, you can be an excellent programmer and know no CS, be an excellent mechanic and know no physics, and even be an excellent computer scientist and know nothing that would serve you in a modern programming job. (Obviously you could probably figure it out, but a code monkey would do just as well as some computer scientists.)
But fundamentally they serve different purposes. It's almost conceivable someone could prove P=NP without writing a line of code. Though decreasingly so as computers become so ubiquitous.
But you do need to know about data structures, algorithms, computational complexity, and so on, to write software. You also have to know a lot more -- languages, frameworks, libraries, APIs, and good taste.
(I refuse to use the expression "design patterns", because all design patterns are what people with good taste naturally do without thinking. So have taste and you can skip reading about Flyweight Factory Facades.)
You also have to consider that many people do not attend college out of a pure monetary cost-benefit analysis. Besides, even if one did, it's heavily subsidized by Uncle Sam, so until the bubble hits its peak* (like housing), it's still a fairly safe bet.
*I believe humanities and other equally non-vocational degrees have already peaked.
The second biggest benefit was that I was introduced to psychology as a science, and not some pseudo-intellectual horsing around as it was made out to be in high school. Ditto for economics. Taken together with the other cultural studies I dropped in on, it was something that's been fairly difficult to replicate now that I'm out of school. I'm actively trying to recreate at least some part of that experience now (using technology of course ;).
The clincher is that my alumni meetups have been nowhere near as enlightening as college was. I sometimes wonder if some people took boring pills during graduation, or if it really was the diversity that brought it out in people.
In all, college is what you make of it, just like real life.
the whole argument about whether or not school is necessary is ridiculous. each case has its own variables. the zoho case he references, they setup their own academy to TRAIN their people to work the way they needed.
Fred Brooks claimed that education and training for programmers was extremely beneficial - but he was writing in a time when many programmers were writing operating systems and compilers. Additionally, structured programming (ie. without gotos) was a (relatively) new idea. Therefore, I tend to think that today, when the vast majority of programming tasks aren't nearly so difficult and our tools have improved so much, and good practices are generally known, that programming is much easier, and training isn't nearly as important as it was.
Even for creating new ideas and tools (eg. Thompson's regex search; pagerank), it's more a matter of being super-smart, IMHO. Of course, it helps if you know the basis of the idea (eg. what a regular expression is). If you want to prove those ideas, however, I think academic training is very helpful - but in mathematics, not computer science.
I'd say that depends on what problem one is working on. I see algorithmic problems come up all the time, and I occasionally see a total failure on an algorithmic issue among the (largely college-educated) people I work with.
A lot of the time it's a formal requirement to a job application.
//hs dropouts represent!