Are Algorithms Hard to Understand?
The historian Timothy Snyder published a book last year about a recent illness, when he became so sick from poorly treated appendicitis that he almost died. The book, called Our Malady, uses that episode to discuss broader problems with U.S. health care. At one point he recounts another poor experience with U.S. medicine, when computers came between the doctors and his wife during the birth of their first child:
When a computer program mindlessly flags "pregnant yes" and "40+ yes" and indicates the induction should take place by such and such a date, medical personnel find it easier to pacify the alert that pops onto the screen than to learn the story of a woman. Quietly, attention is turned to the algorithm--lifeless code that does not care--and away from the human who is hard at work creating another human. Although my wife was fit and the baby healthy, we were caught in this mechanical logic. (42)
The "mechanical logic" that Snyder describes here is, of course, an algorithm.
Algorithms are a funny piece of technology. In the case of computers, an algorithm always comes packaged in code, with its arcane representations that make it difficult for the non-technical outsider to read. Of course, algorithms do not have to be code. They are just instructions for how to do something.
The description of computer code as a "language" seems right. Like English or Spanish, computer languages are built upon conventions that exclude the untrained outsider from understanding.
But code is very difficult from spoken language in another sense: code does not ultimately "say" anything in the same way as a natural language. Instead, it does. Code sets off or continues a chain of electronic processes in software or hardware. And these processes can be represented in conceptual terms that are an accurate representation of the underlying technology. This is what Snyder described within the "lifeless code" that affected his wife's care. "Is she pregnant?" "Is she over 40?" Just instructions on how to proceed.
Algorithms are an ever-greater presence in ordinary life, and so the question of how to talk about them grows. This is a problem even for experts (no one can be an "expert" in all the algorithms out there), for anyone who is not familiar with a given codebase, or ordinary people who have to live in situations run by algorithms.
But they can be made comprehensible, so that non-technical people can pull back some control over them.
Let me give an example. A year or so ago, before the Chicago museums shut down for the pandemic, I saw a particularly good exhibit at the Museum of Science and Industry about how a jet engine worked. I can't describe it anymore, I've forgotten the details. But even if I could, I would still have purely conceptual, useless knowledge of what it does. I'd tell you about the physics of combustion, the forcing of air through turbine blades, controlled explosions, etc, but that would only be a high-level approximation of an engineer or mechanic's working knowledge. I still don't know how it works, I only know what it does. When the engine turns on, this is the difference between knowing that it happens because of combustion, and understanding how the components of this particular engine are built to take advantage of combustion. There is no shortcut to this latter, practical knowledge. The only way is for the engineer to teach me the principles of engineering.
But algorithms are not like that. They are part of a machine whose purpose is to create a practical model of logic. And logic is a middle ground between the engineer and the layperson. Logic is accessible to everyone, in principle. To understand the logic of the algorithm is to understand something essential, something practical about the machine. Logic is what is represented in the so-called "business requirements" that the engineer noted when he or she wrote the code. And logic is makes the machine work as expected for its users. You needn't know about the low-level details of computers (most software engineers don't, either), or how to code, to have a very good idea of how an algorithm does something. That's worth restating: with a software algorithm, it is possible for a non-expert to know how the machine works. I would submit that this is quite unusual for technology.
When Snyder lists the considerations coded into the treatment decision algorithm, like "is the patient 40+?" he is speculating about a model, the same model that the software designers worked from when they wrote the code. Now the outsider and the technical software designer are working from the same language, and can begin a conversation. All the power is no longer on the side of the technician.
Timothy Synder, Our Malady. Crown, 2020.
An example of representing an algorithm to laypeople: "This is the Stanford Vaccine Algorithm that left out Frontline Doctors" (MIT Technology Review, December 21, 2020).