This course introduces basic concepts and principles of software design and software architecture. It starts with a discussion on design issues, followed by a coverage of design patterns. It then gives an overview of architectural structures and styles. Practical approaches and methods for creating and analyzing software architecture are presented. The emphasis is on the interaction between quality attributes and software architecture. Students will also gain experiences with examples in design pattern application and case studies in software architecture.