XII.11 Let the prince be a prince 

Duke Ching of Ch’i asked Confucius about government. Confucius answered, ‘Let the ruler be a ruler, the subject a subject, the father a father, the son a son.’ The Duke said, ‘Splendid! Truly, if the ruler be not a ruler, the subject not a subject, the father not a father, the son not a son, then even if there be grain, would I get to eat it?’ — Analects XII.11 (Lau)

齐景公问政于孔子。孔子对日,君,君,臣,臣,父,父,孑,子。公日,善哉,信如君不君,臣不臣,父不父,子不子,虽有粟,吾得而食诸。- 论语,十二:十一

This is one of The Analects clearest statements of the feudal and patriarchal social order that would later get the name Confucianism. Detach it, for a moment, from that overwhelming cultural context, and it’s also an expression on separating design concerns. The two can be contrasted. Every political pundit is a social engineer. They either advocate improvement to the design of the state, or argue a change will break the existing system.

Mencius (孟子) expanded on this sentiment for one of the earliest recorded defenses of the division of labour (Book 3 part 1 chapter 4, 3-4). Labour specialization works because humans have limits on the complexity of a task they can undertake, and are not cloneable or particularly fungible. 

Software, by contrast, is highly specialized, but also cloneable at near zero cost. Software complexity has different boundaries. There are physical limits inherent to what Harrison Ainsworth calls engineering in a computational material. These are physical characteristics of algorithmic complexity or computability – limits on how fast a particular problem can be solved, if it can be solved at all. 

There are, by contrast, few physical limits to the conceptual complexity of a software component. Those measures like cyclomatic complexity – number of subtasks, variables and choices in a method – have high values, orders of magnitude short of the physical limits imposed by compilers and interpreters. (I once worked on a system where other team members had, in their wisdom, exceeded the limit for the size of a single Java method in a long list of simple business transformation rules. Pushed by the very essence of the language to refactor, they proceeded to – what else? – push the remaining rules into longMethod2().)

The limits which measures like cyclomatic complexity indicate are human limits. They mark the soft edges of a space where humans can effectively create, manage, or even understand software. There are different ways of describing coding conventions, but they all seek to indicate a limit beyond which code becomes illegible.

Legibility is the term James C. Scott uses to describe the social engineering needs of a nascent or established state (Seeing Like A State). The mechanics of a working state require internal legibility. Those working for it must be able to measure and understand their environment in mutually compatible terms which also promote the success of the government. This is why feudal states have such a profusion of titles which become the name of the person (not Bob – The Duke of Marlborough). It is also why courtly dress has such systematic rules. This is seen particularly in bureaucratic feudal states as seen historically in East Asia, eg in feudal Korea, but also in the Vatican, or the badges at the postmodern World Economic Forum. These codes serve the dual purpose of defining the interfaces of the state and of making the role of the person instantly legible to one familiar with the system, all while tempting people with the markings of social status.

Marking lexemes by colour and shape according to their role is exactly what IDE pretty printing achieves. This is also the intent behind decoupling, encapsulation, and well-named entities (name oriented software). It makes the role of a component, from lexical to method, class and class pattern levels, readily legible to humans who much maintain and extend the system. 

This strictness of role works well for machines made of non-sentient digital components. For systems where components are sentient meat, there are inevitable side effects. This is, perhaps, the core ethical dilemma Confucius concerns himself with: the demands of The State and The Way (道).

FUNCTIONS SHOULD DO ONE THING. THEY SHOULD DO IT WELL. THEY SHOULD DO IT ONLY. — Robert Martin, Clean Code

Silent Movie Heroin of The Late 1900s

Most films are really little more than stage plays with more atmosphere and action. I think that the scope and flexibility of movie stories would be greatly enhanced by borrowing something from the structure of silent movies where points that didn’t require dialog could be presented by a shot and a title card. Something like: Title: Billy’s uncle. Picture: Uncle giving Billy ice cream. In a few seconds, you could introduce Billy’s uncle and say something about him without being burdened with a scene. This economy of statement gives silent movies a much greater narrative scope and flexibility than we have today. 

  — Stanley Kubrick, 1981

For example, this well known 1997 silent work.

I’m not saying Kubrick’s wrong. I suspect there has instead been a return to silent movie techniques. Soon after this quote, Kubrick flags advertisements for their similar power and concision, and elsewhere he defends the use of voiceovers in Barry Lyndon. Music videos can arguably be put in a similar category. As a side effect of the commercial relevance of such things, directors of the last twenty years are trained with a cinematic toolkit shared with silent films. It is a kind of marvelous revival in disguise.

Boyle’s style has been described as a long music video – which could, at a stretch, also apply to something like Lang’s Metropolis.

In another fun parallel, there’s an innovative use of subtitling in the very metropolitan Slumdog Millionaire. Instead of confining himself to the bottom strip of screen Boyle inserts colourful inter-titles at visual locations that serve the construction of the shot.

When our ancestors – silent movies – the first time they watched locomotive trains pass across the screen they screamed. — Danny Boyle

XIV.3 When the way prevails in a system

子曰,邦有道,危言,危行。邦无道,危行,孙言。 ‘ — 论语,十四:三

The Master said, ‘When the Way prevails in the state, speak and act with perilous high-mindedness; when the Way does not prevail, act with perilous high-mindedness but speak with self-effacing diffidence.’ — Analects XIV.3 (Lau)

