I've had several opportunities to talk to some really great folks including Mathias Brandewinder (@brandewinder), Phil Trelford (@ptrelford), Bryan Hunter (@bryan_hunter), Jessica Kerr (@jessitron), and Dave Fancher (@davefancher) -- and many others (please don't take it personally if I didn't list you here).
So let's take a look at what I like.
Lots of Explorers
The functional community has lots of explorers. Earlier this year, Phil Trelford posted a series of random art images:
I love this kind of stuff. And this makes me want to dig into the details further.Random Art from recursive nested random symbolic math expressions http://t.co/NUrjrprcCs http://t.co/SuhIp2NsCX pic.twitter.com/46FMSJtgRT— Sean's dad (@ptrelford) January 16, 2015
In addition, there's a lot going on around machine learning. This is another area that has me intrigued. And I'm looking forward to reading Mathias Brandewinder's new book Machine Learning Projects for .NET Developers. (My copy should arrive tomorrow.)
I expect that this will be a bit over my head, but that's okay. You need to start somewhere. The last time I looked into machine learning, I ended up building something completely different.
And there's much, much more I could say in this area.
No Language Bigots
I really like that there are no language bigots in the functional world (okay, so there are some, but they are the minority).
Every time a functional conference comes up (or a conference with a strong functional track), I see the same types of messages coming out -- most recently, from NDC Oslo. It probably goes along with the large number of explorers in the community: "Show me new stuff!"
"Look at this cool thing that xxx did in Erlang."And it goes on and on. It seems like it doesn't matter whether someone is using Erlang or Haskell or Clojure or F# or Elixir or Scala. The functional community recognizes that each environment has strengths and weaknesses. Instead of focusing on the weaknesses, there is a huge focus on the strengths -- finding out what each environment is good for and seeing how that can make us super productive.
"Wow, did you see the Elixir demo from xxx?"
"You're doing awesome stuff with Clojure? Show me the awesome stuff you're doing with Clojure."
Welcome to Functional Programming
The people I talked to have been very welcoming and encouraging. Granted, I'm talking to folks who are leading user groups, speaking at events, and writing books, so these are the folks who are actively promoting their community. But my impression is that the same attitude has "filtered through the ranks" of the community in general.
There are a lot of people making it easy to for folks to get started. For example, Jessica Kerr has a Pluralsight course Functional Programming with Java. I asked her, "Why not Scala?" (since she introduced herself as a Scala dev), and she answered that this was about how to use functional techniques in your current environment. We can use those functional concepts now, and then maybe jump to a full-functional environment if the need arises.
BTW, I really like her bio on Pluralsight: "Her mission is to bridge the gap between object-oriented and functional development."
I really like the idea of this. For those who have been following my functional programming articles, a lot of what I've written about isn't necessarily because I want to go full functional (although it is attractive). Instead, it's been about how I can leverage functional concepts in my current environment -- which happens to be C#. And I'm a big fan of declarative programming styles such as XAML and LINQ.
Another example is Mathias Brandewinder's presentation "F# for the C# Developer". I've seen this presentation, and it was great to give me a gentle introduction using familiar concepts. There's a recording of the presentation on YouTube so you can experience it:
Why am I Writing This?
So why am I writing about this now? It's actually been on my mind for the last couple of days. Every so often, I see a "You're an idiot if you're still doing OO programming" message come through my Twitter stream.
Fortunately, this is very rare. But whenever I see something like this get retweeted, I die a little inside. I always try to promote the right tool for the job. OO programming has things that it's really good for. Functional programming has things that it's really good for. So let's try to get the best of both worlds.
This morning, I came across an article written by Richard Dalton: Some Functional Programmers are Arrogant. This was written in response to a tweet sent out by Uncle Bob this past week.
I saw this tweet go by and was a bit discouraged. Even though I have run into this attitude, it has been extremely rare. The vast majority of functional developers that I've interacted with are very welcoming. Richard's article is a very good response to this from someone in the functional community.The arrogance of some functional programmers is a significant barrier to entry for others. Lighten up guys. You _want_ a big tent.— Uncle Bob Martin (@unclebobmartin) July 5, 2015
I thought that I would add my view from outside the community.
[Update: 07/08/2015 -- Good to see this follow-up from Uncle Bob based on Richard's article:
]RT @richardadalton: .@unclebobmartin Hi Bob. I've written up my thoughts. http://t.co/QqNn0xrPm7 | Well said. I stand corrected.— Uncle Bob Martin (@unclebobmartin) July 8, 2015
To all you functional developers out there: keep being awesome!