Composing Software: The Book

Smoke Art Cubes to Smoke — MattysFlicks — (CC BY 2.0)
Note: This is part of the “Composing Software” book that started life right here as a blog post series. It covers functional programming and compositional software techniques in JavaScript (ES6+) from the ground up.

"Composing Software”, the hit blog post series on functional programming and software composition in JavaScript is now a best selling book on Leanpub.

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”.


Eric Elliott is a distributed systems expert and author of the books, “Composing Software” and “Programming JavaScript Applications”. As co-founder of DevAnywhere.io, he teaches developers the skills they need to work remotely and embrace work/life balance. He builds and advises development teams for crypto projects, and has contributed to software experiences for Adobe Systems,Zumba Fitness, The Wall Street Journal, ESPN, BBC, and top recording artists including Usher, Frank Ocean, Metallica, and many more.

He enjoys a remote lifestyle with the most beautiful woman in the world.