This is a short parable I came up while discussing linters, in response to someone asking if I think it’s good to be inconsistent.
Category: Software Design
What Is The Purpose Of Private?
09 Nov, 2020 — Category: Software Design
Why use private
at all? What is the benefit of trying to stop other
people from using code that works perfectly well? It’s to reduce
future maintenance costs by discouraging coupling to unstable
dependencies.
FizzBuzz In Too Much Detail
26 Apr, 2015 — Category: Software Design
I know. FizzBuzz has been done to death. But I want to use it as a familiar base upon which we can explore some of the common tradeoffs involved in writing and maintaining software. In this article, I’ll show multiple implementations of FizzBuzz, all designed to achieve different goals, and discuss the implications of each.
Why NSOrderedSet Doesn't Inherit From NSSet - A Real‑life Example of the Liskov Substitution Principle
01 Jul, 2012 — Category: Software DesignThere was an interesting question on StackOverflow this morning: Why doesn’t NSOrderedSet inherit from NSSet? It’s interesting because the reason is so easy to miss. I thought it would make a good blog post because it turned out to be a nice, real-life example of the Liskov substitution principle (herein abbreviated to LSP).
Resource Acquisition is Initialisation (RAII) Explained
17 May, 2012 — Category: Software DesignIn the competition to make the worst acronym, RAII probably comes second after HATEOS. Nevertheless, it is an important concept because it allows you to write safer code in C++ — a harsh, unforgiving language that is all too happy to help you shoot yourself in the foot.
This article will explain exception-safety and common pitfalls in C++. As we work out how to avoid these problems, we will accidentally discover RAII. Then, we will finish by defining exactly was RAII is, and where it is already being used.
SOLID Class Design: The Interface Segregation Principle
18 Feb, 2010 — Category: Software Design
This is that last part of a five part series about SOLID class design principles by Robert C. Martin. The SOLID principles focus on achieving code that is maintainable, robust, and reusable. In this post, I will discuss the Interface Segregation Principle.
The Interface Segregation Principle (ISP): Clients should not be forced to depend upon interfaces that they do not use.
SOLID Class Design: The Dependency Inversion Principle
19 Dec, 2009 — Category: Software Design
This is part four of a five part series about SOLID class design principles by Robert C. Martin. The SOLID principles focus on achieving code that is maintainable, robust, and reusable. In this post, I will discuss the Dependency Inversion Principle.
The Dependency Inversion Principle (DIP): High level modules should not depend upon low level modules. Both should depend upon abstractions.
SOLID Class Design: The Liskov Substitution Principle
21 Nov, 2009 — Category: Software Design
This is part three of a five part series about SOLID class design principles by Robert C. Martin. The SOLID principles focus on achieving code that is maintainable, robust, and reusable. In this post, I will discuss the Liskov Substitution Principle.
The Liskov Substitution Principle (LSP): functions that use pointers to base classes must be able to use objects of derived classes without knowing it.
SOLID Class Design: The Open Closed Principle
14 Nov, 2009 — Category: Software Design
This is part two of a five part series about SOLID class design principles by Robert C. Martin. The SOLID principles focus on achieving code that is maintainable, robust, and reusable. In this post, I will discuss the Open Closed Principle.
The Open Closed Principle (OCP): You should be able to extend a classes behavior, without modifying it.
SOLID Class Design: The Single Responsibility Principle
12 Nov, 2009 — Category: Software Design
This is part one of a five part series about SOLID class design principles by Robert C. Martin. The SOLID principles focus on achieving code that is maintainable, robust, and reusable. In this post, I will discuss the Single Responsibility Principle.
The Single Responsibility Principle (SRP): A class should have one, and only one, reason to change.
Model View Controller Explained
31 May, 2009 — Category: Software DesignModel view controller (MVC) is a very useful and popular design pattern. If you’re writing software, you should know it. Unfortunately it’s also one of the hardest to truly understand. In this article I will provide what I think is the simplest explanation of MVC, and why you should use it.