Become a 10x Developer, Increase Your Salary by 10x
There is debate over the term 10x developer which is the idea that some developers are ten times as productive as other average programmers. This was popularized by some research which was subsequently refuted but the idea lives on. And if true, how can we all become "10x developers"? From the time I began taking programming classes in school, which is when I was first exposed to other people's programming abilities, I knew that skill level varied and varied greatly. In an arithmetics class, the best student might score 20 or 30 percent higher than the average. But there's no way to score 100 times the average as that level of ability isn't measured in class. But in a programming class, there will be a number of students who can't complete a working program in a given amount of time, and a student who is a slow coder but eventually gets something functioning is infinitely better than the student who doesn't. Those who can't typically don't go on to become career programmers, but they might need to pass the class for some IT-related business management degree and go on to become Excel wizards.
But among profressional programmers what is a good standard deviation in productivity levels? How would you even measure productivity? In the early days of programming as a job, it was by lines of code, and people were paid by LoC which lead to rewarding unnecessarily complicated and inefficient code over elegance and consiseness. And we know that some of our most productive days of coding are the ones where we replace hundreds of lines of code with much less - called refactoring. Some teams assign points to features to develop and can measure their productivity based on the sum of those points.
As a programmer with many years of experience, I know subjectively that I've improved significantly over the years, which means I could solve new problems in less time than it would have taken before. And as a technical manager for several teams of programmers, I've worked with and interviewed people on a very wide spectrum of abilities, including a large number of incompetent would-be developers (whom I didn't hire).
In Vietnam, it's possible for one coder to make 10x the salary of another. In the US, normalizing for geography (hackers in Silicon Valley get paid a lot more than ones in Kentucky), companies who hire teams of developers will not pay more than 2-3 times as much for one developer as another one gets. On the other hand, the average American programmer makes 10x what the average Vietnamese programmer makes. One way to justify receiving that much more salary would be to say you were 10x better.
Is there a greater difference in productivity among Vietnamese programmers that justifies the greater difference in salary? Why are some Vietnamese developers worth more?
1. Better English. Having better and faster English reading skills means you can consume technical documentation in the only language that matters (except when you're using nginx in which case knowing Russian might help). Being able to write English means you can using forums and sites like StackOverflow. But for the bottom line, being able to communicate (including speaking on Skype) in English means you can interface with outsourcing customers, getting closer to the flow of money.
Better English is also a big sign of intelligence, even when it's not accurate.
So if you're a Vietnamese developer who wants a raise, improve your English. This applies to all Vietnamese people. Poor English abilities are dragging down Vietnam's economy.
2. Another important factor in developer pay is whether you're using a hot technology or not. Learn new trending languages like Objective C, Python, or Ruby and companies will have to compete for you in the current job market. Stick with the stuff you and a hundred thousand other Vietnamese students were taught in school like Java and .Net and you'll have to justify a higher salary some other way.
Experience makes one a faster, better developer. One reason is that you make less mistakes after you've made them dozens of times already.
Here are some more general tips I've picked up over the years. Each one should improve your productivity, whether by 10% or 100%.
1. Use a mouseless, scriptable editor like vim or emacs. These are also available on any system (at least vi is) and so you'll always be able to edit files wherever you are.
2. Get a big screen. Trying to use an iPad for serious work is just silly. A crazy-looking ergonomic keyboard may save your career too.
3. Learn a coding style (e.g. style(9)). Apply it throughout the project, across your team or company.
5. Hell, use a functional programming language. Or at least learn functional programming for your language (map/reduce, lambdas, etc.).
6. Learn UNIX and learn how to write shell scripts so you can program at a high level when needed.
7. Memorize the language's built in functions, even though you should have online help.
8. Ask questions early, whether to peers / teammates or on forums. Get good at formulating answerable questions.
9. Write less code, reuse more code.