Skip to content

Latest commit

 

History

History
30 lines (21 loc) · 2.1 KB

readme.md

File metadata and controls

30 lines (21 loc) · 2.1 KB

Principles of the Software Design Course

2024-2025

Educational Objectives

This is a mixed under- and graduate-level elective course on the basic principles of designing software systems. The course is intended to create a foundation for designing good software and provide the tools for practical usage in the industry. This course has a heavy emphasis on small programming projects. There are also readings assigned for each class and a final exam. Upon successful completion of this course, the student should be able to:

  • Understand key principles of software design.
  • Develop the ability to critique and improve software designs.
  • Explore different methodologies and apply them in software design.
  • Gain insights into real-world software engineering challenges and solutions.
  • Apply best practices for software construction.

Expectations and goals

We profoundly believe that there are only two main problems worth teaching to grow a good software architect - system decomposition and abstraction creation (composition). Everything else can be found in standards and normative documents. We focus on creating a sense of systems and abstractions, processes for decomposing and composing systems. We try to bring those notions into a language – a pattern language similar to the one that was created in the seminal Christopher Alexander’s book “Pattern Language” and, in our humble opinion, was misused in the GoF “Design Patterns” book. This course explores the principles and practices of software design and architecture, focusing on the philosophies and strategies outlined in essential texts. Students will learn to apply these concepts to create robust, maintainable, and scalable software systems.

Course materials

Required materials

  • John Osterhout, Philosophy of Software Design
  • George Fairbanks, Just Enough Software Architecture, Risk-based approach.
  • Fred Brooks, Design of Design
  • Juval Löwy, Righting Software