Opensource software has been a gift to the development community. We think about how we get access to great software, which we can build on, and utilize.
One of the oft-forgotten benefits of opensource software is the obvious fact that you can read the source code. In my opinion this is like gold. What better way to learn about how to code, than by reading the code of quality software! It can even help to read BAD code of course.
So, an interesting process, involves having your dev team take one opensource project every month/quarter, and have someone on the team read it. This person, or the group as a whole, can go through the code picking up particular interesting areas.
The Spring Framework is an interesting choice. The coding in this project is top notch. It has fantastic test coverage, is modular, offers core OO techniques, and you will find it very easy to read. You can also see how the codebase has grown over time, and how the flexible design has allowed the add features in a clean way.
Another good example is the JUnit codebase. Developers are often surprised at how simple the project is, and this allows you to get up to speed in one short sitting. As well as being able to learn from the code, you will also come out with another great side effect. You will know JUnit a hell of a lot better after you read through the source.
So, as good candidates, consider looking through the source of projects that you are using in your own daily toil. You will end up learning a lot about the project.
It is amazing how little some teams invest in learning an opensource API, and how they jump right in. One example is how a team that I worked with have JUnit tests, and each test method called setUp() and
tearDown() at the beginning and the end of the methods. Had they looked a little at the documentation, they would have seen that JUnit calls these methods for them.
Just because opensource is "free" doesn't mean that you shouldn't invest in it. Take some time to learn from some of the great developers out there, and end up with better results in your own code.