Common understanding dictates that theory and practicality don’t match. Often this type of argument is used as an excuse for the failure of a project. While I agree that theory and reality may be disconnected, I also believe that the two should be part of the same closed-loop system. In other words, as software engineers learn techniques and develop practices that prove to be successful, the resulting material should be pushed back to the theoretical side of learning. Professors should attempt to teach best practices as a hybrid of pure theory and proven successes.
I agree that a disconnect exists between best practices (theory) and what actually works. But I don’t agree that the disconnect must remain. Smart companies continually push feedback from the field to the sales side. This way clients are presented with a realistic expectation of how the software life-cycle with unfold. At the same time, the sales side pushes the engineers to deliver projects based on “best practices”, the theory presented to the customer. There is a bi-directional balance that must take place to close the gap between theory and practice.