system-design-course

Course schedule

Week Topic Description Reading Lab
Week 1 Introduction. Language of the Design - 1 Intro to the course, curriculum.

What is software design and architecture? It’s place in software engineering. Why software design is important in software engineering processes? Introduction to architectural concepts.
https://aosabook.org/en/v2/git.html - Git in a Nutshell.
https://www.bell-labs.com/usr/dmr/www/hist.pdf
UNIX: A History and a Memoir, Brian Kernighan.
Understand Git design.
Week 2 Language of the Design - 2 The central problem of software design – system decomposition and abstraction creation.
Concept of complexity and how to manage it. – definition, symptoms, causes, tactics vs strategy, deep modules.
Philosophy of Software Design (Chapters 1-5). Find the implementation of fopen in the Linux kernel. Measure the SLOC and other types of complexity associated with it.
Week 3 System Decomposition Design principles and practices.

Introduction of the notion of a concept and decomposition as a requirement fulfillment. Type of decompositions – functional, object-oriented, component/module-based. Methodology of friction/volatility-based decomposition.
Juval Lowy, Righting the Software Chapter 1-2. Problem K
Week 4 Abstractions Composition. Discovering abstractions with clashing concepts along traction lines.

Understanding the conceptual integrity and the role of the architect.

Discussion of Problem K
Philosophy of Software Design (Chapters 6-10). Build System Design
Week 5 1st Embodiment The Unix Operating System and its Philosophy: emphasizes simplicity, short, clear, modular, and extensible code that can be easily maintained and repurposed by developers other than its creators. It introduced the concept of pipelines and the practice of combining small, reliable programs to perform complex operations.    
Week 6 1st Approach Build Systems – why, what, when, how and who? https://dl.acm.org/doi/pdf/10.1145/3236774  
Week 7 2st Embodiment From algorithm to system: Google’s search engine architecture demonstrated the effectiveness of PageRank, a link analysis algorithm, and the use of massively distributed computing to index the web. It set new standards for scalability, reliability, and speed in data processing.    
Week 8 3st Embodiment Git and Distributed Version Control: introduced a distributed model of version control, enabling multiple developers to work on a project simultaneously without a central repository with a small monolithic executable.    
Week 9 1st NF The Relational Database Model: Introduced by Edgar Codd, this model organizes data into tables (or relations) of columns and rows, with a key identifying each row. It revolutionized how data is stored, accessed, and manipulated, offering a more systematic and flexible approach than earlier flat-file databases. The principles of relational database design underpin nearly all modern databases, influencing data modeling, SQL, and the development of database management systems like Oracle, MySQL, and PostgreSQL.    
Week 10 1st DS Distributed Systems – RAFT