Notes for CS Undergrads: Do I really need to know assembly?


March 08, 2006

Paraphrasing a recent question from a CS undergrad:

Do I really have to know assembly? I hate everything about the language we're using. It's pretty much obsolete. It's hard to debug, and it is VERY time consuming.

etc. etc. ad infinitum

Yes, learning some form of assembly is very important. In order to be a competant computer scientist you need to know how the machine works down to the metal.

Even if you never write production code in assembly (and god I hope you never have to do that unless you happen to be writing a compiler or optimizing a critical path), understanding how to peek and poke registers and memory addresses under the Von Neuman architecture is key to grasping why certain higher level abstractions are what they are.

If you don't understand assembly then chances are you don't *really* understand pointers in C (and most people don't) which likely means you don't *really* understand references in C++, Java, Perl, Ruby, or Lisp either... nor why C and Java arrays aren't resizeable... nor why 2,147,483,647 + 2,147,483,639 can sometimes equal -10.

Needless to say, this leads to all manner of stupidity.

Yes. Learn assembly. Yes, yes, yes, absolutely! Even if it's for an architecture that's not in heavy use... Even if you're never paid to write a line of it in your life... It's like veggies and vitamins. It's good for you.