Discussion about this post

User's avatar
Beni's avatar

I have to disagree about that script/command dichotomy is shell's wisdom (though I see your greater point).

IMHO the great innovation in unix scripting was exactly the blurring of this boundary! Early on by `sh` pretending scripts are command, then by OS kernel embracing `#!` notation at syscall level 👏, and later by proliferation of languages filling out the shell–C continium: awk, tcl, perl, python...

- Many "commands" as far as users are concerned started their life as shell scripts, proved themselves as useful black boxes, and eventually got re-implemented in more "leaf" languages. Many Git subcommands followed this path.

- Some "commands" do inherently spawn processes. `make` and `sh` were written in C. Some are higher-order commands by design, extending the shell with new "control" structures (see https://www.oilshell.org/blog/2017/01/13.html).

The reason I care about that is I feel the shell was a great enabler of *bottom-up, discovered design*, where people notice repeated patterns and script them. I don't think that would happen to the same degree without `#!` making scripts first-class.

Now, it's debatable whether such layering enabled the very mess we're in ;-), yet I'm very sceptical that top-down design would do better... IMHO, over sufficiently long timescales, bottom-up wins. 🐜

> Leaf Parts remain as textual code, whereas Container Parts are better expressed in a visual manner.

Now I think you're onto something!

The higher we go, the more we resort to drawing architecture/communication diagrams anyway, so it's interesting to consider visual languages specialized for that tier 🤔🕸.

- I've seen some Kubernetes "topology" UIs e.g. https://layer5.io/cloud-native-management/kanvas. Such UIs are probably more interesting with a "service mesh" e.g. https://kiali.io/docs/features/topology/#graph because the mesh is involved in routing and has visibility into the traffic on the "wires".

- I think the "Enterprise Integration Patterns" folks aspire to work at that level e.g. https://camel.apache.org/components/next/eips/enterprise-integration-patterns.html. Though I never quite got through the jargon.

But I suspect you'd consider both examples over-heavy and want to start "container" notation at smaller scales? like inside an Erlang system?

Expand full comment

No posts

Ready for more?