I took a class in my undergrad program titled Human Engineering and Ergonomics. It was an elective in comp sci but I really think it should have been a requirement. Going through how humans communicate and perceive interfaces/communication. Every developer should have to take it.
This trickles down into UX design aswell, so many programmers just do not understand it, which makes opensource software sometimes so annoying to use