Most important and useful CS courses?

turbo93
Fri, 17 May 2013 00:00:33 +0000

In today’s computer environments, one needs to at least be aware of what the underlying architecture is, and, if we’re talking about good efficient code, even what the compiler and runtime is doing to take advantage of said architecture. Those who do NOT take such things into consideration end up writing little utility programs for Windows that are a few hundred lines long (say, run once a day and check if there’s an update) and end up taking several megabytes of memory…

This is especially true writing mobile apps, or code that runs in less than stellar platforms (embedded) but in general it is hard to ignore the fact that the code runs in someone’s hardware. And the more you understand about the hardware the better the code can be.

Now extend the term ‘architecture’ a bit and see how your code runs in the whole ecospace. I’m now sending stuff to the cloud over the cellular network, someone who thinks abstract could likely care less about the cost of sending data to the cloud, we have to be aware of how much we send because our customer is paying.

My definition of software engineering comes from the old times, where Edsger Dijkstra himself was quoted as saying that software engineering has accepted as its charter "How to program if you cannot.". In other words, no amount of engineering can teach someone who should have been an accounting major how to write code. The whole idea of ‘writing code’ or ‘programming’ is anathema to many schools that teach all the hoity-toity methodologies and so on. But at the end of the day, the code has to be written, and so on.

Some software engineering programs that teach methodology, requirements gathering, and the like, are useful. If they use modern tools to do so, even better. But at the end of the day someone has to write the code. Software engineering is often taken to mean that just like 10 structural engineers will come up with very similar calculations for a bridge, or 10 mechanical engineers will design the same gear, that 10 software engineers will design the same or close to it system for the same requirements. Not in my lifetime.