Proof-Oriented Programming

I’ve been exploring ways to leverage type-driven development and value constraints for better testing. Turns out this has already been done, and there is a whole category of proof-oriented programming languages.

July 22, 2022 · 2 min

C# Records Compare Private Members

Turns out private members of C# records affect value-based equality.

July 15, 2022 · 1 min

Constrained Types without Exceptions

Representing constrained values with types greatly reduces defensive programming. However, constraints make some values invalid, and constructors don’t allow for flexible return types like a failure state. Here’s an approach to constructing constrained values without relying on exceptions.

July 8, 2022 · 3 min

Dependency Inversion > Dependency Injection

Dependency Injection has gained popularity in recent years. This is good, but Dependency Injection does not enjoy the full benefit of Dependency Inversion perscribed by the SOLID principles. This post will clarify the difference and some of the addition power enjoyed by Dependency Inversion.

July 3, 2022 · 7 min

Misconception: Constructor Injection Exposes Dependency Chains

I’ve struggled with explaining Service Locator as an anti-pattern. I’ve addressed certain cons of service locator and pros of constructor injection. However, I think I overlooked a fundamental misconception that would reasonably push developers away from constructor injection: a belief that constructor injection exposes dependency chains across the system.

June 24, 2022 · 4 min

What's your Duck: Conclusion

This series is about design process and organizing our thoughts for effective development. The main goal is to establish a mental model and intuition for effective design process. This post reviews what we’ve learned.

June 16, 2022 · 2 min

What's your Duck: Stage-specifc questions

This series is about design process and organizing our thoughts for effective development. The main goal is to establish a mental model and intuition for effective design process. This post explores questions to clarify thoughts in specific software lifecycle stages.

June 16, 2022 · 4 min

What's your Duck: Ducks

This series is about design process and organizing our thoughts for effective development. The main goal is to establish a healthy mental model and intuition for effective design process. We’ve previously established core ideas about design process and now well dig into concrete techniques. And yes, finally explain the ducks.

June 16, 2022 · 3 min

What's your Duck: The Design Tree and Incremental Progress

This series is about design process and organizing our thoughts for effective development. The main goal is to establish a mental model and intuition for effective design process. This post explores the fundamental questions “How do we effectively break down problems?”, “Can software be perfect?”, and “What makes software good?”

June 16, 2022 · 5 min

What's your Duck: Software as Clarity

This series is about design process and organizing our thoughts for effective development. The main goal is to establish a mental model and intuition for effective design process. This post explores the key questions “What is programming?”, “What is Software Engineering?”, and how these answers relate to our design process.

June 16, 2022 · 4 min