子日，民可使由之，不可使知之。– 论语 八：九
The Master said, ‘The common people can be made to follow a path but not to understand it.’ — Analects VIII.9 (Lau)
The Analects is addressed to students of government from an aristocratic class (君子, gentlemen). Confucian Software is addressed to software developers, and the fundamental analogy is that the audience is the same: Confucius instructing software developers on becoming gentlemen and sages.
So the differences between gentlemen and the common people are important. We should distinguish the gentleman (who is educated) from the people (who are not) and the small man (小人) who has no understanding or respect. (See Analects XVI:1.)
At first glance this passage is Confucius at his most snobbish and feudal. The people, or the common people (民), can only be driven down a path and are devoid of thought and understanding. This is the same word now used in the People’s Republic of China (中华人民共和国), the word democracy (民主) or all of Sun Yat-sen’s (孙中山) three principles of the people (三民主义). So it can be rather off putting for we moderns.
Indeed, it sounds more like the brutally effective carrot and stick of Lord Shang (商鞅) and the Legalists (法家) than gentle old teacher Kongzi. Passages like this show how the Han dynasty could create the political philosophy of Imperial Confucianism (as John King Fairbank terms it) – the fusion of a Confucian public morality with the real-politikal techniques of Legalism to run the sausage factory of government. The Legalists found just how far you could push realpolitik without public morality when the common people revolted and overthrew the short-lived Qin dynasty (秦朝), which established the Chinese empire, but could not make it endure.
The relationship of the developer to her users via code is that of the scholar official to the people via the bureaucracy. It is also isomorphic to the GUI model view controller pattern.
Users walk a path laid out by the code, and beyond a certain point, can take no other.
The code too can be made to follow a path, when we constrain and verify that a path is followed. This is the purpose of testing, to ensure deterministic repeatability. Without testing, there is no engineered path. There is just walking.
When we anthropomorphize software by describing it as thinking, it means we do not have sufficient control on its internals and environment. (By calling the people code we are automatomorphising people as much as we are anthropomorphizing code.) Code cannot think. Once thinking creatures are built on code we should no longer deal with them as code.
Can users be made to think (know, understand)? Ah, you laugh! Feudalism is not so dead after all.
Code certainly cannot be made to think. Nothing can be made to think. And this is also the more generous interpretation of Confucius’ intent. You cannot make the common people understand a path, you can only lead them to understanding. The meaning of a software system is generated by this interaction.