Composable ideas

Thinking

Programming language wars arise when software developers disagree over which language is the best tool for a given task. Which language is best?


Programming language wars arise when software developers disagree over which language is the best tool for a given task. Compiling a kernel, building a website, or analyzing a data set each requires different tools. But each of these computational tasks can be performed using different programming languages to achieve the exact same task. Styling a website can be done in raw HTML or in CSS. Analyzing a data set can be done in python or in R. Which language is best?

I have repeatedly said that the programming language of choice doesn’t matter.  Especially for people early in their learning journey. Getting started is more important. I, like many others, delayed starting because I didn’t know if I should start with the R programing language or python. Serendipitously I chose R. Why serendipitously? Because I think R is an easier language for people just starting out. Oh no, I think I’ve just started a language war.

The approach to program in R can come in a few different flavors. "Base R" has a way of making plots, sub-setting data, and performing a variety of statistical tasks. However, I learned R by starting with a package of libraries called the tidyverse. The tidyverse describes itself as an opinionated approach to programming. Why opinionated? Well, because every programmer is going to have an opinion about the best way to do something. Again, the basis for language wars.

The tidyverse isn’t really a package; instead, it is a meta-package of packages that have the same syntax, logic, and approach to performing tasks. What is the benefit of this opinionated approach? Primarily that all of the software works together. And that when new contributors want to build upon these languages, they do so in a consistent and defined way.

This is the key feature of composability. In software development, composability describes the ability of one programmer to take software that another programmer wrote, build upon it, and incorporate it into a project. Sometimes, this newly composed code can be shared back with the original creator, or the community, and further built upon. Composability really means sharing — sharing what you found, what you built, using a common language, so it can be understood and built upon.

As I wrote before, this is exactly how scientific discovery works. A group of scientists who all speak the same opinionated language, often called biology, share their creations, often called discoveries, in this language. Sharing allows others to build upon it. Sometimes, this language needs to be translated into something that is more understandable, or relevant for another audience. The same is true for software as it is in medicine.

When we extend the idea of composability from software into the realm of ideas, something special happens. Whether it’s a flash of insight, a new way of looking at something, or a possible solution to your problem, we take an existing idea and build upon it to make something new. This is also how innovation and creativity work — take something that exists, and make it better; take an idea from somewhere else and apply it to our own. Creativity is a combinatorial process because of the composability of ideas.

Oftentimes scientists don’t like to share their ideas. They worry about being scooped, or that someone else will take credit for their good idea. This is a reasonable fear given a poorly designed system for credit and attribution. If someone else publishes your idea in a paper before you do, they are credited with the discovery. But the counterexample illustrates the problem with idea-stealing. What if I have a great idea, that happens to be wrong? I share an idea that other people think is a good one. They then spend time and money trying to test that idea only to go know you nowhere, because the idea is not actually a good idea. If only 10% of my ideas are good (a generous estimate!), what then of the lemmings following others' ideas off the cliff? Don't be a lemming. But also don't be afraid to share ideas. If an idea is right, relevant, and true, then it will catch on like wildfire.

The goal is for an idea to travel fast and far. Like a meme. Memes are compact units of information that travel across society. We share memes not because of the cute or funny pictures, but because of the idea underneath. The best thing anyone on social media hopes for is that their post goes viral, becomes a meme, and is shared broadly. The same is true for a software developer writing code, an academic making discoveries, and anyone in-between with a good idea.

How then do you make your ideas composable? Share them broadly. Ideas cannot be locked in file cabinets, or behind paywalls. Ideas cannot be whispered, but instead shouted from mountaintops. If the idea is a good one, then the meme will take care of itself. If it’s not a good one, then the idea can be taken apart and put back together, mixed and re-mixed, until it is. Again, creativity is a combinatorial process because of the composability of ideas.

I write these articles because I like to think; writing is thinking. It also is a system that ensures accountability and provides a framework for me to do so. I suspect that some of you reading these words also like to think. Perhaps some of the ideas that I explore will change the way that you think about something. In this way, the idea that I heard, built upon, and shared with you, can be further shared. Importantly, these words are free. If they were behind a paywall then all but two of you would not read them because you would not have access to these ideas. Ideas need to be free.

When I first started this project, I also built guides. These guides are curated content that I envisioned would be explicit how-to instructions for a specific task. Because skin-in-the-game is associated with higher rates of participation and retention, I put these guides behind a paywall and charged a modest fee for them. The idea was that investment in your own learning would ensure you stay motivated to learn. However, I now realize that putting guides behind paywalls means fewer people will have access to them. Without access, these ideas are not composable. So today, I am removing the paywalled restrictions. So for any of you who want access to the beta guides, click on the guides tab at the top of the page. It's still early; but like any idea, I'll continue to build on them. And for the two premium subscribers, your support is appreciated. Thanks mom and dad. 😂  If any of you other readers want to become a supporter, that option is always available.

Speaking the same language means that an idea from my mind can be shared with your mind. Indeed, planting an idea in the brain of a person is a powerful skill, which is why talented educators are so important. But also rare. If we spoke different languages, this wouldn't be possible. Or if I needed to translate an idea from one language to another each time I wanted to share a message, sharing ideas would be slow. Like an opinionated programming language, a common language ensures that ideas are composable. So which is the best language? It's the one that allows you to take someone's idea, build upon it, and share it with the world.