After some 10 yrs in IT, I still dun see much value in my CS degree, why dun they just teach me these instead;<p>Step 1 - Find a(another) problem.
Step 2 - Build an awesome product to solve the problem in Step 1.
Step 3- Tag a price to your product.
Now go back to step 1.<p>It make so much more sense.
Been out of school for a while, but based on the new hires coming through the door I wish they would spend some time on software process: how to use source code control (including branching and merging), how to approach designs in the context of a system with cooperating programs so that compatibility is maintained without big-bang releases of multiple programs, proper use of bug/feature request tracking systems, why it is important to have consistent coding styles, how to read and modify code that was written by others (and how to write your code to make it easy to modify), how to work with other programmers on a team. These are nuts and bolts issues of the practice of writing software, but everybody seems doomed to come out of school and make the same mistakes unless they start in an environment with a good remedial training program to fix these deficiencies.
Testing! Unlike other necessary skills like using source control and writing documentation, testing can't really be mastered on the fly. I think the myopic scope of class projects doesn't let students grasp the long-term benefits of having well written unit and integration tests.<p>Here's a shot at such a course that covers testing through RSpec and Cucumber: <a href="http://tinyurl.com/ucb-cs169" rel="nofollow">http://tinyurl.com/ucb-cs169</a>
This is why good internships are so important while your an undergraduate in CS (or many other majors for that matter).<p>Depending on the university you go to, CS != Software Engineering. You don't encounter, and may not be even aware, of concepts like code reviews, build systems, or version control. By participating in an internship you are forced to address these gaps in your knowledge.<p>That being said, I don't think I would take away a single CS course I took as an undergrad and replace it with a course on software engineering practices. There is just too much strictly CS knowledge that is necessary for an undergraduate to learn.
I think a two (or more) semester course where you write some libraries/functionality during the first semester from a blank page, and then use/refactor/enhance that code in the second semester would be very valuable. "Eat your own dog food" is something everyone should learn in school. Perhaps the third semester could be based on getting some other students code to enhance as well as being a resource for someone using your code from the previous classes.
I'm not arguing in favor of CS degrees -- surely, there is more pragmatic material to be covered -- but what you've stated is overly simplified.<p>What I <i>would</i> argue is that CS programs give you the background knowledge required to pick up whatever is needed for a certain task. For many, that task is <i>not</i> entrepreneurship.<p>Would a Software Entrepreneurship degree be cool? Of course, but it doesn't negate the worth of another degree.
I wish my degree had more emphasis on working with an existing codebase instead of a constant stream of greenfield applications. I wrote plenty of programs in the n-thousand lines of code range, but never had to worry about interoperability or maintenance at all. In my life after formal education, those have been FAR more problematic than the things I learned.
Most colleges do have an entrepreneurship course in their business college, and many colleges allow you to take electives outside your degree program. I did, and entrepreneurship was one of them.