On the first, more philosophical part of your post: I think your notion of “freedom-as-arbitrariness” is actually also what allows for “freedom-as-optimization”, in the following way.
Suppose I have an abstract set of choices. These can be instantiated in a concrete situation, which then carries its own set of considerations. When I go to do my optimizing in a given concrete situation, the more constrained or partisan my choice is in the abstract, the more difficult is my total optimization. Conversely, the freer, the more arbitrary the choice is in the abstract, the less constrained my optimization is in any concrete situation, and the better I can do.
For example, if I were hiring a programmer for a project, then (all else equal) I’d rather have someone who knew a variety of technologies and wasn’t too strongly attached to any, so that they could simply use whatever the situation called for.
You could state this as system design principle: if you’re designing a subsystem that’s going to be doing something, but you don’t really know what yet, optimize the subsystem for being able to potentially do anything (arbitrariness).
I feel there’s much more to say along these lines about systems being well-factored (the pattern of concrete-abstract, as above, is a kind of factorization (as in lambda abstraction)), but I’m having trouble putting it into words at the moment.
On the first, more philosophical part of your post: I think your notion of “freedom-as-arbitrariness” is actually also what allows for “freedom-as-optimization”, in the following way.
Suppose I have an abstract set of choices. These can be instantiated in a concrete situation, which then carries its own set of considerations. When I go to do my optimizing in a given concrete situation, the more constrained or partisan my choice is in the abstract, the more difficult is my total optimization. Conversely, the freer, the more arbitrary the choice is in the abstract, the less constrained my optimization is in any concrete situation, and the better I can do.
For example, if I were hiring a programmer for a project, then (all else equal) I’d rather have someone who knew a variety of technologies and wasn’t too strongly attached to any, so that they could simply use whatever the situation called for.
You could state this as system design principle: if you’re designing a subsystem that’s going to be doing something, but you don’t really know what yet, optimize the subsystem for being able to potentially do anything (arbitrariness).
I feel there’s much more to say along these lines about systems being well-factored (the pattern of concrete-abstract, as above, is a kind of factorization (as in lambda abstraction)), but I’m having trouble putting it into words at the moment.