That last point rings quite true with my experiences. I've been writing PHP and some other languages off and on for about 10 years now.
Looking at current jobs listings it's difficult to find things that I am particularly well suited for, even in web programming.
Since I was using PHP well before the current crop of mature frameworks and CMS the majority of my experience is in trial and error development of my own database access patterns , anti XSS , anti SQL injection and all of that other stuff that you used to do yourself in the early 2000s. As a result I have handwritten countless numbers of CMS systems and frameworks and am comfortable taking a bunch of hardware , building a Linux server out of it and mounting it in a rack.
But nowadays the conversation is not so much about that stuff, it's "what do you know about EC2?" , "What do you know about codeigniter?" , "What do you know about Wordpress?". So, my knowledge has been abstracted (generally by people who would do a better job it than I did).
It's quite a hard thing to explain to your family when they say "But you've been doing programming for years! You must know everything about it now!"
This is the nature of modern technology work (especially software-related work.) The ability and willingness of people to continue to learn throughout their lives is going to become more important with each passing year, particularly as things get more competitive, and technology continues to evolve (and even more so if the speed of that evolution increases, as some predict.) I'd argue that said willingness is now one of the most important things for people to remain competitive, right up there with past experience. Related article and discussion from not too long ago:
I had to log in just to reply to this because it very well could be me writing this post. I taught myself PHP in grade 7 (around fifteen years ago, it must have been near the v3 release) and sold websites in high school. I hand built everything on web servers I compiled from source.
Then I made the terrible mistake of taking a long break from professional programming through university (I worked as a tech writer instead, the money was good). When I came back two years ago I found that I had to learn a whole new set of tools. Javascript was now the norm instead of a disabled annoyance. Browsers supported incredible display features using stylesheets which made my table-and-images based designs obsolete. All the sites were built using some sort of CMS.
I spent a year learning front end design, WordPress, Magento, Joomla, and Drupal theme design. Then I went back to my old do-it-yourself ways and wrote my own CMS [0]. Suffice to say that it wasn't necessary. I learned a lot about back end programming and MVC related design patterns while creating it, but the most valuable piece of knowledge I gained was "Don't reinvent and try to sell the wheel when other people are offering it for free." It should have been obvious, but it seems I'm much smarter in hindsight than I was in planning.
I'm still learning today. Now it's the Ruby on Rails world and a whole plethora of new technologies come into play. I'm using Haml, SCSS and CoffeeScript on top of the RoR / PostgreSQL back end. My first web app will be ready for release soon. After that it's on to learning Haskell and RethinkDB.
The irony of all this is back when I stopped programming I thought I had a pretty good grasp on everything I needed to know. I figured I'd step right back into web development and continue on the way it had been when I left it. I wouldn't have let my skills atrophy if I had known how important it was to stay up to date. I think after two years I'm finally catching up, and I don't intend to let them get rusty again.
TL;DR:
Don't get cozy because you think you know everything now. Even if you do, the state of the art changes quickly.
Looking at current jobs listings it's difficult to find things that I am particularly well suited for, even in web programming.
Since I was using PHP well before the current crop of mature frameworks and CMS the majority of my experience is in trial and error development of my own database access patterns , anti XSS , anti SQL injection and all of that other stuff that you used to do yourself in the early 2000s. As a result I have handwritten countless numbers of CMS systems and frameworks and am comfortable taking a bunch of hardware , building a Linux server out of it and mounting it in a rack.
But nowadays the conversation is not so much about that stuff, it's "what do you know about EC2?" , "What do you know about codeigniter?" , "What do you know about Wordpress?". So, my knowledge has been abstracted (generally by people who would do a better job it than I did).
It's quite a hard thing to explain to your family when they say "But you've been doing programming for years! You must know everything about it now!"