After all, I believe that legends and myths are largely made of ‘truth’.
― J.R.R. Tolkien
For the purposes of this post, “Code” = “Modeling & Simulation tool: instead of the set of instructions in a programming language. Some codes are viewed as being better and more worthy of trust than others. The reasons for such distinctions are many and varied, but most often vague and clouded in mystery. I hope to shed some light on the topic.
Legend does not contradict history. It preserves the fundamental after but magnifies and embellishes it.
― Adrien Rouquette
Often codes become useful by simply being the first one to achieve success with a difficult and important problem. In other cases the authors of the code are responsible for the code’s mythic status. Certain authors of codes bring with them a pedigree of achievement that breeds confidence in the product of their work. This is computer instructions or code, which comprises an executable tool. It is a combination of a model of physical reality, a method to solve that model including algorithms developed to optimize the method, and auxiliary software that connects the code to the computer itself. Together with the practices of the users of the code, and options enabled by the code itself, the modeling capability is defined. This capability is then applied to problems of interest and success occurs if the comparisons with observations of reality are judged to be high quality.
Computers are good at following instructions, but not at reading your mind.
What sort of things produces a code of legend and myth?
Myth must be kept alive. The people who can keep it alive are the artists of one kind or another.
― Joseph Campbell
- The code allows new problems to be solved, or solved correctly. Often a new interface or setup capability is key to this capacity as well as new models of reality. This has the same dynamic as discovery does in other areas. Being first is an incredibly empowering aspect of work and often provides a de facto basis for success.
- The code allows problems to be solved better than before by whatever standard is used by the community. Sometimes being first is not enough because the quality of solution isn’t good enough. The discovery ends up being delayed until the results are good enough to be useful. As such success is related to quality of results and the expectations or standards of a technical community.
- The code solves a standing problem that hasn’t been solved before, or to a degree that instills confidence. Sometimes problems are acknowledged and result in being a standing challenge. When someone creates a tool that makes an effective solution to this sort of problem, it creates a “buzz” and provides the push the code needs for adoption more broadly.
- The code is strongly associated with success in application space (quality by association). If the code is strongly associated with a successful application product, the code can inherit its virtue. Usually this sort of success will be strongly associated with an institution or national program (like ICF, inertial confined fusion). The codes success can persist for as long as the application’s success, or in some cases outlast it.
- The code is reliable (robust) and produces useful results as a matter of course. For some areas in modeling and simulation codes are fragile, or too fragile to solve problems of interest. In such cases a code will make a breakthrough when the code simply runs problems to completion and the results are physically or conceptually plausible. Depending on the situation the lowly standard will then transition to other forms of success as the standards for solution improve,
- The code produces physically reasonable solutions under difficult circumstances. This is a similar situation to the robustness virtue, but a bit better. Sometimes robustness is achieved through producing really terrible solutions (often very heavily diffused, or smeared out). This often destroys significant aspects of the solution. A better answer without such heavy-handed methods will yield code new followers who evangelize its use, or perhaps embarrass those holding onto the past.
- The code is associated with someone with a pedigree such as an acknowledged trailblazer in a seminal field to the application or code specialties. This is praise by association. Someone who is a giant in a field will produce a wake of competence, which is almost completely associated with a cult of personality (or personal achievement).
- The code’s methods are uniquely focused on the application problem area and not generalized beyond it. Sometimes a code is so focused in an important niche area that it dominates the analysis like no general-purpose code can. Often this means that the code caters to the basic needs of the analysis specifically and provides a basis of solution of application-specific problems that no general-purpose code can compete with.
- The code solves a model of reality that no other code can. In other cases, the code has models no other code provides. These models can be enabling because standard models are not sufficient to explain reality (i.e., fail validation). The new model may require some unique methodology for its solution, which together with the model provide a distinct advantage.
- The code is really fast compared to alternatives. For a lot of analysis questions it is important to able to run the code many times. Analysts like getting answers faster more than slower, and a quick turn-around time is viewed as a great benefit. If a code takes too long to get an answer, the ability to fully explore problems via parameter or scenario variation can be negatively impacted.
- The code’s solutions are amenable to analysis or comparisons to observations are enabled. This has a lot more to do with the auxiliary analysis than the code itself. A code that has good visualization or data analysis built into its analysis system can provide significant encouragement for the use of the code itself.
- The code produces results that are comfortable to the community, or define the standard for the community. Sometimes the code simply either meets or sets the expectations for the community using it for analysis. If it confirms what they tend to believe already, the analysts have greater comfort using the code.
- The code’s methodology is comfortable to the community (and its intrinsic bias). For example the model and its solution are solved in a Lagrangian frame of reference, and the community only trusts Lagrangian frame solutions.
Storytellers seldom let facts get in the way of perpetuating a legend, although a few facts add seasoning and make the legend more believable.
― John H. Alexander
Sometimes a code has one or more of these items going for it. Once the code becomes used and trusted, it is the incumbent and it is very difficult to displace from usage. This is even true with unambiguously better methods. This is just a fact of life.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
— Rich Cook