I’ve been contemplating with some disillusionment the practice of ignoring poor quality program design inherent in the assignments of many computing courses. When we are asked to focus on one particular skill just to ‘get the job done’, it seems that we’re losing something in ignoring the bigger picture, especially when you consider that there is no way this would happen in the industry. To take an extreme example you won’t last long in a software job if you ignore exceptions in order to focus on getting data in and out of a program. However paradoxically practices like these are necessary (and generally encouraged) in order to complete an assignment in an acceptable time frame.
The problem is you don’t get much more than a surface level understanding of how best to employ technologies if you’re only focusing on one goal at a time. While I agree this may be necessary when beginning to learn a new skill, such as use of SQL, sooner or later you’re going to need to hook that skill up with some other’s you’ve acquired. In the case of SQL, you’re going to want to hook it up to an application – but this is only the start of the story. Not only would you want to make use of it in an application, you’ll eventually need to know how best to design software that uses SQL based data persistence to a relational database and how to architect the overall solution. Sadly the interweaving of technologies is something you really don’t find on many course syllabuses, but you’ll certainly come into contact with it in the software industry. In fact its a discipline that many would consider belonging only to a ‘senior’ developer.
Well, if I can grasp such concepts, I’m sure there are many far cleverer students out there that also can. So it begs the question why are courses not more industry oriented, and why do we need to waste time re-iterating things such as how to write SQL if we never learn the wider context under which it is generally used? (I’m talking multi-tier, persistence managed, distributed systems with rich application and presentation layers)

