I believe the value (or pay) of a person in the market is defined by the following factors:
1) innate qualities
2) knowledge & experience
3) people skills & network
Innate qualities are born with, including appearance, intelligence, personality, etc. And educational background, academic performance, etc, are closely related with one’s innate qualities. But since it’s almost impossible to improve this aspect, it’s useless to say too much about it.
Knowledge & experience, people skills & network are the two aspects that differentiates people’s value (pay). However, a career in IT excels in neither fields on the long term.
The following are my reasons. Now and then, I will refer to the three factors mentioned above.
1 IT is a fast-changing industry by its nature, so in most domains of technology, knowledge is hard to accumulate steadily. A 20-year software engineer is likely the same as a 10-year software engineer in terms of knowledge (but inferior in terms of energy level).
1.1 Some might argue that a good software accumulates a set of knowledge (such as desgin patterns, algorithms, debugging experience) that survives the fast-changing industry, but the fact is that these account only for a very small portion of knowledge required for real projects.
1.2 Also, some might argue that there are domains of technology that changes slower, such as system-level programming (compiler, OS). This is true, and one might be lucky enough to accumulate a huge amount of expertise. But the risk of such a career is still high. Since one is very deep into one technology, once the technology is out-of-date the penalty is severe. This is the nature of technology, it will be out-of-date sooner than many other things such as people skills & network.
1.3 Well, going deep in one technology is risky, then what about going wide in many technologies as a generalist engineer? But rarely are there any projects need such kind of people instead of experts of each individual domain of technology.
2 In addition to the fast-changing nature of the IT industry, limited personal influence also contributes to the low ceiling of the career. A good engineer cannot directly make other people on the team better software engineers, while a good manager can directly make the whole team, divsion, or even the company succeed. With many other careers such as sales, surgeons, traders, the vital difference is that sales, surgeons, traders play a greater role as an individual, while a software project requires a team of 30 to 3000 people.
2.1 Moreover, sales, surgeons, traders also deal with people, that makes them potential people managers in future, while software engineers deal with technology which hardly leads them to people management roles. In fact, most senior managers in IT are not previous software engineers. The point is that software engineers accumulate little in terms of people skills & network.
3 The IT industry is also infamous for its locations. Since the nature of the career requires little interaction with customers, software engineers often have to work in remote locations with lower rent or undeveloped districts with lower pay. The suburban sci-tech parks in China and the outsourcing trend in the U.S. are respective evidence of such claim.
4 Software engineers are not very much respected. The reason could be comprehensive. I personally believe that it is closely related with the low pay growth.