There are all sorts of problems with our industry, and although this doesn't reflect every company the following is certainly the majority.
First of all, most companies don't seek experts, they seek inexpensive labor. Second, most projects are not well thought out, they are 30,000 feet overviews of what the businesses need. Furthermore, many businesses set unrealistic timeframes due to the numerous times they have been burnt in the past. Finally, quality is a summation of applied skill, project definition, timeframe and project focus.
Every developer, especially early on in their career, should be paired with a senior developer to learn a specific trade or skill. This occurs in almost every profession but IT. Doctors, lawyers, plumbers, police officers, electricians, etc. Furthermore, this rediculous mentality of requesting each applicant know 10 languages proficiently is absurd. How many doctors do you know that practice more than two disciplines? How about a lawyer that practices criminal law and corporate law both? Sure they may exist but is it common? Programmers should be specialists not generalists, we must get out of this mentality if our profession is to mature.
How many projects have you been on where you walked in and the requirements for the application were a summary paragraph explaining what the application needed to do? Worse yet, I have been in some where the management starts off by saying... "I envision..." and nothing is on paper. A 30,000 foot overview is great for them, but a lot can go terribly wrong between 30,000 feet and the ground and it normally does. A lack of planning and forethought is the #1 failure for most applications.
Is it me or do the timeframes just keep getting shorter? You we have all heard the horror stories and many of us have lived them. But shorter timeframes do not benefit anyone and usually make matters worse. Presuming everyone received well thought out and detailed specifications the timeframes might be realistic, but lets face it, that just very rarely happens.
Finally, for companies to get ROI and a solid product that can contribute to the organization they must work harder to correct problems that lead to the end result. They must take blame for and learn from past mistakes rather than say there aren't enough skilled workers here. People aren't born doctors, lawyers nor programmers, they are nurtured and trained... the ones that can't hack it go on to do other things. The ones that remain want to learn and contribute to their profession... Isn't it our responsibility to see that they have all the opportunity to succeed?
Think of it this way, call an architect and tell them you want a house. It needs to have 12 rooms, two-stories, a basement and a pool. See if they come up with the same design you have in mind.