A computer lets you make more mistakes faster than any other invention with the possible exceptions of handguns and Tequila.
― Mitch Ratcliffe
Computers have never been that important, but really its software that is important, but actually its algorithms that matter, which really isn’t that true either. It is the sum total of these things that matters to our daily lives. This is true for iPhone apps and modeling & simulation in the sciences. The real value in each of these things is how they connect to real things like grocery shopping or airflow over an airplane’s wing.
Therein lies the real truth, the value of computers is the code they run; the value in code are the algorithms they implement; the value in algorithms are the problem solving of the people devising them; the value of algorithms is found in the real World. All of this revolves around a single unassailable truth, this is a fundamentally human activity at every level expressed using tools that make rote calculations trivial, and power connections between people.
This truth is valid whether the human activity is the search on your phone or laptop, purchasing through Amazon, predicting tomorrow’s weather, solving the airflow over an aircraft wing, or the flow neutrinos in a supernova using the Boltzmann transport equation. The real revolution in computing is the ability of computing to matter to how we live our daily lives whatever the activity. Given that the value in all of this is the added capacity to achieve our goals, it might be worth considering whether our priorities actually reflect this. Where these values are present in computing the importance and value of computing has swelled. Given my personal focus on the scientific use of computing my assessment would be that we have lost our way. The values in computing programs are horribly distorted and out of balance. A key to this is the loss of perspective on what really matters.
Its useful to discuss what a code actually is. I’ll focus on a scientific code in particular. I will argue that the part of it that is considered the “code” is actually the least important aspect of the entire activity. The classically viewed code is a set of instructions that the computer can understand to take a sequence of steps. Usually this code is defined to solve a problem or better yet a class or type of problem. The code is a collection of ideas that the computer assists the solution of. A code is no better than the ideas it expresses and the skill of the programmer in making these instructions work. Despite this obvious aspect of computing the quality of the ideas in code has shrunk from importance. They are merely assumed to be important. Clever, crafty and innovative aspects of the problem solving define algorithms, methods and heuristics that make the computed solution better or faster or bot
Code itself is an algorithm. The machine actually understands a horribly opaque and obscure language that defines basic operations, and moves data around. The code is a way of expressing these basic ideas using human comprehensible language and abstractions that collect basic operations together into units. Fortran was the first of these languages, and it is considered one of the most important algorithms of the 20th Century. It allowed the expression of more complex ideas to computers and greatly aided the advance of computing. Other languages have come into exisitence, but always with the same intent as Fortran originally had. The code is the key to unleasing the power of the computer.
Let us remember that the automatic machine is the precise economic equivalent of slave labor. Any labor which competes with slave labor must accept the economic consequences of slave labor.
― Norbert Wiener
In scientific computing the key connection to reality are models. The most basic models are the governing equations such as the Euler, or Navier-Stokes or Boltzmann equations. These models are augmented by other models of subprocesses (often called subgrid models), and constitutive data that are typically experimentally measured and define the mean behavior of materials (accumulating the effects that would otherwise be statistical). These descriptions are the essential element in the value of computing to human activity. Their value transcends any of the other aspects: the algorithm, the code, and the computer itself. If the basic models are inadequate or faulty everything else is basically for naught. If the model is good, the rest of the components need to get it right, the algorithm or method needs to correctly or accurately solve the model, the implementation in code needs to be correct, and the computer needs to be capable of solving the problem. It is an exercise in balance and perspective. Our key issue
today is a lack of balance caused by a faulty perspective.
That’s the thing about people who think they hate computers. What they really hate is lousy programmers.
― Larry Niven
Another key element is the impact and connection of the code to human activity. The use of calculated results for science or engineering is one outcome. Another is the intersection of computing with the development and continuity of talent. In all cases the human intellect and talent is the core of the value stream, this aspect cannot be overlooked or the core of the value is lost.
The computer focuses ruthlessly on things that can be represented in numbers. In so doing, it seduces people into thinking that other aspects of knowledge are either unreal or unimportant. The computer treats reason as an instrument for achieving things, not for contemplating things. It narrows dramatically what we know and intended by reason.
― George Friedman