The title made me think about what my answer would be. If there's one thing a programmer should know, what is it? What is the most important thing I didn't understand about programming when I started doing it?
My answer would be: that code should be seen not as a static thing, like the answer to a math problem, but as an evolving effort to figure out the right question to be the answer to; and that it should thus be written to be easy to change.
Coming up with "The" one thing a programmer should know seems too narrow a question. Kind of like "What is your favorite song?" instead of "What are some of your favorite songs?" A more interesting question might be "What things would you emphasize to someone learning to program?" Flexibility? Precision? My answer:
Every programmer should
1. Learn C / Assembly - Understand how code interacts with hardware.
2. Learn Lisp - Understand how ideas interact with code (and vice versa).
In an industrial design class I took this sort of methodology was heavily stressed using words like "divergent thinking" and "no-worry prototypes".
Generally, I believe that the super-specializing niche engineering that's popular today is best served by broadening your base rather than sharpening your technical skills to stand out in a field of pins.
I.e. marketing, ID design attitudes, learning to paint.
My answer would be: that code should be seen not as a static thing, like the answer to a math problem, but as an evolving effort to figure out the right question to be the answer to; and that it should thus be written to be easy to change.