Become proficient in a medium to the point where absolutely no conscious thought is required to use it to its fullest extent. That's the secret of great artists.
Apply that to programming, now. You can learn a field and the core tech of the field, and get a lot done for a long time. Or you can go chasing the new and shiny every six months and drive yourself up a wall and spend all your time learning instead of making.
Programming is a young field. It's changing dramatically from year to year. My first paying job was writing FORTH code. At one point I was writing OO C code on an embedded platform because we didn't have a C++ compiler. Eventually I became an expert in C++ (like an actual expert). A few years ago I went to a job interview and they asked me questions about Boost. I had to tell them that back when I was an expert in C++, the STL hadn't even been written. We were all using RougueWave. I've been paid to work in Perl, Python, Java, C#, Ruby, Go, Javascript and several other languages you will never have heard of because they were proprietary languages written by the companies I work for. I've built embedded systems, real time systems, distributed systems and now I'm trying to fix 10 year old Ruby on Rails code.
The thing is that none of the stuff I do is really all that different. It's just the details that change. Every time I learn something that is truly different, I always find a way to apply it to what I'm doing (if you look above you will notice a huge hole where functional programming should be... it's getting filled).
This field is about learning every day. If you want to be more than average and you want to stay that way for more than 10 years, then you have to accept that you will be spending all of your time learning. And making.
HTH!
The problem I typically see isn't that someone focused on a technology for too long and became unemployable. It's that they focused on an employer for too long and became unemployable. I started my career doing C and sql 20+ years ago. I could still easily make a living at them if I wanted. My second major technology was enterprise Java. I could still make a living at that if I wanted (and to an extent, I still do).
But people spent 10-20 years in a culture. They don't know how to even look for a job anymore. Their skills may be great, but they've never put in a job application online. They're unknown to the recruiters. They don't know how to write a good resume that reflects their abilities. I watched my wife go through it last year. Laid off after 15 years at one company, her problems were twofold. First, she had narrow but deep domain expertise. Second, she was rusty at job hunting and out of touch with industry standards that had evolved without her. She still believed in waterfall and thought agile was a joke - not good for someone looking for product owner roles! She learned, but it took a while.
That way you might not become "the greatest X86 assembly programmer" or whatever niche you like, but you might become a very proficient system integrator, which is useful in its own right.
It's worked out kind of weird, pushing me (after a long career) into being a founder, and building a tool for generalizing common problems in systems integration. :) My desire to wear lots of hats finally works! But really? I'm more or less a specialist at being a generalist. And I've learned not to chase shiny new tools, because they're very distracting.
That said, hobbies don't need to be productive and half assing something is often good enough. Yes, a simple wedge doorstop may damage the door, but well sometimes that's just not an issue.
These are two different functional modes. The mastery of acting without conscious thought is very hard to attain. See also flow (Cziczentmihaly) and related topics.
Learning incrementally can help, and I'd structured my own career such that I was doing that. I ultimately opted out of it when that stopped being an option. I was simply spending all my time catching up, and not finding myself (nor, to a very large extent, any of my peers) actually proficient with the New Hawtness.
But that doesn't mean you have to live on the bleeding edge, either! A tech that is proven out, used widely and stable, that's worth investing time to learn. In Crossing the Chasm terms (great book on marketing!), you need to learn early majority tech, not early adopter tech. You can be an early adopter for kicks, of course, but don't pretend it's to be more valuable.
The point is, I haven't had to deal with C for a long time. It's odd to be doing it again.
I don't think programmers are more like professors than artists, or vice versa. These are just two different modalities applicable within the large, varied landscape that is computer engineering.
Yes, I experienced this and it seems to be a real problem, for various reasons: if it does not look complicated, investors won't like it, won't buy it; if it is too simple to use, people will think I am dumb. If the setup is too simple, people will think I am incompetent, etc.
Simplicity is a prerequisite for reliability, not a nice-to-have.
Everything I do hinges on the acknowledgement of that fact. And you know what? My stuff works, because I can whack all the complexity down into a manageable ...widget that enforces all the rules for me. I know how to develop enough introspection of such things to keep from having real problems. I'm down to reported bugs where like the file system crashed.
No, I think too many people are still trying to win the science fair.
"There seems to be a propensity to make things complicated. People love to make them complicated. You can see that in television programming you can see it in products in the marketplace, you can see it in internet web sites. Simply presenting the information is not enough, you have got to make it engaging. I think there is perhaps an optimal level of complexity that the brain is designed to handle. If you make it to simple people are bored if you make it too complicated they are lost"
"Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better. " (EWD 896)
The question you always need to ask is: "Why is <this> better than what I have now?" If you can't answer that DON'T LEARN IT.
10% better isn't enough to take up brain space. Your proficiency with your current tools easily exceeds that. 100% better probably is good enough.
The only thing I've seen in the last 5 years that has been good enough to make me start learning it is Rust.
Looking at how nice Glium made programming OpenGL was the final push. Programming OpenGL is painful on a good day, and Glium managed make a lot of the pain go away. The fact that nobody manged to do this in any other language caught my attention.
Maybe Rust isn't actually required, but I'm willing to learn something just to listen to a community/ecosystem that can produce something so nice.
I have a bit of ADD-ness so shiny objects look the best. I love learning and have learned to curb my learning appetite to skills / areas that I think might benefit me in the near term.
> Every bit of bullshit steals your cognitive capacity and turns you into an 0.1x programmer.
Agree3
I know people in the finance business who are sending their CTO's out to take the Series 7 exam because to write code for some domain you need to understand something about the domain. That is on top computer science principles, your programming language, the "standard library" for your programming language, libraries you use on top of that, your build system, your version control system, and all kinds of stuff.
And now people think they are going to be left behind if they don't learn Angular, Rust, Shiny7 and all of that.
Every bit of bullshit steals your cognitive capacity and turns you into an 0.1x programmer.