The problem with making things is that:
The dreamer has the creative idea, but doesn’t understand the theoretical principles to make it plausible. Nor do they care as much as they should.
The scientists understand the theoretical principles, but don’t understand proper software architecture to retain it in the long run. Nor do they care as much as they should.
The programmers design functional and architectually maintainable software, but can’t design a usable interface for everyday people. Nor do they care as much as they should.
The designers design an aesthetically pleasing interface, but they are not the ones that are going to be using it everyday. Nor do they care as much as they should.
The users of the product just want to accomplish their task at hand, but can’t stop purchasing things that are hard to use. Nor do they care as much as they should.
The making of everyday objects has become specializations of specializations. Each aspect and stage of a product’s birth requires specialized knowledges that are quite discreet from another. However, I still think that one should learn a bit about the process before and after:
Physists should learn good programming and creative imagination.
Programmers should learn complex math and usability design.
Designers should learn good programming and actually use their products.