Confucius expresses not only a prudent guideline for ethical public service, but a principle for designing robust systems across diverse interfaces. Consider The Way prevailing in a trustable system: one you control, or one well established, open and of high quality. In these circumstances it is possible and desirable to do strict validation on subtly incorrect inputs, and to raise exceptions internally without fear of further system failure.

A bureaucracy is an information processing system of communicating agents. At the external endpoints of this system it can, through interfaces, have physical and social effects. Likewise, software is a bureaucracy of automatons. This is especially evident when the software system is decomposed into independently processing agents, as in concurrent or distributed systems. External effects depend on the system: a state may build a road, or put a man in jail; software may fly a plane, or a missile.

Such decoupled or distributed systems then have non-trivial needs for design of the communication protocol itself. This manifests, in traditional bureaucracy, as paper forms. Paper (or equivalent) is now seen as a technological pre-requisite for centralized state formation across larger geographic and demographic scales because it is an enabler for efficient central bureaucracy (eg Whitmore chapter on Dai Viet). In the time of Confucius the state ran on more unwieldy scrolls, but the problems of information flow in the state system are shared.

Facing similar problems of information design, Confucius gives similar advice to Jon Postel:

TCP implementations should follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others. RFC 761

Postel is perhaps more forgiving than Confucius, here. If a program must deal with badly formed inputs, The Way does not prevail in the system. If it tries too hard to be liberal in it’s interpretation of inputs, rather than logging an error, rejecting or ignoring the input, it is more prone to subversion. One could say the system does not act with perilous high-mindedness in maintaining its internal state.

The langsec group have a variation on the principle which bears even greater similarity: “Be definite about what you accept”. Log an error if you can, they might have added; else speak with self-effacing diffidence.

How To Write About Islam

Substitute, combine and conflate Islam, Arabs and the Middle East. Only twenty percent of Muslims are Arabs. The Middle East has plenty of other ethnic groups. The biggest Muslim majority country is Indonesia, which is further from Mecca than London is. Use whichever group is convenient for your point, or fits better for the copy desk.

Rely on antiquity to explain causes. Origin stories are great for comic books and history. Rely on them. The Hidden Imam hides TV remote controls all the time: be sure to put him at the centre of all geopolitical debates as well.  Arguments and schisms are ideal forms free from a context of time and space, so leap happily across multiple centuries for connections or conclusions. Any contrary examples or entire flourishing empires that happen to chronologically fall in between two steps in your argument can be safely ignored. Wars and treaties of the 19th and 20th centuries are also too recent to offer the broad vista your readers need.

Poetry is sewn like a silken thread throughout Islamic culture; the Qur’an is sometimes described as a poem dictated by Allah, the unique, the mighty. The poetic Muslim soul should not be sullied by description with brutish numbers. Economic or demographic details are tedious grey filler in your portrait of the spiritual world of Islam.

Use generalized definite articles a few times to give the article a sense of scholarly generality. If at all possible, discuss The Muslim as a noun, but if not, at least deploy general terms as adjectives, like The Muslim Mind, Islamic Civilization, or that notoriously opinionated piece  of civil engineering, The Arab Street.

Praise your subject and their generous traditions of hospitality to guests, at least when you’re not talking about how nasty and self-explosive they are.

Call for an Islamic Reformation. Don’t let the lack of an Islamic Pope deter you. European religious and political history translates simply into the Near, Middle and Far East.

Turbans and burqas. Oh yeah.

If you must use references, restrict them to a single source, preferably Bernard Lewis. Lewis is a Princeton scholar with vast experience and erudition, particularly on the Ottoman Empire. His political punditry and close association with the American government don’t need further attention. There’s certainly no need to mention any abstruse academic debates he’s been involved in.

Draw to an expansive and general conclusion about Islam as a whole, eschewing pedantically specific elements. Look into your heart. In the end, like Islam, writers need to find solutions within themselves.

((This guide is indebted to How To Write About Africa and a huge corpus of inspirational articles in the Anglophone press.))

A White Horse Is Not A Horse

   曰:马者,所以命形也;白者,所以命色也。命色者非名形也。故曰:“白马非马”。
公孙龙子

‘Horse’ is that by which we name the shape. ‘White’ is that by which we name the color. Naming the color is not naming the shape. So white horse is not horse.
  — Gongsun Longzi

public class Horse extends Shape{
 ...
}

public class WhiteHorse extends Horse implements Colourable
{
  public Colour getColour(){ return Colours.WHITE; }

  public boolean equals( Object other ){
    if ( !other instanceof WhiteHorse){
      return false; 
    }
    ...
  }
}

public class AnotherWhiteHorse{

  public Shape getShape(){ return ShapeConstants.HORSE; }

  public Colour getColour(){ return Colours.WHITE; }

}


public class Argument{
  public static void main(String[] args){
    Horse horse = new Horse();
    WhiteHorse whiteHorse = new WhiteHorse();
    AnotherWhiteHorse anotherWhiteHorse = new AnotherWhiteHorse();
    log.info( whiteHorse == Horse.class );
    log.info( WhiteHorse.class == Horse.class );
    log.info( WhiteHorse.class.equals( Horse.class ) );
    log.info( whiteHorse == horse );
    log.info( whiteHorse.equals ( horse ) );
    log.info( anotherWhiteHorse == horse );
    log.info( anotherWhiteHorse.equals ( horse ) );
    log.info( anotherWhiteHorse instanceof Horse.class );
    log.info( "Therefore white horse is not horse" );
  }
}