The Devil’s Dictionary of Software Design
By: Matthew Macdonald
Tags: Programming, Software Design, Programming Humor, Design Patterns, Humor

10x Programmer. The CEO’s justification for hiring ten times less programmers than are needed to complete a project.

Abstraction. Making a program progressively more general and less specific, so that the next person to review the code cannot pinpoint who make the mistakes.

MVC Pattern. A fancy acronym to remind you not to write your whole program in the event handler for a button click.

OOP. Wouldn’t programming be so much easier if we were making metaphors about objects instead of writing lines of functional code? No, not really? Well I wish you had spoken up before.

Refactoring. That thing you’ll do in the distant future to fix all the bugs you’re putting in right now.

Singleton: A politically correct global variable.

HTML. Often described as the first programming language you should learn by people who don’t understand what a programming language is.

YAGNI (You Ain’t Gonna Need It). A formal expression of the fact that a programmer can often have a more beneficial effect on a project by staying in bed than by writing code.

Pair Programming. When two programmers share one computer, not due to lack of funds, but as a form of peer pressure.

Full Stack Developer. A back-end developer who can also center a <div> using CSS. (Alternate definition: a front-end developer who knows how to install MySQL.)

Garbage Collection. Just one of the many things a runtime environment needs to do because you can’t trust programmers to clean up after themselves.

Regular Expressions. A system no one really understands for making mistakes in string validation code.

Inheritance. If our programming language doesn’t have this feature, we make fun of it. But if someone actually uses it, we make fun of them.

Big-O Notation. A way of sizing up how the performance of different algorithms will scale. Or, a way of sizing up who studied computer science at school and who taught themselves the craft with Udemy courses.

Agile Programming. The reason your CEO gave when he tossed out the project’s requirements document and forwarded you an email of customer requests instead.

Interfaces. A design-by-contact approach that would have saved you a lot of headaches if you had implemented it six weeks ago, when you wrote that first quick prototype.

Code Smells. Like ordinary smells, you can always deny being the one responsible for the offense.

Clean Code. The excuse you’ll use for leaving out all the comments.

Design Pattern. A name we give to a programming practice developers have repeated over and over again, so we can lavish it with undeserved reverence.

Compiler. A tool that transforms minor syntactical mistakes to business-shattering disasters.

Recursion. See recursion, Devil’s Dictionary of Software Design.

Testing. An unnecessary diversion of resources, given that the program works fine on my computer. (Come and see it if you don’t believe me.)

ORM (Object Relational Mapping). No one likes code that’s littered with dozens of tiny data class definitions. Also, no one likes inefficient, dynamically generated queries. But what if we invented a technology that combined both?

Cryptography. The art of keeping sensitive information between you and the NSA.

Encapsulation. A design principle that makes sure all the horrible mistakes you made in one class don’t leak into another.

Obfuscation. Concealing the purpose of your code by adding a great deal of design patterns.

Bootcamp. A place where newly recruited civilians prepare, painfully, for a world of stress and hand-to-hand combat (that’s corporate IT).

DRY (Don’t Repeat Yourself). A principle that holds that the less programmers say, the happier everyone will be.

Leaky Abstraction. The inevitable and perpetual state of programming, where simplifications ruin everyone’s life because you need to learn both the simplification and the thing being simplified so you can patch all the problems the simplification doesn’t cover. (See also, “The reason programmers will never be unemployed.”)