Focus is a design element in programming languages that I think deserves more attention than it
A focused language puts emphasis on a set of coherent idioms. Multi-paradigm languages like C++ or
C# are unfocused because they lack a certain principle.
Take C, for instance. You can do OOP in C, but it’s awkward. You need structures full of function
pointers and the language wasn’t designed for it: it’s not a good idea to do it. The point is that
you can but you shouldn’t.
We want to hide things. We want to generalize things. We want to extend things.
Why are mathematical abstractions so intractable? Why is the
Wikipedia page on functors incomprehensible to someone not
used to mathematical formalisms? Why does it sound so vague?
When approaching abstractions, for educational purposes, it is sometimes easier to think of
analogies or similes. We can conceptualize the idea of functors of “procedures” that operate on things inside
“boxes”, or we can study relational algebra using Venn diagrams.