Whenever you have abstraction, you have lost what it means to be an engineer. There is really only 1 way to engineer something as you end up optimizing for various quality metrics, most often cost.
There's only 1 correct answer for a bracket. You want it cheap and as strong as it needs to be.
How many correct answers in my code? Do we optimize for clean code? Fast code? Do we change programming languages or go with a familiar highly supported code? There are 2 similar libraries, which do we choose?
Programming is a hybrid of science, art, tradition, and authority. I think it pays better because of this complexity.
That being said, I'd trust an engineer to program something before I'd trust a programmer to build something.