I've had this concept rolling around in my head occasionally...the best path in becoming a better programmer is to <i>sincerely desire to automate yourself out of your job</i>.<p>Instead of backing up a system via GUI every week, figure out the API calls needed to hook up via a script. After a few weeks of triggering that script by hand, write a cron job and a logger that logs the relevant transactions. After awhile of manually SSHing into the backup server to verify the existence of those backups, write some kind of litmus test that fails if the backups were corrupted. Instead of checking the log every once in awhile, have it email you (and just to be safe, use other kinds of push notifications too ) when success or failure happens. And instead of lackadaisically running emergency drills to see that the backups do work, write a automated deployment system that runs off of those backups, and put that in a cron job.<p>At the end of all that, you still should want to be "the human". You should still want to SSH in manually, check the checksums, deploy from backup on a lazy Friday just to make sure...but those are <i>intentional</i> actions...not just some repetitive drill you do because you have to. And if something does go clusterfuck, you're still there to handle things.<p>So the test is: now that you've automated the robot-part of your work...which, the fact that you could automate it means it would have been automated <i>some day</i>...what do you feel free to do now? Does your company have the foresight to reward you, both in salary, and in discretion to pursue projects that truly require human insight and expertise? Or is the culture such that it's just better to keep your automated-workflow to yourself, and spend the day surfing the internet? Not that either of those choices are wrong...I mean, when I'm near retirement age, I will definitely choose the latter happily...but if that first option of moving ahead isn't available, then that's a sign that you might have to open your horizons.<p>Of course, if you can't automate any of your work...congratulations, it just might mean you're working on exciting, non-repetitive things that (...for now) require the best of human insight and intelligence.<p>edit: forgot to add the best bit...no matter what the outcome at the end of the automation process, you'll still have become a better developer by just building it out. I think 99% of my experience and knowledge of the command-line (and also, much-needed appreciation of functional design) grew out of an impatience with perfectly good GUIs. Just one of the other upsides to being a programmer...you can appreciably lessen your own workload so directly through improvement of your personal craftsmanship.