Is it necessary to understand what's happening at the hardware level to be a good programmer?comments are not versioned, and not permanent, and so are useless for adding to a set of answers. Most posters are also prone to ignoring use of comments to update their answers, and most answers are not tagged as "community wiki" answers and so cannot be edited by others in such a way as to maintain some attribution to the subsequent contributor(s). Besides, this particular question has started a true discussion, and like it or not that's the way some of these things go. Trying to force every contribution into one mold is a major failing of the stackexchange concept.

Nov18

comment

Command line options style - POSIX or what?POSIX 1003.1-2003, Base Definitions, Chapter 12, Section 2 gives the following guidelines about utility command-line syntax: "Each option name should be a single alphanumeric character (the alnum character classification) from the portable character set." and "All options should be preceded by the ’−’ delimiter character."

Is it necessary to understand what's happening at the hardware level to be a good programmer?I would suggest that PDP-11 assembler is a bit nicer to learn than all of the others mentioned. What all of the others teach are the limitations forced by more limited hardware resources, and/or by more limited hardware design and forethought. Something like one of the all-too-common 8051 family teaches how really bizarre the programming model can get on such limited hardware (where Steve's mention of different address spaces, for example, come into play).