Here are the programming languages I know very well:
- Java (most popular programming language in the TIOBE index)
- C (2nd most popular)
- Python (5th)
- PHP (6th)
Here are those which I know relatively well but, if I had to write something substantial, I would have to read 1-2 good books on the latest features / benefits:
- C++ (3rd in the TIOBE index)
- Perl (9th)
- Ruby (10th)
- R (16th)
I also know a bit of Assembly (albeit Motorola 68000 assembly instead of x86):
- Assembly (12th in the TIOBE index)
I do not know anything about programming languages created by Microsoft:
- C# (4th in the TIOBE index)
- Visual Basic .NET (7th)
Peter Norvig is right: it takes ten years to become a good programmer.
Programmers are problem solvers (like the A-Team)
A good programmer is also someone who knows how to solve a real problem which real people are having by writing a program which, hopefully, will allow the same people not to have to worry with the problem anymore.
To become a problem solver, one needs to adopt a very logical way of thinking which is explained in books such as Polya’s How to Solve It. Once someone is a problem solver, then it is reasonable to learn a software development methodology which has proved its worth over decades namely Object-Oriented Analysis, Design and Programming. There exist many books about OOA, D & P. Classics include Grady Booch’s Object-Oriented Analysis and Design with Applications but a more modern book would be Craig Larman’s Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development.
On acquiring experience
Nothing beats really trying to solve a problem by writing a software, failing miserably, trying again, failing once more and finally arriving at a solution. Nothing beats real world experience.
And this is not necessarily acquired at work. I know countless exceptional programmers (abroad and world-famous for most of them but a few are in Mauritius) who learned quite a lot by themselves by scratching their own itch (as explained in Eric Raymond’s The Cathedral and the Bazaar). They became good by writing software to solve problems that they themselves were having (and not for money).
The most important thing: have fun
To become an exceptional programmer, it is essential that you have fun in the learning and skills development process.
Programming is not something one learns to get a good job. It is something that someone loves and allows him/her to land his/her dream job later.