I did some interviews for a company for hiring some programmer positions. The company wanted to hire Java experts, wherein I think lies a problem, but let us get back to it later. I interviewed a couple of people and was surprised to see that they knew Java very well, but not basic programming concepts itself. They knew about hashtables, but were unsure how they would implement one. It was same with a lot of other things and I remembered by post on identifying weak programmers.
It is disappointing to see people wanting to be more of translators than programmers. They want design given to them to the nth detail so that they can just translate it into a programming language. As a designer, I think if I design something to the nth level, I might as well code it. Every programmer has to take some responsibility of designing, otherwise software development will be inefficient.
I think it is wrong of even the companies to want for only language experts. They should hire programmers, who are languages experts, or who can work in multiple languages. I have seen the typical advertisements for language experts mislead beginners about what to work on.
One of way trying to build the programmer in yourself is to question every single principle, standard, paradigm or language feature with a why. The second – learn at least two programming languages. I think a necessary virtue of a programmer, whether he/she is learning or working, is to question before accepting or suggesting a solution. Be a programmer, not just a translator, or be ready to lose your job to a machine pretty soon.