With few exceptions, most software is crap. You know it. That makes sense: software originated as the study of life processes, and what is life but recycled crap?
Human languages produce a lot of crap too. Clearly this is a side-effect of being a living process, but it isn't an accident. Side-effects are central to life processes. Every generation of organism, every shift in language, produces detritus. In biology it takes the form of excrement and body mass; in language it is seen in archaic forms, marginal slang, and jargon. If a process is alive, it generates layers of crud.
Crud builds up over time unless broken down. In biological systems the breakdown products become the source from which new growth feeds. In language, memes beget metaphors and metaphors mixed, merged and partially forgotten by successive generations become the kernel of meaning in the etymology of new words and idiomatic phrases.
If you have ever walked an old forest, you've seen how layers of crud establish ecosystems. Centuries of dead plants, bugs, animal corpses and their excrement make up your typical forest floor. Ironically, old growth forests can be threatened by invasive earthworms, which strip the built-up humus, destabilizing the habitat in their wake. In practice, language too can be eaten away by ideological fundamentalists in an effort to return to roots that never were.
Software cultures unnaturally lack the level of fecundity found in living ecosystems systems. Vendors, language designers and users have yet to hit upon the mix of value choices and whatever thresholds are necessary to establish a self-sustaining environment. It may well be that the tensions between the community and vendors inhibits or prohibits the system from reaching a sustainable state.
PHP (and perhaps to a lesser extent Perl) is a good example of an ecosystem gone septic, succumbing to its own popular success with a sea of craptastisicm. You can find a lot of code there, but it is of a dubious, messy yet inorganic quality - like a garbage dump. The comparison-others Ruby, Python and Node.js, present smaller yet more vibrant and cohesive cultures; there is a lot of organic crud there too, but the public code is more organic and self-referential, akin more to a compost heap than a garbage pile.
I suspect a big part of the difference is in the recognition (or lack thereof) of the problem of factoring dependencies with solutions for package management and effective abstraction constructions. PHP just doesn't present an ecosystem that values this general class of problems, and this is reflected in the unusable crud it builds up over time.