Advanced Software Design Course by Mirdin

Advanced Software Design Course by Mirdin

English | MP4 | AVC 1920×1080 | AAC 44KHz 2ch | 138 Lessons (11h 24m) | 2.52 GB

The Advanced Software Design Course is a program with six main modules aimed at improving software design skills. The course covers principles of logic, data structure design, state management, modularity, and error handling. Students practice code refactoring, learn to avoid hidden dependencies, and effectively solve software system design challenges.

Unit 1: The Hidden Layer of Logic

  • Why design is conceptually different from implementation, and what this means for building robust code.
  • How it’s possible for code that never fails to still contain a bug.
  • Understanding how code that looks simple may actually be complex, and how to avoid writing code likely to break in the future.
  • Hoare triples, a simple method of specification that lets you see complexity as concretely as the code itself.
  • Bonus topic: The defect/infection/failure model of bugs and what Hoare triples have to do with debugging by printouts.

Unit 2: The Embedded Advanced Software Design Principle

  • Understanding that code can be mechanically derived from a design, and how this perspective de-mystifies system design.
  • Using the Embedded Design principle to better structure your code.
  • Understand the most general forms of couplings. Learn to to spot and eliminate hidden coupling, and prevent 10-minute tasks from becoming 100-hour tasks.

Unit 3: The Representable/Valid Principle

  • Understanding how to partition the state space of code and reduce the possibility of failure
  • How to design data structures and APIs that cannot be misused.
  • How to design code that contains zero error-checking, but is less likely to fail than even the most defensively-written code.

Unit 4: The Data Over Code Principle

  • Parnas’s 40 year-old “secret” of information hiding.
  • How to use information hiding to make your code more modular and easier to extend.
  • How organizing your program around data structures can make your code cleaner.
  • How an extreme application of this principle can help you understand systems 3x more quickly.

Unit 5: Algebraic Refactoring

  • Understanding sum and product types, and how common data structure patterns in most languages are just special cases of these two fundamental constructs.
  • How most common refactorings are special cases of a handful of rules.
  • How refactoring a program can be isomorphic to factoring polynomials in algebra.

Unit 6: Future-Proofing Code

  • Learning to spot and sequester the assumptions in individual lines of code.
  • Using the Liskov substitution principle to make your code compatible with future versions of itself.
  • Using the theory of subtyping to anticipate and avoid “complexity ratchets” that could make your code treacherous to modify in the future, and impossible to clean up.
Table of Contents

