In, sort of a vague sense, construction taught me to think in terms of efficiency. When you're on a jobsite packing your work bags around, hauling lumber, dragging power cords through cluttered, unfinished rooms and hallways and generally breaking your back turning a huge pile of lumber and plywood into a house, you learn quickly that every move you make has to do something useful. This is especially true when you have a small business owner boss behind you, yelling about how he loses money every time you walk from point a to point b without taking something with you.
In programming, it can often be the same. Instead of saving your back, though, you're trying to save time. This takes the form of easily maintainable and re-usable code. Every time you make a new function to do something painfully similar to another function, or you make a new class that could easily be inherited from something more generic, but almost the same, you're robbing yourself of time and money, just as much as if a framer takes 6 trips back and forth to do something he, or (rarely) she, could have done in one trip. In both cases the payoff is less time working on a big stupid job, and and a happier richer boss.