Nick Mudge Ignition Software Consulting & Development

I love the introduction in the book Assembly Language Step-by-Step: Programming with Linux, entitled "Why Would You Want to Do That?".

From the introduction:

Note well: When somebody asks you, "Why would you want to do that?" what it really means is this: "You've asked me how to do something that is either impossible using the tools that I favor or completely outside my experience, but I don't want to lose face by admitting it. So... how 'bout those Black hawks?"

I heard it again and again over the years:

Q: How can I set up a C string so that I can read its length without scanning it?
A: Why would you want to do that?

Q: How can I write an assembly language subroutine callable from Turbo Pascal?
A: Why would you want to do that?

Q: How can I write Windows apps in assembly language?
A: Why would you want to do that?

The answer to the Infamous Question is always the same, and if the weasels ever ask it of you, snap back as quickly as possible, "Because I want to know how it works."

That is a completely sufficient answer. It's the answer I've used every single time, except for one occasion a considerable number of years ago, when I put forth that I wanted to write a book that taught people how to program in assembly language as their first experience in programming:

Q: Good grief, why would you want to do that?
A: Because it's the best way there is to build the skills required to understand how all the rest of the programming universe works.

And some just plain good commentary on programming:

Being a programmer is one thing above all else: it is understanding how things work. Learning to be a programmer, furthermore, is almost entirely a process of learning how things work. This can be done at various levels, depending on the tools you're using.

These are just tidbits but the introduction as a whole is great.