I've had this concept rolling around in my head occasionally...the best path in becoming a better programmer is to sincerely desire to automate yourself out of your job.
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.
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 intentional 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.
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 some day...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.
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.
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.
> Does your company have the foresight to reward you
More like to they have the foresight to patent your ideas in their name, take your IP and restrict it via copyright, and then make fortunes off of it while the rest of the world withers in squalor.
There is a huge market movement in the IP industry not just because of how it is an obvious quick buck today to just sue everyone and put money down the legal black hole, but that in the long run when the means of production are wholly automated, you rule the world if the men with the guns give you exclusive rights to those ideas.
Sure, I think this is a legit fear -- which is why keeping it to yourself and whistling while you work may be the path to take.
But again, if you were able to automate it, then someone who is not you will be able to. And more likely, that someone will be a SaaS who really doesn't give a shit about fair labor as it pertains to your situation.
It's likely automation will eat the world...but my hope is that rather than virtual enslavement (or SkyNet), society will have reached a political point where living wages is a popular, enforceable concept, and the human race overall has risen above the economic rat race...but that's a long path (or may require World War 3, in the case of the Star Trek universe). In the mean time, for that political environment to even become favorable, more individual agents -- who are also hopefully, forward-thinking and not-entirely-selfish -- have to push the idea that humans have real value even after their initial grunt work has been automated.
edit: also, this is why I meant "automate" in the most pedant, grinding way...as in, take care of the crap work, even if it means learning how to write a script that has surely been done before (the GUI app is likely based on such a script)...now, if in your automation of the backup routine, you are hit with a Eureka moment and come up with an incredible, unrivaled compression scheme to store your backups...consult a lawyer before writing your idea on paper.
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.
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 intentional 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.
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 some day...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.
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.
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.