|
I like the ideas in the article, and they are generalizable beyond user interface design to programming languages, frameworks, and technologies. Some of my thoughts: 1. Christopher Alexander's ideas on pattern languages essentially talks about what happens when you have composability. You can now analyze or construct how composition happens with a grammar. If you construct the grammar such that all possible designs composed from the grammar is a cohesive, useful design, then anyone -- including the end users of a technology or the inhabitants of an architecture -- can make changes. His keynote speech to OOPSLA '96 is a good introduction to applying his work outside of building architecture (https://www.patternlanguage.com/archive/ieee.html) and his work had inspired the field of Human Computing Interface and computer architecture 2. Ruby on Rails is a good case study for these ideas. Rails is an opinionated framework, initially constrained to a curated selection of "opinions" that are useful for creating web applications. The Rails 3 refactor took apart Rails and decomposed it into primitives (Russian Doll Pattern https://www.infoq.com/presentations/katz-rails3/). And then, those opinions are recomposed using those primitives ... and for anyone who knows this, they can create their own opinionated framework out of those primitives (I did just that with a personal project, intermodal https://rubygems.org/gems/intermodal/versions/0.4.0). This is the "layering" discussed in the article. 3. Kubernetes is a good example of composable self-healing processes. Kubernetes enables higher-level abstractions of different PAASes, but anything built on top of Kubernetes primitives can be modified, and extended. By itself, Kubernetes has a very high floor (good plumbing is hard, and invisible when done well), and there is still a lot of room for products built on Kubernetes with a much lower floor. 4. Erlang's BEAM has a selection of very powerful concurrency primitives (1st class processes as actors; mostly immutable data structures). OTP are higher-level often-used shortcuts composed from those concurrency primitives (GenServer, Supervisor, etc.). Many applications requiring concurrency can be expressed as a composition of OTP patterns. 5. Elixir is built on top of BEAM. The language itself started with a set of barebones primitives, including macros. The syntactic sugar (shortcuts) were built from macros, and the Elixir community slowly developed useful syntax out of that. Other languages with similar capabilities include Lisp, FORTH, and Tcl. |