system-design-course

Principles of Software Design

Fall 2024

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:

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

Syllabus

Books

Articles