I work 40 hours as a programmer, and by the time I get home, the last thing I want to do is code some more. However, I feel like I am not getting better, and I do love software engineering. So how do you guys find the time/motivation to improve your craft outside of work?
Find a non-programming topic that you love, and build around it. Love pro wrestling? Write the comprehensive database of Wrestlemania results in whatever technology you want to learn. Love birds? Create a program that identifies birds based on photos taken. Love french literature? Write a parser that improves upon Google Translate.
I'd recommend to either:
- find something you want to code and/or need in your daily life at home,
- or to train at work, either by way of:
- attending company-paid training sessions (they're important too!),
- developing small tools for small tasks.
Those 2 approaches mainly work for me, especially the second one.
... that you get interested in programming. Maybe some other stuff can get your motivation going. These are amazing books to inspire you to do great things and learn how others got into it before you, and built and modelled the computers and their systems you use today.
For more on this, read my answer (and others') to What are some things you have read that inspired and guided you as a programmer?, where I detail this a lot more. But my top-list for this would be:
- Books (both hyper inspirational, extremely educative, and deeply humbling):
- Hackers: Heroes of the Computer Revolution, by Steven Levy;
- Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age, by Michael Hitzlik;
Don't code as soon as you get home then. Take a little break and then when you've recouped a little, then start into it. Make it fun.
But honestly, I know plenty of programmers that work 40 hours plus and have no problem finding the time for personal projects. If you love it then you'll find the time.
I think motivation is a KEY. As a start you may get involved to a local developer community events. Speaking/networking with the actual developers can bring new things and ideas to your ordinary developer life. Question is where to find them?
There is a number of local user groups where you can meet geek developers. Most of them will be passionate about things that they do. Depending in which area are you living, there are different local interest groups. Here you are some info that might be helpful.
As everyone said you gotta find the thing that you enjoy. I have never been able to just go home and program as a hobby so for years I didn't do any of that. Then one day I found something that I was interested in and then it was simply a case of doing it. Rather than watching television, or surfing the internet I found myself wanting to work on my project.
Another solution I found interesting (and find it easy to get motivated) was creating my own website blog etc It's amazing how you can find yourself interesting and have the time to write all about yourself and your amazing attributes :)
About the time:
I started writing my "hobby" code in the evening, after dinner: back then I was "almost" single with no kids. And having a GF that works nightshifts helped a lot.
Now that I have kids the time dedicated to my evening projects is much smaller.
I don't code every evening, and I code more during the winter and rainy days: the summer I mostly enjoy the outdoor places.
In the beginning I wanted to do some extra money, but then it became an open source project (little money, I just pay part of the rent with that) where I experimented new things, IDEs, profilers, tools, etc.
Some experiments were reused in my regular workplace.
Also, it turned out to be a massive help when you need a new job. People could see my code, my documentation, my interest in learning something after work, etc.
Working after coming home actually never worked out for me. What worked out (well, most of the times, not always) was working on hobby projects BEFORE going to work.
So, get up 1-2 hours earlier, grab some coffee, read a book or write some code.
(The problem is that this requires a fair amount of discipline... still, I found it easier than coding late in the evening.)
Just to throw in a different perspective:
Although lots of people say, only coding teaches you coding, there are (fairly often) times I come home after coding for 8 hours and the last thing I would do is sitting (again) in front of my PC and code my own stuff.
Would it be better for my coding skills to do so? Maybe. Would it be better for myself? Don't know, everybody is different. Many different things may be more important than programming - children, girlfriend, family, hobbies, whatever.
I prefer the more theoretical stuff after work - read a book about some interesting stuff, learn some theoretical CS, whatever. Just not sit (again) in front of my pc.
Never done anything with databases? Read something about it. Computing complexity of algorithms? Dig into it. Functional programming? Crazy stuff to do. There are tons of stuff that may be done with only a sheet of paper and a book while relaxing on a beach.
Every now and then, I think for myself: Wow, building your own Video game would be fun. Then I pull out this big pile of paper and write all that awesome stuff together that comes to my mind. Then I go out for research, look for stuff I may use to accomplish my goals, build large theoretical buildings, throw them away, build new ones and so on. Will the idea ever go into code? Don't know. Maybe in 30 years when I'm retired :-)
One thing is important:
Be curious about new things. Even if you just read about all that crazy stuff, think to yourself: Where would this be really cool to be used? Which problems in everyday programming may it solve? Maybe one of this thoughts will escape and bring you to your home pc to hack it into code. But don't force yourself into it.
Get time and motivation?
Time: this is our precious resources. Work on its management
Motivation: point attention on fun and personal out-of-work passion. leave money away from your mind, they bring you to people that does not care about the real essence of the job.
How to get motivation? Find a local business that needs a piece of software developed and work on it. Make sure you get paid for it, even if a small amount because you will feel more committed when you are paid, and that will make you persistent working your way through hard problems, otherwise it will be easy to give up when the going gets tough.
How to get time? You need to be very careful here. If you end up taking time from your family, friends or from sleep, you will burn out soon and will loose all motivation. What worked for me is 2 hours a day (from 10pm to 12pm) 4 times a week. You are the only one that can determine how much time and what ours will work best for you.
When I first started out and wanted to improve my skill set beyond that of my work life (at the time I was more SQL than anything else) I decided to find a project that would not only teach me something but also be rewarding.
I found a local charity that needed some database work done, not just the data warehousing but a GUI to interface with it. This gave me a reason to work at home later in the day and felt very rewarding knowing that I was stopping a charity from shelling out a lot of cash to some faceless software house.
That mixed with a lighter working environment (my trance playlist and some big speakers) helped a lot. On days that I felt I was being overly distracted I would take my laptop to the local Starbucks and work there (no TV to distract me!), I even found that after a while the staff would come and refresh my coffee for me so I didn't have to leave my laptop!