Candy wrote:After that, the important parts are covered. My current company (company where I'm placed) misses out on at least 3 of these, possibly 4.
Buying the latest VS every year, I guess?
Back to the universities (actually, I've tried just one enough to say something about it: mine). Mine provides four courses directly related to software programming: Software Architecture, Software Engineering, Modelling and System Development, and The Project, the last two being required for all computer science students. I've completed three of them, and I'll be doing the fourth one (software engineering) the coming season.
Modelling and system development is the typical failing course as the essay describes. Bad teacher (in the sense of being worth an fail grade in didactical qualities - I spent some colleges asleep because of it), and having to believe him on his word. And then we had only three colleges and one 2-hour assignment involving programming patterns. With some wisdom you could apply the theory to other assignments, but none of them were large-scale enough that it mattered.
Then there was Software Architecture: more sleeping hours, but at least it came with a good book full of experiences and live examples of why to use certain designs and why not use others.
A year later I decided on taking on the Project. We had to write a plug-in testing environment for computer vision algorithms. The main goal was obviously to allow many additions in the (far) future. Instinctively we grabbed to a set of patterns, but soon it became obvious that doing it otherwise would have had horrible consequences.
That said, you learn from mistakes more than successes: The two rewrites of my kernel taught me that a design must be awfully complete to oversee what needs to be done. (I never wrote down my kernel design, so there are probably some loopholes left over).
Another project learnt me how annoying customers could be - although this is the most crappy project that is currently in use it stands as a good example to think before writing code.
IMO universities are too limited to teach proper software engineering in the 3 years they are supposed to pump students to Bachelor degree. Getting encumbred by your own errors is a good drive to improve. Having students run a project each year would take lots of time away from other courses which are obviously also required for a good education, but I do think it would help if most programming courses would involve a two-stage assignment: for the first assignment, write a program; for the second one you have to improve and expand on it. Without using patterns, it gets annoying very quickly, which is in turn a reason to use those patterns.
In essence, I agree with Colonel Kernel and Candy in that proper software engineering requires live experience, but proper educational institutes can arrange for a good part of that experience in-house.
€.02