The field is very young. If you want to build bridges, you major in Civil Engineering. You have to learn a lot of physics along the way, but make no mistake: the point of your education is to prepare you to build things.<p>Computer Science is a mish-mash of many things, and only part of that is how to build software. Sure, just about anything outside of pure CS theory requires programming, but producing the working program is not the end in itself. A big problem is that we really <i>don't know how to build good software</i>. This does not mean good software does not exist. It means that we don't have reliable methodology to produce good software. In contrast, we have reliable methodologies to build good bridges.<p>The ACM studied this with the IEEE in 2000, and came to this conclusion (<a href="http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep_main.pdf" rel="nofollow">http://www.cs.wm.edu/~coppit/csci690-spring2004/papers/selep...</a>): "Following a study by a blue ribbon panel of prominent software engineers,
the ACM Council decided in May 1999 that it could not support licensing of software engineers. ACM's position is that our state of knowledge and practice in software engineering is too immature to warrant licensing."<p>I think it's important to differentiate between Computer Science and Software Engineering. That is, the difference between someone whose goal is contributing to the base of knowledge in their field, and someone whose goal is a stable, working system. There is, of course, overlap, but I think the distinction is still there.<p>I think that in the future, there will be separate CS and SE degrees. Much of what they learn will be the same, but the focus will be different. A CS education will prepare you to be a researcher; a SE education will prepare you to build software. (I know SE degrees exist, but most schools only have a CS program.) I don't think this split will happen until SE is mature enough to be licensed.<p>What does this have to do with your question?<p>We don't have reliable methodologies to build good software, and the only formal education people receive that involves building software isn't necessarily focused on actually building software. This is a nice way of saying "we don't know what we're doing." If even the best people in the field don't know what we're doing, then you can learn that on your own.<p>Personally, I still think a CS degree is the best preparation right now to be a professional SE. You will probably be exposed to more things than you would find on your own. But I also recognize that there are probably many professional developers without degrees who are better at what they do than people with degrees.<p>Also note that if you actually want to do research, then you <i>need</i> to get a degree.