Data dominates. If you've chosen the right data structures and organized things well,
the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.
It's better to have 100 functions over one data structure than 10 functions over 10 datastructures.
Inheritance locks you into the first shitty design you come up with.
When something isn't first class, you invent all sort of bullshit workarounds.
GoF = no firstclass functions. Templates = no light elements.
Pure, functional languages don't make easy things hard. Other languages just pretend hard things
are easy and blame you when things blow up.
Personally, I'm ready to call it... dynamic typing is wrong.
It is an accident of history that statically-typed languages were so bad in the 90s
that dynamic languages were an improvement, but the answer turns out to be better static typing,
which we increasingly have.