This can be seen as an advanced version of the question, Which programming language should I learn.
If you want to want to make it as a master programmer, someone who runs his or her own consultancy, or even their own own software company, you need to change your way of thinking. You can no longer run after the latest cool tech, or the hippest buzzword.
If you want to become independent, to charge more money than the average code monkey, to be someone who is seen as gettings things done, you can no longer think in terms of this or that programming language. You have to start thinking in terms of the final product. Master programmers are those who get things done, who know how to build complete systems, not just write a cool script in Python to display Lolcats on the screen.
At the advanced level, you are not judged on which technology you know. Which is why job descriptions like “Requires 10 years experience in C/C++” is bullshit. After 4-5 years, it doesn’t matter how much C/C++ you know. I’ll go ahead and say that there is no difference between someone with 5 and 10 years experience(or even 3 and 6); except maybe to the HR people. After a few years programing, you realise that most of it is just learning to use libraries anyway.
What master programmers are judged on is this: Can you build, ship and support a product through its complete cycle? Can you envision what problems will arise in a year or two if we cut corners now? How will you debug your code if it breaks in the field, and you have no debuggers?
How do you show this if you are not a programming manager?
Build your own project
One way to demonstrate this is to build your own products; something more than a dummy open source project. Something that people will use and find useful, maybe even pay for.
So the question is no longer: Which cool technology should I learn so that I can boast at work? But, which collection of tools will allow me to build my product in the least amount of time?
Which programming language to learn?
We are back to where we started. Which tech or language do you learn?
You make this decision based on logic, not religion. So if Ruby on Rails would do the job faster, you use that, even if you think Python Flask is cooler, and you’ve always wanted to learn it. If you want to build Iphone apps, you learn Objective C, even if you think C++ is a much better language, and you have a photo of Smart pointers in your temple. Remember, you will be judged on the final product, and not all the cool technologies you used to build it.
Say you want to build a web app. Do you use Ruby or Python? Pick the one you are more comfortable with. If you know a little Python, pick Django or Flask, even if you think Rails sounds cooler. Someone who knows how to build a complete, working web app in Django will be able to pick up Rails faster than someone who spent all his time learning new buzzwords, without ever mastering any of them.
How to learn a new language / technology
Do you immediately start hacking? Attend a course? Buy a book?
Based on my experience, programming courses work best if you already have some experience of that which you are trying to learn. While this may seem counter intuitive, the fact is that each new technology has a learning curve. At the very basic level, you are just learning to install debuggers. It took me 3 hours to install MySql on my windows machine (mainly because I kept screwing it up). Most books/tutorials skip over this initial hard part, like some genie from a lamp will do all the grunt work for you.
Another reason for having some experience is: You know all the basic stuff, but you are still not productive because you are missing important concepts that will make everything click into place. This is hard to explain; unless you have attended a course and went, “aha, so that’s why we have to dress up as a chicken and spin around three times. Because the compiler requires it for historical reasons”, you will not understand what I’m talking about. (Actually, I’ve used a really bad example, and even I don’t understand what I’m talking about. But that’s what you get for trying to finish a post at 1 in the night, instead of sleeping).
Once you have gone beyond the basic level, you will learn more from a course, as you will no longer struggle with the small things, but will be able to see the big picture of what the instructor is trying to cover. At least, that has been my experience.
Programming languages don’t matter. What you can do with them does. So learn to do more, learn to build cool stuff.
Any comments, please share them below.