I think that there is a big difference between good programing and micro-optimization.
If there are two ways to do the same task, one being faster than the other and both having the same readability, you should use the faster. Always. And this is good programing. There's no reason to not use a better algorithm to solve a problem. And even documenting it is easy: give the algorithm name, everybody will be able to google it and find more information about how it works.
And good algorithms are already optimized. They will be fast. They will be small. They will use the minimum required memory.
Even if using them your program still don't have that performance, them you can consider micro-optimizing it. And you'll have to really know the language to be able to micro-optimize.
And there's always room for spending some more money on hardware. Hardware is cheap, programmers are expensive. Don't spend too much time / money by optimizing when you can just buy hardware.