I'd like to propose that we as a community put a moratorium on the use of the term "functional programming". It has been widely used in the last 5-10 years and the effects are devastating. I don't want to deny that for some people the use of this word is invigorating and has lead to great sharing and learning of interesting and important technique, but to too many others it is divisive and painful.
The pain stems from human nature and our desire to play identity politics, but its foundation is based on a simple fact.
There is no such thing as Functional Programming
To be more clear, phrases like the following are completely meaningless
- This language is a functional language
- This language follows the functional paradigm
- This program uses functional style
- These concepts are functional in nature
They're not marketing terms, or even shibboleth. Using these terms like this is at best a signal: if you already understand the author's meaning then you recognize what functional is a stand-in for. At worst, they're cargo-culting. They're reading the words of a spell flat and empty when you don't know how to put the magic inside.
The many cultures of functional
There are many cultures of "functional". A speaker with only the will to communicate and share might use "functional" as I mentioned above in order to signal to the listener that they're speaking of a particular culture of functional which they would like to talk about—but notice that to make this work it requires that the speaker is known and the listener aware of the game.
The cultures of functional are wonderful. I'll associate them with languages now, but first I'll disclaim that these cultures exist independently of language and within a language there may be many cultures—some wildly different and many only small variations of one another. It's exactly the same as what we're used to with culture and language already.
Finally, please note that I'm telling a story here—you probably have your own experiences with these cultures and your experiences may differ. We could have an argument about my characterizations or just accept that any written account of a culture is at best a half-truth.
- The Clojure Culture of Functional is served largely by its high priest who has founded the culture on values of simplicity, decomplection, and uniqueness. The Clojure culture is tight-knit and awaits upon new discoveries of the high priest who knows of other functional cultures and sometimes takes some ideas from them for repackaging with the utmost simplicity and decomplection.
- The Scala Culture of Functional is a splinter of the Haskell Culture of Functional living on a new island with different rules. It tries to use the things it knows and fails as the rules of etiquette and the means of valuing have changed. That all said, the island is large and offers new opportunities. This culture is in flux, learning to thrive in this new environment, and becomes more distant from its home every day.
- The Haskell Culture of Functional is fueled by decades of searchers uncovering and valuing ideas both novel and stolen from distant cultures of mathematics. It's a culture that values the novel mountain pass... at least once it's been carefully mapped. It is also in the middle of a period of relatively sudden growth and has learned new techniques of outreach and teaching. The best of these efforts are welcoming and warm, arising from the joy of the searchers who originally settled here. The worst are loud and clumsy proselytization.
- The ML Culture of Functional is smaller and older, more primal than some of the others. At its core lies a book of specification—not that the specification itself defines the culture but instead that the act of specification does. This culture is quieter in the English-speaking world since many of its key members speak French.
- The Agda/Coq/Idris Culture of Functional stands far away from the other cultures as it is young and still finding itself. If it were suddenly the size of the Haskell culture it might die. It protects itself through loud value signaling—what we're doing here is impractical, don't pay attention!—and thus it attracts only those who value impractical things, the boldest searchers, in hope of discovering those new mountain passes.
Misconceptions and reconceptions
I'm painting a different concept of "functional" so as to smash the existing dangerous one. I'm painting it as almost a heroic story or folk myth because these are powerful tools for discussing culture.
But let me be clear about what I am not doing. These things are false:
- Any particular technique or skill is necessary or universal within a culture.
- Any particular person can speak for the culture with absolute accuracy or power.
- Any person, technique, or thing can be owned by a culture.
- Any culture is more right than or an improvement of any other culture.
On the other hand, these things are true:
- Techniques and skills can help you understand a culture and the culture may therefore value their practice highly.
- Speakers for cultures may exist as people who stand on the edges of a culture and help others to see more deeply. Furthermore, some cultures elect priests who have means to direct the culture—but this power is freely given and can, with some pain, be taken away.
- People can elect to belong to a culture inwardly and outwardly. Techniques and objects can be valued by a culture.
- Cultures have ancestries and influencers—in fact they almost always do and these ancestries and influencers are almost always in tension and contradiction with one another. A new culture comes to exist exactly when these contradictions are strong.
Shibboleth and ways of speaking
As with any culture, there are ways of speaking which serve not only to share information but to create commonality between two people who choose to belong to that culture. This is shibboleth. Outsiders, when faced with shibboleth, can become confused and feel ostracized as they do not know how to use the second meaning of these words. Open cultures have speakers who help outsiders by disarming the shibboleth and showing it for what it is.
Shibboleth cannot be banned or dismantled—though honest speakers might wish to do so. It's the nature of a group working together for a long time to create shibboleth.
Jargon is like shibboleth and often even becomes shibboleth, but it is not shibboleth exactly. Jargon arises from searchers who discover new things and need to find names for them. Within a culture these words become powerful and take on the nature of shibboleth so long as they are not shared with other cultures.
Cultures that share jargon build bridges for sharing other things, but to do so the defensiveness of shibboleth needs to be dispensed with. This is not easy to do.
Some examples of shibboleth include:
- Functor, Applicative, Monad
- Gang of Four Design Patterns
- Testing practices
- Variable naming practices
Some examples of jargon include
- Functor, Applicative, Monad
- Gang of Four Design Patterns
How can you tell the difference?
Health in a multicultural world
If you agree with my moratorium and reconception of a multicultural world then we can discuss what practices are healthy for an individual who interacts with and may even belong to many cultures all at once.
This is an ongoing research project, however. The Age of Near-Ubiquitous Near-Telepathy has changed many of the rules of culture. Here's a partial list:
- Recognize that written words will almost certainly be read by those both within and without the culture you intend them for—leave hints as to who you intend the audience to be but do so without asserting a ranking.
- Recognize that even when a word is meant to refer to a real thing that word is always spoken within a culture. Only sometimes does that culture sacrifice convenience and camaraderie so as to create space to talk about reality without also asserting itself. When talking to someone from a different culture, try hard to seek the commonality in their words instead of reacting to their cultural undertone.
- Disarm shibboleth when speaking for a culture you belong to by treating it irreverently, but try to share jargon so that more bridges can be built between people.
- When speaking to a multicultural crowd, avoid assertions that imply centrality or predominance of your culture. Recognize that from your perspective your culture may very well be central and predominant—but many others see the world the same way about their own culture.
- Recognize that most people are multicultural and begin conversations speaking to that part of them before adopting the shibboleth and norms of a culture convenient for the topic.
My moratorium mentioned in the first paragraph exists to serve this kind of multicultural health. It denies the existence of a concept which defines the walls of this culture. It leaves us with a need to discuss culture first and technique second as we've lost the convenience of assuming culture away.
What else can we do to promote multicultural health online?