Many software developers believe that programming is primarily focused on problem solving. I believe that software is more about communication. When we write code, we are not only instructing the computer but we're conveying information of our intentions to those who may interact with our work in the future. It's essential to be mindful of our audience when we do this.
Utilizing advanced languages features or abstractions (eg. metaprogramming in Ruby) might make us feel proud or might simplify the writing of our own code, however they can also create barriers for others attempting to comprehend and collaborate on a codebase.
It's important to appreciate how much the way you write your code will affect the time it takes for someone to grasp and become familiar the system in question.
Just as you would adapt your language in a conversation to ensure effective communication, you should also strive to make your code accessible and straightforward.