You may be "right" in theory, but it doesn't matter.
The vast majority of computer science students pursue a CS degree because it has become a prerequisite for being a professional software engineer. NOT because they have a desire to become a computer scientist.
The simple fact is that if you do not have a 4-year college degree you will find it immensely harder to work as a software engineer in the industry. It's silly to pretend otherwise.
The vast majority of today's CS programs do a disservice to all of their students. They are neither good engineering programs training students for industry (for which they currently serve as a proxy) nor good computer science programs. A recently minted graduate of a Chemistry or Physics program (from an accredited US 4-year college program) is, on average, much more versed in the relevant scientific findings and research techniques of their field than a CS graduate. They are so poor precisely because the vast majority of CS graduates do not go on to do CS research or utilize their CS knowledge but instead become software engineers.
> The vast majority of computer science students pursue a CS degree because it has become a prerequisite for being a professional software engineer.
I don't know if things are different outside of Canada, but isn't this precisely what a computer engineering or software engineering diploma is for? That's what I'm doing and it's definitely different from CS - very applied, a lot of low-level programming (assembly, VHDL, embedded C), making a game with Java calling C++, source control is always used, etc.
In my experience, Computer Engineering is a combination of EE and CS, producing someone equally capable (assuming equal interest) of writing low level systems and designing logic circuits.
Software Engineering is more of what Joel is describing, and more schools are starting to offer it as a major, with as much focus going to various project management methodologies as algorithms and data structures.
Things are different outside Canada, specifically in the U.S.. I've found in the U.S. that there are vastly inconsistent definitions for the different programs. In Canada you tend to have Computer Engineers who study in a real engineering program. Some schools may split this into Computer Engineering (emphasis on hardware) and Software Engineering (emphasis on software). Then you have Computer Scientists that range from "Software Engineers" -- in quotes because it's not a real engineering degree but a science one. They study lots of programming, more math than other CS students, as well as processes. On the other end of the spectrum areManagement and Information Technologists that do less programming, less rigorous math, but more business and management education. Having had to interview candidates that have CS degrees from schools all over the world (Canada, Cuba, Russia, the U.S.) I've found that for some reason the U.S. has a weird sort of wild west situation with respect to computer science. Students in community colleges who take one course in Java consider themselves to be studying computer science the same way a student at a top notch program in a place like Stanford would. Here in Canada if a student is studying programming at a community college they're more likely to declare themselves as studying just that, "programming" or "IT".
Answers my question - in Quebec, the title "engineer" has quite a few requirements, mainly having an engineering degree and passing an exam. Hence my confusion with the text: here, a CS graduate could not call himself a "professional software engineer".
While I mostly agree with your point, the phrase "Infinitely harder" is a bit of a stretch. I've worked with many professional software engineers without CS degrees, and even many professional software engineers without 4-year degrees at all.
Personally, I was already a programmer when I took my first University CS courses and realized quickly that while I love programming, CS isn't where my interests lie. I took the CS courses that were most relevant and wound up getting a business degree.
I do wish there were more programs available serving the middle ground between the v-school ghetto and the ivory tower.
Good point, "infinitely" is a bit hyperbolic, "immensely" fits better, I think.
I agree, it is possible to be a professional software engineer without a CS degree (some of the best fit that category), but that's a non-traditional road. More to the point, it's exceedingly rare for someone to intentionally avoid earning a CS degree if they plan, prior to attending college, to become a software developer.
I don't have a degree and I've never had a problem getting multiple job offers when I've been on the market. I've held some very high posts as well. I think people use the degree as a road sign or indicator of possible quality, among other indicators, to come to a hiring decision. When the candidate is demonstrably talented, the degree becomes worthless (not negative, but just not contributing to the decision anymore).
I've personally found that people who got into programming before the dotCom boom don't need to worry about a lack of degree, people who got in after absolutely need a degree.
I suspect it's pretty easy to get job offers when you are demonstratively better than 99% of your peers, degree or no. That doesn't mean your average programmer can find a job without a CS degree...
If you have a solid track record in the industry then you don't need a degree. But if you're a wet behind the ears programmer-to-be with no prior job experience then you'll be in a bad position. Exceptional, naturally gifted software engineers in such a position can manage to get by through demonstrating their talent in some way (e.g. contribution to a major open source project, perhaps), but the average developer is at a severe disadvantage compared to his degree holding cohorts.
This may well be true, and that is pretty unfortunate.
But, frankly, if all you want a job developing software, I'd suggest interning instead of getting a degree. You'll certainly be more qualified than your peers for most jobs four years on.
And, for what it's worth, I'm currently hiring for a Jr Developer. I want someone smart who we can train. A CS degree wouldn't hurt, but it's certainly not a prerequisite.
I don't have a CS degree (or any degree for that matter) and have been programming professionally for 3.5-4 years, 13 total. I never interned, but I spent a lot of time as a child/HS student writing code independently and working for a few open source projects. That got my foot in the door but until recently, it was rough finding work.
Any (career?) suggestions in general? I have a strong background in CS (I made prodigious use of ocw.mit.edu), and I feel competent at a practical level.
At this point, I'm just trying to pick a particular language to master while learning something esoteric on the side.
Doesn't programming deserve to be the subject of a rigorous, high-level education? It is a rich craft with a growing tradition. We would do well to consider, as Joel does, how to provide students with appropriate experience for the future practice of their career. That doesn't mean teaching the particular, accidental details of contemporary professional programming, but it does mean taking programming seriously as a subject of education. You can study architecture, design, and engineering in universities - not just sciences and humanities. Similarly, the existence of computer science shouldn't exclude programming from our institutions of higher learning.
It's a trade in Germany. I left school after 10th grade and started my apprenticeship in programming. The net effect is that at 29 i've now been a professional programmer for 12 years.
More importantly, I also developed all my programming habits during my formative years and therefore developed pretty good habits that are now hard wired and second nature. It gives me a huge edge over other programmers of my age who have been joining the work force over the last few years.
The huge difference being that in Germany you have functional apprenticeship programs. In the US, which this article is centric to, you're really just going to go to college, have little option besides CS, and then end up somewhere in the chasm of this debate.
Trade schools exist, but since they're generally looked down upon you're not going to see a lot of popularity in Programming Trade degrees. Though perhaps the only difference between programming and metal craftsmen is that CS is more obviously popular and valuable these days. P only might equal NP so computers and robots haven't yet taken over the job of crafting programs.
This is meant to be a lot less a critique of programming and a lot more a nod toward the intense craft that goes into many of the things you might learn as a "trade". The general skill to build something physical and high quality is so frequently looked down upon these days.
That said, in a world where there are degrees in video game design and journalism, theoretical purity is probably not the defining characteristic of subjects that are taught at university.
And there's no reason that those who are drawn to the purity of math and science behind computers can't attend traditional CS programs. It would be good if real universities could also (as a different department, whatever) provide relevant instruction and research in the realm of programming.
Those who really care about both can always double major.
Nope, I wouldn't. I'd expect them to be able to write the book and then get a lawyer to review the contract that the agent negotiates for them.
Mind you, I've not seen degrees in programming as distinct from Computer Science or Computer Engineering over here. We have one, two and three-year diplomas, yes, but degrees are all on the fundamentals over here.
You wouldn't expect someone with a degree in English to know how to navigate a book contract, would you?