Sunday, December 30, 2007

Technology Notes, Vol 1, Issue 5: Software Engineering

In this issue of technology notes, we'll talk about the software engineering that you should have learnt in your Computer Science undergraduate degree.

Nearly every Computer Science course offers a software engineering subject, usually as a compulsory subject. Typically, topics covered include software development models, phases of development like design and testing, and an overview of common techniques in software development. This subject is usually boring - in fact, in "my time" it was so bad that we actually had a lecturer come and read to us from the text book. I mean, he literally read out the book to us. So frustrated were we at this turn of events that we actually forced him to stop, and suggested that we'd read up that stuff and present it ourselves. Which we did. And might I say, in good measure. However, our takeaway from that course wasn't much more than public presentation skills.

Which, in introspect is bad. Software engineering should be a part of the foundations of any computer science graduate. After all, if you are going to develop software, you should be aware of the techniques that the masters use. However, what the course teaches is not that. The course does not explain how masters develop software. It does not care about quality assurance processes; it doesn't care about real-world issues of large-scale software; the course does not introduce students to the complexities and pitfalls of developing a million-line C++ program. All it does is give keywords. CMM, Agile, Data-driven design, Top-down design, Waterfall, to name a few.

Hopefully, someday, we'll change this.

No comments: