Most developers I’ve worked with lately take advantage of open source software when they can to make their jobs easier. Using somebody else’s library to parse XML or to connect to an HTTP server or manage a database connection pool is a lot quicker than writing that stuff yourself, and is probably more likely to be less buggy than anything you’d write anyway. One aspect of open source software that I think gets less attention is that it’s a great learning tool, and not just if you contribute to the projects.
Diving into the code for some of the libraries I’ve been using lately (particularly Spring) has significantly changed the way I program. Here’s a concrete example. I’ve never been one who does a lot of superclassing when I program in Java, because I thought it was messy. But in Spring, they extend classes all over the place, and I’ve started taking that approach in my code to a much greater extent. All of a sudden, now that I have a fairly robust set of classes that I can extend, I can get things done a heck of a lot faster than I could before. I used to be allergic to those sorts of tall object hierarchies, but now I’ve come around to the opposite point of view.
Interestingly, I didn’t go into this wanting to learn how Spring does things and adapt to it, rather I was just trying to figure out how the framework did something and couldn’t help but absorb some of the design choices they made by osmosis. I’ve long thought that the worst developers I’ve worked with are those who look at the same set of code (that they probably wrote in the first place) and don’t get the chance to learn by looking at work done by their peers. Utilizing open source software, and studying the source code to solve problems, can take the place of working on a large team, which is something I haven’t done for some time.