EfficientA term generally used to mean fast, optimized, or non-wasteful when referring to programs, algorithms, or programming languages (if it has low overhead).
The obsessive desire to make programs and languages efficient on certain hardware leads to low-level design, by adapting the problem domain to the limitations of the machine. This mindset completely ignores the fact that computers are a tool for humans, and therefore software should be designed primarily for humans to use to get the job done. Humans need software and programs that are expressive, flexible and extensible, which may or may not be hardware-efficient. If software designed according to those principles is so inefficient on some hardware as to be impractical, then the hardware cannot do the job it is intended to do, and the hardware should be thrown out and redesigned to suit the software.
Nearly all software existing today is designed with hardware efficiency in mind, and is therefore incorrect.
Really? Is it for this outrageous obsession with efficiency that these days software trashes exorbitant amount of machine resources and user time to accomplish even the most simple task? No, I don't think that GUIs are the reason for which current software is mostly garbage, they suffer of the same problem affecting other aspects of software.
I think the reason is the lack of systemic thinking: thinking at the level of an entire system, how each identified subsystem interact with each other and what is its contribution to the whole.