Advanced Software Design Course by Mirdin
Advanced Software Design Course is a program with 6 main modules aimed at improving software design skills. The course covers the principles of logic, data structure design, state management, modularity, and error correction. Students undergo code refactoring, learn to avoid hidden dependencies, and effectively tackle software system design challenges.
Read more about the course
Course Description
Unit 1 | Hidden Level of Logic
Discover the key difference between design and implementation in our first module. Master Hoare's triples to understand code complexity and lay the foundation for software development expertise.
- Why design is fundamentally different from implementation and what this means for creating reliable code.
- How code that never fails can still contain errors.
- Understanding that code that looks simple can be complex, and how to avoid writing vulnerable code.
- Hoare's triples - a simple specification method that allows you to see complexity as clearly as the code itself.
Unit 2 | Principle of Embedded Design
Dive into the deepest and most far-reaching principle. How to embed program design directly into its code?
- Understanding that code can be mechanically derived from design documentation, and how this perspective simplifies system design.
- Using the principle of embedded design for better code structuring.
- Understanding the most general forms of connections between parts of code. How to find and eliminate hidden dependencies, preventing simple tasks from becoming complex.
Unit 3 | Principle of Representable and Allowable States
Learn to constrain program states so that only allowable states can be represented.
- Understanding how to partition the state space of a program and reduce the likelihood of failures.
- Designing data structures and API interfaces that cannot be misused.
- Developing code without error checks that is more reliable than the most "defensive" approach.
Unit 4 | Principle of Data over Code
Learn how a data-focused approach contributes to better modularity and information hiding.
- Parnas's secret of information hiding, which has been used for over 40 years.
- How using the principle of information hiding makes code more modular and extensible.
- Organizing a program around data structures to increase its clarity and readability.
- How extreme application of this principle allows for faster understanding of complex systems.
Unit 5 | Algebraic Refactoring
Use the power of algebra to discover that what seems different might actually be the same.
- Understanding sums and products of data types, and that most data structures are special cases of these two fundamental constructs.
- How most common refactorings are special cases of a few rules.
- How refactoring a program is analogous to factoring polynomials in algebra.
Unit 6 | Code Longevity
When is it worth spending time on thoughtful design, and when can it be deferred?
- Identifying and isolating assumptions embedded in individual lines of code.
- Using the Liskov substitution principle to ensure code compatibility with future versions.
- Applying subtype theory to predict and prevent "complexity buildup," which can make code difficult to modify and clean up in the future.
Watch Online Advanced Software Design Course by Mirdin
# | Title | Duration |
---|---|---|
1 | A Story about Stories | 05:04 |
2 | Ghosts | 04:02 |
3 | The Three Levels of Software | 03:46 |
4 | Case Study | Chromium | 03:56 |
5 | Hoare Logic | 06:13 |
6 | Code Knowledge | 04:48 |
7 | Lesson | Hoare logic | 23:45 |
8 | Video Answer | The Three Levels Of Software | 09:18 |
9 | Video Answer | The Design of Software is A Thing Apart | 07:32 |
10 | Video Answer | Painless Functional Specification | 00:57 |
11 | Video Answer | Modules Matters Most | 08:48 |
12 | Bonus Video | You are a Program Synthesizer | 14:20 |
13 | Video Answer | Hoare Logic | Question 1 | 01:48 |
14 | Video Answer | Hoare Logic | Question 2 | 01:52 |
15 | Video Answer | Hoare Logic | Question 3 | 04:52 |
16 | Video Answer | Hoare Logic | Question 4 | 14:50 |
17 | Video Answer | Hoare Logic | Question 4.1 | Bonus | 03:51 |
18 | Video Answer | Hoare Logic | Question 5 | 08:48 |
19 | Video Answer | Hoare Logic | Question 6 | 07:34 |
20 | A Cautionary Tale | 02:41 |
21 | What is Design? | 01:16 |
22 | The Embedded Design Principle Examples | 04:12 |
23 | The Plain English Test | 07:42 |
24 | Linguistic Antipatterns | 02:39 |
25 | Hidden Coupling | 07:42 |
26 | SQLite Case Study | 03:34 |
27 | Video Answer | Dark Knowledge and Graph Grammars | 03:47 |
28 | Video Answer | My Favorite Principle for Code Quality | 02:09 |
29 | Video Answer | Boolean Blindness | 04:20 |
30 | Video Answer | Hidden Coupling | Examples 1 to 4 | 05:22 |
31 | Video Answer | Hidden Coupling | Examples 5 to 9 | 08:19 |
32 | Video Answer | Hidden Coupling | The X Macro Trick | 03:22 |
33 | Video Answer | Django E-mail Subsystem | Exercise 1 | 02:19 |
34 | Video Answer | Django E-mail Subsystem | Exercise 2.1 | 03:04 |
35 | Video Answer | Django E-mail Subsystem | Exercise 2.2 | 02:10 |
36 | Video Answer | Django E-mail Subsystem | Exercise 2.3 | 03:52 |
37 | Video Answer | Django E-mail Subsystem | Exercise 3.1 | 00:49 |
38 | Video Answer | Django E-mail Subsystem | Exercise 3.2 | 01:36 |
39 | Video Answer | Django E-mail Subsystem | Exercise 3.3 | 03:48 |
40 | Video Answer | Django E-mail Subsystem | Exercise 4.1 | 03:13 |
41 | Video Answer | Django E-mail Subsystem | Exercise 4.2 | 01:35 |
42 | Video Answer | Django E-mail Subsystem | Exercise 4.3 | 04:35 |
43 | Video Answer | Django E-mail Subsystem | Exercise 4.4 | 02:25 |
44 | Video Answer | Django E-mail Subsystem | Exercise 4.5 | 09:33 |
45 | Video Answer | Django E-mail Subsystem | Exercise 4.6 | 06:40 |
46 | Video Answer | Django E-mail Subsystem | Exercise 5 | 02:38 |
47 | Video Answer | Django E-mail Subsystem | Exercise 6 | 04:25 |
48 | Bug Alert | 01:25 |
49 | Bug Found | 05:14 |
50 | The Two Views Of State | 07:26 |
51 | Locking Down Transitions | 04:19 |
52 | The Internal View | 07:48 |
53 | MIRO | 03:01 |
54 | Video Answer | Applying the Linus Torvalds Good Taste coding requirement | 05:00 |
55 | Video Answer | Bugs And Battleships | 06:41 |
56 | Video Answer | The Most Dangerous Code in The World | 01:51 |
57 | Video Answer | Where To Draw The Boundary | 05:48 |
58 | Video Answer | Restricting APIs | Exercise 1.1 | 04:39 |
59 | Video Answer | Restricting APIs | Exercise 1.2 | 03:31 |
60 | Video Answer | Restricting APIs | Exercise 1.3 | 01:14 |
61 | Video Answer | Restricting APIs | Exercise 2 | 15:06 |
62 | Video Answer | Restricting APIs | Exercise 2 Extra Challenge 1 | 01:55 |
63 | Video Answer | Simpler and More Correct | Exercise 1.1 | 02:23 |
64 | Video Answer | Simpler and More Correct | Exercise 1.2 | 01:56 |
65 | Video Answer | Simpler and More Correct | Exercise 1.3 | 05:26 |
66 | Video Answer | Simpler and More Correct | Exercise 1.4 | 09:21 |
67 | Video Answer | Simpler and More Correct | Exercise 1.5 | 06:53 |
68 | Video Answer | Simpler and More Correct | Exercise 2 | 05:21 |
69 | Video Answer | Simpler and More Correct | Exercise 2 Extra | 02:01 |
70 | The Data Over Code Principle Intro | 02:52 |
71 | Modularization | 06:17 |
72 | What is a Secret | 03:00 |
73 | Data Abstraction in Action | 03:03 |
74 | Restricting State | 03:25 |
75 | Why Secrets Imply Data Over Code | 04:08 |
76 | Magic Trick Preamble | 01:39 |
77 | Magic Trick Short Magic Trick | 07:13 |
78 | Magic Trick Long Magic Trick | 09:18 |
79 | The Information-Hiding Dilemma | 00:50 |
80 | Video Answer On the Criteria to be Used in Decomposing Systems Into Modules | 05:56 |
81 | Video Answer The Secret History of Information Hiding | 06:00 |
82 | Video Answer Abstraction Not What You Think It Is | 08:17 |
83 | Video Answer Programmer's Apprentice | 04:46 |
84 | Video Answer Worktrees Question 1 | 01:14 |
85 | Video Answer Worktrees Question 2 | 02:14 |
86 | Video Answer Worktrees Question 3 | 04:43 |
87 | Video Answer Submodules Question 1 | 01:15 |
88 | Video Answer Submodules Question 2 | 09:18 |
89 | Do You Mean Refactorings | 02:05 |
90 | Reductions, Equivalences, and Rewriting | 07:22 |
91 | Algebraic Data Types Sums & Products | 09:12 |
92 | Functions are Exponentials | 09:12 |
93 | Bonus. Recursive Types | 04:19 |
94 | Video Answer The Algebra of Algebraic Datatypes Parts 1 and 2 | 04:49 |
95 | Video Answer Equational Reasoning Changing a function call | 11:04 |
96 | Video Answer Equational Reasoning Swapping an if-statement | 11:04 |
97 | Video Answer Equational Reasoning Un-nesting an If Statement | 11:04 |
98 | Video Answer Equational Reasoning Conditional-to-function | 11:04 |
99 | Video Answer Equational Reasoning Functoriality of Map Optional Bonus | 11:04 |
100 | Video Answer Algebraically Refactoring a Weak API Exercise 1 | 01:29 |
101 | Video Answer A Tale of Two Parsers Data Modeling Exercise 1 | 01:38 |
102 | Video Answer A Tale of Two Parsers Data Modeling Exercise 2 | 01:55 |
103 | Video Answer A Tale of Two Parsers Data Modeling Exercise 3 | 02:41 |
104 | Video Answer A Tale of Two Parsers Data Modeling Exercise 4 | 02:24 |
105 | Video Answer A Tale of Two Parsers Data Modeling Exercise 5 | 02:22 |
106 | Video Answer A Tale of Two Parsers Data Modeling Exercise 6 | 02:14 |
107 | Video Answer A Tale of Two Parsers Data Modeling Exercise 7 | 10:33 |
108 | Video Answer A Tale of Two Parsers Code follows data Exercise 1 | 01:53 |
109 | Video Answer A Tale of Two Parsers Code follows data Exercise 2 | 01:52 |
110 | Video Answer A Tale of Two Parsers Code follows data Exercise 3 | 06:00 |
111 | Video Answer A Tale of Two Parsers Code follows data Exercise 4 | 01:04 |
112 | Making Future Proof Code A Tale Of Two Mistakes | 04:51 |
113 | The RAD Process Step 1 Reduce and Sequester Assumptions | 04:09 |
114 | The RAD Process Step 2 Add Openness | 03:54 |
115 | The RAD Process Step 3 Diminish Complexity Ratchets | 07:02 |
116 | Subtyping Mechanism | 12:35 |
117 | Ending Speech | 05:37 |
118 | Bonus. Int vs Long | 04:43 |
119 | Video Answer Designing Software for Ease of Extension and Contraction | 05:23 |
120 | Video Answer Martian Headsets | 04:22 |
121 | Video Answer Additional Reading Why are the Microsoft API Formats so Complicated | 01:30 |
122 | Video Answer Additional Reading How Microsoft Lost the API War | 01:11 |
123 | Video Answer Additional Reading What is Overengineering | 01:44 |
124 | Video Answer Additional Reading Ways to Create Complexity Break your API | 04:00 |
125 | Video Answer Additional Reading Simplicity and Strictness | 02:41 |
126 | Video Answer The GIMP File Format Assumptions Question 1 | 04:31 |
127 | Video Answer The GIMP File Format Assumptions Question 2 | 01:09 |
128 | Video Answer The GIMP File Format Assumptions Question 3 | 04:05 |
129 | Video Answer The GIMP File Format Assumptions Question 4 | 01:35 |
130 | Video Answer The GIMP File Format Openness Question 1 | 03:34 |
131 | Video Answer The GIMP File Format Openness Question 2 | 06:28 |
132 | Video Answer The GIMP File Format Complexity Ratchets Question 1 | 04:29 |
133 | Video Answer The GIMP File Format Complexity Ratchets Question 2 | 04:49 |
134 | Video Answer The GIMP File Format Complexity Ratchets Question 3 | 05:49 |
135 | Video Answer The GIMP File Format Complexity Ratchets Question 4 | 04:42 |
136 | Video Answer The GIMP File Format Complexity Ratchets Question 5 | 05:54 |
137 | Video Answer The GIMP File Format Bonus Question 1 | 03:06 |
138 | Video Answer The GIMP File Format Bonus Question 2 | 01:46 |
Similar courses to Advanced Software Design Course by Mirdin

Skills of a Successful Software EngineerFernando Doglio

Building a Transpiler from scratchDmitry Soshnikov

Great Thinkers, Great TheoremsWondrium by The Great CoursesDr. William Dunham

Enhanced Freelancing with AIzerotomastery.io

Modular Monolith ArchitectureMilan Jovanović

3D Computer Graphics ProgrammingGustavo Pezzi

SAAS Web DevelopmentProdigies University

Computer Science FundamentalsAndreas Kretz

Super Study Guide: Transformers & Large Language ModelsShervine AmidiAfshine Amidi
