“Understanding is the same in all animals and in all men; it has everywhere the same simple form—knowledge of causality, transition from effect to cause, and from cause to effect, nothing more.”
He describes understanding as “correctly inferring the unknown causes from the given effects” and, in the other direction, as “adapting known causes to desired effects,” giving the invention of machines as an example:
“…nature, correctly inferring the unknown causes from the given effects, and providing the material from which the reason frames general rules as laws of nature; now inventing complicated and ingenious machines by adapting known causes to desired effects; now in the sphere of motives, seeing through and frustrating intrigues and machinations, or fitly disposing the motives and the men who are susceptible to them, setting them in motion, as machines are moved by levers and wheels, and directing them at will to the accomplishment of its ends. Deficiency of understanding is called stupidity. It is just dulness in applying the law of causality, incapacity for the immediate apprehension of the concatenations of causes and effects, motives and actions. A stupid person has no insight into the connection of natural phenomena, either when they follow their own course, or when they are intentionally combined, i.e., are applied to machinery. Such a man readily believes in magic and miracles. A stupid man does not observe that persons, who apparently act independently of each other, are really in collusion; he is therefore easily mystified, and outwitted; he does not discern the…”
Based on this, I separate activity into two directions.
Theoretical activity moves from effect to cause: discovering why something happens. I associate this mostly with academia.
Practical activity moves from cause to effect: arranging conditions to make something happen. This is engineering, and more broadly most work outside academia.
There are exceptions and overlap, but this is the distinction I have in mind.
Dijkstra writes:
“The purpose of a program is to evoke computations and the purpose of the computations is to establish a desired effect.”
I think every job ultimately boils down to producing a desired effect. We usually call this “solving problems,” but that phrase is too general to capture the essence. “Producing a desired effect” describes the actual activity: arranging causes and conditions so that what we want to happen actually happens.
My job as a software engineer is no exception. Ship a feature, fix a bug, restore a pipeline. Code is a means; the desired effect is the end. Under deadlines, the demand is usually “make it work,” not “understand everything under the hood.”
Even flipping burgers involves arranging conditions to produce a desired effect. I see the difference from software engineering as one of complexity, not fundamentally different activity.
AI has made this clearer to me. I no longer write the code or construct the models myself, but the underlying job remains: producing the desired effect.
In this sense, I’d challenge the saying that prostitution is the oldest profession: what about “early programmers”—witches, druids and priests? They, too, recited carefully chosen words—spells and prayers—intended to produce a desired effect. Not a historical claim about which profession came first, but an analogy: arrange symbols and expect reality to respond.