From time to time I have to explain to colleagues why I prefer a minimalistic approach to programming.
One analogy to cars :) ... for normal people, having automatic transmission is great ... you can drive the vehicle with only one hand, and it allows you to concentrate more on the actual driving. But race cars still have manual or semi-automatic transmissions. Thus race drivers are empowered to do neat tricks while driving ... like not changing gears while passing another car to not lose acceleration. A manual transmission is also great for off road driving. And great drivers are also good mechanics ... cars break during races, and without knowing your car, you probably won't finish.
Of course, not all of us are meant to be race drivers. But if you want to be the best you can be, taking the ease route is not the way to go.
Thing is, a race car is designed with the fact in mind that you're not going to do anything but drive when you're in the seat. If there were racing-while-talking-on-cellphones competitions, the automatic transmission would probably be a better optimization in terms of available-attention-to-performance.
Likewise, for some types of programs (extremely parallel ones, for example), you have so many high-level considerations that also thinking about the low-level implications would simply be too much. Premature optimization is just as much a drain on the programmer as the program.
> you have so many high-level considerations that also thinking about the low-level implications would simply be too much
You still have to have a high-level perspective on how things are working, because abstractions are often leaky.
For example, I don't care much about tasks related to systems administration, allowing me to concentrate on what matters to me ... for instance I don't care about the difference between Postfix and Sendmail, or the difference between Apache and Lighttpd ... I just use the one I know until I have a problem with it, but when I do have a problem I have to find ways to solve it. And some knowledge on how the protocols and processes work really help.
You don't (usually) think about your oil when you're driving, and you especially don't change your oil while driving. Just because you understand how the low level works doesn't mean you keep it loaded in your working memory simultaneously to the high-level knowledge. You change your oil when the car is parked; you optimize when you're not in the middle of writing a feature or fixing a bug.
One analogy to cars :) ... for normal people, having automatic transmission is great ... you can drive the vehicle with only one hand, and it allows you to concentrate more on the actual driving. But race cars still have manual or semi-automatic transmissions. Thus race drivers are empowered to do neat tricks while driving ... like not changing gears while passing another car to not lose acceleration. A manual transmission is also great for off road driving. And great drivers are also good mechanics ... cars break during races, and without knowing your car, you probably won't finish.
Of course, not all of us are meant to be race drivers. But if you want to be the best you can be, taking the ease route is not the way to go.