> C++ was created as a reaction to OOP being so difficult to do in C.
> Java as a reaction to memory management being difficult.
> C# as a reaction to Java not being concise enough.
> Javascript as a reaction to HTML not being dynamic enough.
> Go has a reaction to parallelism/concurrency being difficult.
> Rust as a reaction to what C++ has become.
And it goes on. There are many other languages too that you won't hear of that are created as a reaction to the status quo not being good enough either, but those ones I listed were backed by a big enough majority to become known. There is also the Lisp family and the functional paradigm too, which come round again and again in popularity.
All these languages/tools are the problem because no one is sitting back, and pro-actively realising that the entirety of these languages are no good. I am not saying this to start an argument, I have happily been a programmer for 15 years. But I recognise the problems, and they are the same problems, that will repeat over and over again ad-infinitum. I actually started writing down problems I've found and possible solutions and it's already reached over 30 pages.
What it boils down to is that all languages share the same flaw; they specify the what and the how, but never the why. Until we figure out how to encode the why, we will forever be going in circles.