How do I keep the passion and energy up after 17 years of writing software?
workplace.stackexchange.com
workplace.stackexchange.com
As somebody in a similar age bracket, the things I do:
Stay healthy. My energy levels are generally great if I am getting plenty of exercise and good sleep. And avoid eating junk, throwing off my sleep schedule, or having big worries.
Do things that matter to me. A few years back I was doing consulting that I got burnt out on. So despite a very lucrative bill rate, I said, "fuck it" and joined a friend in a startup. He had a problem that I really wanted to see solved.
Work with people I like. If I'm going to spend most of my daylight around people, I want to enjoy it. I generally like people, so this one isn't too hard for me.
Serve people I like. If I'm making something for people I care about, this is a big motivator for me. It definitely helps for me to actually meet users, watch user tests, and see stats that demonstrate that what we ship is making a difference.
Minimize my commute. I know that some people don't mind long drives in traffic, but I'm not one of them. I live in SF and have occasionally done gigs down the peninsula; it quickly drains not just my enthusiasm, but my will to live. I want to spend my energy on things that are actually productive, and rush-hour traffic is not one of them.
I look forward to seeing what others say.
One additional trick I like to use: when the work itself is getting repetitive and boring (similar requirements, etc), vary the way you do it, or parts of it. This can be anything from experimenting with the way you do your estimates, planning and bookkeeping, changing up the tooling (try a different source control tool, code analysis, whatever). Try different frameworks or languages (although preferably only for non-essential projects, in case it goes badly). Read up in-depth about exception handling policies and frameworks, and make use of one in your next project (if you don't already). And so on, the list is nearly endless.
By varying these topics gently (preferably one at a time), you can keep risk to your clients at a minimum, while keeping things interesting for yourself, and broadening your skill set. This might seem obvious, but I see far too many people lose skills and motivation because they're stuck doing the same boring thing for years.
I think one of the problems of creatively-oriented endeavors is that we confuse mastery with fulfillment. The smarter and more talented you are, the easier it is to fall into this trap. We chase hard problems instead of noticing the interesting problems that lie at our feet, hidden in plain sight amongst our daily dirty work. We chase braggable successes instead of indescribable play. And then we get bored and quit, sometimes without accomplishing much depth at all, and it's not obvious until you step away from it all to take stock of it. At least that's my two cents on it.
So, take a break, do something entirely different, then come back refreshed. There will always be something new to learn waiting for you.
"And finally, if you get a chance, help students with things. For example I judge and coach for Imagine Cup (sponsored by Microsoft) but I am sure there are equivalent things in whatever tech field you're in. This is a self-selected group of passionate and innovative young people who are building something they think will change the world and make them rich, and spending some time with them will get you fired up again, I guarantee! My first judging trip left me feeling ten years younger, so now I'm hooked." - Kate Gregory
I helped out at CoderDojo (http://coderdojo.com/) whose primary participants on the days I helped were 10-15. I helped the kids out with programming, learning myself and helping them program quadcopters amongst other things. Seeing the enthusiasm the kids showed and hearing what they were trying to build in their own time was incredibly inspiring. If you can, see if there is a local club teaching kids programming, I'm still only a university student but the club I helped out at were incredibly eager for anyone with coding experience to come in and help out. I can only imagine how happy they would be with someone with that much experience helping out.
I can't remember a time where there has been such a large number of truly interesting technologies around. And there are open source solutions to everything.
You can pretty much pick a new thing every week and you'd be still learning something new next year.
And with the way the job market is these days, you don't have to settle for that boring tech job either. Get out there, get yourself into a job that lets you work with exciting stuff.
Exercise: I don't sit during coding for the last 3-4 years and I will never go back; I walk behind a standing table, I set up a small gym in the garage I use 30 min / day and I take walks with the dogs for 1-2 hours/day.
Do new things: these might be considered risks but I don't really care; I need new tech to keep learning; I know my company would benefit most from doing the same Java enterprise web stuff forever, so I sold my shares and went on to something else. I probably would've been depressed and bored by now if I hadn't done that.
Lot's of hobbies: even if they are computer related, they will feel like something completely different. I restore/upgrade old (end 70s/80s/begin 90s) hardware and program software for it; it feels like working on an old relic and getting it to life.
I happily walk behind my computer and write code after 20 years, still in amazement how we can create so much something out of nothing.
Currently I've learned:
- TI Basic (when I was very young, for the TI-99/4a)
- LotusScript (ancient tech, yay!)
- Visual Basic (the horror!)
- Objective-C (cool language)
- C# (sweet language)
- Java (yuck! - the crappy version of C#)
- a bit of HTML / JavaScript (hate browser differences)
- Python (pretty nice language, except for the indent requirements)
- Django (pretty cool framework, but eventually didn't "click" with me)
- C (cool language due to very small library, still need to figure out some pet project to use it on).
- Xamarin (very nice to build iOS / Android / WinPhone apps with 1 language but still optimised UI per platform)
- SQL (I know enough to get around databases, but don't particularly enjoy this)
Hoping to pick up Lua in the future, perhaps in combination with a C or Objective-C program. Dabbled a bit in OpenGL, would like to make a real game with it one day, not just the very lame Pong clone I created.
If you don't enjoy learning new stuff, better move out of software development I think. Cause you won't invest your free time which means you'll get behind on other software developers who take their job more seriously. This in turn might make you much harder to employ.
Also: put stuff out on Github, be active on StackOverflow. Since I've put several (mainly abandoned) products om my Github this week, it seems a lot more recruiters have shown an interest in me. Though maybe it's just coincidence, I'll have to see how it works out in the long term ... Anyway, having some pet projects in different languages that interest you on your Github, might make it easier for you to pivot into new areas.
I was finding diminishing returns learning languages that were really just slightly different notations: Java, C#, VB, Perl, Python, Ruby, PHP. Each new notation felt more tedious and less thrilling. Then I started struggling with deep questions like, "these are so similar, why do they all even exist?" (Which is a great way to make new enemies).
Then I found that list and started with lisps. That's kept me fascinated for at least 3 years, learning macros from Let Over Lambda, abstractions and FP/OO from SICP, interpreters from PLAI, and syntax from Clojure Programming.
I just started learning type theory from F# Programming and Real World Haskell. I'm hoping to get bitten by the "Types Bug" just like I've been bitten by the macros bug.
Next after that I'm going to start learning APL/Q, and read the dragon compilers book, but at my current rate that'll be a few years out still.
I think it's entirely possible to keep circling around, learning new notations for the same old Java-like and Perl-like paradigms, and it's good to know what's out there in those domains, but don't stop with just those two!
Seems to be working for me :)
Things got better when I started my own company.