You are both true, in fact.
There are lots of reasons: lack of langage formal structure (dynamic types...) leading to longer refactorings and code-writings, lack of exploitation tools that are an issue for quality managers, difficulties about debugging that increase the maintenance costs, instability due to external factors like browsers versions and upgrades... and so on.
All those problems can be solved by having top experts under the hand that know perfectly how use the langage, but the problem about this solution is not everyone is Google or Facebook and can afford to have 80% of experts in their programming staff. To start with, there is not enough real experts around the word for all entreprises, so only the ones with the biggest wallet can rely on a such staff.
For all the mid-sized and low-sized enterprises, there is a real need to be able to make working and reliable applications with only the help of average developpers or even sometimes a bunch of begginners helped by a single expert.
That is not possible with a langage that let those developpers write things as stupid as "this variable meant to be a numbre recieve the value of this variable meant to be a character chain without even checking it represent a number and provide a fail-over strategy if not". The expert of the team would have to review VERY SINGLE LINE of the code to ensure it is well-writed and won't lead the application straight into a wall in a few days, weeks or months... at this rate, the expert would be faster to work alone and write everything by himself. (Post author's point about dynamic types)
But that is not possible also with a langage that requiers extra and expert coding to ensure that when the application crash due to a bug, it provides enough information to make the repair process faster. Once again, it'll mean that you need experts to write most of the code. (Your point)
And there is much more reasons to come, as I pointed out, that makes that a langage which was not thought from the start to be used by enterprises, as Java and .Net are, is a real problem for enterprises that can't afford to have only experts in their teams by need reliable applications to run their business.
That is only possible with:
- a paranoiac langage that try to check everything it can, just kick the developper on their rails at every doubtful line of code, force them to be extremely precise of what they want to make and how they want the exceptionnal situations to be handled before deployment...
- a langage that do the most possible to always provide as much information it can when a failure happens post deployment, even if the developper didn't think about any fail-over mechanism that will report anything about the circumstances of the failure...
- a langage that do not requiers to know the specific of 40 versions of browsers to write code block that will work everytime.
- a langage that comes natively with tools that don't requiere a top expert to handle the complexity of basic entreprise needs: internationalization, load balancing, migration, basic documentation, monitoring... and so one.
My answer: for all entreprises except the richests that can afford experts for everything, in terms of cost for quality insurance and maintenance, A LOT more than a Java/.Net one.