Do you cultivate an alternative career/hobby which complements or refreshes your primary role as a developer? If so, what is it and why?
Also see these related questions:
Do you cultivate an alternative career/hobby which complements or refreshes your primary role as a developer? If so, what is it and why?
Also see these related questions:
Alcoholism. Ted Dziuba has some other suggestions, too: http://teddziuba.com/2009/02/effective-vices-for-the-it-pro.html
MUDding. Learn how to slash, hack and slay your boss. In text mode. Learn regexps with TinyFugue(mud client). Because proper scripts and regexps will save you characters life :P
And then become programmer / wizard in a LPMud (today rather the branched LDMud) and stop cheating. Darn. Learn about OOP in LPC, a totally awkward language with PCRE and Lambdas. Wohoo! Learn about developer-hierarchies that are sometimes worse than everything you might experience at work (the don't name the "chief" developer at some MUDs "God" for fun)!
Alternative: Windows-Installer-and-Maintenance-Idiot for the whole family! Yeah! The boredom! The anguish!
Poker. I'm convinced that there's no hobby more tightly linked to programming than a good game of Texas Hold 'Em.
My hobbies (drums and motorcycles) have nothing to do with computers whatsoever. I find that having hobbies outside of the industry help to clear my head and provide balance to my life.
Photography. If you see beauty in code, you can see beauty in imagery.
Playing guitar, believe it or not. When I work from home, I find I can work through problems easier if I take guitar breaks.
Woodworking - it exercises a similar portion of the brain but gives you something more tangible as a result. The two complement each other quite well - woodworking gets you up and moving and working physical muscles and programming lets you sit down and relax. Both require similar skills in problem solving and optimization.
Playing any kind of instrument/music. I'm especially a fan of some improv guitar. After hours of programming or reading a book about it, theres nothing like throwing on a nice jam track and throwing down a jam session.
For some reason it especially helps when I am stuck on a problem.
Rock Climbing and Cycling. Another vote for having hobbies completely unrelated to computers.
Puzzles of pretty much any kind. Sudoku, Crosswords, Logic and classic jigsaw.
A good alternative career is commercial training (NOT academic teaching) - you learn a hell of a lot when training other people. Unfortunately, training jobs are the first to go in hard economic times.
Run a little server farm in your basement. I've got 3 old computers so far. :)
Probably the hobby that aids a programming career the most: reading.
Tech careers require constant learning, because of all the new tools, languages, and methodologies coming out all the time. Reading technical books is the most cost-effective way of improving your knowledge.
Even reading non-technical books for fun is good because it keeps you in the habit of stepping away from the keyboard and concentrating on a book for a while.
Reading. Studying philosophy. Learning languages & translating poetry (Ancient Greek currently. It's fun.)
All of these actually have surprising similarities to programming. They're hard to name, but I just feel myself using the same parts of my mind and thinking in the same patterns.
I spend a lot of my time working on http://www.projecteuler.net math problems solved by a computer. I'm not too good at getting an efficient algorithm, but I try everyday to learn something new from projecteuler.
One of the things that helped me a lot with performance tuning large scale systems was playing with cars and trying to make them perform "better". In fact a lot of stuff was immediately transferable. I'd rip the engine out of a car, put it on a dyno and know how it performed independantly of the drive train... make some major/minor changes and then put it under load and test it again, carefully recording my changes and aiming towards specific goals.
Plus its a more immediate reward to get your car 1-2 seconds faster then it is to get your code base's execution time avg down 1-2 seconds :)
I find juggling to be a perfect complement to programming. You need to stand up, relax your whole body, let go of your conscious thoughts and just juggle. If i can't solve a problem or are just tense from sitting at the keyboard for to long, just 5 minutes of keeping the balls in the air help enormously.
My favorite hobby, and one that I find relieves an incredible amount of stress that's largely attributed to programming, is taking any old hardware i can find out into my field with an axe, shotgun, compressed gunpowder, lighter + aerosol can, gun + aerosol can, (once put an old propane tank into an old server rack), large truck, small truck, old car, baseball bat a la Office Space, pneumatic wood chopper, and finally, harsh verbal insults.
Additionally, I play guitar a lot, as a previous poster said, it does seem to help with problem solving. I also rock climb and bike quite a bit. The contrast is relaxing for me.
Play the piano, proper posturing helps a lot with your wrists when coding.
Try Brazilian Jui Jitsu. Not only will you receive the much needed physical excercise and stress relief programmers are typically lacking, it's also very tactical. Its similar to a large switch statement...if he puts his arm here, break it, if he grabs there, break the grip, if he shifts weight this way, sweep him over to his back, etc etc.
The combinations of different techniques is endless, like programming, but is largely focused on "the basics".
Not to mention there's a certain amount of confidence you gain when you know you can snap on a cross collar choke and have your boss blacked out in under six seconds :D
Music. it's relaxing and studies have shown that there are many intelligence type of advatages as well. pick up a guitar!
Rock Climbing.
I've done my share of hiring in this industry, and the only strong correlation between programming skill and any other activity has been with Climbing. The strongest team I ever worked with was 4 climbers and 1 non-climbing junior dev.
The correlation goes the other way too. Traveling the world to climbing destinations, it's astonishing how many of my fellow dirtbag wanderers are contract developers back in the world. (Generally working in Microsoft technologies, so maybe there's a pragmatism correlation there too!)
Yoga.
My team leader on one of the previous jobs did yoga sessions during his lunch break. (This involved a headstand for a certain fixed lenght of time and, of course, other exercises).
I have to tell you, if he had a problem he was trying to solve, he ALWAYS came back from his yoga session with a solution. Would the effect be the same for any other type of physical activity? I don't know. Maybe. Or maybe the headstands are the 'secret'. I should try it someday.
WHATEVER YOU ENJOY. Don't pay any attention to what others say.
There's no ONE thing that's best for everyone.
Do something YOU enjoy and can lose yourself in.
I brew beer in my spare time. It's a lot of fun to be able to make something that gets you drunk. Plus there's the creative aspect of creating a beer that no one has ever made before (or one that's so crazy the big beer companies would never go near it). It's also a long-term project because of the time it takes to ferment, so it's a good contrast to the must-do-it-now deadlines in the software world. I also enjoy cooking in general... it's much more analog, with recipes being very flexible and not subject to rigid rules and exact amounts.
I also collect, use, and restore fountain pens. There's very little that contrasts with a word processor as well as a writing instrument (for paper!) that has to be filled with ink from a bottle. The feel of writing with one is so smooth and different/better than a ballpoint that it actually makes me want to take notes (it was this effect on me that made me switch to using them in college -- I think I would have failed a lot of classes if it didn't make me take so many notes). Then there's the fact that they're works of art, many made out of precious metals and quite stunning, plus the older ones are antiques. They're also user-serviceable machines, so you get the fun of tinkering with them. And they're a great way to spend a lot of money really quick, since antique + precious metals = expensive. Wait, that's not a good thing...
Puzzle solving (sudoku and the like) is definitely one. I like algorithms. The downside is that i always wind up creating programs that solve those puzzles for me, so i'm back to programming.
Running. It is a meditative dynamic dream-like state that clears out your head and refreshes your body.
I play the Violin. This hobby started off long before I discovered programming or computers for that matter. It has helped me be a little more creative while writing my code and a little more thoughtful when I play my Violin. I remember reading a paper about how both, playing an instrument and writing code, complement each other.
Apart from this I also enjoy reading - Poetry, Philosophy, SF. Cycling is something I picked up recently so I could keep fit. :)
Gaming,
I practice parkour (a real agile method) to keep in shape. When your work is totally non-physical, you need some physical exercise to be able to continue working. (Although sometimes it feels that I get the disadvantages of both - sore neck and back from not moving enough, plus sore leg and arm joints from moving too much. O_o)
Paragliding.
Nothing else is so relaxing and endorphine-filling. Well, maybe drugs, but there are cooler ways to kill oneself (I.e. paragliding).
Flying. It gives you a great feeling of freedom. It has practical math, physics, meteorology, and yet anyone can do it. It is full of interesting puzzles. As in programming, there are differences of opinion about things, but you can always get down to brass tacks. There is a cameraderie among pilots, and an attitude of looking out for each other, that we could all learn from.
Acrobatics! Without really `working out' you exercise all the muscles in your body. Including the problem areas for computer users: arms and shoulders.
And it is also a great way to practise your social skills: working together and trusting others to save you, should you fall. Works both ways: learn to care for others.
Most importantly: it is great fun!
Absolutely anything that makes you happy and helps you relax.
Flying airplanes and sailplanes. When I'm flying it is guaranteed I am giving the part of the brain that I use to program a rest. It is the most live reminder of a physical life rather than the virtual world I'm usually stuck in. It is the definite red pill... without the pain.
Poetry, reading, sketching, rebooting Windows (it's more of a compulsion), taking loooooong walks (yikes I sound like I'm dead) and my favourite: DOING NOTHING.
Sailing I find the variables you have to take into consideration, the patterns you have to follow and the physical excersion you have to put in to get a good result all go clean to hell when you get slapped by a wave and the boat stops dead in the water.
Whenever something breaks or goes wrong, there's always the opportunity to do some problem solving. I've learned everything I know about Marine diesel engines upside down in a lumpy sea. (The most important things I've learned are to make sure you have plenty of diesel and that you service the engine!)
I've also learned that with appropriate use, rope can be a good substitute for steel if you think laterally about the applciation.
It also gives you a chance to speak to the crew on your boat, and the crew of other boats in the bar afterwards.
That, and it's a great leveller. I have shared boats with Project Managers, company owners, network engineers, nurses, builders and students. We all have to work together every time, or somebody will get hurt.
Rather a bad day on the water than a good day in the office.
Exercise, it helps the mind clear and in the end you feel better. I think it's more important that I get that hour of just me time to decompress against the day.