1. Truly there are not enough trained people for the jobs available, but I don't necessarily think that is our core problem in the US based market right now.
2. There is a shortage of new graduates to fill the entry level jobs available to do the grunt work on projects, and paying a senior engineer 6 figures to write programs or utilities slightly harder than Hello World is a bad investment (obviously a bit of an exaggeration but you get the idea).
3. Employers are not willing to pay the wage necessary to hire the people that are available in the market with the capability to do what the employer needs. e.g. they want to pay 70k/year for a 10 year senior engineer instead of a 6 figure salary. Supply and demand issue basically.
4. Employers are not willing to invest in an employee with 75-80% of the skill set to get them to the 100% they need. This can be because companies are so focused on quarterly numbers that they don't want a carrying and training cost or that they are fearful the employee will just leave once they are trained. I have heard both fairly recently.
Personally, I think all of these are true at different times and in different places, and I think there is some type of "shortage" now depending on the market you are in.