There are several things contributing to over-abstraction. Two that I can think of:
1) Professional programmers are constantly hammered with the idea that abstraction and decoupling are always desirable - you've probably heard about TDD.
Somehow OOD has been taken over by this school of thought and there are very few good resources on what good OOD is and looks like.
2). Dynamic OO languages force one to have high coverage and many tests to make up for the lack of static verification.
And I don't agree with the TLDR, over-abstraction is not a disease that affects only OO languages.
> over-abstraction is not a disease that affects only OO languages
Agreed, it's present in other languages and has been with us a long time. It does seem to have reached a fever pitch in mainstream OO culture. OO seems to encourage taking even a small piece and giving it the full-blown treatment of layers, design patterns, DI, and the rest. Because each piece is a whole, in a way, so it deserves it, right? Give each part of a program that treatment, and the whole becomes unwieldy to a degree that was seldom seen before OO.
1) Professional programmers are constantly hammered with the idea that abstraction and decoupling are always desirable - you've probably heard about TDD. Somehow OOD has been taken over by this school of thought and there are very few good resources on what good OOD is and looks like.
2). Dynamic OO languages force one to have high coverage and many tests to make up for the lack of static verification.
And I don't agree with the TLDR, over-abstraction is not a disease that affects only OO languages.