4 ms·
And the 'monad' that functional programmers always talk about—same story. In C#, they encourage monadic composition by chaining errors. But about 15 years ago,
by jdw64 2mo ago
And the 'monad' that functional programmers always talk about—same story. In C#, they encourage monadic composition by chaining errors. But about 15 years ago, that wasn't the case.
Back then, if there was no value → null.
Now, even the absence of a value is modeled with Option, Maybe, or nullable types.
Failures are handled not with throw/try-catch but with Result, Either, or Try.
Overall, we've shifted toward a style where we preserve the computation context and then compose the next computation. Instead of manually branching every time, now we use map, bind, or LINQ-style operations that define the composition rules.
Things that used to be used only by a small group of people eventually become embedded into the language itself.
For example, callbacks have evolved into Task, Promise, and async/await.
So honestly, I don't think quality has declined at all. I think there's just more context to keep track of now. I've seen around 40 different company codebases. I have no idea about US code, but I've seen code from Korean and Chinese large corporations, and the difference between past and present code is quite significant.