As someone with 45+ years of software experience I can personally verify that software development has not improved significantly over the last 25 years or so. The two most important changes are that there is much less assembly programming (outside of imbedded systems) and each hardware vendor does not have their own completely incompatible operating system. Most of the rest of the "improvements" are pretty much moot beyond that.
OOP has never lived up to it's hype. No matter how "object oriented" a system is, it is still just as likely to be late and/or broken as in pre-OOP days. Development, maintenance and modification is not automatically better with OOP.
The lessons of good language design might as well not exist. PHP is a cesspool of bad design and implementation. JavaScript, even though it has some nice features (closures) has an obscure object model that is difficult to understand and is a wreck just waiting to happen. (Any body can overwrite the basic implementation of built in functions. Really? ObjectHasOwnProperty. Really?) C++ finally got a reasonable memory management model after C++03 with RAII/smart pointers. What did that take, 30+ years? Python and Lua are reasonably good, but they seem to be niche players. Java isn't a programming language, it is a self contained universe. Like a black hole, once you go in you never come out. And even if it's OK now, the fact that Oracle in in charge means that it is like Middle Earth if Sauron won. (Yes. Ellison is that bad.)
I can't be certain, but I strongly believe that one of the reason for the lack of progress is that there are not a lot of old programmers still in the profession. Unlike other engineering fields, say civil engineering, chemical engineering, etc careers tend to be short. There are not enough people around to say "we tried a version of that 15 year ago, and it had these pitfalls." The result is that the same mistakes keep getting made over and over again. This fits in with the observation that as a profession we have not improved much on estimating project requirements and being on time and on budget.
That's one of the reasons I hate the term "Software Engineering". We are not real engineers because we can't deliver on time with predictable results and a predefined cost. It's not that this happens all the time in other engineering areas, it's just that it rarely happens with software.