While I agree that an understanding of a machines architecture is for some types of programming useful, for the ordinary application programmer it is of little use. If the writer of the under laying operating system have done there job well, the system libraries will contain tight and lean code that understands the architecture and uses it to its fullest extent. This may or may not be true of certain modern operating systems!
In addition any thing more than a basic understanding of a modern 32 bit processor which may not even run directly the machine code you write is requires a completely new (and large) area of expertise. One which probably to wide and deep for an application programmer to learn along side what he or she already needs to know.