Hi Functional Programmers,
I’ve been thinking a lot about what Functional Programming is. I’ve given a few talks now to develop a new definition of it. If you search on the web for “what is functional programming?”, you don’t get much that is useful. I’d like to change that and create a definition that can help us discuss what we do with others.
Go now and do a search. You’ll see examples of “definitions” like “programming without side-effects” and “programming without mutable state”. However, in every last program I’ve ever written, functional or not, I’ve had side-effects and I’ve used mutable state. These definitions do more harm than good.
Functional Programming is entering industry from academia. Academic terms, like Functional Programming, have the luxury of never being defined. Researchers learn to “talk the talk” by reading and publishing papers and discussing with other researchers.
However, as more and more commercial software is written using Functional Programming techniques, we see the need to explain what it is we do. We want to teach newcomers. We want to explain to project managers and “non-programmer” leaders why we do what we do. When our programs are run for their effects, saying we should avoid them doesn’t make much sense.
The definition should help us understand what we do and why. But further, the definition should generate new directions of discussion. A good definition gives us the lay of the land–and with that we can go exploring.
There is a lot of in-fighting in the FP world. A unifying definition could subdue some old flamewars and give an outsider something to think about. Right now, FP often looks like a bunch of fights not worth having. What if it looked like a fruitful discussion? What if it looked like an intuitive way to think about software?
I think I’ve got a good definition. I’m sharing it with people now to help it grow and develop. Each time I share it, I learn something about how to express it. I’d like to turn it into something significant, and when it’s strong and healthy, release it into the world. It’s too involved to share it here, but you can see the beginnings of it in this article about programming paradigms.
Functional Programming can help a lot of people create better software. It’s not better than other paradigms. But having more paradigms to choose from is better than having fewer. It’s not incompatible with Object-Oriented Programming or Imperative Programming. They’re different perspectives for analyzing a problem. Each helps us develop better solutions.
We need a useful definition of Functional Programming. It has to explain what industrial programmers (non-academicians) actually do–including writing software with effects and mutable state. A good definition can open new doors of discovery and jumpstart a literature. And if nobody else is doing it, I’ll give it my best shot.
PS Want to get this in your email? Subscribe!
Well, we’re less than two weeks away to the first ever Clojure SYNC. A few last-minute things are coming together. There’s still time to get your tickets.
Remember, this is your only chance to be there at the first one, when it was intimate and the “early adopters”.
Aaron Contorer has an amazing pedigree and has so many good things to say about Functional Programming. Though I disagree with his definition of FP (a program is a function from inputs to outputs), I don’t want to fuss too much about that. His points are good and he knows what he’s talking about.
People talk a lot about how clojure.spec can be used to parse data into a more useful, structured representation. Roman Liutikov does this idea justice in this article, showing how to develop a spec to parse simple data-structures representing CSS transform expressions, starting with the CSS specification’s BNF grammar.
It’s that time again, and there are only four days left to share your experience with Clojure. This survey has been going on for years now. It contains so much useful information about how people are using Clojure.
Gilad Bracha talks about some of the problems with common ideas in Functional Programming. He criticizes several ideas in the FP world, including higher-order functions, closures, and monads. It’s important to keep in mind that he’s not criticizing FP so much as the rhetoric around it. The most important thing I take away from this talk is that we need better definitions.
parallel is a library of parallel Clojure functions by Renzo Borgatti.
p/sort is worth its weight in gold.
The Internet of Natural Things YouTube
Simon Collison tells a story of a bird and technology, and how technology is changing our relationship to nature.
Well, even though I put a bow on it, a helpful member pointed out that it was hard to know how to get stuff set up in Understanding Re-frame. So I recorded a new lesson that explains how to clone the repo of all of the code I write in the course and run Figwheel.