I believe that a lack of domain knowledge is the root cause of a lot of very bad software that gets developed and I think that it is up to computer programmers and their managers to deal with this. Acquiring domain knowledge is an essential component in the development of software that really works well for its users.
Basically what @clobble_wobble said. For a fast introduction I recommend Domain-Driven Design Quickly (available for free). If you are interested in gathering requirements in a way that can also strengthen your understanding of the business domain, you may want to check the Event Storming technique.