- There appears to be very little programming. The main decision an instructor has to make is whether to pick C++ or Java.
- There appears to be a lot on algorithms, complexity, P=NP, etc. and applying programming to them.
- There appears to be some concentration on applying programming to problem solving not related to algorithms e.g. databases.
From an outsider’s perspective this seems to imply that CS majors learn very little in terms of practical programming in the job market:
- Making code efficient and readable is more or less left to company/industry standards. Perhaps this is understandable due to the fact that different industries/companies use different languages.
- Software requirements gathering is an art to be learned as you go along even though getting this information is almost an important as coding.
- There is very little being taught or introduced in terms of software project management (not the budgeting etc.) but the cycle through which a software product is created - requirements, specifications, prototyping, change management, etc.
- Working in teams e.g. eXtreme programming, etc.
Reading Ed Yourdon’s Decline and Fall of the American Programmer, I was surprised at how much the above matters but doesn’t seem to be taught or even introduced. The CS curriculum in college seems to be targeted toward finding the innovative and creative spark that can develop something new whereas the nitty gritty things that many data processing projects require are left to companies to pick up. Companies almost have to retrain CS majors. Perhaps vocational schools and community colleges teach this nitty grity but I doubt it. It is not surprising then that programmers who come out of college seem so unprepared in the real world. Thus There may be a role for an industry sponsored CS curriculum that targets these details.
There aren’t that many who are going to be the ones to come up with a new algorithm or a new software product but perhaps it is because we think we might be the one who will come up with the next Windows or Java or Facebook that we ignore the boring institutional details. The romance and excitement of two or three guys coding like hell on little to no-sleep, surviving on Red Bull and stale pizza is so ingrained in us that we think that this is the nom. Perhaps this is why most software projects adopt a code like hell approach almost by default.