Don't Make Me Think by Steve Krug and The Design of Everyday Things by Don Norman.
While they're not strictly software or programming related, I really like the concepts of making interfaces that require minimal thought to use and empathizing with your users. I've seen an unfortunate amount of "programming machismo" where a confusing or poorly engineered system is used and accepted because "that's just how things work in the real world". And whenever someone struggles with the process, it's obviously because they're wrong, not the system. But more often than not, if more than one person has trouble understanding your system, whether it's an API, a website, a build process, the design is the issue.