Composing Software: The Book
On February 18th, 2017, I started writing a blog post on functional programming. “The Rise and Fall and Rise of Functional Programming” was to serve as an introductory article for a series of articles on software composition. I had no idea when I started writing that it would attract more than 100,000 readers, or that the articles that followed would attract over a million aggregate reads, or that it would become a book and jump up the Leanpub best sellers list the week it was announced.
My sincere thanks go out to JS Cheerleader, who made the book better in too many ways to list. If you find the text readable, it is because she carefully poured over every page and offered insightful feedback and encouragement every step of the way. Without her help, you would not be reading this right now.
Thanks to the blog readers, who’s support and enthusaism helped us turn a little blog post series into a phenomenon that attracted millions of reads and provided the momentum we needed to turn it into a book.
Thanks to the legends of computer science who paved the way.
“If I have seen further it is by standing on the shoulders of giants.” ~ Sir Isaac Newton
All software development is composition: The act of breaking a complex problem down to smaller parts, and then composing those smaller solutions together to form your application.
But I noticed while interviewing candidates for software development jobs, almost none of them could describe what composition is in the context of software. When I asked “what is function composition?” or “what is object composition?” in interviews, I got… stammers. Crickets. Nothing.
How could this be? How could 99% of professional developers — some with 10+ years’ of software development experience not know definitions or examples of the two most basic forms of composition in software engineering? Everybody composes functions and objects in the process of building software on a daily basis, so how could so many people not understand the basic foundations of those techniques?
The fact is that composition simply isn’t a subject that people pay attention to, or teach well, or learn. It occurred to me that maybe this is why overcomplicating things is the single biggest mistake software developers make every day. When you don’t know how to fit lego blocks together, you might break out the duct-tape and crazy glue and go nuts… to the detriment of the software, your teammates, and your users.
You can’t get away from composing software — that’s how software comes together. But if you don’t do it conscientiously, you’ll do it badly, which leads to a lot of wasted time, wasted, money, bugs, and even critical human safety issues. I wrote this series — and book — to change that.
The trouble with the blog posts is that they never had an official index. Welcome to the official blog post index for “Composing Software: The Blog Posts”.
- Composing Software: An Introduction
- The Dao of Immutability
- The Rise and Fall and Rise of Functional Programming
- Pure Functions
- What is Functional Programming?
- Higher Order Functions
- Curry and Function Composition
- Abstraction and Composition
- Functors & Categories
- The Forgotten History of OOP
- Object Composition
- Factory Functions
- Functional Mixins
- Why Composition is Harder with Classes
- Composable Custom Datatypes
- Mocking is a Code Smell
He enjoys a remote lifestyle with the most beautiful woman in the world.