This course walks students through the software design phases: Software Architecture and Internal Detailed Design. During each design phase, the focus is mainly on the best-known design principles, concetps, patterns, and interfaces. Further, throughout this course, the students learn how to apply those concepts to design and implement practical software problems (usually using UML and Java).