@Brendan_Fong asked me, @kris-brown, and @david.jaz to think about ways that AlgebraicJulia concretely helps people, and in conversation we came up with something that vaguely resembles the following post.
As mathematicians, we often like to work from axioms and make all of our assumptions very clear. Moreover, we understand that models are approximations to reality, so we never want to get stuck in only one model. However, this is not how people typically learn science.
Rather, science unfolds as a sequence of well-intentioned lies. In physics, you first learn classical mechanics, and then learn that actually when things go really fast or when things are really small, classical mechanics no longer accurately describes the world.
Why do we structure education like this? Why would you teach something known to be a flawed model? Well, first of all, classical mechanics does do a pretty good job at describing things at “normal scale”, so it’s actually still very useful for reasoning about the world. But more importantly, going straight to relativity would be pedagogically very difficult. One cannot conceive of the defects of the system until one first understands the system on its own terms.
In a similar vein, my friend once took a Mandarin class where a large portion of the assignments consisted of memorization of dialogues, and then recitations of these dialogues with a partner. The idea was that first you learn set forms, then you learn how to improvise slight variations on those set forms, and as you progress you can start making larger and larger variations.
This is often how scientists are taught (explicitly or implicitly) how to code. Their community of practice has some software libraries built for computing certain types of models, and then scripts and notebooks using those libraries are socially transmitted via copy paste. When a student first learns the library, they are taught what seems to be a mystical series of incantations that produces the desired result. They then might become more comfortable making variations on those incantations, still without fully understanding what they mean, to accomplish a variety of tasks. As they progress, they learn that certain incantations encode assumptions about their problem domain, and thus should not be used when those assumptions do not hold.
But at a certain point, the underlying assumptions of the software libraries stop this process. For instance, the software library might assume that your system is continous, and you need to model a discontinuous shockwave.
In many software systems, breaking an underlying assumption like this would throw you off a cliff in terms of software engineering difficulty. You might have to find a new library with totally different API, completely incompatible with all of the systems that you have so far made. You might have to modify the library you are working with, diving into an unfamiliar codebase that could be even written in an unfamiliar language like C or Fortran.
In this way, the scientist becomes trapped by the implicit assumptions of the library.
AlgebraicJulia is designed to avoid this trap. In the early stages of use, a scientist should be able to follow “social scripts” for AlgebraicJulia, by copy-pasting and modifying premade models. However, as familiarity with the system increases, guardrails can be progressively taken off, and the library can be used more and more flexibly, until the scientist is constructing wholly new paradigms of models.
Moreover, the design of AlgebraicJulia can encourage this process. As the scientist grows to understand a particular social script, they can start to see the “walls of the fishbowl” that they are in, so to speak. That is, the design of AlgebraicJulia can encourage scientists to progressively question their assumptions, as it becomes clear that the choices embedded in the social script were not necessitated by something fundamental to the software framework.
I recently witnessed an “aha” moment in this vein, when I was teaching Jeff Bezanson how to use the agent-based modeling framework in AlgebraicJulia. He realized that the fact that agents lived on a graph was not actually an underlying assumption of the software system: the vertices and edges of the graph and the agents living on that graph were all modeling assumptions that could be changed. The technological artifact of the AlgebraicJulia codebase sparked a conceptual shift in the meaning of agent based model for Jeff.
The implicit claims, assumptions, and biases embedded within software have, do, and will shape the future of the world. I think that creating software which supports scientists in their journey of learning to question and go beyond the assumptions of their predecessors is something that I would point to as a concrete benefit, for scientists and the world at large.