At least languages like Java and C# require static typing (though I'm sure there's some lazy sociopath out there writing C# with every single variable as a dynamic), PHP doesn't even have that minimum bar
Neither do Python, JS, or Ruby. Personally I’d say a good dynamic language like Python is better than a rough dynamic language, but a good static language is better than a good dynamic language.
Yeah I'm pretty sure the language that has birthed conventions like HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor and RefreshAuthorizationPolicyProtocolServerSideTranslatorPB are rife with great practices that are in no way obscured by layers upon layers upon layers of half-assed abstraction.
The one with System.ServiceModel.Install.Configuration.ServiceModelConfigurationSectionGroupCollection in it surely musts be awesome too; I've heard great things about it.
The footguns in a given language being more ornate and towering than in another doesn't make that language better, but the ability to produce resilient, maintainable solutions for a given problem space in it.
Right, but a type system is as good as it is used.
And Java having a good one is no protection against the development cultures of large (consulting or non-tech) companies where the main metric is not the performance of the software neither the frugality of the hardware it runs on.
At least languages like Java and C# require static typing (though I'm sure there's some lazy sociopath out there writing C# with every single variable as a dynamic), PHP doesn't even have that minimum bar