Independently of what language you write your Open Source in or with, the toolchains – usually them too being Open Source – have grown and improved significantly over the decades.
The tools and editors you write code with are way more advanced.
The compilers have gotten so much better in generating efficient output but also in providing error messages that you can actually understand. Not to mention how they even provide their own analyzer tools.
There are now static code analyzers and scanners that truly work and are so much better than the by comparison silly lint tools of the twentieth century.
The quality of the runtime tools of today and the introduction of widespread fuzzing have also allowed us to improve software by several notches in ways we previously had to work much harder to do.