If there is one thing that I have learned in my life, it is that you never learn anything by surrounding yourself with people who agree with you. Putting yourself in a giant echo chamber only serves to amplify and reinforce all the the ideas and beliefs that you hold. And at the same time, it amplifies and reinforces all of your prejudices, stereotypes, and superstitions that you hold.
The same holds true for your career as a developer, you’ll never learn anything new if all you do is surround yourself with other developers who are using the exact same tools and patterns as you. Unfortunately, it is really hard to not do that. How do you surround yourself with developers that don’t use the same tools and patterns as you? I don’t know about you, but most of the teams that I have worked on mostly use all of the same tools and patterns. They solve problems in the same way, and they rarely stray from the tools and patterns that they are most familiar with. And there is a reason for that! A high performing team will leverage the tools and patterns that they know work well, while bringing in additional tools as patterns only as they need them. This allows them to reliably and predictably deliver quality software. This is often an ideal case though, many teams rarely, if ever, bring in new tools and patterns for fear that they will introduce too many unknowns.
The Infamous Platform Switch
The fastest way that I have discovered to reliably learn new tools and patterns is to switch platforms. Have you ever switched platforms in your professional career? If you haven’t then it is probably just a matter of time. If you have, then you’ll probably agree that there is no way to better push your skills forward in a very short time span than to switch platforms, but unfortunately for most, regular switching of platforms is neither advisable nor is it practical. There is simply too much cost and overhead in switching, not to mention that you would probably need to switch jobs in order to accomplish the move. That doesn’t change one fact: switching platforms can expose you to a whole new set of patterns, libraries, concepts, and ideas that you can take with you if you go back to your old platform, or move on to a new platform.
So the question becomes, how do I get some of the benefits of moving platforms without quitting my job or rewriting my software? And that is easy, go seek out developers who don’t work with the same tools as you do. Ask them how they would solve a problem, or how they would approach a particular challenge. Here in Richmond we have started a group called the “Richmond Software Craftsmanship Group”, whose goal is to put a variety of developers into one room and discuss topics related to software development. Sounds simple, right? Well, you’d be amazed at what you can come away with(other than fights!) when you throw a group of developers who are writing in C#, Java, PHP, Ruby, Python, and Scala into the same room.
Don’t Be Such A Xenophobe!
One of the goals that I set for myself was to attend more conferences that get me outside of my immediate focus. A little while ago I attended CocoaConf with one of my friends, and it was one of the best conferences I have been to in a long time! I’ve dabbled in Objective-C and iOS development, but sitting in on some of the talks about the underpinnings of Objective-C and ARC, or watching a talk about computer vision in iOS, really got me fired up and thinking. They keynotes can be really telling as well. Hearing a leader from another community discuss their challenges, baggage, inside jokes, etc… can be very enlightening. While going to conferences about a whole different platform can be awesome, it can be hard to get employers to approve going to conferences that is completely outside of your focus as a developer.
This is why I am such a fan of conferences that bring together a variety of developers. More and more of these conferences are starting to appear. The perennial favorite of many people (including myself!) is Codemash. If you’ve never heard of Codemash then you should go check out their site and be prepared to fight for tickets next year. Seriously, they sell hundreds of tickets and last year they sold out in 20 minutes. Really. Another conference that I am big fan of is Strangeloop. While it has a good focus, that focus does not revolve around a particular platform. This means that you can sit in on a talk about Clojure, and really broaden your horizons, then still turn around and sit in on a Ruby talk that you can immediately leverage on your project tomorrow. Another cross platform conference I absolutely love is CodeStock, which is in Knoxville, TN in the middle of June.
Closer To Home
My desire to get out there and get more involved with other communities was really piqued last year when some of the people I worked with in the community formed the Mid-Atlantic Developer Expo, or MADExpo for short. I think they saw what some other communities were doing, and decided that we needed something a little closer to home. There are so many developers that just can’t travel halfway across the country in order to attend a conference, and I’m hoping that MADExpo can start an annual trend of bringing together hundreds of developers from all over the east coast to sit down and share ideas.
If you take one thing away from this post, I hope it is the desire to attend, start, support, or sponsor a local group or conference that brings developers together as a whole. There is nothing wrong with focused groups, but as you’ve probably started hearing more and more, we need to stop labeling ourselves as “.NET developers” or “Ruby developers”. Instead, we need to start to embrace the idea that we are developers, and that ideas transcend platforms, but the only way that we will all push forward is to get together and discuss those ideas.