1 A Story about Stories
2 Ghosts
3 The Three Levels of Software
4 Case Study | Chromium
5 Hoare Logic
6 Code Knowledge
7 Lesson | Hoare logic
8 Video Answer | The Three Levels Of Software
9 Video Answer | The Design of Software is A Thing Apart
10 Video Answer | Painless Functional Specification
11 Video Answer | Modules Matters Most
12 Bonus Video | You are a Program Synthesizer
13 Video Answer | Hoare Logic | Question 1
14 Video Answer | Hoare Logic | Question 2
15 Video Answer | Hoare Logic | Question 3
16 Video Answer | Hoare Logic | Question 4
17 Video Answer | Hoare Logic | Question 4.1 | Bonus
18 Video Answer | Hoare Logic | Question 5
19 Video Answer | Hoare Logic | Question 6
20 A Cautionary Tale
21 What is Design?
22 The Embedded Design Principle Examples
23 The Plain English Test
24 Linguistic Antipatterns
25 Hidden Coupling
26 SQLite Case Study
27 Video Answer | Dark Knowledge and Graph Grammars
28 Video Answer | My Favorite Principle for Code Quality
29 Video Answer | Boolean Blindness
30 Video Answer | Hidden Coupling | Examples 1 to 4
31 Video Answer | Hidden Coupling | Examples 5 to 9
32 Video Answer | Hidden Coupling | The X Macro Trick
33 Video Answer | Django E-mail Subsystem | Exercise 1
34 Video Answer | Django E-mail Subsystem | Exercise 2.1
35 Video Answer | Django E-mail Subsystem | Exercise 2.2
36 Video Answer | Django E-mail Subsystem | Exercise 2.3
37 Video Answer | Django E-mail Subsystem | Exercise 3.1
38 Video Answer | Django E-mail Subsystem | Exercise 3.2
39 Video Answer | Django E-mail Subsystem | Exercise 3.3
40 Video Answer | Django E-mail Subsystem | Exercise 4.1
41 Video Answer | Django E-mail Subsystem | Exercise 4.2
42 Video Answer | Django E-mail Subsystem | Exercise 4.3
43 Video Answer | Django E-mail Subsystem | Exercise 4.4
44 Video Answer | Django E-mail Subsystem | Exercise 4.5
45 Video Answer | Django E-mail Subsystem | Exercise 4.6
46 Video Answer | Django E-mail Subsystem | Exercise 5
47 Video Answer | Django E-mail Subsystem | Exercise 6
48 Bug Alert
49 Bug Found
50 The Two Views Of State
51 Locking Down Transitions
52 The Internal View
53 MIRO
54 Video Answer | Applying the Linus Torvalds Good Taste coding requirement
55 Video Answer | Bugs And Battleships
56 Video Answer | The Most Dangerous Code in The World
57 Video Answer | Where To Draw The Boundary
58 Video Answer | Restricting APIs | Exercise 1.1
59 Video Answer | Restricting APIs | Exercise 1.2
60 Video Answer | Restricting APIs | Exercise 1.3
61 Video Answer | Restricting APIs | Exercise 2
62 Video Answer | Restricting APIs | Exercise 2 Extra Challenge 1
63 Video Answer | Simpler and More Correct | Exercise 1.1
64 Video Answer | Simpler and More Correct | Exercise 1.2
65 Video Answer | Simpler and More Correct | Exercise 1.3
66 Video Answer | Simpler and More Correct | Exercise 1.4
67 Video Answer | Simpler and More Correct | Exercise 1.5
68 Video Answer | Simpler and More Correct | Exercise 2
69 Video Answer | Simpler and More Correct | Exercise 2 Extra
70 The Data Over Code Principle Intro
71 Modularization
72 What is a Secret
73 Data Abstraction in Action
74 Restricting State
75 Why Secrets Imply Data Over Code
76 Magic Trick Preamble
77 Magic Trick Short Magic Trick
78 Magic Trick Long Magic Trick
79 The Information-Hiding Dilemma
80 Video Answer On the Criteria to be Used in Decomposing Systems Into Modules
81 Video Answer The Secret History of Information Hiding
82 Video Answer Abstraction Not What You Think It Is
83 Video Answer Programmer’s Apprentice
84 Video Answer Worktrees Question 1
85 Video Answer Worktrees Question 2
86 Video Answer Worktrees Question 3
87 Video Answer Submodules Question 1
88 Video Answer Submodules Question 2
89 Do You Mean Refactorings
90 Reductions, Equivalences, and Rewriting
91 Algebraic Data Types Sums & Products
92 Functions are Exponentials
93 Bonus. Recursive Types
94 Video Answer The Algebra of Algebraic Datatypes Parts 1 and 2
95 Video Answer Equational Reasoning Changing a function call
96 Video Answer Equational Reasoning Swapping an if-statement
97 Video Answer Equational Reasoning Un-nesting an If Statement
98 Video Answer Equational Reasoning Conditional-to-function
99 Video Answer Equational Reasoning Functoriality of Map Optional Bonus
100 Video Answer Algebraically Refactoring a Weak API Exercise 1
101 Video Answer A Tale of Two Parsers Data Modeling Exercise 1
102 Video Answer A Tale of Two Parsers Data Modeling Exercise 2
103 Video Answer A Tale of Two Parsers Data Modeling Exercise 3
104 Video Answer A Tale of Two Parsers Data Modeling Exercise 4
105 Video Answer A Tale of Two Parsers Data Modeling Exercise 5
106 Video Answer A Tale of Two Parsers Data Modeling Exercise 6
107 Video Answer A Tale of Two Parsers Data Modeling Exercise 7
108 Video Answer A Tale of Two Parsers Code follows data Exercise 1
109 Video Answer A Tale of Two Parsers Code follows data Exercise 2
110 Video Answer A Tale of Two Parsers Code follows data Exercise 3
111 Video Answer A Tale of Two Parsers Code follows data Exercise 4
112 Making Future Proof Code A Tale Of Two Mistakes
113 The RAD Process Step 1 Reduce and Sequester Assumptions
114 The RAD Process Step 2 Add Openness
115 The RAD Process Step 3 Diminish Complexity Ratchets
116 Subtyping Mechanism
117 Ending Speech
118 Bonus. Int vs Long
119 Video Answer Designing Software for Ease of Extension and Contraction
120 Video Answer Martian Headsets
121 Video Answer Additional Reading Why are the Microsoft API Formats so Complicated
122 Video Answer Additional Reading How Microsoft Lost the API War
123 Video Answer Additional Reading What is Overengineering
124 Video Answer Additional Reading Ways to Create Complexity Break your API
125 Video Answer Additional Reading Simplicity and Strictness
126 Video Answer The GIMP File Format Assumptions Question 1
127 Video Answer The GIMP File Format Assumptions Question 2
128 Video Answer The GIMP File Format Assumptions Question 3
129 Video Answer The GIMP File Format Assumptions Question 4
130 Video Answer The GIMP File Format Openness Question 1
131 Video Answer The GIMP File Format Openness Question 2
132 Video Answer The GIMP File Format Complexity Ratchets Question 1
133 Video Answer The GIMP File Format Complexity Ratchets Question 2
134 Video Answer The GIMP File Format Complexity Ratchets Question 3
135 Video Answer The GIMP File Format Complexity Ratchets Question 4
136 Video Answer The GIMP File Format Complexity Ratchets Question 5
137 Video Answer The GIMP File Format Bonus Question 1
138 Video Answer The GIMP File Format Bonus Question 2

PDF
Readings questions
Lesson, Hoare logic
Answer sheet
Answer sheet to readings
Todo List Guide (Answer sheet, don’t peak!)
Hidden coupling
Django emails
Software Design Hot Takes
Software Design Glossary
Many examples of Error Of Modular Reasoning
Many examples of good duplication
Many examples of true abstraction
reading_questions
joints
robust_code_through_restricted_apis
simpler_and_more_correct
restricting_apis_1
git
kwic
Defunctionalization_answers
equational_reasoning
mechanical_refactoring
parsers
gimp_file_format

Homepage