Why would somebody do this? Isn’t it already enough to code at work for eight hours a day, five days a week? If you ask yourself this questions, then I think you should reconsider your position.
There is a fundamental difference between work and free time. You are not constrained. You don’t have to hold a deadline. Software development is a mentally challenging task, and while some time pressure keeps you focused, a little bit more forces you to cut corners instead of considering better alternatives. If deadlines were good, they wouldn’t have “dead” in their name. In your free time you decide when you are done.
Even having considered alternatives you are not always able to implement them. There may be a corporate identity that doesn’t contain your favourite flavour of pink. There can be a module licensed under a non-commerial-only license. Or maybe your company uses an old framework missing the latest features. No such problems in your free time.
There is a theory that mastery comes from practice. By coding in your free time, you can decide whether you invest your time in deeper knowledge of some topic or in a broader horizon thus becoming a valuable employee. And sharing freshly won knowlege and experience can increase your reputation as colleague too.
The social among us even meet like-minded people at events like Java User Group or Schneide Dev Brunch. Here the amount of transported information is much higher, since everyone has another background and focuses on another things. You can even share your mistakes and laugh with others about them.
Are there any side-effects of free time coding besides those listed before? Yes. Your personality can change. It is possible that you will gain a positive attitude and start invest your free time in your skills. Maybe you’ll even start to motivate others to do likewise.
Well, I think that it depends on the company you’re working for and your project(s) their. Of course if you’ have to do a routine and boring job most of the time for your company (which happens too often) then the only way to improve your skills (and get fun) can be to start working on your personal projects.
However it seems to me that there is a number of downsides. The most important are the following two.
1. It is true that one has to “cut corners” under the pressure. From the other side when you just _must_ do something and under some externally imposed limitations (both regarding time and technology) this often makes you more inventive and obstinate. I’ve met too many persons who used to give up too easily in face of a just pure technical challenges even at their main work.
2. If you’re working on a big and long-running project, especially at a senior position, it is very important to keep yourself focused on it. Based on my experience I can say that one have to think about the project he/she is working one much more that 40 hours a week to be a really useful member of the team. And of course one should constantly learn a lot. Having a personal project may distract you from your main job too much and a (possibly) relaxed work style and excessive freedom you get (and enjoy) with such a project can become a bad habit negatively affecting your professional carrier.
At the bottom line I’d like to repeat again that it all depends on many circumstances including personality. However I do believe that working on personal project(s) is more likely important and desirable at the beginning of the one’s professional carrier when responsibilities at work are often not too high rather than for a senior developer working on a big and long-running project. If one feels that his/her skills are negatively affected by everyday routine it seems much better to find another more challenging job.
Today the idea that personal projects are highly desirable (or even mandatory) for (almost all) programmers seems to become very popular. I do admit that in some (may be many) situations this is reasonable. From the other side I think that it is important to get it with a grain of salt. After all our profession is a kind of engineering (at least I think so). I’ve never heard any appeals to e.g. aviation engineers to have personal projects. For those ones who’s job is to create weapons such an activity can even be considered as a criminal one (in some countries). I’m sure that the “virtual” nature of IT should not be considered as absolute justification for such a dramatically different approach.
From the other side I do believe (sorry for repeating myself) that working 40 hours a week is not enough to be really successful and a habit to think about your project even when you’re not at your desk can be at least as good as personal projects.
I think that especially the difference between the private project and the project at work may be inspiring. The inspiration can then help you solve the challenge at work in a new or different way. I was intentionally not clear about the type of project or activity you can do in your free time, because I think anything that makes you more happy or knowledgeable works. When working with tomcat at work you can play around with jetty for two days. It will distract you only marginally and will give you some new insights. For me a senior has the ability to see the bigger picture and the insights enable him to see it or they make the picture more complete.
I am sure that to become a valuable team member you have invest a lot of time. What I am unsure about is, whether all the time (at work + not at work) has to spent on the project. It is not possible to turn off thoughts like you turn off a machine but you can change the direction. From my experience these distractions by private projects enable one to switch contexts. The subconscious mind still works at the challenges you encountered at work while the conscious mind explores something new. This way some hours later it is possible to view at the problem from the different viewpoint thus leaving the local minima on your search for the solution.
I do believe that your point is perfectly correct for many (may be even a big percentage of) programmers – simple because a lot of them have to solve relatively routine and often boring problems most of the time in the office especially at the beginning of their carrier. My post is just a “grain of salt” which I decided to add seeing that the idea of personal projects becomes widely considered as a universal one (and almost mandatory for the most of “good” software engineers) which is not correct IMHO.
And it seems worth to remind that personal projects can help only partially anyway. To gain such an important skills as ability to work on a really huge project (millions of lines of code), cooperate with a team and be effective even under the pressure one have to work in a team – personal projects most likely will not give such an experience.