You can't teach it in a meaningful way with meaningful architectures... as there is a tension between realistics examples that show the benefits vs something easy to understand.
Architecture is subjective, but tries to encompass or trade off to be:
In the beginning, there we procedures that we began to group and work on. There is a reference to
Domain-Driven Design, which is reference as the path we start going down.
Having procedures groups that don't scale well make people wonder why we do abstracting the first place.
// associative add(add(1, 1), 4) === add(1, add(1, 4)); // communitive add(1, 4) === add(4, 1); // identity add(n, 0) === n; // distributive multiply(2, add(3, 4)) === add(multiply(2, 3), multiply(2, 4));
const joinWithSpace = joinable => joinable.join(' ');