To what extent do our natural biases leek into the...
# thinking-together
d
To what extent do our natural biases leek into the models (data structures, algorithms) we use. E.g is it possible that a tree data structure is more appealing to both users and developers because it mirrors a hierarchy (everything has a parent/cause) vs a graph which has a loop (which came first the chicken or the egg) which is considered less intuitive. It seems a relevant design choice to consider not only the universal truthiness of something but also the cognitive load it takes to use it.
c
For me it usually comes down to cognitive load. If I can get away with a vector I’ll use one, then a map, then a tree, then a graph.... I also believe in iterating towards a goal in an agile fashion and not over engineering a solution. But yeah, I don’t lightly use a tree or a graph, because complexity == time
g
I suspect that material biases wrt existing libraries matter a lot more—I’d prefer a graph for most of my applications, but it’s much easier to write hierarchies. Since relational databases depend on slow joins to emulate graph queries, we don’t see a lot of many-linked relationships on apps and pages—which I think limits peoples’ imaginations (part of why Roam is taking off IMO)
e
This is where it would be good to get takes from psychology, anthropology, and sociology. Hierarchies make sense to people for a lot of reasons, and some of these are deeply cultural (think: organization of societies). On the other hand, people are generally (though we all know some exceptions) good with spaces. Perhaps what in CS is called a "graph" structure is better though of as a "map" or "the layout of rooms in a giant house" -- it's very easy for us to understand in such a case how you can leave a room but somehow take a path that leads back to that room over and over, etc
@Garth Goldwater There are two things about the world of graph structures / databases I still don't understand. One is the failure of OODBs to catch on (something like Gemstone inherently uses graphs), and the other is the whole RDF/Semantic Web community and any datastores they use. You rarely see these things outside of niche or academic contexts, and I don't understand why. Any insight?
💯 3
g
with the semantic web i’d say a combination of economic factors (eg, google’s dominance, lack of a business model) and ux factors (never saw a really appealing end-user app for creating or browsing rdf data). unfortunately i’m at the “read the wikipedia five years ago” level of understanding of OODBs so i can’t contribute much on that front—but i’d also note that path dependence is really, really hard to overcome especially for foundations of applications like databases
e
I see what you mean.
One thing I find inspiring about the enthusiasm around tools like Roam is not only the return to the memex-like origins of thinking about computing, but an assumption that we expect more from users of computing systems. It is a sign that we might be able to break free from the current era of “expecting the least”
s
Trees are appealing in some cases because nesting and containment are something we understand metaphorically/cognitively via 'spaces' and they also gives a nice coordinate system for 'naming via location' for each node. E.g.
earth < solar system < galaxy < alpha quadrant
and
second < minute < hour < day
. Graphs are appealing when we think of peers and relationships (the set of buildings in a city). You can have arbitrary relationships but you don't get the canonical path to each node. I don't think one is always more intuitive. IMO the bigger problem is our biases in 'meta models'. We have the idea of what a "data structure" is, we pick exactly one and get 'locked in' permanently to that one view. We may want multiple parallel views of the information based on what we're tying to do. But none of the usual models or type systems do this well. If you look at programming, a lot of it is 'changing the shape' without adding any new information. E.g. transform a JSON object into a struct; load an array of structs into a dict for faster lookup, extract one field of many structs into an array etc. There's conflation between data structure and information structure and we haven't figured out how to separate these nicely.
👍 5
💯 1
e
I think that is a good explanation
One issue here is that being "computer people" in 2020 we have kind of already poisoned our thinking. I'm wondering how a regular, non-programmer would organize information with only the barest of tools. Would some spatial/relationship based thing come out of it?
👍 3
Also how to we "hijack" those really deep and ancient human instincts in order to create systems that are more intuitive and full of possibility (rather than, say, exploitative)
The past few years I've leaned hard into the idea that metaphors are the most important aspect of computing for precisely this reason
💯 3
To build on something small you said above, imagine a computing system described entirely in the metaphor of it being a city
s
Yes I think the appeal of 'graphs' as a universal structure is that in the high level 'informational space', we think our minds organize it as graphs. This is where RDF etc come in. I too am surprised we don't have mainstream programing languages that deal directly with RDF like information structures (only graphs and various views of them), instead we get low level data structures (arrays, dicts, lists, structs). This is the idea of separating design from optimization (picking a data structure involves both and implies conflation). I want to be able to design the information structure separately from the implementation and optimization views.
Re poisoned our thinking - definitely. We've internalized many invented structures (~ data structures) while there may be fewer cognitive information structures (and still rigorous enough to be formalized, if that's what we want).
e
I'm spitballing the following without real evidence, though I'm imagining research might back it up:
s
Re metaphors, I found Lakoff's "Metaphors We Live By" very interesting. The idea that we understand via 'metaphor'.
👍 4
e
People a fundamentally good at dealing with complex relationships between things, be that institutions, or even and especially personal relations (families, friends, friends of friends, etc)
Or even, like you say, how to get around a city or how parts of the city relate to each other and function.
We are also good at dealing with ambiguity around those relations, and working around them
The current computing environments are not good with this ambiguity, and that's where some of entry level HCI gets stuck
I do not think this is for purely technical reasons, but rather because most developers ("computer people") do not think socio-technically
I will have to read that Lakoff book, thanks for the ref
s
Re ambiguity yes it seems the software we build is way too strict.
💯 1
Wonder if there are good examples to study where the user mental models with ambiguity can be fluidly represented in the software UI available to them. Most of us just copy what came before - every definition has fixed, strict fields and so on. Ambiguities are hidden away in a 'comments' field.
e
There is a book by the anthropologst Lucy Suchman called "Human Machine Reconfigurations" that might be good on some of this
I have not read it in a decade, and perhaps I should pick it up again (I have learned a lot about computing in the time since)
a
@Eric Gade
One issue here is that being “computer people” in 2020 we have kind of already poisoned our thinking. I’m wondering how a regular, non-programmer would organize information with only the barest of tools. Would some spatial/relationship based thing come out of it?
If you know anyone in high school or college who isn’t studying CS, try looking at their personal notebooks or journals. I think people often store information in narrative form. The narrative gives many contact points with the same piece of information. A particularly adept learner might write about what they learned in many ways: how it applies to their life, where they have seen it in the world, the strict technical definitions, and some metaphors that capture the essence of the subject. We want to look at the same information in as many ways as possible so we can get an intuitive sense for it. Something that we understand deeply can represent itself as a felt-sense in the body, as opposed to an intellectual thought, like a grandmaster chess player analyzing his position on the board, or a tennis player analyzing the trajectory of a ball.
👍 1
Metaphors are a great way to think of how humans understand things. Since it seems that most data structures are actually ways of organizing information, rather than understanding information, it can be hard to draw lots of comparisons between how a human might organize information (since humans most often want to organize their information by understanding it — e.g. storing it in their body, as opposed to storing it in a physical location somewhere)
Something about search is really intuitive to me. Scanning a thoughtspace for key terms that might lead to relevant or related information. Categories or tags also seem intuitive. The equivalent of naming objects like “chair” even though “chair” is actually a category of many specific objects.
👍 2
j
In addition to the very good Lakoff recommendation above, I'd add the work that Hofstadter and Melanie Mitchell have done around analogies as the basic unit of understanding.
💯 1
In terms of why trees are ubiquitous and graphs are not, I think there are two things at work here: 1. We have a much easier term visually parsing, internalizing and imagining even very complex trees than heavily linked cyclic graphs. There's an entire sub-discipline of data visualization trying to help people understand the latter kind of data. This is one of the deep challenges of node-and-arrow visual programming systems. 2. Although our internal representations are fuzzy and graph-y, the mechanisms we have to communicate those representations in speech and writing are linear and tree shaped (sequences of words representing recursive grammatical structures). This makes it very hard to express these kinds of structures using syntax, thus programming languages tied to textual representations are at a huge disadvantage when encoding graphs as literals. This is one of the deepest powers of node-and-arrow programming systems. /cc @Ivan Reese
5
👍 2
d
@Jack Rusher That's brilliant.
🙏 1
w
Often a graph has a spanning tree that represents a reasonable way to get around. And in case the tree isn't not quite right, you can often split a node so that it appears a few times in the tree.