Showing posts with label Community. Show all posts
Showing posts with label Community. Show all posts

Wednesday, July 8, 2015

An Outsider's View of the Functional Community

I really like the functional developer community. I'm not currently part of this community (although I've been threatening to do a deep dive into functional programming for a while), but there are several things that I find attractive.

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.

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

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. It was written in response to a tweet by Uncle Bob (not shown here).

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.

I thought that I would add my view from outside the community.

To all you functional developers out there: keep being awesome!

Happy Coding!

Wednesday, October 15, 2014

Developer Community Events & the Learning Mindset

This past weekend at Silicon Valley Code Camp, I was invited to be part of a panel discussion: Community, Career, and You: a Microsoft MVP Panel (big thanks to Esther Lee for inviting me to participate). This made me start to think a bit more about what I like about developer community events: the people.

I've often said that if you attend user groups, that puts you in the top 10% of people that I want to work with. This is because you are putting in your own time (time you aren't getting paid for) to try to better your skills. And this tells me 2 important things:
  1. You care about continuous learning.
  2. You care enough to put your own time into it.
Lots of Events
I have lots of experience with this. Just this year, I've been to 20 events as a speaker and attended about half a dozen more. I get the chance to speak a lot in Southern California because there are lots of .NET user groups in the area. Since traffic is usually horrible, no one wants to drive 30 miles to get to a user group after work, so there are lots of little groups scattered around the area.

I've been involved with the developer community for close to 5 years, and my experience with the people who attend these types of events has been fairly consistent: men and women who are interested is learning something new, talking to other developers about their experiences, and investing their own time in the process.

And this is what I like about community events like user groups and code camps.
Every single person is there to learn or share or both (most often both).
I try to talk to as many people as I can when I'm at these events. This past weekend, I was able to catch up with people I hadn't seen for a while, shoot the breeze with some people that I know well, and also meet a whole bunch of new people.

At code camp, I try to have lunch with someone I don't know. I'm not afraid to start a conversation or join a conversation (which is way different from how I was 5 years ago).

The Difference of the Developer Community
The thing that I like about the developer community is the consistency of this learning mindset. At professional events, I've seen a different mix. There definitely are people who are there to learn, but there are also people who see it as a paid week away from the office.

I still remember meeting someone from my company at a professional conference. I asked him, "So what cool stuff have you learned so far?" (usually a good conversation starter). And his reply was, "I already know all of this stuff." I was a bit shocked by the reaction (but not really surprised by it). This particular developer was not interested in learning. He was there for other reasons.

Get Involved
If you're not already involved in the developer community, it's time to change that. Cruise over to Meetup.com and see what's going on in your area. I really regret that I discovered the developer community so late in my career. Yes, I've been involved for close to 5 years, but I think about what my career and experiences would be like if I had gotten involved 10 years earlier.

I've met a lot of really great people (I'm amazed at how many people I know these days (and I'm not a social person by nature)). I've learned about a lot of really interesting technologies. I don't often use these technologies, but it's good to know what's available -- I'm really big on using the right tool for the job, and we have to learn about those tools somehow. When a particular project comes up, I can think back to a demo I saw and say, "Hey, I think that Technology X would be really good for this. Let's look into it some more."

And I have had several times where that has helped me find a good solution for an application.

Encourage Other Developers to Get Involved
I also lament for the people who aren't involved in the developer community. There are a lot of user groups in my area, but there is a much, much larger number of developers in my area. A very small percentage take the time to get involved. And many developers are not interested. One time I was working in an office of about 40 developers, and there was a user group that met less than 1 mile from the office. At that group, I met a total of 2 developers from the office (and one of them was a contractor).

If you've had a good experience attending community events, share them with your co-workers. If you've managed to improve your career from your continuous learning, share that as well. I would love to see our entire industry as a group of constant learners who become an unstoppable force in improving the lives of our users, companies, and the world at large.

Happy Coding!