Every programmer concerned with application performance of the code they write needs to have a good profiler at hand. This must be used to profile your applications regularly to know what part of your code is negatively affecting performance. A paradox in programming is that often, poor performance is caused by bad application design and not bad code, but you cannot verify the application design until you have written some code. However, some good designs are hampered by bad code and a profiler can only point out the bottlenecks, it cannot change your code and/or design.
Bad code must be dealt with before a single line of code is written (so to speak). This is achieved by acquiring some good coding habits and arming yourself with knowledge of the internal workings of a CPU, how your particular compiler works and how your high level code is optimized and translated to low-level machine code. This is where this book, and series thereof, comes in.
No Starch Press presents a great book that answers a lot of the fundamental questions of life, like "what is an array?" and "where do strings come from?"