As a former assembly language addict who used to live and breathe hexadecimal
on a daily basis (okay, that was twenty years ago, until I saw the light with
C), I was quite intrigued by
article called "Why learning assembly language is a good idea".
Unfortunately, the author’s obsession with performance spoiled what otherwise
sounded like a promising piece of advice.
However, as new programmers worked their way into the system, without the
benefits of having written several applications in assembly, the efficiency of
software applications began to decline.
This is the first questionable assertion and while all of us can come up with
examples of applications that are too slow to our taste, I don’t believe this to
be the case in a general manner.
it is clear today that the demise of assembly language’s popularity has had a
big impact on the efficiency of modern software.
This is not that clear to me. There are many skills you can
leverage to make an application go faster, among which:
- Consummate use of a profiler.
- Knowing when your code is I/O / network / CPU / memory – bound.
- Understanding the documentation of the external API (the one you don’t
own) that you are using.
- Having some basic knowledge of algorithm complexity (O(n) versus O(log(n)).
I would argue that in modern software, the knowledge of assembly language
will come in handy much less frequently than any of the above.
their ability to read disassembled high-level language code and detect
heinous bugs in a system, and their understanding of how the whole system
operates elevates them to near legendary status among their peers.
This might have been true twenty years ago. Nowadays, it’s just cute
The first milestone I achieved was the release in the mid-1990s of the
electronic edition of The Art of Assembly Language. This book, along with
the use of the accompanying UCR Standard Library for 80×86 Language Programmers,
reduced the effort needed to learn assembly language programming.
I’m sure this is a great book, but what if I want to write assembly language
on a Mac? Oops.
Maybe, just maybe, this might be a reason why assembly language is not as
necessary as it used to be? Because it ties you to an architecture.
Or worse, to a specific version at a certain point in time of a certain
architecture. Until the next revision comes up, with its own set of
operands, registers (or disappearance thereof) and quirks.
Since the author of the article teaches assembly language, I can understand
his disappointment on the state of software, but what worries me is that his
bitter attitude and partisan advice is part of the problem.
The best way to gain respect from your students is by not insulting their
intelligence and just be honest with them. I’ve had math teachers open
their class with "I know most of you don’t care about mathematics and you will
probably never use much of what is being taught here, so just take this
opportunity to listen to some unusual things that will challenge your mind, and
after that, you can just decide for yourself how useful it should be for you".
Now that got my interest.
I encourage developers to learn as many new languages as they can, and the
more esoteric the better. Assembly language is no exception, so if you’ve
never had a chance to study it, grab a book one day and go ahead and I’m sure
you will become a better programmer, somehow. But to me, the definition of
a good programmer is not someone who is an expert on a specific language, but
one who knows a lot of them and uses his good judgment to pick whichever is best
for the job.