Why teach Assembly Language Programming to Computer Science Students?

For me, if this is to be considered to be a serious question, it should then read, "Why bother to teach at all".

I have always been passionate about Computer Architecture and both fascinated and overwhelmed by how computing machines compute. It thus almost follows that at both the universities at which I have worked, I have got to teach the Computer Architecture courses. I have been doing so for more than twenty years and have mostly enjoying doing so despite my perception of the students basic dislike of the subject, and my own efforts to have it removed from the curriculum somewhere along the line.

I have also been completely fascinated by computing's relatively short, but rich and extremely interesting and exciting history. This too, the students generally seem to dislike. What is worse, is that they probably think it is irrelevant. I find this tendency of South African students to shun computing history very ironic. I say this as South Africa is a country that currently expresses a deep seated desire that our mostly incorrectly recorded history, be rewritten.

While there is also much I could and would like to say about the relevance of Computer Architecture courses to the Computer Science curriculum, here I need to say something about the relevance of Assembly Language Programming to Computer Architecture.

I believe that Assembly Language epitomises the computing capability of the computers we use, be it to complete course work, browse the web, send an email, play a game or watch a movie. I like to believe that Computer Science is all about abstraction and indeed it is. It is what allows all the activities I have just described to become real on a machine that at its lowest level, is in effect running assembly language programs.

If this is the case, then surely it is essential that Computer Science students are well versed in both Computer Architecture and Assembly Language Programming. It is one of the pillars on which the discipline will ultimate stand, or dare I say it, fall.

It must thus surely follow that a Computer Architecture course including a bit of Computing History should be included in any mainstream undergraduate computer science curriculum.

PS:. Computer Architecture will not appear in the UKZN Computer Science curriculum in 2008. It may appear again in 2009, but probably as a sub-module. If that is the case, then the subject's inherent worth in the curriculum will have been severely diminished. The same will probably also be true of the subject it intrudes upon.