Environment matters a lot
Date: 2008-12-15 22:02:41

One of the discussions we had at the http://www.markhneedham.com/blog/2008/09/14/altnet-uk-conference-20/[Alt.NET] conference back in September was around how important the environment that you work in is to your self improvement as a software developer and it came up again in a discussion with some colleagues.

I posted previously about http://www.markhneedham.com/blog/2008/09/01/my-software-development-journey-so-far/[my software development journey so far] but to add to that one of the most important things for me about working at ThoughtWorks is the environment that it has provided me to improve myself as a software developer.

I am convinced that the environment you work in has a major influence on your ability to do this and therefore am not in complete agreement with some http://blog.jayfields.com/2008/08/elephant-in-server-room.html[other] http://geekdamana.blogspot.com/2008/08/is-there-no-hope-for-stoopid.html[posts] I've read which suggest it's more down to the individual and that some of these people don't belong in the industry.

== Why does the environment matter?

Individual motivation certainly plays a part in our development, but having the right environment as well *creates opportunities to learn new concepts* from colleagues that you might not have come across on your own.

When I talk about the 'right environment' I am referring to a workplace environment where you work with colleagues who are passionate about what they do and are have the ability and are willing to show others how to reach their level. This is something I am lucky enough to have working at ThoughtWorks.

Of course it is possible if you subscribe to the right RSS or Twitter feeds to teach yourself, but the value of having the opportunity to talk about them or try them out with colleagues cannot be underestimated.

I think one of the greatest benefits of these conversations is that they help *guide you in the right direction or point out where you're going wrong*. It is still possible to make mistakes in a good learning environment but eventually someone is going to point it out to you and show you a better way to solve the problem.

This was certainly the case for me before I worked at ThoughtWorks whereby I spent a lot of time reading, what were in retrospect, the wrong types of books. I had a subscription to http://books24x7.com/books24x7.asp[Books24x7] so I had access to the resources to learn but I channeled these in a less than optimal way.

I spent most of my time reading different C# books about essentially the same things without really knowing what the best way to improve myself as a developer was. I improved my knowledge of the APIs but my understanding of how to write maintainable software was no better than it was when I finished university.

Eventually some colleagues introduced me to the concept of writing code in http://pranshujain.wordpress.com/2006/09/15/layers-and-tiers/[layers] to try and separate the various parts of the application I was working on. It improved my approach a bit but I still didn't really know where to look to find out more information.

In my current environment if someone shows you an idea they will most likely point out some *further reading areas* for you to investigate and will be happy to answer any questions you have.

To give an example, http://fragmental.tw/[Phil] and I were recently talking about some functional programming concepts that are making their way into more object oriented languages. The examples he was showing me were written in Clojure, but as I am more familiar with these concepts in Ruby or C#, after our discussion he pointed me to a Bill Six article which describes all the http://billsix.blogspot.com/2008/03/functional-collection-patterns-in-ruby.html[functional collection patterns in Ruby].

I wouldn't have come across that blog post without it being pointed out to me nor would I have become so interested about functional programming concepts in the first place without having had the opportunity to work with http://blog.m.artins.net/[Alexandre Martins] whose *passion for learning* about Erlang was what originally captured my interest.

These are just a couple of examples, there are many more.

== What if you don't have the environment?

Obviously there may be times when you don't have the best environment to allow you to develop yourself.

The most direct way to solve this problem but perhaps also the most difficult is to change your environment so that you have better learning opportunities - there are certainly several people who have cited this as a major reason for them coming to work for ThoughtWorks.

The Obtiva Studio takes the idea of learning to an extreme with their http://www.obtiva.com/careers/software-apprentice/[Software Apprenticeship approach] but even if you don't have an optimal learning environment at work that doesn't mean the learning cannot forge on!

Even if you don't have the opportunity to work with the best in the industry they are still somewhat accessible through  http://www.markhneedham.com/blog/2008/12/07/twitter-as-a-learning-tool/[Twitter] and most seem happy to answer questions and help people understand their ideas. Following the blogs of these guys and the blogs that they talk about is another way to keep in the loop.

Joining user groups such as http://altdotnet.org/[Alt.NET] is another way to interact with some of the people making things happen in the industry as of course is attending http://jaoo.com.au/[technical conferences] where these people speak their words of wisdom.

Of course as Justin Etheredge points you still http://www.codethinked.com/post/2007/11/26/You-cant-focus-on-developers-who-dont-have-focus.aspx[have to want to improve yourself] otherwise it's never going to work, but I still hold the belief that people generally try to do a good job and often the fact that they can't do this is a lot to do with the environment that they're in rather than genuinely not caring.