Yup, you are right. Attitude is key to becoming a) (along with a basic level of aptitude, obviously). And, few people have the necessary self awareness.
Attitude is exactly what companies look for when they hire people with less experience. Even for more advanced programmers in a sense it is essential because you never stop learning. This is why there is some bias towards younger people as they are supposed to be more willing to learn.
But, as with any behavior, attitude becomes less necessary if a clearly defined system for mentoring/acquiring the necessary mental models is in place. Someone who graduates from a top school and ends up working at a company where a) types mentor new hires has to try significantly less than someone who graduates from a less well known school and has to figure out some way to learn from a) types.
Btw, the way a lot of the best companies bypass the HR problem is they hire based on employee recommendations. This is another contributing factor to 'talent shortage'. There is a hiring channel at any company that is much better at recognizing potential - existing employees. The high effectiveness and limited reach of this channel adds to perceived 'talent shortage'.
I would say it is at least as essential for advanced programmers.
I have worked with a lot of programmers and I find you can basically throw advanced programmers into three groups:
1) Those who think about and figure out how to write maintainable code (these are a small minority btw!)
2) Those who believe that writing maintainable code is a matter of following coding conventions they are comfortable with, and
3) Those who just want to get stuff done.
I think that #3 will only make competent maintenance programmers. You do not want to be stuck maintaining a major app one of them built. #2 will be fine at extending existing frameworks once they become comfortable with them, but #1 are the ones who can create new framework code and make it work.
As for mentoring that's key (and was for my own development as a programmer and software engineer) but many people just never "get it" even with all the mentoring in the world. Either they are not listening or they are not drawing the right messages from it. This is tough because in order to get to #1, you have to be willing to question what your mentor says. If you mechanically follow it, you end up in the second category.
My experience has shown that there is one more category - #1(creates frameworks) + #3(gets stuff done). In early stage startups, this is the kind of person you want. In big companies, usually #1 types are ideal.
Regardless, it does suck to have to maintain/extend apps written by #3.
Attitude is exactly what companies look for when they hire people with less experience. Even for more advanced programmers in a sense it is essential because you never stop learning. This is why there is some bias towards younger people as they are supposed to be more willing to learn.
But, as with any behavior, attitude becomes less necessary if a clearly defined system for mentoring/acquiring the necessary mental models is in place. Someone who graduates from a top school and ends up working at a company where a) types mentor new hires has to try significantly less than someone who graduates from a less well known school and has to figure out some way to learn from a) types.
Btw, the way a lot of the best companies bypass the HR problem is they hire based on employee recommendations. This is another contributing factor to 'talent shortage'. There is a hiring channel at any company that is much better at recognizing potential - existing employees. The high effectiveness and limited reach of this channel adds to perceived 'talent shortage'.