Software engineering provides a systematic approach to software development through the use of life cycle models and past experience. Key changes in software development practices include an emphasis on prevention over correction of errors through techniques like design reviews and testing. Modern practices also involve defining requirements, designing software through distinct phases, and developing software according to a chosen life cycle model to facilitate coordination between team members.