Programmer’s Thesaurus (2014)
wiki.c2.com
wiki.c2.com
In order to do this, seems to me you need: 1) Abstract pattern extraction 2) Abstract pattern to word mapping 3) Composition/decomposition of composite abstract patterns 4) Transforms on abstract patterns
Think about the game of Go. You have patterns that repeat throughout games, but with small variations and with various transformations; you've got to be able to extract the common pattern from the specific instance, and the commonalities of the variations, and the common transforms (such as something as simple as rotation/reflection).
Then you've got to have a mapping from those patterns (and meta-patterns) to words. Near as I can tell, that part of the problem is basically culturally established; whatever internal encoding you have for the abstractions is unlikely to be communicable to other entities. You have to work out with those other entities (aka, humans) what some of those patterns should be called.
Just look at math and psyics. They got stuff lile monads and quarks...
In principle, naming things is the same in any language, but languages develop their own conventions.
eg https://google.github.io/styleguide/javaguide.html
Some times you have to build your own, or borrow from other kinds of sources like: https://cloud.google.com/apis/design/naming_convention
The example that sent me down this rabbit hole was with in Java. I believe that:
foo.withBar(bar)
mostly is, and only should be used with immutable APIs (or maybe a builder method), but I've never been able to find a source that says it. I believe this is a sort of convention, but one I haven't seen stated.It might be clearest to state in anthropological terms: .withWhatever() is an "idiom of a particular colloquial dialect of the language, spoken by a subpopulation."
There are pretty frequent links to it on HN: https://news.ycombinator.com/from?site=c2.com.