Advanced Software Design Course by Mirdin

Advanced Software Design Course by Mirdin

English | MP4 | AVC 1920×1080 | AAC 44KHz 2ch | 69 Lessons (5h 54m) | 1.30 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

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

Homepage