Economics as if People Mattered: Employment

This is the third part of the ‘Economics as if People Mattered’ talk about E. F. Schumacher’s book ‘Small is Beautiful: A Study of Economics as if People Mattered’. The Introduction looked at why we should re-visit Schumacher after all these years and Part 2 provided selected quotes about the fundamental values of Economics.

Here, I turn to what Schumacher has to say about employment. I think this is interesting, following on from what I have said regarding the effect of the current automation revolution on work, in my previous talk,  ‘Automation, Education and Work’.

As with the previous part, each section here provides quotes followed by a short commentary that provides a summary and may provide some additional comments.

Bold text in the quotes is my emphasis, to provide a very short overview.



  • There is universal agreement that a fundamental source of wealth is human labour. Now, the modern economist has been brought up to consider ‘labour’ or work as little more than a necessary evil.
  • Contrast: the ideal from the point of view of the employer is to have output without employees, and the ideal from the point of view of the employee is to have income without employment.
  • Modern literature paints frightening pictures of a brave new world sharply divided between us and them, with a hatred of authority from below and a contempt of people from above. The masses react to their rulers in a spirit of sullen irresponsibility, while the rulers vainly try to keep things moving by fiscal inducements, incentives, endless exhortations and threats.
  • The primary task of technology is to lighten the burden of work.

There is the fundamental division between ‘them’ and ‘us’: the capital of the employer and the labour of the employee. Should the market be run in the benefit of ‘them’ or the benefit of ‘us’? Clearly, there needs to be some balance – the debate is ‘where?’.

The continuing technological developments of the successive industrial revolutions have been reducing the burden of work for many years now (see the last part of ‘Automation, Education and Work’).

Demeaning Work


  • ‘The prestige carried by people in modern industrial society varies in inverse proportion to their closeness to actual production.’
  • Virtually all real production has been turned into an inhuman chore which does not enrich a man but empties him.
  • Karl Marx appears to have foreseen much of this when he wrote: ‘They want production to be limited to useful things, but they forget that the production of too many useful things results in too many useless people.’ to which we might add: particularly when the processes of production are joyless and boring.
  • The technology of mass production is inherently violent, self-defeating in terms of non-renewables, and stultifying for the human person.
  • Soul-destroying, meaningless, mechanical, monotonous, moronic work is an insult to human nature which must necessarily and inevitably produce either escapism or aggression.
  • In contrast, most sociologists and psychologists insistently warn us of its inherent dangers —dangers to the integrity of the individual when he feels as nothing more than a small cog in a vast machine

Increasingly there is a bifurcation of the workforce into the ‘good jobs’ (well-paid prestigious ones) and the bad jobs, with a hollowing out of the middle. Schumacher’s description of the bad jobs as ‘meaningless, mechanical, monotonous, moronic’ is even better than the ‘lovely and lousy’ and the ‘dull, dirty, dangerous and demeaning’ alliterations. Those bad jobs that keep the economy going on a day-to-day basis are undervalued.

From Consumption to Well-Being


  • I was tempted to formulate the first law of economics as follows: ‘The amount of real leisure a society enjoys tends to be in inverse proportion to the amount of labour-saving machinery it employs.’
  • If you go from easy-going England to, say, Germany or the United States, you find that people there live under much more strain than here. And if you move to a country like Burma, which is very near to the bottom of the league table of industrial progress, you find that people have an enormous amount of leisure really to enjoy themselves. Of course, as there is so much less labour-saving machinery to help them, they ‘accomplish’ much less than we do; but that is a different point.
  • … this is standing the truth on its head by considering goods as more important than people and consumption as more important than creative activity.
  • since consumption is merely a means to human well-being the aim should be to obtain the maximum of well-being with the minimum of consumption.

Schumacher’s visits to Burma (now called Myanmar) perhaps left him with a rose-tinted view of living there. In the 2019 ‘World Happiness Report’ survey, on a scale of 3.08 for the Central African Republic (153rd place in the world) up to the first place 7.77 for Finland, Burma scores 4.36 (129th). This is not very impressive (the values for USA, Germany and ‘easy-going’ UK are 6.89, 6.99 and 7.05 respectively.

Perhaps the quality of life in Burma has deteriorated with political events since Schumacher’s time. And there is more to happiness than leisure.

Even so, he makes the point that the Western economic structures we have now direct society to consuming goods/services rather than the maximizing of well-being – in which many would choose the latter, at least partly through increased leisure.

Work is more than just fulfilling material needs


  • Management assume that people work simply for money and promote dreams about automation doing away with manual work, and about the computer relieving men from the burden of using their brains.
  • the function of work to be at least threefold: to give a man a chance to utilise and develop his faculties; to enable him to overcome his egocentredness by joining with other people in a common task; and to bring forth the goods and services needed for a becoming existence.
  • Next to the family, it is work and the relationships established by work that are the true foundations of society. If the foundations are unsound, how could society be sound? And if society is sick, how could it fail to be a danger to peace?
  • planning for full employment

Previously I have discussed:

  • how work was more than about satisfying needs (Voltaire talked about ‘boredom’ and ‘vice’ as well as ‘need’), and
  • how technology might lead to a future society of wide-scale unemployment and that we needed to spread the work out as widely as possible: to ‘spread the bread on the butter’ as Keynes said.

But Keynes and I were only looking far enough into the future that work was substantially reduced. ‘Let us see how things are when we get there’ was the attitude. But Schumacher looks at the value of work more fundamentally. The connection between an individual and the society in which they live is important.

An Alternative to Increasing Productivity


  • Imagine we set ourselves a goal in the opposite direction [to increasing productivity] An incredible thought! Even children would be allowed to make themselves useful, even old people.
  • [More time] for any piece of work we chose to undertake —enough to make a really good job of it, to enjoy oneself, to produce real quality, even to make things beautiful. Think of the therapeutic value of real work: think of its educational value. No-one would then want to raise the school-leaving age or to lower the retirement age, so as to keep people off the labour market. Everybody would be welcome to lend a hand.
  • Suppose it becomes the acknowledged purpose of inventors and engineers, observed Aldous Huxley, to provide ordinary people with the means of ‘doing profitable and intrinsically significant work, of helping men and women to achieve independence from bosses, so that they may become their own employers
  • this differently orientated technological progress [would result in] a progressive decentralisation of population, of accessibility of land, of ownership of the means of production, of political and economic power’.

Previously, I imagined that at some point in the future we might have a society where the proportion of people working full-time was much reduced as a consequence of automation, with needs provided through Universal Basic Income or, as I preferred, Universal Basic Services.

Speculating, the composition of society might comprise:

  • 25% youth in education
  • 35% retired
  • 5% working age but inactive, probably for medical reasons
  • 10% working age doing voluntary work
  • 25% employed or self-employed, generally at 15 to 25 hours per week.

In contrast, Schumacher seeks to widen the percentage of people doing work (voluntarily or otherwise), perhaps to a composition like:

  • 10% infants in education
  • 15% youth in education and with some work
  • 65% adult active (voluntarily or otherwise) to some extent, including the elderly.
  • 10% inactive, probably for medical reasons and predominantly in old age

… such that 80% of the population are actively contributing to the functioning of society.

Productivity is no longer the objective! Certainly not in terms of goods/services provided per hour worked. But productivity could still be being maintained in terms of goods/services provided per unit salary. This would allow them to work in a more rewarding way, bringing craftmanship to their work instead of churning out the barest minimum quality to get the sale to take the profit. This probably involves a shift (or continuation of the shift) to higher formal self-employment and self-employment in the positive side of the gig economy. This probably involves a shift (or continuation of the shift) to self-employment – whether normal or in the (positive side of) the gig economy. This would have an equalizing, empowering effect. (This would presuppose a high level of universal benefits without a minimum wage.)

Integrated Work and Leisure within Society


  • work and leisure are complementary parts of the same living process and cannot be separated without destroying the joy of work and the bliss of leisure.
  • ‘a more humanly satisfying life for more people, a greater measure of genuine self-governing democracy and a blessed freedom from the silly or pernicious adult education provided by the mass producers of consumer goods through the medium of advertisements.’
  • Everybody would be admitted to what is now the rarest privilege, the opportunity of working usefully, creatively, with his own hands and brains, in his own time, at his own pace —and with excellent tools.
  • modern technology has deprived man of the kind of work that he enjoys most, creative, useful work with hands and brains
  • the human being, defined by Thomas Aquinas as a being with brains and hands, enjoys nothing more than to be creatively, usefully, productively engaged with both his hands and his brains. Today, a person has to be wealthy to be able to enjoy this simple thing. He really has to be rich enough not to need a job.
  • people who work in this way do not know the difference between work and leisure. There would be little need for mindless entertainment or other drugs, and unquestionably much less illness.

To answer the question of what work people want to do, we can look to how people choose to spend their retirement. In large numbers, they voluntarily choose to do ‘work’ that is creative and manual. In many cases, they call these activities ‘hobbies’.

What actually makes us happy? How does the fleetingly-short joy from the purchase of something that you don’t really need compare with hours spent in an enjoyable activity?

Freedom and Order: Innovation


  • In our active personal relationships we can, in fact, be brothers to only a few… and we are called upon to show more brotherliness to them than we could possibly show to the whole of mankind.
  • We always need both: (a) the freedom of the small, autonomous units (‘action is a highly personal affair’) at the same time as (b) the orderliness of large-scale co-ordination (the ‘unity of mankind’).
  • Order requires intelligence and is conducive to efficiency; while freedom calls for, and opens the door to, intuition and leads to innovation.
  • if no scope remains for creative intuition, for entrepreneurial disorder, the organisation becomes moribund and a desert of frustration.
  • The great majority of economists and business efficiency experts supports this trend towards vastness.
  • Nobody really likes large-scale organisation. Nobody likes to be ruled by rules. Yet, it seems, large-scale organisation is here to stay.
  • A large organisation … goes through alternating phases of centralising and decentralising.

Even liberals and socialists have to recognise that we cannot, in practice, live in a world where a stranger on the other side of the world means as much to us as those we meet everyday at work.

For liberating, innovative dynamism, companies need to sit on the border between organizational order and chaos, like operating in Vygotsky’s ‘zone of proximal development’).

Freedom and Order: The Bias towards Order


  • As soon as great size has been achieved, we want to transform the monolith to attain smallness within bigness – to create the feeling of it being a federation of numerous lively semi-autonomous units, each with its own drive and sense of achievement.
  • The fundamental task is to achieve smallness within a large organisation.
  • Any organisation has to strive continuously for the orderliness of order and the disorderliness of creative freedom. And the specific danger inherent in large scale organisation is that its natural bias and tendency favour order, at the expense of creative freedom.
  • ‘It is an injustice and at the same time a grave evil and disturbance of right order to assign to a greater and higher association what lesser and subordinate organisations can do. Loyalty can grow only from the smaller units to the larger (and higher) ones. The burden of proof lies always on those who want to deprive a lower level of its function, and thereby of its freedom; they have to prove that the higher level can actually do much better.
  • The really helpful things will not be done from the centre; they cannot be done by big organisations;
  • Administrators insist on accountability … This is logical enough: but real life is bigger than logic.

The continuous, simultaneousness achieve of multiple identities – of a small culture within a big one is difficult to achieve. The more typical series of departmental splitting and combining (or the spinning-off, mergers and takeover of companies) is far easier. In many cases, takeovers are only about achieving economies of scale.

But where an acquisition is diverse, executives all too often feel the need to impose the larger company culture on the smaller unit, eroding the established local company culture that has taken years to build.

In saying that we need to shift the bias from the big-ness of order to the small-ness of freedom, it is not to say simply that ‘Small is Beautiful and Big is Ugly’. It is just a change in the balancing act.

We have ‘progressed’ in the wrong direction. Since Schumacher’s time, the multi-national companies are far larger and the number of ‘companies of smallness’ (genuine ones, excluding one-man shells) is far less.

How should we deal with multi-nationals?

Worker versus Passive Ownership


  • As regards private property the first and most basic distinction is between (a) property that is an aid to creative work and (b) property that is an alternative to it.
  • There is something natural and healthy about the former -the private property of the working proprietor; and there is something unnatural and unhealthy about the latter —the private property of the passive owner who lives parasitically on the work of others.
  • For it is not private ownership, but private ownership divorced from work, which is corrupting to the principle of industry. Private enterprise carried on with property of the first category is automatically small-scale, personal, and local. It carries no wider social responsibilities. Its responsibilities to the consumer can be safeguarded by the consumer himself. No great private fortunes can be gained from small-scale enterprises, yet its social utility is enormous.
  • the question of scale is decisive. When we move from small-scale to medium-scale, the connection between ownership and work already becomes attenuated; private enterprise tends to become impersonal
  • The owner … becomes exploitative if he appropriates profit in excess of a fair salary to himself and a return on his capital on higher than current rates for capital borrowed.
  • Such property may be called passive property, or property for acquisition, for exploitation, or for power.
  • It is unjust and socially disruptive if profits are appropriated by the owner alone. They should be shared with all members of the organisation. If they are ‘ploughed back’ they should be ‘free capital’ collectively owned.
  • It is questionable whether economists should call it “property” at all … since it is not identical with the rights which secure the owner the produce of his toil but is the opposite of them.
  • The so-called private ownership of large-scale enterprises is, as Tawney says, analogous to ‘the feudal dues which robbed the French peasant of part of his produce till the revolution’,
  • All these rights —royalties, ground-rents, monopoly profits, surpluses of all kinds —are “property”.
  • Precisely in proportion as it is important to preserve the property which a man has in the results of his labour, is it important to abolish that which he has in the results of the labour of someone else.
  • If every member of a group puts something into a common pool on condition of taking something out, they may still quarrel about the size of the shares … But in industry the claims are not all admitted, for those who put nothing in demand to take something out.

These are rather bold statements! Presumably ‘property that is an aid to creative work’ includes property for general living (toothbrush, socks, …) and for leisure (creative activity rather than consumption – see earlier). Surely a worker should be able to save – to store a surplus – for spending later, such as in retirement. Can this surplus not be used productively, enabling other companies and the self-employed to invest in their future (including microfinance)?

The problems here are concerning workers versus rentiers:

And since Schumacher’s time, the economy has shifted more in favour of the Rentier.



  • The most prominent methods of doing away with so-called private ownership is generally referred to as ‘nationalisation’.
  • The quality of an industry depends on the people who run it and not on absentee owners.
  • The objection to public ownership is in reality largely an objection to over-centralisation. But the remedy for over-centralisation is the decentralised ownership of public property.
  • ‘Nationalisation’ extinguishes private proprietary rights but does not, by itself, create any new ‘ownership’ in the existential —as distinct from the legal —sense of the word.
  • A number of principles may be observed in all cases of nationalised enterprises providing public services.
  • The chief danger of nationalisation is the planner’s addiction to over-centralisation.
  • The thought that ‘the public interest’ can be safeguarded in the conduct of private business by delegating top or medium-grade civil servants into management is both naive and impractical.

Collective ownership by ‘the State’ is an extreme example of ‘Order’ over ‘Freedom’. The relationship between the worker and the wealth derived from their labour has been completely diluted. In talking about workers here (below and well as above), we are not saying anything that is anti-business. On the contrary, a worker benefiting directly from their labour is very entrepreneurial.

Company Stakeholders

Schumacher doesn’t state this explicitly but the fundamental problem here is that the interests of the various stakeholders in a company are not aligned. Those stakeholders are:

  1. investors,
  2. the executives
  3. employees, and
  4. the wider community, including the recipients of the goods and services

Stakeholdership is now far more dynamic than it was in Schumacher’s time.

  • The association between a company and its investors is fleeting. A fund manager has no long-term (sustained) stakeholding interest.
  • Private ownership has declined. Executives similarly have no long-term interest in the company.
  • For employees, the labour market is far more dynamic. But they have an inertia acting against moving away from their locality – children’s schools, spouse’s job, house (with high transactional moving costs) and friends. The possibility of a ‘job for life’ is rare.
  • The wider community too is more fragmented – in more ways than one. Companies are more likely to be spread across sites, regions and maybe countries. Sites are closed and relocated.

The corporate bodies themselves are more dynamic. Centralising and decentralising operates across companies. Parts of companies are spun off and there are mergers. These are all cycles of freedom and order.

The balance between the stakeholders is wrong and has got worse since Schumacher’s time. Investors have become too powerful. Executives must act according to the expectations of shareholders and have been able to reap very high rewards themselves. This has all been at the expense of employees and, most of all, communities.

Private Affluence from Public Squalor


  • Under private ownership every bit of wealth, as it arises, is privately appropriated. The public authorities have hardly any income of their own and are reduced to extracting from the pockets of their citizens monies which the citizens consider to be rightfully their own. This leads to an endless battle of wits between tax collectors and citizens, in which the rich, with the help of highly paid tax experts, do much better than the poor. ‘More taxation for more public expenditure’ would not be a vote-catching slogan
  • the discrepancy between private affluence and public squalor… the squalor of many mental homes…
  • large amounts of public funds have been spent on ‘infrastructure’, and the benefits go largely to private enterprise free of charge.
  • anyone involved in running an enterprise in a poor society where ‘infrastructure’ is insufficiently developed cannot rely on cheap transport; he cannot count on being able to recruit trained people: he has to train them himself.
  • the profits of private enterprise greatly over-state its achievement.
  • the contribution of public expenditure to the profits of private enterprise must be recognised in the structure of ownership of the means of production.

In the balance of power between stakeholders, the role of the community is barely recognised. Yet companies lament the lack of skills in their ‘human resources’ and deficiencies in ‘other’ infrastructure. The largest companies hold power over communities in their choice of location in their single-minded pursuit of capital gain.

Nimble companies run by a small executive can avoid tax by running rings around the lumbering democratic machinery of the state.

The Scott Bader Commonwealth

Schumacher gave details about Scott Bader Commonwealth Ltd, an example of a company with common ownership.


  • Finding himself now in the position of employer, Ernest Bader never forgot that his success and prosperity were the achievements not of himself alone but of all his collaborators
  • He decided to introduce ‘revolutionary changes’ in his firm, ‘based on a philosophy which attempts to fit industry to human needs’.
  • The problem was (1) how to organise or combine a maximum sense of freedom, happiness and human dignity in our firm without loss of profitability, and (2) to do this by ways acceptable to the private sector of industry.
  • Mere profit-sharing was not enough. There was a transformation of ownership.
  • The firm shall remain of limited size –not beyond 350 persons. Remuneration for work shall not vary beyond a range of 1:7.
  • Members cannot be dismissed by their co-partners for any reason other than gross personal misconduct.
  • the Commonwealth shall devote 1/2 of the appropriated profits to the payment of bonuses and the other 1/2 to charitable purposes.
  • Scott Bader and a few others remain as small islands of sanity in a large society ruled by greed and envy.

Scott Bader still operates under common ownership and is now a €230 million company employing almost 700 people across 6 manufacturing sites and 13 offices around the world (thus exceeding its 350 person limit!). It continues charitable funding local to sites and provides various amenities to Wollaston, Northamptonshire in which it is headquartered.

The important principle here is that there is total alignment between the interests of the employee and the interests of the owners of the company – since the company is owned not by separate investors but by its employees!

The founding Bader family were Quakers. The Quaker companies built by the Rowntree, Cadbury and Fry families, in model villages such as New Earswick and Bournville, are older examples in which the interests of the owners, management, employees and community were very closely aligned. But examples such as these have long since disappeared or been acquired by antithetical multinationals such as Nestle and Mondelez.

The number of examples of companies remaining today that are owned by their employees are few and far between. Two other examples are:

As already noted, the stakeholdership in companies is now far more dynamic than it was in Schumacher’s time.

Public Share of Equity


  • there are 8 possible combinations of ownership: [Freedom | Totalitarianism] [Planning | Market] [ Private | Collectivised]. It is absurd to assert that the only ‘possible’ cases are Freedom-Market-Private and Totalitarian-Planning-Collectivised.
  • My immediate purpose is to speculate on the possibility of devising an ownership ‘system’ for large-scale enterprise.
  • The businessman never tires of claiming and complaining that taxes absorb a substantial part of what he believes to be really due to him alone. The public share of private profits (the company profits taxes) might just as well be converted into a public share of the equity of private business.
  • I postulate that the public hand should receive 1/2 of the distributed profits of large-scale private enterprise by means of a 50% ownership of the equity of such enterprises.
  • all enterprises exceeding this minimum size must be joint-stock companies.
  • No question of ‘compensation’ would arise, because there would be no expropriation but only a conversion of the public hand’s right to levy

Schumacher is advocating the combination of Freedom-Market-Collectivised. As previously written about, James Albus proposed a scheme in the mid 1970s in which the free market coexisted with collectivised ownership. Similarities are interesting.

We might agree with the sentiment and principles here but it is difficult to see how this could be applied now with so many distributed multi-national companies.

Corporation Tax

Corporation tax is a payment by a company for the privilege of operating in a particular market – it is a payment for:

  • Giving the company access to potential employees, without which it would not be able to operate. These potential employees have been pre-trained for the benefit of the company – since the age of 4.
  • Giving the company access to potential customers, without which it would not be able to profit. The number of potential customers has been maximized through having been provided health and welfare services.
  • Giving the company access to the infrastructure which is the means to get their materials from suppliers and their goods and services to those customers.

And the list can go on much further.

Even so, the problem with corporation tax is that it is a tax and companies don’t like to pay taxes (specifically, investors indirectly don’t like paying taxes). Whilst having no moral compunction themselves, companies can still be shamed into paying tax.

Photo credit: Daily Mail

Community Dividend

Here is one straw man proposal from me.

It may only be a fairly cosmetic change / re-interpretation, but, as a straw man, I propose replacing corporation tax with a ‘community dividend’.

Instead of the company paying a tax to the country (or more generally, a polity), the country receives a dividend just like every other shareholder of the company. The country receives a benefit as if it were a shareholder in the company. And this benefit goes to the community which provides all the benefits afforded to the company. It won’t be a 50% shareholding, as suggested by Schumacher. Let us make it equivalent to UK corporation tax of 19%. This makes the shareholding 15.96% (19% divided by 119%).

Of course, everything is essentially the same. It is just a re-branding, but the re-branding emphasizes the active role that the community provides to the company and emphasizes the beneficiaries of the dividend (who suffer if the payment is not made). And there is no problem in being a shareholder of a foreign company.

Here’s one way of applying it so that it works internationally…

Starbucks is a notorious example of a company that has done everything within its power to avoid taxes. This has included having the parts of Starbucks that run the coffee shops paying a licence for the right to use the Starbucks brand to another part, and paying over the odds for buying their coffee beans from yet another part. Since being shamed in the UK in 2012, it has relocated its EMEA headquarters to London and has increased its tax payments. But it still has a highly convoluted structure that makes it impossible for any one country to properly assess liabilities.

Photo credit: Wall Street Journal

Of course, we cannot consider that the UK has a 15.96% shareholding in Starbucks. Let us make the shareholding proportionate to UK revenue. Of the 28,218 Starbucks outlets in the world, 884 are in the UK, representing about 3.1% of the total. But revenue is a smaller proportion: about 1.9%. This is based on £372M=$476M UK revenue out of $24.72B global revenue (you might argue about the figures but this is just an example – it makes little difference). This gives the UK government an effective shareholding in the company of about 0.3% and hence an entitlement to 0.3% of the profits. As the gross profit for Starbucks was $14.545B, this means that the dividend to the UK would be $44.7M – substantially more than it as ever had paid to it in any year.

This is a simple (and grossly simplified) calculation, but fair. It does not matter how convoluted Starbucks make their internal organization to obfuscate accounting, or whether the UK-based operation is for EMEA or any other collection of nations or regions. Every polity receives what it is entitled to, for being a quasi-shareholder (stakeholder) in the company. And this should operate at the lowest appropriate polity. Thus, if Starbucks only had UK outlets in Scotland, then Scotland should be the beneficiary of the dividend.

Posted in Uncategorized | Tagged , , , , , , , , | Leave a comment

Economics as if People Mattered: Values

The previous post was the introduction (part 1) to the talk ‘Economics as if People Mattered’. This post follows on from that and presents a selection of quotes from E. F. Schumacher’s book ‘Small is Beautiful: A Study of Economics as if People Mattered’. The selection can be lumped under the philosophical heading ‘Values’ as opposed to subsequent posts which will have the headings ‘People and Land’ (political) and ‘Employment’ (economics). This here examines the philosophical values of economics, questioning the ideology of GDP growth.

Each section here provides quotes followed by a short commentary that provides a summary and may provide some additional comments. There is then a longer commentary on GDP and happiness – but that is sufficiently large that it warrants a separate post – to follow soon.

Bold text in the quotes is my emphasis, to provide a very short overview.


A New Worldview


  • All traditional philosophy is an attempt to create an orderly system of ideas by which to live and to interpret the world. … The classical-Christian culture of the late Middle Ages supplied man with a very complete and astonishingly coherent interpretation of signs [but] has been shattered and fragmented,

  • Shall we tell our children that one thing is as good as another —… unto the third and fourth generation, because that normally is the time it takes from the birth of an idea to its full maturity

  • … six leading ideas, all stemming from the 19th century, … evolution, natural selection, the decline of religion, Freud, relativism, and the triumphant idea of positivism.

  • The sins of the fathers are being visited on the 3rd and 4th generations who now find themselves growing up without moral instruction of any kind. The men who conceived the idea that ‘morality is bunk’ did so with a mind well-stocked with moral ideas.

  • In the 3rd and 4th generations, they have become the very tools and instruments through which the world is being experienced … firmly lodged in the minds of practically everybody in the western world today.

  • Science cannot produce ideas by which we could live

  • … we have recklessly and willfully abandoned our great classical-Christian heritage.

  • Education: what do we get from it today? A view of the world as a wasteland in which there is no meaning or purpose, in which man’s consciousness is an unfortunate cosmic accident.

  • The errors are not in science but in the philosophy put forward in the name of science. … all we got was bad metaphysics and appalling ethics.

  • The sciences are being taught without any awareness of the presuppositions of science

Schumacher makes it clear there is a separation between the ‘is’ of science and the ‘ought’ of morals. The European worldview had been established based on our Classical and Christian heritage but the scientific innovations of the 19th Century destroyed this worldview. People now are growing up without that established moral tradition, without even realising that they are missing anything. A common topic throughout this blogsite has been that science is now presenting a physicalist worldview (a new world of ‘is’), replacing the previous Cartesian dualist worldview (compatible with Christianity), but we (generally) don’t have a consistent philosophical worldview (including a moral world of ‘ought’) around this.


Economics is not a Natural Science


  • Economics is being taught without any awareness of the view of human nature that underlies present-day economic theory. In fact, many economists are themselves unaware of the fact that such a view is implicit in their teaching and that nearly all their theories would have to change if that view changed.

  • All human activity is a striving after something thought of as good. … but it helps us to ask the right question: ‘Good for whom?’

  • While the 19th century ideas deny … ‘Levels of Being’ … It is only when we can see … man’s position on the ladder… we can readily understand, for instance, why the methods of physical science cannot be applied to the study of politics or economics.

  • Great damage to human dignity has resulted from the misguided attempt of the social sciences to adopt and imitate the methods of the natural sciences. Economics, and even more so applied economics, is not an exact science: it is in fact, or ought to be, something much greater: a branch of wisdom.

Challenging science is just a stepping step to more specifically challenging Economics, since Economics is styled as a ‘social science’ (and an impersonal one at that). The criticism of the new scientific order is not an attack on science per se but of its lack of moral foundation. Economists are generally unaware of the implicit values underlying their economic theories which prevents them challenging the new order with ethical questions like ‘who benefits?’



The Values of Capitalism


  • The religion of economics has its own code of ethics, and the First Commandment is to behave ‘economically’.

  • there are few words as final and conclusive as the word ‘uneconomic’.

  • We ‘may decide to hang on to an activity or asset for non-economic reasons—social, aesthetic, moral, or political —but this does in no way alter its uneconomic character.’

  • The buyer’s sole concern is to obtain the best value for his money. … Neither buyer nor seller is responsible for anything but himself. It would be ‘uneconomic’ for a wealthy seller to reduce his prices to poor customers merely because they are in need.

  • innumerable qualitative distinctions which are of vital importance for man and society are suppressed… The reign of quantity celebrates its greatest triumphs in ‘The Market’. Everything is equated with everything else

  • If economic thinking pervades the whole of society, even simple non-economic values like beauty, health, or cleanliness can survive only if they prove to be ‘economic’.

  • ‘everything has a price or, in other words, that money is the highest of all values.’

  • The strength of the idea of private enterprise lies in its terrifying simplicity. It suggests that the totality of life can be reduced to one aspect – profits.

  • Successful businessmen are often astonishingly primitive; they live in a world made primitive by this process of reduction.

Without an explicit ethical dimension, economics becomes an ideology with an implicit immorality in which each person acts as purely selfish homo economicus rather than morally balancing the wants of the self with that of others. Everything is reduced to money.


Economic Growth needs to be Questioned


  • What is at stake is not economics but culture: not the standard of living but the quality of life… culture and, generally, the quality of life, can now only be debased by such a system.

  • I have talked about the religion of economics, the idol worship of material possessions, of consumption and … the fateful propensity that rejoices in the fact that ‘what were luxuries to our fathers have become necessities for us’.

  • Having established by his purely quantitative methods that the Gross National Product of a country has risen by, say, 5%, the economist-turned-econometrician is unwilling, and generally unable, to face the question of whether this is to be taken as a good thing or a bad thing. Growth of GNP must be a good thing, irrespective of what has grown and who, if anyone, has benefited. The idea that there could be pathological growth, unhealthy growth, disruptive or destructive growth is to him a perverse idea.

  • Such an economy could be called efficient only if it obtained strikingly successful results in terms of human happiness, well-being, culture, peace, and harmony … the American system fails to do this and there are not the slightest prospects that it could do so if only it achieved a higher rate of growth of production.

  • As a society, we have no firm basis of belief in any meta-economic values, and when there is no such belief the economic calculus takes over —by the small, mean, calculating attitude to life which is rationalised in the economic calculus.

  • there will have to be a great deal of philosophical change. It is not a question of what we can afford but of what we choose to spend our money on.

The sole economic objective is to achieve GDP growth, complete separated from human happiness. There has to be a fundamental philosophical change away from this small, mean, calculating ideology that is based around material consumption.


The Educated Elite


  • The beginning of wisdom is the admission of one’s own lack of knowledge. As long as we think we know, when in fact we do not, we shall continue to go to the poor and demonstrate to them all the marvellous things they could do if they were already rich.

  • Poor people have relatively simple needs, and it is primarily with regard to their basic requirements and activities that they want assistance. … the proposed change must stand in some organic relationship to what they are doing already.

  • What is education for? The Chinese before World War II calculated that it took the work of 30 peasants to keep one man or woman at a university. If that person at the university took a 5-year course … he would have consumed 150 peasant-work-years. How can this be justified? What do the peasants get back for it? Is education to be a ‘passport to privilege’ or is it something which people take upon themselves almost like a monastic vow, a sacred obligation to serve the people?

  • The first road takes the educated young person into a fashionable district of Bombay for example, where a lot of other highly educated people have already gone and where he can join a mutual admiration society. The content of education will be something to serve the educated, that sets them apart, with a contempt for manual labour, a contempt for primary production, a contempt for rural life.

  • The other way would take him back to the people: he would feel in honour bound to return something to them. To see themselves as a servant of the common people.

The educated elite that gets to decide how the economy is run becomes separated from ‘lower’ society, without feeling any responsibility to them. The educated have a feeling of entitlement and a contempt for manual labour.

Given a ready-made ideology, it does not occur to them they are missing anything – that things could be different. There is no moral thinking of ‘what must it be like being them?’ or ‘what do they think?’. Conversely, with the fixed ideology of Economics, the underclass has ‘had enough of experts’.

With an increasingly large proportion of the population now going on to an academic university education (in contrast to education that is vocational), this is a dangerous polarizing bifurcation of society. It impedes efforts to reduce inequality by redistributing wealth through taxation.


Beyond our means


  • Every economist is familiar with the distinction between income and capital except where it really matters. We are not considering the irreplaceable capital provided by nature

  • A businessman would not consider a firm to have solved its problems of production and to have achieved viability if he saw that it was rapidly consuming its capital.

  • depleting or destroying … cut down or burned … overgrazed and denuded the grasslands … killed the wildlife and fish and other water life. … erosion … clog the streams … wasted most of the easily mined metals … There have been from ten to thirty different civilisations that have followed, this road to ruin.

  • it is still the dominant belief today that … our own modern, western civilisation has emancipated itself from dependence upon nature.

  • The most striking thing about modern industry is that it requires so much and accomplishes so little. The 5%-6% of the world population which live in the United States require something of the order of 40% of the world’s primary resources to keep going.

  • The economist, pursuing ‘economic growth’ as the highest of all values, has no concept of ‘enough’. … where is the rich society that says: ‘Halt! We have enough’?

  • More prosperity means a greater use of fuel. If the fuel consumption per head of the ‘rich’ population grows by 2½%, while that of the ‘poor’ grows by 4½% a year … the ‘rich’ would account for nearly 2/3 of the total increase

I said I wasn’t going to talk about the environment. But this is about hubris. Resources of the environment are limited but this fact is not recognized. It is an existential threat to our civilization (our economy), irrespective of whether we are inflicting irreparable long-term damage on the planet. And then there are shorter-term political consequences of living beyond our means…




  • resources are very unevenly distributed and … and divide the world into ‘haves’ and ‘have-nots’: … Here is a source of conflict if ever there was one.

  • Never think that wars are irrational catastrophes: they happen when wrong ways of thinking and living bring about intolerable situations.

  • Only by a reduction of needs can one promote a genuine reduction in those tensions which are the ultimate causes of strife and war.

  • Economically, our wrong living consists primarily in systematically cultivating greed and envy.

  • They enable us to see the hollowness and fundamental unsatisfactoriness of a life devoted primarily to the pursuit of material ends. Such a life necessarily sets man against man and nation against nation.

  • The hope that the pursuit of goodness and virtue can be postponed until we have attained universal prosperity, that we could establish peace on earth is unrealistic, unscientific, and irrational.

This unsustainable demand for resources leads to 3 of the 4 of Walter Scheidel’s ‘horsemen’: war and the internal strife of revolution and state collapse.





  • It completely by-passes the whole question of ethics: there is no need for renunciation or sacrifice.

  • Keynes felt moved to speculate on the ‘economic possibilities of our grandchildren’ … when everybody would be rich…

Schumacher quotes John Maynard Keynes:

I see us free, therefore, to return to some of the most sure and certain principles of religion and traditional virtue -that avarice is a vice, that the exaction of usury is a misdemeanour, and the love of money is detestable … We shall once more value ends above means and prefer the good to the useful. …

But beware! The time for all this is not yet. For at least another hundred years we must pretend to ourselves and to every one that fair is foul and foul is fair; for foul is useful and fair is not. Avarice and usury and precaution must be our gods for a little longer still. For only they can lead us out of the tunnel of economic necessity into daylight.

The ideology of ‘we need more growth’ is so deeply entrenched that even Keynes does not change his thoughts in recognition of the facts!


Posted in Uncategorized | Tagged , , , , , , | 1 Comment

Economics as if People Mattered


Part 1: Introduction

A Difference Vocabulary

Growing up in the West in the 1970s, there were words that cropped up time and time again in the news about the economy. Words such as ‘arbitration’ and terminology like ‘public sector borrowing requirement’ reflected the problems of the time such as industrial relations. Now there is a whole new vocabulary to fill the evening news – words and phrases that have appeared since the turn of the new millennium. Just picking some that easily come to mind, they concern wealth inequality:

  • Austerity
  • Food banks
  • The 1%
  • Greedy bankers
  • Non-doms

… generational inequality:

  • Generation Rent
  • Affordable housing
  • Internships
  • Gig Economy
  • Zero-hours contracts

… and a new economic order (or should I say, disorder):

  • Credit crunch
  • Quantitative Easing
  • Globalization
  • Neoliberalism
  • Productivity Gap

I’m sure you can think of more.

The Elephant Curve

This inequality is famously illustrated with the ‘Elephant Curve’ of Branko Milanovic that summarizes what has happened to the global economy over a 20 year period:

Branko Milanovic’s ‘Elephant Curve’ (credit:

The scale on the x-axis goes from the World’s poorest (left) to the World’s richest. The scale on the y-axis shows how well people across the World have done over the 20-year period (essentially from the collapse of the Iron Curtain to the Credit Crunch) for people at a particular income level. It shows that, on the whole, people have done well. On average, people’s incomes have risen. In short:

Globalization works!

Half of the World’s population, from the 10th to 60th percentiles, have seen their incomes rise by about 60%. Viewing the graph as the side view of an elephant, this is the back spine of the elephant. People in the Western world are generally at the top end of the scale (across the top 20%), which shows a large disparity (this corresponds to the trunk of the elephant). The richest have done very well – a 50% increase for the richest of the rich – but the poorest are no better off at all. A shocking fact is that median incomes in the US have barely risen in the last 40 years!

A significant aspect of this disparity is regional. This regional divergence has continued long after the rapid de-industrialization of the 1980s:

Inequality: The Defining Challenge Of Our Time

In short, globalization is failing a significant proportion of people in the West. This has serious consequences. Barack Obama called inequality ‘The Defining Challenge Of Our Time’. In a speech in December 2013, he said (quoting extracts and with the bold text providing further summarizing):

The American people’s frustrations with Washington are at an all-time high. Their frustration is rooted in their own daily battles — to make ends meet, to pay for college, buy a home, save for retirement. No matter how hard they work, the deck is stacked against them.  And it’s rooted in the fear that their kids won’t be better off than they were.  They experience in a very personal way the relentless, decades-long trend. That is a dangerous and growing inequality and lack of upward mobility that has jeopardized middle-class America’s basic bargain — that if you work hard, you have a chance to get ahead.

I believe this is the defining challenge of our time:  Making sure our economy works for every working American.  The decisions we make on these issues over the next few years will determine whether or not our children will grow up in an America where opportunity is real.

The premise that we’re all created equal is the opening line in the American story.  We have strived to deliver equal opportunity — the idea that success doesn’t depend on being born into wealth or privilege, it depends on effort and merit. Abraham Lincoln started a system of land grant colleges. Teddy Roosevelt fought for an eight-hour workday. FDR fought for Social Security. LBJ fought for Medicare and Medicaid. America built the largest middle class the world has ever known.  And for the three decades after World War II, it was the engine of our prosperity.

During the post-World War II years, the economic ground felt stable and secure for most Americans, and the future looked brighter than the past.  A blue-collar job would let you buy a home, and a car, maybe a vacation once in a while, health care, a reliable pension.  For others, it meant graduating without taking on loads of debt, and being able to count on advancement through a vibrant job market.

Now, it’s true that those at the top, even in those years, claimed a much larger share of income than the rest:  The top 10 percent consistently took home about one-third of our national income.  But that kind of inequality took place in a dynamic market economy where everyone’s wages and incomes were growing.

But starting in the late ‘70s, this social compact began to unravel.  Technology made it easier for companies to do more with less.  A more competitive world lets companies ship jobs anywhere.  And as good manufacturing jobs automated or headed offshore, workers lost their leverage.

As values of community broke down, businesses lobbied Washington to weaken unions.  As a trickle-down ideology became more prominent, taxes were slashed for the wealthiest, while investments in things that make us all richer, like schools and infrastructure, were allowed to wither.  And for a certain period of time, we could ignore this weakening economic foundation.

The result is an economy that’s become profoundly unequal. The top 10 percent now takes half.  So the basic bargain at the heart of our economy has frayed.

Alongside increased inequality, we’ve seen diminished levels of upward mobility in recent years.  A child born in the top 20 percent has about a 2-in-3 chance of staying at or near the top.  A child born into the bottom 20 percent has a less than 1-in-20 shot.

The combined trends of increased inequality and decreasing mobility pose a fundamental threat to our way of life, and what we stand for.  And it is not simply a moral claim that I’m making here.  There are practical consequences to rising inequality and reduced mobility.

These trends are bad for our economy.  Growth is more fragile and recessions are more frequent in countries with greater inequality. Rising inequality and declining mobility are also bad for our families and social cohesion — not just because we tend to trust our institutions less, but studies show we actually tend to trust each other less. And finally, rising inequality and declining mobility are bad for our democracy.  And so people get the bad taste that the system is rigged, and that increases cynicism and polarization.

if the majority of Americans agree that our number-one priority is to restore opportunity and broad-based growth for all Americans, the question is why has Washington consistently failed to act?  And I think a big reason is the myths that have developed around the issue of inequality.

First, there is the myth that this is a problem restricted to a small share of predominantly minority poor — that this isn’t a broad-based problem, this is a black problem or a Hispanic problem or a Native American problem. Some of the social patterns that contribute to declining mobility that were once attributed to the urban poor — it turns out now we’re seeing that pop up everywhere.

Second, we need to dispel the myth that the goals of growing the economy and reducing inequality are necessarily in conflict.  Our economy grows best when growth is more widely shared.  Beyond a certain level of inequality, growth actually slows altogether.

Third, we need to set aside the belief that government cannot do anything about reducing inequality.

The Huffington Post suffixed the title of an article on his speech:

“Obama Called Inequality ‘The Defining Challenge Of Our Time.’”


“He Didn’t Do Much About It. It’s a sad legacy.”

Change or be Changed

It would seem that the forces at work in the global economy are unstoppable so we just have to fit in with it. Eight years before Obama, at the UK Labour party annual conference 2005, Tony Blair said:

So what is the challenge? It is that change is marching on again. Perhaps our children more readily understand this and embrace it than we do. How quickly has the ipod entered the language and the reality of our lives? With what sense of near wonder was the fax machine greeted, just a few years ago, and already overtaken? A baby is born. The father takes a photo on his mobile. In seconds relatives around the world can see, and celebrate. A different world to the one we were born into. Faster, more exciting, yet with that come threats too.

The pace of change can either overwhelm us, or make our lives better and our country stronger. What we can’t do is pretend it is not happening.

… and then the key phrase:

I hear people say we have to stop and debate globalisation. You might as well debate whether autumn should follow summer.

He continued…

They’re not debating it in China and India. They are seizing its possibilities, in a way that will transform their lives and ours.

Yes, both nations still have millions living in poverty. But they are on the move. Or look at Vietnam or Thailand. Then wait for the South Americans, and in time, with our help, the Africans. All these nations have labour costs a fraction of ours. All can import the technology. All of them will attract capital as it moves, trillions of dollars of it, double what was available even 10 years ago, to find the best return.

The character of this changing world is indifferent to tradition. Unforgiving of frailty. No respecter of past reputations. It has no custom and practice. It is replete with opportunities, but they only go to those swift to adapt, slow to complain, open, willing and able to change.

Unless we ‘own’ the future, unless our values are matched by a completely honest understanding of the reality now upon us and the next about to hit us, we will fail. And then the values we believe in, become idle sentiments ripe for disillusion and disappointment.

In the era of rapid globalisation, there is no mystery about what works: an open, liberal economy, prepared constantly to change to remain competitive. The new world rewards those who are open to it.

Waves of Inequality

So Globalisation cannot be reformed to help those at the bottom of Western societies. It therefore seems to be travelling on a trajectory set out over 150 years ago by Karl Marx! Summarizing, Marxian economic thought is that there is a class struggle between the workers (the ‘proletariat’) and the owners of capital (the ‘bourgeoisie’ capitalists) in which workers lose the ability to control their work and lives and wealth becomes increasingly concentrated in the hands of a few capitalists. This eventually leads to violent revolution. (This ‘Marxian’ economic theory is in contrast to ‘Marxist’ theory that goes beyond this by believing that this development inevitably leads to socialism and then communism, and that we should hasten this revolution.)

For Joseph Schumpeter, this concentration of wealth in the hands of a few capitalists was moderated by the ‘creative destruction’ of technological revolutions (in long-wave cycles, named after Nikolai Kondratieff ) in which old wealth gets destroyed and new wealth grows for the capitalists of the new technology. Technical revolutions press the reset button on capitalism, sustaining it for longer. Schumpeter still believed that capitalism would ultimately be destroyed, by its undermining of social institutions.

A simple narrative: It seems that Capitalist societies do not become Communist; they just survive by replacing one elite with another, whether by (periodic) technological and (irregular, non-oscillatory) political upheavals -supposedly until eventual exhaustion.

The Four Horsemen of Inequality

But it is not just revolutions that push the political reset button on economies. Walter Scheidel has examined inequality over millenia. In ‘The Great Leveler’ (sub-titled ‘Violence and the History of Inequality from the Stone Age to the Twenty-First Century’), he argues that there are 4 things (the ‘four horsemen of inequality’) that push the political reset button on economies, bringing inequality back in check, these being:

  • the collapse of states,
  • war, and
  • catastrophes such as pandemics and large natural disasters,

as well as:

  • revolution.

But there needs to be an intensity to these to have an effect: state collapse and revolution must be violent, war must be total and catastrophe must be widespread in order to wipe the slate clean.

After these resets, workers have the upper hand, labour costs rise and inequality is reduced. Eventually, the accumulation of capital starts to take over again.

The West has been spared these resets for so long through the Long Peace that arose following the Second World War. The collective memory of the turmoil of the war drove down inequality through the high-growth period of the ‘Great Compression’, a period which saw the introduction of the welfare state, had guaranteed wages for union members and a relative lack of immigrant labor, had high taxes and limited increases of executive pay. During the 1970s, this tailed off into the lower-growth ‘Great Divergence’ which saw the increase in globalization, de-unionization, erosion of the safety net, the lowering of taxes and the acceptance of high executive pay.

This fall and rise correlates with inequality during this time. Look at how the Gini coefficient (a metric of inequality where 0 is perfectly equally shared and 1 indicates that all wealth is in the hands of a single person) declined significantly for most of the 20th Century but the reversed direction dramatically in the early 1970s (note: before the Hayek/Friedman 1980 watershed).

Gini coefficient of inequality over time (Credit:

We may feel that the opportunities for any of the four horsemen to rear up again seem to be remote now in the West:

  • Political (e.g. United Nations, EU), military (e.g. NATO), and economic (e.g. GATT/WTO) institutions have been put in place after the Second World War for a new (globalized) world order. These have helped protect Western states from total war and state collapse.
  • Medical advancements have improved health and helped protect Western states from pandemics.
  • Improved technology has reduced the risk from natural disasters such as flooding and earthquakes.

But we shouldn’t be too complacent. The horsemen are still there, generally on a larger scale:

  • Globalized travel risks pandemic of a scale greater than any seen before.
  • There are the opportunities for the total destruction of states through nuclear weapons.
  • Plus there is the small matter of the environment destruction of the planet.

G > R

How can we avoid these calamities? We want a managed transition to a new ‘Great Compression’, where G > R, to put it into terms set out by Thomas Piketty in ‘Capital in the Twenty-First Century’. Benjamin Studebaker summarizes Piketty:

Piketty is engaged in a critique of capitalism not to abolish it, but to restore it to conditions under which its benefits are most widely and fairly disbursed. The central thrust of Piketty’s argument is a comparison between two rates:

  • The Rate of Return to Capital (R)–the rate at which existing wealth grows.
  • The Rate of Economic Growth (G)–the rate at which the economy generates new wealth.

If R > G, wealthy citizens will see their assets grow in size faster than the economy grows. They will become proportionally wealthier over time regardless of the amount of work they do or the extent to which they contribute to society. In this kind of society, once a family becomes wealthy, it gets wealthier in perpetuity provided that no member of the family actively squanders the fortune.

If G > R, wealthy citizens will see economic growth outpace the rate at which their assets grow. While they will still gain wealth in absolute terms, in relative terms their wealth will slowly become a smaller piece of the economic pie. In order to maintain their status over extended periods, they and/or their children will have to find and develop additional sources of income. In this kind of society, a family must continue to contribute to society in order to maintain its relative prominence.

Piketty has estimates for the relationship between R and G over the last several centuries and a projection of what that relationship is likely to be over the course of this century.

Here’s what he finds:

Piketty’s rate of return for capital w.r.t overall output (Credit: Paul Krugman’s ‘Notes on Piketty (Wonkish)’)

It shows that G was greater than R only for the years around the ‘Great Compression’.

Also, compare this with the Gini graph above. When G > R, inequality decreases. When R increases, inequality increases. When R decreases, also inequality decreases. (Caveat: ‘Correlation does not mean causation’.)

The Pitchforks are Coming

The problem is that, over history, elites have repeatedly shown themselves to be incapable of reforming themselves: to shift away from their cosy R > G.

Nick Hanauer was a very early investor in an online bookseller that became rather successful:! He now finds himself a member of the top 0.01%. He warns:

 “And so I have a message for my fellow filthy rich, for all of us who live in our gated bubble worlds: Wake up, people. It won’t last. If we don’t do something to fix the glaring inequities in this economy, the pitchforks are going to come for us”

This sounds rather melodramatic! The idea of revolution in present-day West is fairly inconceivable. And yet the 2019 phenomenon of the ‘Gilets Jaune’ and the UK fuel protests of September 2000 demonstrate how quickly things can change. Strategic disruption of the ‘Just in Time’ supply chain could lead to us being less than ‘four meals away from anarchy’.

Typically, elites do not accept the need for radical change until it is too late. Or it is too little, too late. They need some help in order to see the consequences of inaction. The current political turbulence should be concentrating their minds – gaining the acceptance that the status quo is unacceptable – but it does not seem to be.

It’s the Economy Stupid!

The three big challenges for the Western world in the 21st Century are:

  1. Inequality,
  2. Automation, and
  3. The Environment.

I am dealing with inequality (indirectly) here. Inequality is the major cause of the political stress of our time. States rely upon a sense of common identity among its citizens in order to succeed in redistributing tax payments to those more needy. Ultimately, political stress leads to one of two of Scheidel’s ‘four horsemen of inequality’ – revolution and state collapse.

I dealt with automation in the last talk in which I included Frey and Osborne’s famous chart showing the precariousness of (generally) lower-skilled workers. Automation will further exacerbate inequality, as technology continues to separate the opportunities of

  • the ‘left behind’ ‘citizens of somewhere’ in the de-industrialized wastelands, and
  • the educated, liberal, metropolitan white collar ‘citizens of anywhere’.

Safe jobs and vulnerable jobs (Credit: ‘The Future of Employment’)

And then there is the question of the environment. Global warning really came to prominence around 1988 – the start of the period of Milanovic’s Elephant curve. Over the last 30 years, the response to climate change has clearly been inadequate, and in many areas, things are getting worse.

The globalized economy has made people monetarily better off on average around the world, but it is making things worse politically in specific locations – specifically in the West. Its free market places no value on the effects of new technology on the producers (workers) of goods and services. And its short-term mass-consumption is the main obstacle to solving environmental issues.

In short, when considering the big challenges ahead,

The broken economy is the root cause of all our problems! But it is not about increasing GDP. Following the credit crunch, there has been growth in the West but ‘that’s your bloody GDP, not ours’. If only we could reform the global economy.

Small Is Beautiful


Last year I stumbled upon a copy of E. F. Schumacher’s ‘Small is Beautiful’ – the famous environmentalist book of the 1970s. I was already aware of it but I thought I already knew what it was basically saying (living in small sustainable communities, using local resources and such like) and I never felt I needed to read it. (Better read things that challenge our thinking rather than just support it.)

But now a subtitle caught my eye:

‘A Study of Economics as if People Mattered’.

For one thing, I had thought of it as a book about the environment, not economics. But the main things was those last four words that struck a chord. In contrast with Blair’s speech, it suggested that we should be trying to fit economics around people instead of the other way around – what a radical idea! So I read it and was surprised by it in many ways, not least in what he said that seemed relevant now. This here is the result.

Schumacher’s Life

Schumacher was born in Bonn in 1911, the son of an economics professor and had been a Rhodes scholar in Oxford and New York in the course of becoming an economist himself. Having left pre-war Germany for England, he ended up spending part of the war interred on an English farm. This practical, manual work was in marked contrast to his highly-intellectual background (protégé of John Maynard Keynes; sister married Werner Heisenberg) and made a marked impression on him.

After the war, he was involved in the Allied economic reconstruction of Germany and then spent most of his career as chief economist at the National Coal Board. During this time he visited Burma and other Third World countries, encouraging the creation of self-reliant economies and this led to him advocating ‘Intermediate Technology’. His philosophical journey took him from atheism, through an interest in Buddhism, to Catholicism, After his retirement, he was president of the Soil Association.

He put together a collection of essays and talks written from the late 1960s but mostly in the early 1970s into a book he called ‘The Homecomers’ (advocating a return to traditional values) with the subtitle ‘Economics—as if People Mattered’. These writings are clearly influenced by his life experiences.

It was Leopold Kohr who coined the phrase ‘Small Is Beautiful’. Kohr was an economist who spoke out against the ‘cult of bigness’. Schumacher said that Kohr was ‘the person who taught me more than anyone else’. Schumacher’s editor proposed using this phrase for the title. And so it was that ‘Small Is Beautiful’ was published, in 1973.

Why should we look to Schumacher?

Much of what I read in ‘Small is Beautiful’ seems relevant to the economic crisis we find ourselves in now.

But we don’t have to look far to find other people who have recognised our crises and have written at length about them in more recent years. Why should we go back to reading Schumacher when there is this host of experts able to inform us with the benefit of knowledge of all that has happened in the last 45 years?

A small selection of books about the current crisis

A small selection of books about the current crisis

If we read a recent book, we might be tempted to identify the cause of all our current woes as being the neoliberal Friedrich von Hayek / Milton Friedman turn, around 1980. But Schumacher was writing before this, and before the 1973 energy crisis too. What he has to say about economics is more fundamental than that: we cannot just say ‘if only we ditch Hayek/Friedman, things will be fine’.

Also, his writing is of the popular form (‘pithy soundbites’ to some) rather than academic and this makes it concise and more accessible. His writing is not littered with supporting references to justify each point. He is forthright, but the book is not a polemic.

It provides a nice foundation, before then going on to read any of the more recent authors.

Context and Structure

In the next parts, I am just going to provide a selection of quotes from ‘Small is Beautiful’, with very minor changes to make them grammatical in isolation, with some commentary around them. If you want to see that unadulterated quotes, you can do a search on one of two online copies of the book here and here. And this will provide more context.

In editorial selection of these quotes, I have tried to present his general underlying ideas, divorced from the particulars of Schumacher’s life from his work:

  • This is not about intermediate technology.
  • It is not about Buddhism.
  • It is not anti-nuclear,
  • nor pro-organic agriculture.
  • It is not about the 1970s and
  • not about the developing world.

It is my intention that you think about how his 45-year-old ideas and recommendations might be relevant to economics in the West in the 21st Century, today. It is about the here and now.

There were many overlaps between chapters (each chapter being a self-contained talk or article). In trying to re-structure the selection to remove duplications, they seemed to fall into 3 categories and this is how I will present them:

  1. Values
  2. People, and
  3. Employment

Interpreting these categories more broadly, we can pigeon-hole them as:

  1. Philosophy
  2. Politics, and
  3. Economics

In that order. That is how I will present them, in Parts 2, 3 and 4 respectively.

Posted in Uncategorized | Tagged , , , , , , , , , , , , , , , , | 2 Comments

Answers to Automation

This is the final part of the “Automation, Education and Work” talk.

Part 1 of this talk was introduced with the following:

There is a proliferation of articles in the media about how the accelerating technology of artificial intelligence and robots will change the world of work radically in the next 30 years. “47% of current jobs are under threat”. “Self-driving vehicles will put millions of truck drivers out of work”. “We are seeing a hollowing out of middle-income jobs.”

Some say this Luddite fear is unwarranted. “Just because we can’t imagine what new jobs will come along doesn’t mean the next generation won’t”. “We just need to educate everyone for the future knowledge economy.”

Others say “This time it’s different”. “We cannot compete with the robots”. “Maybe we need to tax the robots and have Universal Basic Income?”

In this final part of the talk, I try to formulate responses to these statements. I start with…

“Is there technological unemployment?”

For those in the world of work, life is so busy. We may well say:

New technology has come along but we still work as hard as ever!

So, if new technology hasn’t created unemployment so far, why should it this time?

But new technology has created unemployment previously: we forget the workload of our forefathers. They worked longer working weeks and typically died not long after retiring, if they even got to retire at all. The number of hours we get to do things outside work for every hour spend we spend working has gone up dramatically. The unemployment that has arisen has been spread out among us so that the vast majority of us are part-timers compared to 100 years ago!

The back-of-an-envelope estimations in the table below show how much things have improved.

  1900 2000 ratio%
School leaving age 14 17
Working hours per day 9 7 78%
Working days per week 6 5 83%
Days holidays per year 6 32
Working days per year 306 228
Work hours per year 2,754 1,596 58%
Retirement age 65 60
Age at failing health 65 75
Years of quality retirement 0 15
Waking hours per day 15 16
Leisure hours per working day 3 6
Leisure days per working year 58 136
Leisure hours per leisure day 9 11
Leisure hours per working year 1,440 2,864
Leisure hours per retired year N/A 4,015
Total leisure hours 73,440 183,377 250%
Adult working hours 140,454 68,628 49%
Leisure / work ratio 0.5 2.7 511%

These are just simplistic calculations. They ignore the large amount of leisure time to be had as a child, and what leisure time there is during the years of failing health at the other end of life. You may disagree with some of the numbers but, however you might modify them, the point still stands: the amount of time we need to work to provide us with leisure time has gone down dramatically.

And this does not show the full picture. The greatest single factor of mass unemployment we have seen so far had been the replacement of horse power with mechanical horsepower! In 1900 there was 1 horse for every 4 people in England, with the large majority of horses having an extremely high workload. Nowadays, there just aren’t those working horses around. There is just 1 horse for every 30 people. And they are working much more comfortably – in the leisure industry!

It may seem that we are working as hard as ever and this may well be true within the last few decades but the long-term (e.g. 100-year) trend is downward. See the table below showing the average number of hours worked per year for various industrialised nations over the 20-year period 1976-1996.


Change in annual hours worked for some European countries: Picture credit: OECD.

Note that Anglophone countries have had the least improvements over this time and things have actually gone backwards in the USA. (Also note that figures for inequality show a reduction until about 1980, since when it has increased.)

Country 1976 1996 %
Japan 2,130 1,900 -11%
Spain 2,100 1,810 -14%
USA 1,890 1,950 3%
Australia 1,880 1,870 -1%
UK 1,870 1,730 -7%
France 1,860 1,650 -11%
Italy 1,800 1,560 -13%
Netherlands 1,640 1,370 -16%
Germany 1,640 1,410 -14%

(Table derived from


Change in annual hours worked for mainly Anglosphere countries: Picture credit: OECD.

“This time it is different”

This time is different, just as last time was!

Every time is different; every technological wave that hits us is unique. But some are more pronounced than others. The First Industrial Revolution was truly revolutionary compared with the information revolution that started around the 1950s.

The thing that is different this time is that the revolution affects the cognitive rather than the physical. Yes, human muscle work has been reduced but it was horses rather than us that were fully exposed to the effect of physical-replacement technology. If the new technology starts to do significant brain work, it will not be taking any creatures’ work away other than that of us humans.

Physical automation continues, through the ongoing synthesis of computers and motors – and it is now being enhanced by the addition of Artificial Intelligence (leading to the more intelligent robots and self-driving cars).

But more pronounced (more revolutionary) is the cognitive-only aspect – the arrival of intelligence that is sat inside computers rather than inside robots. Combined with new processes – the near-zero marginal cost business models – this artificial intelligence can be rolled out much more quickly and with much less capital outlay than brigades of robots. Unlike previously, this technology can replace much of the skilled workforce.

 “Just because we can’t imagine what new jobs will come along doesn’t mean the next generation won’t”

There will be many jobs opportunities in the future which we cannot imagine, but many new occupations will never come about: if Artificial Neural Nets can learn to do the current skilled cognitive tasks then they will probably also be able to learn to do many of those new skilled cognitive tasks.

When machines relieved us of physical burdens, we shifted to jobs requiring intelligence (then considered a uniquely human characteristic). Now that machines can relieve us of our intelligent work, we presumably must find refuge in emotional/creative work (now considered a uniquely human characteristic) – but emotional and ‘creative’ work is not completely immune to AI.

Cognitive Physical
deep learning automation (continuing)
quickly slower
skilled mobile
low marginal cost increasingly affordable

“We cannot compete with the robots”

It is true; in many ways, we will not be able to compete with the robots in terms of both capability and productivity. Erik Brynjolfsson and Andrew McAfee say this should not be a problem: we shouldn’t think that we are competing against them but that we are working with them. To provide an example, Garry Kasparov, having lost to Deep Blue, now advocates what is called ‘Advanced Chess’  (also called ‘Centaur Play’), where teams of players play chess against each other and in which some of the team members are computers.  Collectively, they are stronger than any of the individuals. More commonly, one expert in a particular discipline can team up with a machine learning expert with a bit of knowledge in that discipline – plus computer – to create a winning combination.

Most of us will not just be unable to compete with the robots; even if we organize ourselves into teams of humans and computers, we will also be unable to compete with the small set of super-expert winning teams.

And this teamwork between man and machine can be leveraged for a lot of ‘creative’ work.

“Is there a hollowing out?”

I have previously talked about the distinction between technology innovations and process innovations. Now, making a generalisation, we can say that:

  • technology innovations lead to up-skilling plus unemployment whereas
  • process innovations lead to down-skilling.

For example:

  • The introduction of tractor technology led to new skilled jobs involving designing tractors, making tractors, selling tractors and maintaining tractors but this was at the cost of putting many unskilled agricultural labourers out of work.
  • In contrast, the factory production line replaced workers who each had many skills with workers who only needed to perform a single task each.

The net effect is the tendency to create highly-skilled well-paid jobs plus low-paid unskilled jobs at the expense of those skilled jobs in the middle. This is the so-called hollowing out of the labour market.


Maarten Goos and Alan Manning describe the jobs at the top as ‘lovely jobs’ and those at the bottom as ‘lousy jobs’. And within the lousy jobs category there are the ‘three Ds’ that describe the attributes of many of those jobs: dull, dirty, dangerous and demeaning (yes, there are four, but for some reason people only seem to refer to some combination of 3 of these at any one time!)

This hollowing-out seems to be happening now, but might this just be a temporary blip? After all, it hasn’t really happened in the past. Education is part of the answer. Productivity improvements (being able to produce a particular amount of stuff for less work) meant that goods became available at a price affordable to a larger proportion of the population. Cars were no longer the luxury of the elite. So unskilled people (or their children) made unemployed by technology had to be educated to be able to do new skilled jobs. Why won’t this re-educating happen in the future then? It will to some extent. But this time, it will be possible for much of the new skilled work to be done more efficiently and effectively by machines working in collaboration with a relatively small number of the very highly-skilled.

We can always find useful work for the other people to do, including skilled work. More doctors and teachers would be good even when technology has made each doctor and teacher more productive. But where is the money going to come from to pay for those? Will the extraordinarily-rich super-skilled pay it all?

What is the problem with technological unemployment?

There is more to work than just earning money. Imagine if we could automate all jobs away tomorrow, with robots doing everything to run society, leaving us humans to lead lives of full-time leisure. As Voltaire said (in Candide):

“Work distances us from three great ills: boredom, vice, and need”

There is more to work than just satisfying our basic needs of life: eating and drinking, a roof over our heads, and so on. It (potentially) provides us with social interaction, interesting challenges and a feeling of useful contribution to society, commanding respect. And it keeps us preoccupied rather than causing trouble.

M. Keynes, (in ‘Economic Possibilities for our Grandchildren’) re-iterated the problem of boredom:

“It is a fearful problem for the ordinary person, with no special talents, to occupy himself.”

He went on to say:

“We shall endeavour to spread the bread thin on the butter – to make what work there is still to be done to be as widely shared as possible. … a fifteen-hour week may put off the problem for a great while.”

Given the history of employment over the last 40 years, the idea of a 15-hour week is laughable for most of us. But if we could transition to shorter and shorter working weeks gradually (as seen before 1970 and continuing in some countries) it would lead to a culture where people defined themselves according to what they do in their leisure time at least as much as to what they do in their work time. People will have grown up in this new culture and learnt (partly through formal education) how to deal with this. We would realistically hope that there would be an increase in overall well-being as a result.

Seen this way, technological unemployment is not a problem – it is a good thing.

But of course, the problems with technological unemployment are the political issues raised by it:

  • How do we ensure the work gets shared out – to spread the butter thin on the bread (or ‘spread the bread thin on the butter’ as Keynes said) – rather than just allowing those that want to take more than their ‘fair share’ of work to do so?
  • Would we want to, or be able to, restrict the hours of those on significantly-higher wages?
  • We will end up with a new ‘normal’ where the majority are on capped hours on near-minimum wage. How do we cope with a democratic society when the proportion of the working-age population on minimum or near-minimum wage exceeds 50% and becomes the majority?
  • How do we ensure that the diminishing number of highly-paid, highly-skilled workers pay their taxes, when they can so easily move from one economy to another with their wealth?
  • How does the government intervene into the free market of work to make it operate better?

Included in the suite of political problems is how to steer the jobs market so that it is the lousy jobs that are automated away rather than the lovely ones. And note: the demarcation between lovely and lousy jobs may not be as you think. I think we want jobs that are like the office work in that they are clean, safe and interesting compared with their factory predecessors, but office work is generally sedentary (impacting long term health) and often stressful. Light manual, mobile jobs are good jobs.

There will be limits on how far we are able to automate away many of the dull and dirty jobs. We may only be able to get robots to help relieve workers to make them less dull or dirty. It is often said how difficult it is to get a plumber or a cleaner. The same is rarely said about lawyers or accountants. We somehow expect to pay not very much for a cleaner but are resigned to paying high hourly rates for some professions. AI can make big productivity improvements in some of these professions. We perceive white-collar work as higher-status work and therefore deserving of more pay. But in a society in which so many people would be on minimum or near-minimum wage, we will need to get over this prejudice and pay for the dull and dirty tasks at a level more in keeping with their social value.

Universal Basic Income

In a society where work is scarce, large-scale unemployment becomes normal. How do we redistribute wealth from those that are employed to those that are not? Universal Basic Income and Negative Income Tax have been suggested as possible solutions.

With Universal Basic Income, the government provides everyone with a flat-rate benefit with which to pay for life’s basic essentials – food, drink, a shirt on one’s back and a roof over one’s head. Individuals are then able to compete for the work remaining (or engage in other, hopefully useful, activities). Just how basic is basic is open to debate. The value envisaged is typically around $10,000, 10,000€ or £10,000.

Negative Income Tax (NIT) works like this: with normal Income Tax, income up to, say $20,000 is taxed at 0% and income above is taxed at 20%. If the zero-band rate is set instead at -40%, there is a net pay-out as shown below:

  Standard income tax Negative income tax New net
$0 $0 -$4,000 $4,000
$5,000 $0 -$2,000 $7,000
$10,000 $0 $0 $10,000
$15,000 $1,000 $1,000 $14,000
$20,000 $2,000 $2,000 $18,000

People support these various ideas when initially presented with them. But when they are told what tax rates would be needed, they turn against them! It is the political inability to redistribute wealth from some people to others that is the problem. Income tax hikes on the better off have long been considered to be electorally suicidal.

Opinion is divided over UBI. Claimed effects include:

  1. +/- helps to alleviate mental stress (even though often work helps keep you sane)
  2. + avoids the stigma of claiming benefits (although this reduces as a larger and larger proportion of the population receive it)
  3. – counteracting the above, it diverts targeted welfare target to the most needy, dependent on circumstance, to a generalised welfare.
  4. delinking income and work by rewarding people for staying at home is what lies behind social decay.
  5. – undermines incentives to participate in society.
  6. – allows corporate and political leaders to postpone the real discussion about rising inequality, social dislocation and the future of jobs.

Taxing Good and Bad Income

But there is a more fundamental problem here: In a world with technological unemployment, we end up taxing the very thing we want to conserve, namely, good jobs! We need to manage the reduction in work in a controlled way. The market should be steered so that there is a strong incentive to innovate methods of automating the bad jobs (the dull, dirty, demeaning and potentially automatable) and to reduce incentives to innovate methods of automating the good jobs. We could tax work deemed to be good at lower rates (even 0%), but this obviously shifts the burden onto those with ‘bad work’. The latter’s salaries would have to rise to compensate.

Taxing by Other Means

If we are not taxing income, we need to tax by other means. Options include:

  • Wealth (including land and inheritance taxes), and
  • Sales (Use tax) – taxing consumption rather than production.

A significant problem here is that economies are not closed systems:

  • People earning money in one country move that money abroad.
  • People providing a service in one country employ themselves in another.
  • People buy things from another country to avoid paying high sales taxes.
  • (Additionally, people educated in one country go to work in another.)

Note: In what I say above:

  • ‘country’ is any polity, be it a nation, region or super-nation – a political unit in which wealth is redistributed through taxes of one form or another.
  • ‘person’ also includes corporations.

I am considering Corporation Tax as essentially the same as income tax, but it is easier to move this income from country to country because there isn’t any actual body to be physically located anywhere (and they can afford more lawyers than you or I).

Taxing the Robots

If workers aren’t earning the money, who can afford to buy the products? There is the well known (if apocryphal) conversation of Henry Ford II showing off his automated factory line to the labor union leader:

Henry Ford II: “Walther, how are you going to get these robots to pay union dues?”

Walter Reuther: “Henry, how are you going to get these robots to buy your cars?”

So what of taxing the robots, as often asked? Again, we can end up taxing what we want to promote. We want to tax robots that replace good jobs but we don’t want to tax the robots that do the bad.

The popular imagination of future automation is a world of science fiction robots, an imagination reinforced by the media with stock pictures of androids. The reality is not armies of robots scurrying around factory floors but of huge conveyor-belt installations of computer-controlled industrial equipment. And I have argued here that artificial intelligence in software form that can be rolled out quicker than the robots because of its very low marginal cost. Better paid skilled cognitive sedentary jobs will disappear more than commonly expected. Getting robots to do what we think of as simple tasks (such lifting something up and carrying it around an environment evolved for humans) is far more difficult (it is a task comparable to self-driving cars – robots that carry people from one pace to another). So many low paid unskilled physically active light manual jobs will remain for many years.

And besides, many of these light manual jobs are good jobs, useful and sociable. We need to actively manage the taxing of technology to incentivize the market to automate the Lousy jobs away and allow a transition towards Lovely jobs, sharing them out, and with a gradual reduction in the length of the working week.

How can we tax robots when there is a gradual progression of automation from the fixed minimally intelligent toaster (a device that automatically stops toasting without human intervention) up to the general-purpose humanoid robot of science fiction? Clearly we can tax the latter more. Key differentiators are mobility and ability to repurpose. A fixed ‘robo-barista’ (referring back to the Starbucks University un-forecast in Part 2) may still take someone’s job but it cannot be repurposed to, say, vacuum the floor (performed by a different robot) or clear up tables. How do you manage taxing a general-purpose robot that was initially procured to perform a Lousy job when it is repurposed to replace a Lovely job? It may be that the capability of robots is deliberately restricted such that they cannot be re-purposed (also allaying the fears of the ‘singularity’ when the ‘robots taking over’), either through the choice of its owner (to reduce taxes) or by law.

Taxing soft artificial intelligence is more difficult. Robots are physically located in one place and so can be taxed in that place. But Internet services could be served from anywhere.  Perhaps taxing at the customer end is the answer – a sales tax. Previously, I have looked at Freemium and platform models of services. Perhaps we should tax the internet super-highway just as we impose taxes on the old-fashioned highway. Both are means of getting products and services from producers to consumers.

Universal Basic Services

An alternative to UBI is Universal Basic Services (UBS). I think there is potential here to overcome some of UBI’s difficulties, or at least alleviate them by being a complementary partial solution.

A basic service is provided to everyone ‘free at the point of use’, like state education and the much-loved National Health Service in the UK. Seven free public services identified are:

  1. healthcare
  2. education
  3. legal & democracy
  4. shelter
  5. food,
  6. transport,
  7. information

These should go a long way to solving issues such as hunger and homelessness that should have been solved a long time ago in the so-called ‘advanced’ Western societies.

If everything in life is given a monetary value and must be bought in a free market, the amount of money needed just to survive becomes significant.

With UBS, the welfare benefits are de-monetized: the costs are not directly visible to the consumer. The amount of money needed to survive becomes much less. The services still need to be paid for somehow but I believe UBS is more politically acceptable because, when taxpayers baulk at the high rates of tax, they can be challenged with questions:

  • What basic service do you want to deny the poor?
  • Should they be malnourished?
  • Should they be unable to have a warm home?
  • Are they really denied basic medical care?

A major objection to higher welfare benefits is removed: the perception that the ‘feckless poor’ ‘waste their money on’ this, that and the other. They are not given the opportunity to waste ‘our’ money. (Conversely, we no longer have the opportunity to spend ‘our’ money as we choose; the invisible hand of the free market is replaced with the state providing the service, or tendering it out.)


  • There is no stigma about using the services when the majority of the population do.
  • And hopefully, economies of scale reduce the cost per user.

But a more significant advantage of UBS is that it is amenable to the ‘Freemium’ business model (introduced in Part 2): the service can be paid out of our purchases rather than our tax. Income tax doesn’t have to be increased. Users pay for a service and, in doing so, allow others to have a basic version of what they themselves want. There is a direct connection between their needs and the same needs of others:

‘I am hungry; I want to eat; I pay to eat. I understand that other people get hungry too and they want to eat but cannot afford to. I am happy to pay a bit to allow them to have some food that is not as nice/much as mine.’

(Note: This provides a mechanism for the free market to select the service provider, through the choices of the premium user)

Here is a small example (‘un-forecast’): ‘Information’ is one of the basic services above. It is an important contributor to social inclusivity. Access to the internet, via a mobile phone should be universal. Mobile phone operators (private companies) should be mandated to provide a limited number of texts/minutes/Gbytes to and lending a refurbished phone to anyone who requests (with some means to restrict each user to just one servicer provider at a time). It provides the service provider with the opportunity to receive revenue through paid-for (top-up, PAYG) additional benefits and services.

Other services are more difficult to provide freely through a freemium model, but I don’t believe it is  impossible. Consider the provision of food via ‘Universal Basic Canteens’. For efficiency, food is provided ready-prepared (food waste is minimized) rather than as (packaged) raw ingredients (in packaging). They are canteens rather than restaurants: self-service, with limited choice. This also provides the important social benefits of communal eating.

But: it presupposes that those who pay are happy to share the same eating space with those cannot. There is a huge status gradient going from food banks to ‘exclusive restaurants’ (the name says it all). The general population may no longer be prepared to share eating space in canteens in the way that they are generally still prepared to share hospital space. We need a sufficient level of social cohesion.

Owning Less

The introduction of UBS can be seen as part of a wider shift from owning ‘stuff’ oneself to using a service. The overall cost of ownership can be less and resources are used more efficiently (it is more environmentally friendly). Part 2 covered self-driving cars, which allow the completely new business model of what is  called ‘Transportation as a Service’ (TaaS): dramatically reducing personal transportation costs by subscribing to a car service rather than owning a car oneself.

Younger generations, growing up in the internet world, are more used to this concept. They are happy to subscribe to music streaming services such as Spotify in marked contrast with their parents who prefer to own CDs (‘what if the internet disappeared’?). The young are ‘Generation Rent’ in more than one sense of the phrase.

In the song ‘Imagine’, John Lennon asks us to imagine being without countries, wars, religion, greed and hunger and this is all conceivable. But he also asks:

‘Imagine no possessions. I wonder if you can?’

This seems to go too far.

However, a shift from ownership to subscription services makes it possible to imagine a world where we generally own less. I still want my own toothbrush but I am quite happy to live without a (self-mowing) lawnmower. Subscription services take the hassle out of ownership (if it is broke, get the service provider to replace it straight away) and counters the culture that owning material goods intrinsically contributes to happiness.

Un-forecast 5: The Good Gig Economy

Defenders of the gig economy say that it offers workers flexibility to work when they want to. This is at least sometimes true. But mainly, those working in the gig economy are doing so because they need the money and the work offered is the best that they can get. But in a possible future world of Universal Basic Services, less money is needed in order to live a rewarding life. Here I present another un-forecast, in which the gig economy is working better for people…

Three friends in their twenties are working on a musical. They write the script and music using free software on a tablet and practice the performance in their free time whilst working casually in Starbucks. Their uploaded music creates publicity for gigs in their local town and nearby. But they occasionally have a holiday which is a nationwide tour of their music or of their musical. They use their tablets to record a promotional video with the help of free video editing software. Other material is edited with free software. It is all uploaded onto various social media sites.

They rent flats which have secure storage which enables them to sub-let them easily through Airbnb. They do this when touring, staying in similar accommodation. An app allows them to build up an itinerary so that renting and sub-letting more or less cancel each other. A similar Starbucks app gives them the flexibility to shift work to the various places that fit in with their itinerary.

Since so many people would be doing this, there would hardly be any money to be made performing music but they would be able to fulfil their leisure passions and go on long vacations at minimal cost.

The point I am trying to make here is that people can lead lives in this form of the gig economy that have a better work / life balance, providing creative opportunities for whoever wants it and opening up the talent pool for entrepreneurial enterprises far wider than it is today. And this can be achieved with relatively little money sloshing around, through the use of peer to peer and free services. Society would be qualitatively richer as a result.

New activities would arise as a result of this new economy. These activities may create new jobs, but they are more likely to be in the form of providing services to one another rather than in formal employment.

“We just need to educate everyone for the future knowledge economy”

People supposedly say that ‘we just need to educate everyone for the future knowledge economy’ because we need to expand higher-level education so that the unskilled workers for whom ‘the robots are going to take their jobs’ are in a position to do the newly-created jobs. But, as I have said, the AI that might replace the job you have now might also be able to take the job you might have had in the future.

Now, we do need to improve the level of education of the ‘workforce’ but a significant factor here should be that we need people to do more of the current skilled jobs, like doctors (very skilled) for example, so that we can ‘spread the bread thin on the butter’. But this will be expensive (investing heavily in a highly-trained person and not using them for as many hours of the week as possible is obviously less efficient).

In a surprising article called ‘The Skills Delusion’, Adair Turner says there is no point in educating people to perform zero-sum jobs i.e. those that do not increase net human welfare. More people getting university degrees does not mean higher productivity. Students may simply be willing to spend a lot of money on an education to signal to employers that they have high-value skills!

We should be providing the following education:

  • Primary education, including numeracy, literacy and computer literacy, for basic functioning within modern society.
  • Secondary education extending that primary education, providing a broader knowledge of the world around us and allowing individuals to make life choices.
  • Secondary education of general well-being for ‘survival’ in the modern world. This includes having a flexibility and the attitude to adapt and learn. It also includes having entrepreneurial skills to help stimulate an enriching life within the ‘good gig economy’.
  • Secondary education in ‘Data Science’. Older people grew up in a world where knowledge was scarce; people needed skills such as using an index catalogue in a library to find knowledge and people needed the ability to remember that knowledge. Young people have grown up in a world where knowledge is abundant (overwhelmingly so). People now need to know how to handle knowledge – how to sift out information from an internet of varying quality (including ‘fake news’).
  • Tertiary education in ‘Data Science’ and other STEM (Science, Technology, Engineering and Mathematics) subjects (including Computer Science) to provide the technology that means we don’t have to work so much.
  • Tertiary education in other (existing) subjects for skilled work, such as for doctors, as already mentioned.
  • And then: tertiary education in other areas, not for any direct benefit but as part of an education for life outside of employment, enriching one’s quality of life and thereby enriching the culture in society.

STEM Graduates

The countries with most STEM (Science, Technology, Engineering and Mathematics) graduates are going to be the ones that will be able to capitalise on this new technology. Which countries are these?

World Economic Forum data from 2016 and OECD projections for 2030 is tabulated below. Both the  STEM graduate numbers and total country populations are in thousands. What is being measured is different between the two years but the data highlights the relative strength in numbers of STEM in China, Russia, Iran, Saudi Arabia and South Korea compared with USA, the EU and Japan.

Obviously, the quality of those graduating varies from country to country.
Migration is a significant factor. Currently, 16% of US scientists come from outside the USA whereas only 3% of EU scientists come from non-EU countries (source: OBHE, 2013) and China is a large exporter of graduates, although these migration patterns may not continue.

The table provides some indication of where the new technology will be created.


Picture credit: Forbes magazine using WEF data on ‘recent STEM graduates’ in 2016.

Country STEM metric 1, 2016 STEM metric 2, 2030 Total population, 2015 Projected population, 2030 Per-capita metric 1, 2016 Per-capita metric 2, 2030
China 4,700 37,000 1,367,486 1,419,019 0.34% 2.61%
India 2,600 26,700 1,251,696 1,460,744 0.21% 1.83%
USA 568 4,200 321,369 359,403 0.18% 1.17%
Russia 561 4,500 142,424 138,215 0.39% 3.26%
Iran 335 81,825 93,459 0.41%
Indonesia 206 3,700 255,994 296,450 0.08% 1.25%
Saudi Arabia 3,000 33,826 8.87%
Mexico 2,200 140,063 1.57%
Brazil 2,000 228,720 0.87%
Japan 195 1,900 126,920 120,752 0.15% 1.57%
South Korea 1,600 49,003 3.27%
Turkey 1,500 86,671 1.73%
Germany 1,400 78,022 1.79%
UK 1,400 68,451 2.05%
Argentina 1,100 48,796 2.25%
France 800 69,604 1.15%
Canada 800 38,565 2.07%
Spain 700 52,446 1.33%


Picture credit: ‘finfacts’ blog from OECD data. (In comparison with the above, this chart does not include Iran because it is neither an OECD not G20 country.)

Vladimir Putin has said that the development of AI raises

“colossal opportunities and threats that are difficult to predict now”,


“the one who becomes the leader in this sphere will be the ruler of the world”

and that

“it would be strongly undesirable if someone wins a monopolist position.”


I have tried to get beyond the media hype and doom-mongering about the effect of robots and AI on jobs. To summarize the answers to the questions posed:

  • No, “47% of current jobs are under threat” does not mean that about half of jobs will disappear. It is that a very large number of jobs will be significantly affected by AI.
  • Yes, the new technology will have a big impact but technological revolutions also involve new ways of doing things, such as currently with the platform economy. It is these new processes that will surprise us. Some ‘vulnerable’ jobs will remain and some ‘safe’ jobs will disappear. The future is not the present with more robots.
  • Yes, robots will have a big impact but it is the technology of artificial intelligence that will have the biggest impact in the short term because it can be rolled out very quickly.
  • No, we cannot compete with the robots. But we can cooperate with them, with us doing the ‘lovely’ work in fewer hours and them doing the ‘lousy’ jobs. But this means we need to actively manage the economy to achieve this.
  • Yes, technological development does cause unemployment but this has manifested itself in the past as a reduction in general working hours.
  • Yes, this time is different from previous technological revolutions as it will be taking away cognitive rather than exclusively physical tasks. It is not just a problem of our imagination. There will not be an equal number of new jobs created as lost, because the AI will be able to do so many of those new jobs. “just because we can’t imagine what new jobs will come along doesn’t mean the next generation won’t” is much less true than it was before.
  • Yes, it is true that “self-driving vehicles will put millions of truck drivers out of work” but this is in the long In the meantime, driving will become more automated hence easier. Legislation should ensure that huge lumps of metal are not let loose onto roads unsupervised. After all, we still have train drivers.
  • Yes, there is a hollowing out of the jobs market. This is divisive and a serious threat to the cohesion of society.
  • Yes, technological unemployment is a problem but, if we manage to spread the work, it is a problem of disparity of income rather than the binary division between employed and unemployed. In any case, there is the problem of wealth redistribution.
  • Yes, Universal Basic Income may be a useful means of redistributing wealth but I believe a better solution is Universal Basic Services. The Freemium model may be a way of achieving UBS without increasing income tax or other taxes.
  • Yes, we should tax the robots but we should make sure this doesn’t have the consequence of stopping them doing the ‘dull, dirty and dangerous’ tasks that they could do.
  • Yes, we need to educate everyone for the future knowledge economy but: this is not about getting everyone to be AI experts. We need a world-class AI STEM education – but only for some (quality, not quantity) and the rest of us just need to be ‘AI-aware’ (aware of the ethical and other problems surrounding AI and Data Science). We need to educate for a world of less work: we must educate in order to spread the highly-paid work more equally across society and we need to educate in preparation for a more fulfilling world of less employed work and more opportunity for personal enterprise.

I have illustrated my arguments with some imagined futures but I doubt that they will actually come true in any way as described – these are only ‘un-forecasts’ after all. Accounts of the death of the university campus may be greatly exaggerated. There will be legal factors at play. Bots may not be allowed to impersonate real people – as suggested in help dementia patients in un-forecast 2. We may insist of having truck drivers sit in the huge chunks of metal hurtling around our roads, as we currently do on railway tracks. Automation may be thwarted by the ‘little things’. The San Francisco BART trains were designed in the 1970s to be self-driving but they are not,  defeated by the controlling the opening and closing of doors for the passengers, not the driving itself).


The current technological revolution is generally presented as a problem – that is, presented in negative terms: the threat of the robots taking our jobs, seemingly leaving us unable to provide for our own daily needs. We are passive in this. The technology is disruptive and cannot be stopped. We have no control over it.

But the problem is not one of technology. It never is, per se. Technology forces change but the matter of which direction the change will take us is a political question not a technical one. It is about who benefits from the technology; in whose interests does the technology serve?

The same can be said about the economy: who benefits from it and in whose interests does it serve? How should we reform the economy to overcome the current crisis in the West, and how should we manage the transition? Technology is just one factor that needs to be borne in mind when answering these questions.

Posted in Uncategorized | Tagged , , , , , , , , | 2 Comments

The Big Spiky Audacious Goal

Following the ‘Spiky Thoughts’ and ‘Spiky Logic’ blog posts, this is the third post on Spiking Neural Networks. It is part of a longer series which has a ‘Big Hairy Audacious Goal’: to create a relatively-simple, biologically-plausible hardware implementation example of a Spiking Neural Network hierarchy of predictors that is capable of intermittently learning from others and also capable of teaching others. That’s all!

Why? In order to just get to the Base Camp to climb up the notoriously-difficult learning curve to understand Hierarchical Predictive Coding (e.g. Karl Friston’s ‘Variational Free Energy’) in the brain! And by understanding, I mean really understanding. If you can replicate something in simulation then you really understand it. And no cheating: you have to be able to code up something without using other peoples’ libraries that do the heavy lifting (such as the many Python machine learning and neural network libraries).

What will be created will not be an implementation of a hierarchical predictive coding (HPC) network – it will be a hierarchy of reinforcement learning networks. But this will help understand how a neural net layer modifies its action in response to changes in its environment, which is something the HPC needs to be able to do and something that has been completely neglected in previous discussions of Variational Free Energy.


The Ten Step Way

Here then is a ‘Ten Step Way’ towards Hierarchical Predictive Coding Nirvana:

  • Step 1: Create an environment and an agent
  • Step 2: Biologically-plausible learning
  • Step 3: Combined unsupervised and supervised learning
  • Step 4: Reinforcement learning
  • Step 5: An Ensemble of predictors
  • Step 6: Society and Culture
  • Step 7: Adaptation
  • Step 8: Hierarchy of predictors
  • Step 9: Time delays
  • Step 10: Minimizing surprise through action and perception
  • Step 11: Beyond a simulation: Naïve hardware implementation
  • Step 12: Computationally-efficient: Event-driven learning

(Those last two steps are optional extras.)

In more detail…


Step 1: Create an environment and an agent

Create a simple environment in which an agent could interact with, could learn about the environment (find patterns in the world, i.e. unsupervised learning).

The environment needs to be sufficiently complex that optimum agent behaviour will vary dependent on some environmental parameters. There is then the prospect that we could make an agent that is intelligent enough to:

  • explore the world in order to devise a behaviour that is rewarding to the agent (i.e. adapt itself to the world. This would be through reinforcement learning.
  • notice a change in the environment and
  • modify behaviour to find a more optimum operating

(In the more complex environment of the real world, this is something where humans collectively have only really managed the second of these items!)

But the environment needs to be sufficiently simple that:

  • it is not computationally intensive (this is only an example, after all, which demonstrates principles and could then be expanded to a more complex environment.
  • We can verify that the environment and the agent have the potential to satisfy the above requirements. (It is much easier to get something working when you already know that it can possibly be done.)

So step 1 is about doing much the same for this new playground as was done in the ‘Spiky Logic’ blog post for an XOR gate:

  • Model the environment,
  • Create a spiking neural network of a particular topology and size sufficient.
  • Verify that that network has a topology and size sufficient for implementing near-optimal behaviour (a policy of generating actions from sense inputs) in that environment (verified through random walks through the environment).


Step 2: Biologically-plausible learning

From step 1, there is inference but no learning. I suppose the random walk of step 1 is an extremely simple form of learning, but it is learning carrier out but something outside of the environment-cum-agent (a god!). What is needed is a biologically-plausible means of learning which means that it is carried out solely by the agent within a ‘physical’ time and space: weight adjustment must be local to neurons, as we understand it to be done in real (biological) neurons, using information that is local to the synapse (i.e. of the pre-synaptic and/or post-synaptic neurons). Spike timing-dependent plasticity (STDP) is the general method to implement this Hebbian ‘neurons that fire together wire together’ behaviour.

Step 2 needs to implement unsupervised learning. That is:

  • by the agent on its own,
  • about the environment.


Step 3: Combined unsupervised and supervised learning

At present within typical artificial neural network practice, there is a sharp distinction in training neural nets between the three approaches:

  1. supervised learning,
  2. unsupervised learning, and
  3. reinforcement learning.

Considering just the first two, we humans have no such stark distinction. There is no sharp cut-off from ‘training’ to ‘inference’ at some teen age! That is not real intelligence, where we experience phases of supervised (in the presence of a teacher) and unsupervised learning, continuing to learn throughout adult life.

Supervised learning, in the form of learning in the presence of a teacher in the environment, is a particular form of unsupervised learning.

Step 3 is about ensuring that we have neuronal weight adjustment that is capable of both supervised and unsupervised learningSteps 2 avoids rushing in to develop a neuronal plasticity that is sufficient for supervised learning but not for supervised learning.



Step 4: Reinforcement learning

Step 4 then brings in online Reinforcement Learning – having the agent in its environment continuously learning.

The environment should to be biologically plausible but benign (the agent can continue to exist in the environment regardless of its behaviour, without being gobbled up by something) so that the agent can develop a policy (and in principle change that policy as it lives through a change in the environment).


Step 5: An Ensemble of predictors

At this and previous steps, the agent exists in its environment and is influenced by that environment. The agent can move around the environment but the location of the agent has no influence on the environment.

This allows us to have multiple agents existing in the same simple environment. If we  decouple action desired from action actually performed , an agent can have ‘involuntary’ movement. We can tie all the agents together as it were, and determine actual action by a weighted vote.

We need to have this decoupling in mind when we are developing the earlier steps. (Generally, this is the whole point of this BHAG planning.)



Step 6: Society and Culture

We should then be able to bring in agents or take out agents with little effect on overall behaviour, as though there is birth and death within the agent population.

And it should be possible to switch on teaching such that a newly-born agent is able to learn in the presence of an established agent. We should manually select the teacher to be the one that is the most effective (i.e. has the fewest involuntary actions).

There changes are biologically plausible and biologically inspired, apart from the last point. But this is just a stepping stone to the wider goal.

We should be able to demonstrate that behaviour of the group is improved through this teaching – that they are able to cope with additions to and removals from the population by passing knowledge down from one generation to the next.



Step 7: Adaptation

The agents need to be able to adapt their behaviour (policies) to cope with step changes in the environment.

It is possible for a single agent to achieve this? Maybe not.

The various agents of step 5 can have different parameters, such as learning weights, or ‘adventurousness’ (different propensities for exploring less optimal policies). Or we may have to introduce (give birth to) new agents with randomly better or worse policies than the consensus so that better policies steer the population’s behaviour towards something that is better suited to the new environment in which the agents find themselves.



Step 8: Hierarchy of predictors

And now a big milestone – achieving a hierarchy of agents in which:

  • Each agent has involuntary action, as before, but discrepancies are signalled by an error input rather than an actually input (there is an XOR in the input).
  • The agents are daisychained together (although at this stage, there is no extra delay experienced by agents higher up the hierarchy as a result of being connected to its environment via other agents).
  • At each stage in the hierarchy, there is weighted voting of actual action between an agent and that from the agent above.
  • Similarly, errors are daisychained upwards.



Step 9: Time delays

Up to now, there have been discrete timesteps in which agent and environment have worked in lockstep. At step 9, a time delay is introduced between agents.

Higher level predictors will have a larger latency (delay between sensing and action).

In Kahneman’s terms, lower levels ‘think fast’ and higher levels ‘think slow’. Compensating this though, it may be that different agents have different learning rates. Higher levels may learn quicker than lower ones but will also ‘forget’ old behaviour as the environment changes.


Step 10: Minimizing surprise through action and perception

At this point, we can see how far this Reinforcement Learning technological practice is away from Friston’s Variational Free Energy (and its ‘minimizing surprise through action and perception’) theory. How do Reinforcement Learning rewards lead to the long-term minimization of surprise and maintain exploration rather than just have exploitation in order to avoid the ‘Dark Room Problem’.


Step 11: Beyond a simulation: Naïve hardware implementation

We then have some optional-extra steps. Firstly, we shift from a computer program, programmed in Python, to a hardware description, programmed in Verilog or VHDL to implement in an FPGA. Every neuron is implemented in a different bit of hardware. Every synapse has a separate piece of wire connecting those neurons. This is to make completely separate point about simulation versus ‘the real thing’:


  1. We want to avoid being a bio-chauvinist and so accept that a piece of electronic hardware that does what a biological neuron does (from observations of how both behave), and
  2. We will only be convinced by implementations in which there is a one-to-one mapping between a part of the implementation and a part of the brain, i.e. not computer simulations,

Then, it because more difficult to argue against the (at face value, ridiculous) notions that that FPGA hardware wasn’t just a little bit conscious (according to Giuglio Tonini’s Integrated Information Theory)!

(This would including the option of shifting from the biologically-representative Izhikevich neuron models to engineeringly-practical ‘leaky-integrate-and-fire’ models.)


Step 12: Computationally-efficient: Event-driven learning

Another optional-extra step, incompatible to above, is to make a simulation more computationally efficient by transforming the cycle-based simulation of this small demo example to an event-driven implementation to see how much faster (in computer execution time) it is.



The Hard and the Difficult

All this will be with just simple applications. A following post will set out a simple ‘Spikeworld’ in which an agent can move, searching for food and compensating for the presence of a predator. The agent needs to be able to adjust its behaviour as food availability changes. It would therefore be an agent displaying intelligent behaviour, within a biology-like environment. I can then say ‘I’ve done the heavy lift here, you just need to scale this up to human intelligence now!

This goal is of course naively ambitious and I am sure I will have to miss out a step or two along the way (and thus compromise the project) and steer the project through alternative paths (and thus learn something in the process). And don’t hold your breath.

I would expect that Chris Eliasmith’s ‘How to Build a Brain’ book (which I haven’t seen) would provide a more biologically accurate view of the brain. The freely-available ‘How to build a brain: From function to implementation’ paper probably gives a flavour of it. But most of us don’t have the math for it. Instead, my approach is to write a relatively small amount of code to be able to run something that demonstrates brain-like qualities. You only really understand something if you can reproduce it – in simulation if not in reality. And hopefully that will convey some insight into how the brain works!


Posted in Uncategorized | Tagged , , , , , , , , | 3 Comments

Spiky Logic

My previous post (‘Spiky Thoughts’) set out some thoughts about how an efficient simulation of a spiking neural network might be achieved. It advocated:

  1. Event-driven as opposed to cycle-based simulation.
  2. Using simple ‘leaky integrate and fire’ (LIF) models of neurons, as opposed to models that reflected actual biological neuron behaviour more accurately.
  3. Being trained through ‘spike time-dependent plasticity’ (STDP), as opposed to the normal methods of ‘back-propagation’.

I hinted at training a spiking network to be an XOR gate – for demonstration purposes. Here, I provide some code to implement a spiking net to be an XOR gate, but I ignore all three previous motivations!:

  1. it is cycle-based,
  2. it uses the Izkikevich model of a neuron, and
  3. it doesn’t use STDP training – in fact, it doesn’t do training as such at all).

Why? Because it is a starting point:

  1. to demonstrate that a tiny network can behave as an XOR gate.
  2. to provide a reference point to see just how much more efficient an event-driven and/or LIF model implementation can be.
  3. to provide a ‘half-trained’ set of weights to help tweak STDP learning (it is easier to debug something you know is working but can be improved).

Spiky Logic

The C code below is based on the open-source code by Felipe Galindo Sanchez (see the research paper here). It has been re-written for my understanding and there is a slight modification. His inputs are single spikes on the A and B inputs of the XOR gate, with these spikes timed against a reference signal. The time that spike is injected into the network identifies whether it is a logic 0 (aligned with the reference spike) or logic 1 (5ms later). But I use the distance between 2 spikes to encode a logic 0 or logic 1, 6ms for the former, 12ms for the latter.

Both schemes demonstrate the time-dependent nature of spiking neurons, in contrast with second-generation rate neurons. The firing rates of my inputs and outputs is 2 firings per epoch in all cases. Note: an epoch is the interval in which 1 calculation (inference) is performed. It is 30ms here.

The code includes a mechanism to adjust the input away from the rigid 6ms/12ms specification:

  • skewing the spikes between the XOR gate’s inputs A and B, and
  • modifying the distnace between input spikes away from the precise 6ms/12ms values.

The network does not perform well in this regard but making this more robust (such as by using a larger network) is not of interest here.

The Network

The network comprises 10 nodes:

  • nodes 0…2: these are 3 input nodes, fully-connected to…
  • nodes 3…8: these are 6 neurons in a hidden layer, fully-connected to…
  • node 9: this is the 1 output neuron.

Nodes 0 and 1 are the A and B inputs for the XOR circuit. Node 2 is a training input but is not used because…

The Training

As already noted, there is no training as such. There are just 2 inputs (4 input states) and with limited variations or input spike timing (skewing and stretching). If there are 3 possible variations of skew (B input synchronized with the A input, 1ms earlier or 1ms later), there are only 3 x 4 = 12 input combinations.

So we simulate 12 runs in turn where each run lasts for 30ms (each run is called an ‘epoch’; simulation time is sliced into these epochs with inputs applied at the start and the output response judged at the end of the epoch).

There are only 24 weights in the network: 3 x 6 between the 3 inputs and the 6 hidden neurons and another 6 from those hidden neurons to the 1 output neuron.

A ‘random search’ algorithm is performed, which is just a fancy way of saying that we randomly generate sets of weights, simulate using them and monitor how good the result was (with an ‘error measurement’) and keep hold of the conditions that produced the most accurate output response. This provides all the infrastructure for training, without doing anything more complicated in which one set of tests uses weights that are derived from a previous run that has proved to be good.

Here is the basic code for the infrastructure for injecting inputs, simulating a network and judging the response of the network:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Randomization
#define get_random_logic()      ((rand()<(RAND_MAX/2)) ? 1 : 0) // 50% either 0 or 1

// Reporting: how much gets printed to stdout
#define QUIET   0
#define VERBOSE 1

// Function prototypes
void inject_input_spikes(
    int node,           // The input in question
    int logic_value,    // Inject a 0 or 1?
    int step,           // Current simulation times step
    int offset,         // By how much the input spikes will be injected later/earlier
    int stretch,        // By how much the input spikes will be stretched apart/closer
    int reporting);     // Whether it will report details to stdout
void reset_neuron_states(void); // All nodes (inputs and neurons) to their equilibrium state
void update_neuron(
    int step,           // Current simulation times step
    int layer,          // Neuron layer: distinguish input/hidden/output layer
    int neuron,         // The neuron in question
    int from_synapse,   // Synapse connections are from all neurons from this node...
    int to_synapse);    // ... to this node, inclusive.
int score_output(
    int wanted_output); // Should the output be a 0 or 1?
void dump_flags(
    int step);          // Current simulation times step

// Success counters
#define INVLD   0
#define BAD     1
#define GOOD    2

// Output error measurement
// e.g. anything within 2 of the ideal answer is 'good'
// Squaring: the error in this case will be 4.
#define NOT_BAD      4
#define WORST_SCORE 25

// Network configuration
// Nodes:
//  0..1    Inputs A and B into XOR gate
//  2       Training neuron, set to A xor B
//  3..8    Hidden neurons
//  9       Output neuron
//  The code expects synapse numbers to be contiguous:
//  * Hidden layer uses synapses from 0..2
//  * Output layer uses synapses from 2..8
#define INPUTS_LAYER            0
#define HIDDEN_LAYER            1
#define OUTPUT_LAYER            2

#define NUM_INPUTS              2
#define NUM_LAYER1_NEURONS      6
#define NUM_LAYER2_NEURONS      1
#define NUM_NODES               (NUM_INPUTS + NUM_TRAINING_INPUTS + NUM_LAYER1_NEURONS + NUM_LAYER2_NEURONS)  // Inputs and neurons
#define OUTPUT_NODE             (NUM_NODES - 1)

// Each simulation epoch is simulated for this many time steps...
#define NUM_STEPS                30

// Variation of input spike times; 3 means -1...+1
#define DEV   0             // Maximum deviation from ideal
#define VAR   (2*DEV+1)     // Variation

// Global variables

// Outputs: values for spike_train_state
#define SPIKE_TRAIN_INIT           0
#define SPIKE_TRAIN_INVALID       -1
#define SPIKE_TRAIN_LOGIC0         6
#define SPIKE_TRAIN_LOGIC1        12
int spike_train_state[NUM_INPUTS+NUM_LAYER1_NEURONS+NUM_LAYER2_NEURONS]; // For determining output value from spike times
int spike_flags[NUM_INPUTS+NUM_LAYER1_NEURONS+NUM_LAYER2_NEURONS]; // Flags for node spikes (inputs and neurons)

// Main simulation

float run_xor_snn(
    int num_epochs, // Number of simulations (with different inputs) to run
    int teaching,   // Is this a teaching run (with modification of weights) or just a test?
    int reporting)  // Will lots of status be reported to stdout?
    // XOR function: the function to be learnt by the network
    int input_a, input_b, output_y;

    int neuron;
    int epoch;
    int step;
    int error;
    int cum_error; // Cumulative score over all epochs
    float score;
    int count[4];
    int input_skew; // for skewing inputs A and B w.r.t. one another
    int input_stretch; // for stretching width of inputs (shorter or longer)

    // No previous spikes; set the times to 'ages ago'
    for(neuron=0; neuron <= OUTPUT_NODE; neuron++) {
        spike_train_state[neuron] = SPIKE_TRAIN_INIT;
    // A record of progress...
    cum_error = 0; count[GOOD] = 0; count[BAD] = 0; count[INVLD] = 0;

    // Main simulation loop
    for(epoch=0; epoch < num_epochs; epoch++){
        if (epoch < ALL_COMBINATIONS) { // Systematic stimulus             // Going through all the combinations             // of input logic and timing variations             switch(epoch % 4) {                 case 0 : input_a  = 0; input_b  = 0; break;                 case 1 : input_a  = 0; input_b  = 1; break;                 case 2 : input_a  = 1; input_b  = 0; break;                 case 3 : input_a  = 1; input_b  = 1; break;             }             input_skew    = (DEV==0) ? 0 : ((epoch >> 2)%VAR) - DEV; // -DEV...+DEV
            input_stretch = 0;
        } else { // Randomized stimulus
            input_a       = get_random_logic();
            input_b       = get_random_logic();
            input_skew    = (DEV==0) ? 0 : (rand() %VAR) - DEV; // -DEV...+DEV
            input_stretch = (DEV==0) ? 0 : (rand() %VAR) - DEV; // -DEV...+DEV;
        output_y = input_a ^ input_b; // XOR: This is the correct result
        if (reporting==VERBOSE) printf("EPOCH %d STIM %d XOR %d\n", epoch, input_a, input_b, output_y);
        for(neuron=0; neuron <= OUTPUT_NODE; neuron++)
            spike_train_state[neuron] = SPIKE_TRAIN_INIT;
        for(step=0; step < NUM_STEPS; step++){
            //printf("STEP %d \n", step);
            for(neuron=0; neuron <= OUTPUT_NODE; neuron++)
                spike_flags[neuron] = 0; // Ensure all flags are clear

            /*********** Generate inputs ***********/
            inject_input_spikes(0, input_a, step,          0, input_stretch, reporting);
            inject_input_spikes(1, input_b, step, input_skew,             0, reporting); // Delay by -2 to +2
            if(teaching) inject_input_spikes(2, output_y, step, 0,        0, reporting);

            /*********** Forward update of network ***********/
            // [Fixed size!!!]
            for(neuron=0; neuron <= 2; neuron++) // Inputs
                update_neuron(step, 0, neuron, 0, 0);
            for(neuron=3; neuron <= 8; neuron++) // Hidden layer
                update_neuron(step, 1, neuron, 0, 2);
            for(neuron=9; neuron <= 9; neuron++) // Output layer
                update_neuron(step, 2, neuron, 2, 8);
            if (step == 0) {
            if (reporting==VERBOSE) dump_flags(step);
        /*********** Determine how good the outputs were ***********/
        error = score_output(output_y); // a high score is bad
        cum_error += error;
        if (error <= NOT_BAD) {
            count[GOOD] += 1;
            if (reporting==VERBOSE) printf("BADNESS good    wanted %d trainstate %d error %d cumulative %d\n", output_y, spike_train_state[OUTPUT_NODE], error, cum_error);
            //if (reporting==VERBOSE) printf("RESULT good    %d XOR %d shouldbe %d (now %d %d %d)\n", input_a, input_b, output_y, count[GOOD], count[BAD], count[INVLD]);
        } else if (error == WORST_SCORE) {
            count[INVLD] += 1;
            if (reporting==VERBOSE) printf("BADNESS invalid wanted %d trainstate %d error %d cumulative %d\n", output_y, spike_train_state[OUTPUT_NODE], error, cum_error);
            //if (reporting==VERBOSE) printf("RESULT invalid %d XOR %d shouldbe %d (now %d %d %d)\n", input_a, input_b, output_y, count[GOOD], count[BAD], count[INVLD]);
        } else {
            count[BAD] += 1;
            if (reporting==VERBOSE) printf("BADNESS bad     wanted %d trainstate %d error %d cumulative %d\n", output_y, spike_train_state[OUTPUT_NODE], error, cum_error);
            //if (reporting==VERBOSE) printf("RESULT bad     %d XOR %d shouldbe %d (now %d %d %d)\n", input_a, input_b, output_y, count[GOOD], count[BAD], count[INVLD]);
    // Worst possible error is WORST_SCORE*num_epochs
    // Make the score within a range of 0.0 (worst) to 1.0 (perfect)
    score = 1.0 - (float)cum_error / (float)(WORST_SCORE*num_epochs);
    if (reporting==VERBOSE) printf("GOODBADINV good %d bad %d invalid %d score=%.3f\n", count[GOOD], count[BAD], count[INVLD], score);
    return score; // Overall score of how big the errors were over all the simulation epochs
} // run_xor_snn

// To display the maps of spiking of all the neurons over the timesteps
void dump_flags(int step) {
    int neuron;
    printf("STEP %4d SPIKES ", step);
    for(neuron=0; neuron <= OUTPUT_NODE; neuron++)          if (spike_flags[neuron])             printf("1");         else             printf(".");     printf("\n"); } 

The scoring system for selecting the best set of weights is as follows:

  • If a logic 0 is the correct output and the network generates 2 spikes, 6ms apart, that is a perfect output and the error value is 0.
  • If they are 7ms or 9ms apart, the distance away from ideal is 1 and the error value is the square of this (1!).
  • Likewise, spikes 6ms or 10ms apart produce an error of 4, and so on up to a maximum error score of 25 for wider deviations (which is deemed to be ‘bad’).
  • The same scheme applies to logic 1 with the ideal separation on 12ms.
  • If there are not exactly 2 spikes, the output is deemed to be ‘invalid’ and given a maximum error score of 25.

When it is run it will report spike maps like this (1 xor 1 produces a correct 0) which show which neurons fire when (input node 0 is left-most, output neuron 9 is right-most; a 1 indicates the node is firing)…

STEP    0 SPIKES ..........
STEP    1 SPIKES ..........
STEP    2 SPIKES ..........
INSPIKE neuron 0 start  step 3
INSPIKE neuron 1 start  step 3
STEP    3 SPIKES 11........
STEP    4 SPIKES ..........
STEP    5 SPIKES ...11...1.
STEP    6 SPIKES ..........
STEP    7 SPIKES ..........
STEP    8 SPIKES ...1....1.
STEP    9 SPIKES ....1.....
STEP   10 SPIKES .........1
STEP   11 SPIKES ..........
STEP   12 SPIKES ...1......
STEP   13 SPIKES ........1.
STEP   14 SPIKES ..........
INSPIKE neuron 0 logic1 step 15
INSPIKE neuron 1 logic1 step 15
STEP   15 SPIKES 11..1.....
STEP   16 SPIKES ...1.....1
STEP   17 SPIKES ........1.
STEP   18 SPIKES ....1.....
STEP   19 SPIKES ...1......
STEP   20 SPIKES ..........
STEP   21 SPIKES ........1.
STEP   22 SPIKES ...11.....
STEP   23 SPIKES ..........
STEP   24 SPIKES ..........
STEP   25 SPIKES ..........
STEP   26 SPIKES ...1......
STEP   27 SPIKES ..........
STEP   28 SPIKES ..........
STEP   29 SPIKES ..........
OUTPUT good    wanted 0 trainstate 106 error 0 cumulative 1
GOODBADINV good 4 bad 0 invalid 0 score=0.990

This shows the last of 4 runs (epochs) which produced a perfect output (error=0). All 4 runs produced good outputs but one of them, had the timing off by 1ms.


The Neuron

Eugene Izhikevich’s model of the neuron (IEEE Transactions on Neural Networks, vol. 14 no. 6, November 2003) will be used instead of the leaky integrate-and-fire model. The model is expressed as differential equations with 2 variables (u and v) and 4 parameters (a, b, c and d) and shown in the figure below. The variable v represents the membrane potential – the ‘output voltage’ which spikes. Note, in case you are unfamiliar with the notation: v’ represents the gradient dv/dt and u’ represents du/dt. But you don’t need to worry about the math – just see the ‘Izhikevich equations’ part of the code below.


Figure credit: IEEE

In Galindo Sanchez’s C code, the parameters

  • a=0.02, b=0.2, c=-65mV, d=8

are used for excitatory neurons and

  • a=0.10, b=0.2, c=-65mV, d=2

are used for inhibitory neurons.

Thus, according to Izhkevich’s classification, we are using Regular Spiking(RS) excitatory and Fast Spiking (FS) inhibitory neurons.

 // Model time step #define HALF_MILLISECOND    0.5 #define MILLISECOND         1.0 //Decay of synapses: #define TAU_S               10.0    // Time constant (ms) #define S_DECAY_FACTOR      (1.0 -(MILLISECOND / TAU_S)) #define EXCITATORY_SYNAPSE_POTENTIAL      0.0 // mV Excitatory synapse potential #define INHIBITORY_SYNAPSE_POTENTIAL    -85.0 // mV Inhibitory synapse potential // Inhibitory / excitatory neurons #define NUM_INHIBITORY 2 int neuron_is_inhibitory(int neuron) {     // Only the first NUM_INHIBITORY neurons in the hidden layer are inhibitory     if ((neuron >= FIRST_HIDDEN_NODE)&&(neuron < FIRST_HIDDEN_NODE+NUM_INHIBITORY)) return 1;     else return 0; } // function prototype, for spikes generated either at inputs or by neurons: void generate_spike(int neuron, int step); // Store for all nodes; many values in these arrays will not be used // Only use from NUM_INPUTS onwards float syn_s[NUM_NODES];  float syn_weights[NUM_NODES][MAX_NUM_SYNAPSES]; float izh_u[NUM_NODES]; // Izhikevich model 'u' state float izh_v[NUM_NODES]; // Izhikevich model 'v' state void update_neuron(int step, int layer, int neuron, int from_synapse, int to_synapse) {     /************* Update synaptic inputs *****************/     int synapse;     syn_s[neuron] *= S_DECAY_FACTOR;     if (izh_v[neuron] >= 35.0) { // firing input (t-1)
        syn_s[neuron] += 1.0; // A neuron spiking will create a decaying post-synaptic potential
    } else if ((layer==INPUTS_LAYER) && (spike_flags[neuron] == 1)) { // synaptic input
        syn_s[neuron] += 1.0; // Likewise, create a decaying post-synaptic potential
    /************* Update synaptic conductances *****************/
    // sum of weights
    float sum_g_excit = 0.0;
    float sum_g_inhib = 0.0;
    // Perform sum of synaptic conductances per neuron
    if (layer > INPUTS_LAYER) {
        for (synapse = from_synapse; synapse <= to_synapse; synapse++) {             if (neuron_is_inhibitory(synapse))                 sum_g_inhib += syn_weights[neuron][synapse] * syn_s[synapse];             else                 sum_g_excit += syn_weights[neuron][synapse] * syn_s[synapse];         }     }     /************* Izhikevich equations *****************/     float dv, du; // deltas: dv/dt and du/dt     float izh_I;     int iteration;     if (layer==INPUTS_LAYER) {         // Not used (setting to equilibrium point just for information only)         izh_v[neuron]  = -70.0;          izh_u[neuron]  = -14.0;     } else if (izh_v[neuron] >= 35.0) { // Firing; parameter c=-65mV
        izh_v[neuron]  = -65.0; // Reset (refractory period); parameter c=-65mV
        izh_u[neuron] += neuron_is_inhibitory(neuron) ? 2.0 : 8.0; // ms; parameter d
        generate_spike(neuron, step);
    } else { // not firing
        izh_I = (sum_g_excit * (EXCITATORY_SYNAPSE_POTENTIAL - izh_v[neuron]))
              + (sum_g_inhib * (INHIBITORY_SYNAPSE_POTENTIAL - izh_v[neuron]));

        for(iteration=1; iteration<=2; iteration++) { // Two 0.5 ms steps             // v' = 0.04v^2 + 5v + 140 - u + I    (1)             dv = (((0.04 * izh_v[neuron]) + 5.0) * izh_v[neuron]) + 140.0 - izh_u[neuron] + izh_I;             // u' = a(bv - u)  (2)             if(neuron_is_inhibitory(neuron)) {                  du = 0.1  * ((0.2 * izh_v[neuron]) - izh_u[neuron]); // parameters a and b             } else {                  du = 0.02 * ((0.2 * izh_v[neuron]) - izh_u[neuron]); // parameters a=0.02; b=0.2             }             izh_v[neuron] += (dv * (HALF_MILLISECOND));             izh_u[neuron] += (du * (HALF_MILLISECOND));         }         if(izh_v[neuron] > 35.0) { // Saturate
            izh_v[neuron] = 35.0;

// Force all neurons to their equilibrium state
void reset_neuron_states(void) {
    int neuron;
    for(neuron=0; neuron <= OUTPUT_NODE; neuron++) {
        izh_u[neuron] = -14.0; izh_v[neuron] = -70.0; syn_s[neuron] = 0.0;

The spike_flags[n] indicates whether node n has fired and is used for printing out spike train maps for visualization and, here, for handling input spikes (as opposed to spikes from other neurons).

It is the synaptic current (izh_I) that feeds into the Izhikevich-model. This is the (exponentially decaying) sum of the currents originating from synaptic firing from all the neuron’s synapses. If we are bothered about units, we are generating a current (I) from voltages. The ‘g’ in the sum_g_excit and sum_g_inhib variables is the standard notation for conductance which is the reciprocal of electrical resistance (there is the well-known equation V=IR and its lesser-known opposite equation  I=gV). But basically, we are just calculating a weighted sum of the inputs to produce a ‘postsynaptic potential’ (‘potential’ = voltage) that controls the (Izhikevich-modelled) firing of the neuron (it fires when excitatory firings push the membrane voltage v up above 30mV).

The weights are stored in the 10 x 10 array syn_weights, but it is only the 3 x 6 input-to-hidden-layer connection values and 6 x 1 hidden-to-output-layer connection values that are used.

Inputs and Outputs

Inputting spikes into the network is a straightforward setting of flags but,
in generating spikes, we maintain a ‘spike_train_state’ so that we can score the output of the network in order to optimize weight settings.

// Inputs
#define START_TIME                3  // Just after resetting everything (but allow for -2 input_skew)
#define INPUT0_TIME               9  // Separation of 6
#define INPUT1_TIME              15  // Separation of 12

void generate_spike(int neuron, int step) {
    // Put information into the various data structures
    spike_flags[neuron] = 1;
    // Sequence of spike_train_state values:
    // 0. Initially 100 (no spikes can be generated at this time)
    // 1. Then set to time of 1st spike (range 1...99)
    // 2. Then set to the delta between 1st and 2nd spikes plus 100.
    // 3. If more than 2 spikes, set invalid
    if      (spike_train_state[neuron] == SPIKE_TRAIN_INIT ) // First spike
            {spike_train_state[neuron] = step; } // Time of 1st spike
    else if (spike_train_state[neuron] <= NUM_STEPS ) // Second spike
            { spike_train_state[neuron] = SPIKE_TRAIN_DELTA_OFFSET + step - spike_train_state[neuron]; } // Delta
    else    { spike_train_state[neuron] = SPIKE_TRAIN_INVALID; }

void inject_input_spikes(int node, int logic_value, int step, int offset, int stretch, int reporting) {
    if (step==START_TIME + offset) {
        generate_spike(node, step);
        if(reporting==VERBOSE){printf("INSPIKE node %d start  step %d\n", node, step);}
    if ((step==(INPUT0_TIME + offset + stretch))&&(logic_value == 0)) {
        generate_spike(node, step);
        if(reporting==VERBOSE){printf("INSPIKE node %d logic0 step %d\n", node, step);}
    if ((step==(INPUT1_TIME + offset + stretch))&&(logic_value == 1)) {
        generate_spike(node, step);
        if(reporting==VERBOSE){printf("INSPIKE node %d logic1 step %d\n", node, step);}

int score_output(int wanted_output) {
    // To judge success
    int diff;
    int result;
    if (spike_train_state[OUTPUT_NODE] < SPIKE_TRAIN_DELTA_OFFSET) { // Not exactly 2 spikes         result = WORST_SCORE;      } else if   (wanted_output == 1) { // error = difference squared         diff = (spike_train_state[OUTPUT_NODE] - SPIKE_TRAIN_DELTA_OFFSET - SPIKE_TRAIN_LOGIC1);         result = diff * diff;     } else { // (wanted_output = 0) // error = difference squared          diff = (spike_train_state[OUTPUT_NODE] - SPIKE_TRAIN_DELTA_OFFSET - SPIKE_TRAIN_LOGIC0);          result = diff * diff;     }     if (result > WORST_SCORE) { result = WORST_SCORE; }
    //printf("OUTPUT wanted %d trainstate %d error %d\n", wanted_output, spike_train_state[OUTPUT_NODE], result);
    return result;

The Main Program

The run_xor_snn function, above, simulates the network with all the input combinations and provides a score on how well the network has performed. The main program calls this function over and over again (for NUM_TRIALS trials) with different (randomized) set of weights each time, keeping note of the best set of weights it has found and then re-run that best set at the end with verbose reporting. (For a large number of trials, the output will be gigabytes if the verbosity is not set to QUIET before this at the end.)

There is some coding in place in preparation for training but that will need to be developed a little bit further.

#define NUM_TRIALS  10000000
#define TEST         0
#define LEARN         1
#define TEACH         1

// Function prototypes
void fix_training_weights(float weight); // Set all the weights from TRAINING_INPUT_NODE to this 1 value
void clear_weights(void);
void randomize_weights(float scaling, int from_neur, int to_neur, int from_syn, int to_syn);
// e.g. randomize_weights(1.0, 3, 8, 0, 2) operates on all weights connecting input nodes 0..2 to neurons 3...8.
// Simlarly for reporting...
void dump_weights(float weights[NUM_NODES][MAX_NUM_SYNAPSES], int from_neur, int to_neur, int from_syn, int to_syn);
void copy_weights(float from[NUM_NODES][MAX_NUM_SYNAPSES], float to[NUM_NODES][MAX_NUM_SYNAPSES]);

void main(void) {
    int trial, verbosity, learning;
    float best_syn_weights[NUM_NODES][MAX_NUM_SYNAPSES];

    verbosity = QUIET; //verbosity = either QUIET or VERBOSE
    learning  = TEST; //learning = TEACH or TEST;
    srand(1); // seed
    float this_score, best_score;
    int best_trial = -1;
    best_score = 0.0; // Worst is the output of every trial being invalid
    for(trial=0; (trial<NUM_TRIALS) && (best_score < 1.0); trial++) {         if ((trial%1000)==0) printf("TRIALNOW %d bestscore %f besttrial %d\n", trial, best_score, best_trial);         if (verbosity==VERBOSE) printf("TRIAL %d\n", trial);         clear_weights();         randomize_weights(1.0, 3, 8, 0, 2); // Hidden layer         randomize_weights(1.0, 9, 9, 2, 8); // Output layer         if(learning) {             fix_training_weights(1.0);             this_score = run_xor_snn(100, learning, verbosity);         } else {             fix_training_weights(0.0);             this_score = run_xor_snn(ALL_COMBINATIONS, learning, verbosity || (trial == 18));         }         if (verbosity==VERBOSE) dump_weights(syn_weights, 3, 8, 0, 2); // Hidden layer &syn_weights,          if (verbosity==VERBOSE) dump_weights(syn_weights, 9, 9, 2, 8); // Output layer &syn_weights,          if (this_score >= best_score) {
            best_score = this_score;
            best_trial = trial;
            printf("BESTSOFAR %f trial %d\n", best_score, best_trial);
            dump_weights(syn_weights, 3, 8, 0, 2); // Hidden layer &syn_weights,
            dump_weights(syn_weights, 9, 9, 2, 8); // Output layer &syn_weights,
            copy_weights(syn_weights, best_syn_weights); // Store for reference later
            this_score = run_xor_snn(ALL_COMBINATIONS, TEST, VERBOSE); // test for all 4 input combinations and all VAR skews
    printf("VERIFYBESTSCORE %f trial %d\n", best_score, best_trial);
    copy_weights(best_syn_weights, syn_weights);
    dump_weights(syn_weights, 3, 8, 0, 2); // Hidden layer &syn_weights,
    dump_weights(syn_weights, 9, 9, 2, 8); // Output layer &syn_weights,
    this_score = run_xor_snn(ALL_COMBINATIONS, TEST, VERBOSE); // test for all 4 input combinations and all 5 skews

And finally

And finally, below are the innards of the functions used above that have not yet been defined. They all handle weights.

void clear_weights(void) {
    int neuron, synapse;
    for(neuron=0; neuron < NUM_NODES; neuron++) {
        for(synapse=0; synapse < MAX_NUM_SYNAPSES; synapse++) {
            syn_weights[neuron][synapse] = 0.0;

#define get_random_weight()     (2.0*rand()/RAND_MAX-1.0) // Float between -1.0 and +1.0
void randomize_weights(float scaling, int from_neur, int to_neur, int from_syn, int to_syn) {
    // Adds a scaled random amount to all weights.
    // Use to set weights initially after a clear
    // or to locally-disturb good weights during simulated annealing
    int neuron, synapse;
    for(neuron=from_neur; neuron <= to_neur; neuron++) {
        for(synapse=from_syn; synapse <= to_syn; synapse++) {
            syn_weights[neuron][synapse] += scaling * get_random_weight();

void fix_training_weights(float weight) {
    // STDP may update these but we want to fix them to control training
    int neuron;
    for(neuron=0; neuron < NUM_NODES; neuron++) {
        syn_weights[neuron][TRAINING_INPUT_NODE] = weight;

// For saving and restoring good sets of weights and potentially more...
void copy_weights(float from[NUM_NODES][MAX_NUM_SYNAPSES], float to[NUM_NODES][MAX_NUM_SYNAPSES]) {
    int neuron, synapse;
    for(neuron=0; neuron < NUM_NODES; neuron++) {
        for(synapse=0; synapse < MAX_NUM_SYNAPSES; synapse++) {
            to[neuron][synapse] = from[neuron][synapse];

void dump_weights(float weights[NUM_NODES][MAX_NUM_SYNAPSES], int from_neur, int to_neur, int from_syn, int to_syn) {
    int neuron, synapse;
    // STDP may update these but we want to fix them to control training
    for(neuron=from_neur; neuron <= to_neur; neuron++) {
        for(synapse=from_syn; synapse <= to_syn; synapse++) {
            printf("WEIGHT w[%d][%d] = %6.3f ;\n", neuron, synapse, weights[neuron][synapse]);

Next time: We are now ready to add supervised learning to the code, to use STDP to train networks rather than performing a blind random search.

Posted in Uncategorized | Tagged , , , , , , | 5 Comments

Spiky Thoughts

Now here’s a techy post that might appeal to your Dr Frankenstein side. These are the early fumblings towards building a brain, albeit one of very small intelligence (and without any means of walking out of the lab). It is for personal interest but might lead towards something that would be a good, alternative teaching introduction to computational neuroscience and/or neuromorphic engineering. This is because it starts with ‘third generation’ (‘neuromorphic’, spiking) neural networks rather than the classical, currently dominant ‘second generation’ of bio-inspired networks (deep learning, convolutional neural networks). The aim is to have neurons that behave much more like the (spiking) way that real neurons behave and learning more like they learn (using ‘spike timing dependent plasticity’ rather than ‘back-propagation’).

I want to ditch the mathematics (of ‘back-propagation’, ‘stochastic gradient descent’ and machine learning optimizations) and the highly-abstracted programming environments to get down to something as simple as possible that closely resembles the behaviour of the biology, where we can get some intuition of the underlying complexity of spiking neural networks.

These are the rambling thoughts of a novice – so there are sure to be errors within. ‘A little knowledge is a dangerous thing.’ But hopefully it is useful for some to get a low-level understanding.

This is different from the normal introductory approach of grabbing some pre-prepared data, training a network that is described in just a few lines of Python, and running it to do something impressive. Here, what the resulting design for a spiking neural net might be able to do is not relevant. Maybe just being able to train it to be an XOR gate is enough for me for starters.

Spiking Neural Networks

A ‘second generation’ artificial neural network consists of many nodes (neurons) connected by synapses. Each synapse has a ‘weight’ number indicating the strength of connection between the two nodes. Each neuron has an output value at any instant. A neuron is updated by producing a sum of the products of the synapse weights and the neuron output values of all the driving neurons and assing this sum through a non-linear function such as a sigmoid function.

The output values of the artificial neurons are analogous to the firing rates of the outputs of real neurons – how many times a neuron outputs a spike, per second. The artificial neurons are rate neurons.

In a biological neuron, a firing of a neuron A may lead to signalling crossing a synapse to neuron B where it will increase the membrane voltage within the neuron (actually, it will make it less negative rather than more positive and this is assuming it is an excitatory rather than inhibitory neuron). Over time, the membrane voltage will return to equilibrium. But if there are enough firings from the various synapses of that neuron in a short enough period of time, it will push the voltage over a threshold which will cause the neuron to fire: an ‘action potential’ will propagate down the neuron’s axon to synapses that connect to other neurons.


Leaky integration of spike trains (Credit: Science Direct)

The artificial neurons in a ‘third generation’ (spiking) neural network (SNN) is much more like the biological neuron than rate neurons are. They model a membrane voltage that varies in time and responds to input (post-synaptic) spikes, and will generate output firings (spikes) when the membrane exceeds a threshold. Their outputs are therefore ‘spike trains’ (timed sequences of spikes) just like with real neurons.

The Leaky Integrate-and-Fire Neuron

Leaky integrate and fire (LIF) neuron model is one of the simplest neuron models. Its behaviour is as follows:

  • It models the neuron membrane voltage which sits at equilibrium at -75mV.
  • At other voltages, it will exponentially decay towards this voltage, whether from lower or higher voltages.
  • A spike from a pre-synaptic neuron will instantaneously increase the voltage in proportion to the strength (weight) of the synapse, if excitatory, or decrease the voltage in proportion to the strength of the synapse if inhibitory.
  • If the voltage ever exceeds -50mV, the neuron will fire, triggering a spike at its output. Its voltage is reset to -100mV at this point.

This last item is a bit different here from the normal LIF neuron: the refractory period (in which crossings of the threshold shortly afterwards will not trigger further action potential spikes) is not explicitly modelled with a time parameter. Instead, the voltage will recover to equilibrium over time determined by the exponential time constant. Immediately after a spike, no further synaptic spike will be able to trigger a neuron spike because all weights will be substantially less than 50mV equivalent excitatory. This results in an absolute refractory period. When equilibrium is nearly restored, synaptic spikes (or more likely, simultaneously-occurring spikes) will be able to trigger a neuron spike. There is therefore a relative refractory period.


Leaky Integrate and Fire neuron with refractory response (Credit: Science Direct)

This model is algorithmic rather than determined by differential equations, which is more normal for neuron models.

Implementation = Simulation

An implementation of a spiking neural network is the same thing as creating a simulator  and running that. There are 3 basic forms of science/engineering simulation:

  1. Cycle-based: time is broken down into regular discrete time steps and every section of the simulation space is re-calculated for this timestep.
  2. Event-driven simulation: Only update a sub-section of the simulation when an input to that sub-section changes.
  3. Continuous simulation: typically using differential equations.

Where things don’t change much from one timestep to the next, cycle-based simulation will be inefficient. Rate-based (‘second generation’) neural networks are typically presented with very different data from cycle to cycle (e.g. a different picture) and so are cycle-based.

Simulating spiking neurons this way would be very inefficient. It takes many timesteps to present a value (encoded within the spike train) to the network. It would be vastly slower than an equivalent rate-based network.

Neuron dynamics are generally described with differential equations (for example, the Izhikevich model) and this would lend itself to continuous simulation – but this approach is much slower still and is to be used for accuracy – in neuroscience rather than neuromorphic engineering.

Action potentials are spike events. An implementation of a spiking network should be event-driven – we only perform neuron updates when there are spikes on its synapses. It is hoped that this will make spike-based networks more efficient (in terms of computation and hence also energy) than rate-based neurons.

Spike Time-Dependent Plasticity

According to the well-known Hebbian saying:

‘Cells that fire together wire together’

The learning (adjustment of weights) in spiking neural networks is much closer to this than rate-neuron learning is.

If a synaptic spike causes the neuron to spike (the synaptic spike precedes the neuronal spike), a weight will be strengthened. The shorter the time difference, the larger the effect. This is shown in the figure below. This will be modelled as an exponential relationship.

Conversely, if a synaptic spike follows closely behind a neuronal spike), the weight will be weakened.  – also with an The shorter the time difference, the larger the effect. This is shown in the figure below. This will be modelled as an exponential relationship.

Credit: Jneurosci

Simulating a Timestep.

An array of flags is maintained – one per neuron plus one per input – to indicate whether a spike event has occurred for the current timestep. At the start of a timestep, spike event flags will have been set up by whatever is driving the simulation.

For each timestep, the following tasks will be performed:

  1. Spike Propagation and Synapse Depression: For each of the inputs to the network in which the respective event flag is set, find out which nodes (neurons) the current node is connected to via synapses and update these in turn. The updating of these neurons may cause then to spike (and their event flags to be set) which will recursively trigger further neurons to be updated, ultimately through to the outputs. Propagating spikes through the network may also result in some synapses being weakened.
  2. Synapse Potentiation: For each of the neurons in which the respective spike event flag is set, find out which neurons are at its synaptic inputs and possibly strengthen those synapses. Clearing the event flag for a spiking neuron will result in all the neurons having cleared flags ready for the next timestep.
  3. Move to the next timestep: wait whilst whatever is driving the simulation to set the flags of the spiking inputs appropriately. When given the OK, increment the timestep counter and repeat the tasks.

Updating a Neuron

  1. If the neuron’s spike time is the same as the current time, the neuron has already spiked as a result of an alternative update path through the network so there is no need to do anything more. (Checking the neuron’s event flag will also have been set.)
  2. If the neuron’s update time is the same as the current time, the neuron has already been visited on this timestep but there was no resulting spike. Otherwise, the neuron’s membrane voltage needs to be updated, based on the time now and its last-recorded update time and voltage (see elsewhere: ‘Event-Driven Exponentials’). The neuron’s update time will be set to the current time as part of this update.
  3. If the synapse is inhibitory, the voltage needs to be reduced by the synapse weight value (there may be a global scalar factor applied to the weight before this adjustment). The voltage cannot go below -100mV.
  4. If the synapse is excitatory, the voltage needs to be increased by the synapse weight value (again, there may be a global scalar factor applied to the weight before this adjustment).
  5. If the voltage exceeds the threshold (-50mV), a spike will be triggered (see the ‘Neuron Spiking’ below). Otherwise, the following needs to be performed…
  6. If a synaptic spike occurs recently after a neuron has spike, then the synapse strength needs to be reduced (see ‘Spike Time-Dependent Plasticity’). The check for this is if the neuron’s spike time is less than 50ms (the window duration) prior to the current timestep.

For the recursive updating, a stack will need to be maintained. The neuron’s ID and the output connection number will need to be put onto this stack to achieve this.

Neuron Spiking

When a neuron spikes:

  1. The neuron’s event flag is set.
  2. The membrane voltage is set to -100mV, putting the neuron into the refractory state.
  3. All the neurons that are driven by this neuron then need to be updated (the ‘Update Neuron’ sequence above, recursively) in turn.

Synapse Potentiation

The synapse that caused a neuron to fire will need to have its strength increased. But there will be other synapses that will need to be strengthened too, if they have occurred within the last 50ms (the window duration).

Synapses firing after a neuron fires (‘Long Term Depression’) can be handled as part of the normal spike propagation through the network. But for ‘Long Term Potentiation’ (strengthening weights), at the time a synapse fires, we don’t know whether the neuron will be triggered soon – simulation time hasn’t got that far yet.

Instead, we have to look back at all the inputs of a neuron that has just spiked and see if any of the driving neurons spiked within the last 50ms. If they do, the synapses need to be strengthened to an extent determined by the how long ago the driving neuron spiked.

This is done in a separate phase, after spike propagation. It is done this way because it is possible for more than one neuron’s synapse to spike at same timestep that the neuron spikes. By recording which neurons have spiked and doing the updates after spike propagation, we ensure the updates are not done twice.


The basic mechanism for second-generation (rate-neuron) neural nets to learn (or rather, to be taught through training) is through back-propagation: propagating an error (mismatch between what the network produced at the output and what is desired) back through the network, adjusting weights proportionately. Over time, it is hoped that this error adjustment leads to more optimum weight configurations, through a process called ‘stochastic gradient descent’. This is all very intensive computationally. It is also best to learn in batches and this is a significant overhead on memory.

Hence, second-generation neural nets are predominantly used just for inference within their application environment, after having been trained (given ‘supervised learning’) in a more computationally-rich environment. They do not learn ‘out in the field’.

In contrast, spiking neural nets learn by STDP (spike timing-dependent plasticity): when a synapse firing causes the neuron’s potential to exceed the critical threshold and hence to fire, its weight is adjusted – exponentially according to how close the timing difference was. This is very much in accordance with the Hebbian learning concept that ‘neurons that fire together, wire together’. The neurons adjust their weights locally. This is not so computationally intensive and doesn’t need to be batched.

Hence, third-generation neural nets are predisposed towards ‘unsupervised learning’, amenable to learning ‘out in the field’ (although, is this good learning?).

Doing supervised learning with SNNs is not so straightforward. (One method is to train a second-generation network that has the same topology and then transfer the weights to the SNN!) In “A new biologically plausible supervised learning method for spiking neurons”, Taherkhani et al present a method of supervised learning for SNNs as follows:

  • Neurons throughout the network have extra inputs (training inputs).
  • During supervised training, the desired outputs are set on these training inputs.
  • The weights between these training inputs and the neurons being trained are very strong (compared with the initially-random normal synaptic connection weights) and are not modified through STDP.
  • Gradually over time, the neurons will learn to behave such that the network’s outputs follow the training inputs. (When the firing of training neurons triggers neuronal spikes, normal inputs to the neurons that fired around the same time will have their weights adjusted.)
  • After training, inference can proceed with the training inputs left inactive.

Presumably, the strength of the training inputs could be reduced gradually so that the network would gradually shift over from ‘supervised’ to ‘unsupervised’ operation. This is in contrast to the stark training/inference dichotomy with second-generation networks.

(Second-generation networks: output that compute something like y = sigmoid(x . w + b) where x . w is the scalar product on the input vector with the weights vector, which produces a sum of products. And b is the bias. For the SNNs, it is like putting the training information onto the biases of neurons. Neuro-biologically, perhaps this model adjustment is similar to it is the effect of neuro-modulators (such as serotonin / dopamine) which have a widespread influence on brain behaviour, connected with emotions?)

One enhancement of theirs, (with some biological justification) is for STDP to increase small weights much more than stronger weights.

In what follows, I will assume that any supervised learning of SNNs employs this method.

Number Representation

The 3 main quantities that need to be stored for spiking neurons are:

  • Membrane voltages: range from -100mV to 65mV in biology
  • Synapse weights: unsigned
  • Spike times: unsigned integers

It should be possible to use 16-bit integer values (‘int16’) for both weight values and membrane voltages. Floating point types are generally used for neural networks because the compute platforms have the necessary hardware already. Memory is the issue here and the IEEE 754-2008 standard defines a 16-bit Half-precision floating-point format ‘float16’ which is obviously no worse than ‘int16’ for storage. Spike neurons will be event-driven and have no need to calculate large sum-of-products. We can ensure there is no overflow of quantities. And float16 only has a 10-bit mantissa so unsigned int16 (16-bit mantissa) is preferable for better precision.

Membrane voltages

For membrane voltages, any unsigned integer range can represent this, e.g. 0= ‘-100mV’and 65535= ‘-65mV’. The spike threshold (-50mV) and resting potential (-70mV) constants can be set accordingly. But voltage values above the threshold are not relevant so if we use 0= ‘-100mV’and 32767= ‘-50mV’ (half full scale is 50mV) then the sensitivity increases from 397mV-1 to 655mV-1, the most significant bit indicates ‘over threshold / spike’ which is convenient for visualization as unsigned and the number can be used interchangeably as signed or unsigned.

Inhibitory spikes can push the voltage below ‘-100mV’, but it should saturated here. Excitatory spikes can push the threshold above ‘-50mV’ but will be much, much less than the 50mV half full scale so there is no danger of overflow.

Spike Times

The time step is typically 1ms. Let us say there is a time window of +/-50ms by which I mean that a synaptic spike will have decayed to the resting potential (to the accuracy of 1 LSB) by 50ms, hence there is no point in calculating exponentials (whether for the membrane voltage or for STDP weight adjustments) if outside this period.

Spike times can be stored as 16-bit integers. Time will then roll over every 65.536 seconds. So if t=0.004 and a previous spike has a timestamp of 0.001 than we don’t know whether the spike occurred 0.003s ago (hence we need to adjust a weight) or 65.539s ago (in which case, we don’t). We could do a ‘garbage collection’ of sorts every 65.486s to set the time of every spike event older than 50ms to be 50ms ago. This would then keep us going OK for another 65.486s. This is an unwelcome overhead.

Synaptic Weights

Having calculated the new potential at a particular event time, we can then include the effect of that event…

When a neuron x fires, the downstream neuron y needs to be updated. Its voltage needs to be updated according to the strength of the weight.

We can make it easy by saying that the strength of the weight is measured in terms of the change in voltage of the downstream neuron. So we just have to add (for an excitatory neuron) or subtract (for an inhibitory neuron) the weight value to the voltage. The weights will be considerably less than 50mV (difference between the minimum -100mV and maximum=threshold -50mV). Weights can be unsigned 16-bit quantities for maximum sensitivity (better than 1310mV-1) for weight adjustment. It may be that the membrane voltage is adjusted by a half, quarter or eighth of the weight value (and then exponentially decayed). An exception is to have larger values for ‘training weights’ – synapses for which the pre-synaptic neuron is a training neuron can have it so that the weight is not scaled. In this case, a weight could then be large enough to force a spike on its own.


Some definitions of terms for what follows:

  • A network comprises groups of nodes connected together by matrices of synapses.
  • A node may be either an input or a neuron (outputs are at neurons).

For each group of neurons, we shall specify:

  • n_neurons: The number of neurons in the group.
  • n_type: Whether the group comprises inputs or neurons.


For each neuron, we shall specify:

  • event: flag to indicate the neuron has changed at this time step.
  • volt: voltage
  • tvolt: time of last change of potential
  • tspike: time of last spike

All these values can be 16 bits, apart from the 1-bit flag.

For input nodes, we only need event and tspike.

Matrix Connectivity

Typical second-generation networks will have the following types of connectivity:

  • Fully-connected
  • Convolution
  • Pooling

And it will support 1-, 2- or 3-dimensional objects.

For SNNs, neurons are often arranged randomly connected. I want to keep things simple, with a minimal amount of memory required to configure connections, so only ‘random’ matrices will be supported, of variable sparsity. Fully-connected is a special case of ‘random’ in which there are no connections randomly removed. And there is no concept of multi-dimensional objects.

Weights are one of two types:

  • per_syn: e.g. 128 weights for a matrix of from 16 nodes to 8 nodes, one for every synapse.
  • per_from: e.g. 16 weights for a matrix of from 16 nodes to 8 nodes.

The per_from format is useful for training inputs.

Instead of storing information about which specific neuron is connected to another, I want an algorithm to do this for us. This will free memory up to be available as synapses.

Consider a connection set from a group of 32 neurons to a group of 16. Fully-connected, each postsynaptic neuron would have 32 synapses and each presynaptic neuron would have 16 synapses. There would be a total of 512 synapses. If we want to have random sparse connectivity then we want to be sure that all neurons are still left with a least 2 synapses (to be useful). We do this by having a fixed number of synapses per neuron. A sparsity of 1/8 will mean there are 64 synapses in total: 32/8=4 per postsynaptic neuron and 16/8=2 per postsynaptic neuron. We need a function f_sparse(sparsity_index, layer, n_pre, n_post) that, given the ordinal number of the pre- and post-synaptic neurons potentially connected together, will return a true 1/8th of the time to say that there actually is a connection here. The sparsity index in this case with be 3 because 2-3=1/8. In order for the connectivity to be different for different sparse matrices in the overall network, a seed also needs to be given to each of these functions, unique to the connection set in question. The group number is used for this (whether directly or as a seed): f_seed(connection_set_number).

We also need a function f_unate(unateness_index, n_pre, n_post, seed) to indicate whether that synapse is excitatory or inhibitory. A unateness index of 3 means that 2-3=1/8 of the neurons that are present are inhibitory (0 means all are; the largest possible number means none are).

The definition of f_seed, index, f_sparsity, f_unate is not considered here.

So for any connection set, we need to specify:

  • n_pre: The pre-synaptic group identifier (number),
  • n_post: The post-synaptic group identifier (number),
  • seed: for randomization.
  • sparsity_index: How sparse the matrix is.
  • unate_index: To determine whether the connection is excitatory or inhibitory.


How much memory is required for network structures? I am not concerned with precise details here. This is just to give a general idea. Below is an example network. Whether this is a realistic network is not the point.

The network has 9 groups of nodes (labelled ‘A’ to ‘J’), including 3 input groups, 2 groups for supervised learning.


A group can either be a collection of neurons or a collection of inputs. With this fixed memory configuration, each group can connect to upto 4 other groups. Normally, neuron groups will just have 1 input and 1 output connection and input groups will just have 1 output connection.

The numbers 0…54 below refer to the word address in memory. Pointers refer to word addresses in memory.

groups = array([
[ 0  , { num_groups  :  9  }] ,
[ 1  , { ntype       :  inputs , num_nodes : 128  }] , # Group 'A'
[ 2  , { neuron_ptr  :  92  }] ,
[ 3  , { conn1_ptr   :    56 , conn_dir : out   }] , #     to 'D'
[ 4  , { conn2_ptr   :  null , conn_dir : null  }] ,
[ 5  , { conn3_ptr   :  null , conn_dir : null  }] ,
[ 6  , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 7  , { ntype       :  inputs , num_nodes : 8  }] , # Group 'B'
[ 8  , { neuron_ptr  :  220  }] ,
[ 9  , { conn1_ptr   :    60 , conn_dir : out   }] , #     to 'E'
[ 10 , { conn2_ptr   :  null , conn_dir : null  }] ,
[ 11 , { conn3_ptr   :  null , conn_dir : null  }] ,
[ 12 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 13 , { ntype       :  inputs , num_nodes : 16  }] , # Group 'C'
[ 14 , { neuron_ptr  :  228  }] ,
[ 15 , { conn1_ptr   :    64 , conn_dir : out   }] , #     to 'F'
[ 16 , { conn2_ptr   :  null , conn_dir : null  }] ,
[ 17 , { conn3_ptr   :  null , conn_dir : null  }] ,
[ 18 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 19 , { ntype       :  neurons , num_nodes : 128  }] , # Group 'D'
[ 20 , { neuron_ptr  :  244  }] ,
[ 21 , { conn1_ptr   :    68 , conn_dir : out   }] , #     to 'E'
[ 22 , { conn2_ptr   :    56 , conn_dir : in    }] , #     from 'A'
[ 23 , { conn3_ptr   :    80 , conn_dir : in    }] , #     from 'H'
[ 24 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 25 , { ntype       :  neurons , num_nodes : 256  }] , # Group 'E'
[ 26 , { neuron_ptr  :  628  }] ,
[ 27 , { conn1_ptr   :    72 , conn_dir : out   }] , #     to 'G'
[ 28 , { conn2_ptr   :    60 , conn_dir : out   }] , #     from 'B'
[ 29 , { conn3_ptr   :  null , conn_dir : null  }] , #     from 'D'
[ 30 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 31 , { ntype       :  neurons , num_nodes : 16  }] , # Group 'F'
[ 32 , { neuron_ptr  :  676  }] ,
[ 33 , { conn1_ptr   :    76 , conn_dir : out   }] , #     to 'G'
[ 34 , { conn2_ptr   :    64 , conn_dir : in    }] , #     from 'C'
[ 35 , { conn3_ptr   :    84 , conn_dir : in    }] , #     from 'J'
[ 36 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 37 , { ntype       :  neurons , num_nodes : 2  }] , # Group 'G'
[ 38 , { neuron_ptr  :  682  }] ,
[ 39 , { conn1_ptr   :    72 , conn_dir : out   }] , #     from 'E'
[ 40 , { conn2_ptr   :    76 , conn_dir : out   }] , #     from 'F'
[ 41 , { conn3_ptr   :    88 , conn_dir : null  }] , #     from 'J'
[ 42 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 43 , { ntype       :  inputs , num_nodes : 8  }] , # Group 'H'
[ 44 , { neuron_ptr  :  706  }] ,
[ 45 , { conn1_ptr   :    80 , conn_dir : out   }] , #     to 'D'
[ 46 , { conn2_ptr   :  null , conn_dir : null  }] ,
[ 47 , { conn3_ptr   :  null , conn_dir : null  }] ,
[ 48 , { conn4_ptr   :  null , conn_dir : null  }] ,
[ 49 , { ntype       :  inputs , num_nodes : 8  }] , # Group 'J'
[ 50 , { neuron_ptr  :  730  }] ,
[ 51 , { conn1_ptr   :    84 , conn_dir : out   }] , #     to 'F'
[ 52 , { conn2_ptr   :    88 , conn_dir : out   }] , #     to 'G'
[ 53 , { conn3_ptr   :  null , conn_dir : null  }] ,
[ 54 , { conn4_ptr   :  null , conn_dir : null  }]

The matrices definitions associate the input group and the output group with the synapse weights and they define how the groups are connected:

  • Whether there is a connection between input node x and output node y.
  • Whether the connection is inhibitory or excitatory.
  • Whether the synaptic weight of the connection gets modified.
matrices = array([
   [ 55 , { num_mat    :  9  }] , # (Not needed)
   [ 56 , { seed       :  56  }] , # Matrix from A to D
   [ 57 , { from_ptr   :     1 , sparsity : eighth  , learn   : stdp
   [ 58 , { to_ptr     :    19 , unate    : eighth  , weights : per_syn
   [ 59 , { weight_ptr :   754 ,
   [ 60 , { seed       :  60  }] , # Matrix from B to E
   [ 61 , { from_ptr   :     7 , sparsity : full    , learn   : stdp  }] ,
   [ 62 , { to_ptr     :    25 , unate    : quarter , weights : per_syn  }] ,
   [ 63 , { weight_ptr :  2802  }] ,
   [ 64 , { seed       :  64  }] , # Matrix from C to F
   [ 65 , { from_ptr   :    13 , sparsity : full    , learn   : stdp  }] ,
   [ 66 , { to_ptr     :    31 , unate    : quarter , weights : per_syn  }] ,
   [ 67 , { weight_ptr :  4850  }] ,
   [ 68 , { seed       :  68  }] , # Matrix from D to E
   [ 69 , { from_ptr   :    19 , sparsity : sixteenth , learn : stdp  }] ,
   [ 70 , { to_ptr     :    25 , unate    : eighth  , weights : per_syn  }] ,
   [ 71 , { weight_ptr :  5106  }] ,
   [ 72 , { seed       :  72  }] , # Matrix from E to G
   [ 73 , { from_ptr   :    25 , sparsity : full    , learn   : stdp  }] ,
   [ 74 , { to_ptr     :    37 , unate    : quarter , weights : per_syn  }] ,
   [ 75 , { weight_ptr :  7154  }] ,
   [ 76 , { seed       :  76  }] , # Matrix from F to G
   [ 77 , { from_ptr   :    31 , sparsity : full    , learn   : stdp  }] ,
   [ 78 , { to_ptr     :    37 , unate    : quarter , weights : per_syn  }] ,
   [ 79 , { weight_ptr :  7666  }] ,
   [ 80 , { seed       :  80  }] , # Matrix from H to D
   [ 81 , { from_ptr   :    43 , sparsity : eighth  , learn   : fixed  }] ,
   [ 82 , { to_ptr     :    19 , unate    : eighth  , weights : per_from  }] ,
   [ 83 , { weight_ptr :  7698  }] ,
   [ 84 , { seed       :  84  }] , # Matrix from J to F
   [ 85 , { from_ptr   :    49 , sparsity : eighth  , learn   : fixed  }] ,
   [ 86 , { to_ptr     :    31 , unate    : eighth  , weights : per_from  }] ,
   [ 87 , { weight_ptr :  7706  }] ,
   [ 88 , { seed       :  88  }] , # Matrix from J to G
   [ 89 , { from_ptr   :    49 , sparsity : eighth  , learn   : fixed  }] ,
   [ 90 , { to_ptr     :    37 , unate    : eighth  , weights : per_from  }] ,
   [ 91 , { weight_ptr :  7714  }]

The nodes data container has the last spike time for each node and, for neurons rather than inputs, the voltage at the axon hillock and the time of the last change of the axon hillock voltage as well. The spike times of all nodes in a group are grouped together so that the format is the same whether the nodes are neurons or inputs.

nodes = array([
   [  92  , { tspike : init_tspike }] , # Neuron A 0
   [  93  , { tspike : init_tspike }] , # Neuron A 1
   [  94  , { tspike : init_tspike }] , # Neuron A 2
   [  95  , { tspike : init_tspike }] , # Neuron A 3
   [  96  , { tspike : init_tspike }] , # Neuron A 4
   [  97  , { tspike : init_tspike }] , # Neuron A 5
   [  98  , { tspike : init_tspike }] , # Neuron A 6
   [ 215  , { tspike : init_tspike }] , # Neuron A 123
   [ 216  , { tspike : init_tspike }] , # Neuron A 124
   [ 217  , { tspike : init_tspike }] , # Neuron A 125
   [ 218  , { tspike : init_tspike }] , # Neuron A 126
   [ 219  , { tspike : init_tspike }] , # Neuron A 127
   [ 220  , { tspike : init_tspike }] , # Neuron B 0
   [ 221  , { tspike : init_tspike }] , # Neuron B 1
   [ 222  , { tspike : init_tspike }] , # Neuron B 2
   [ 223  , { tspike : init_tspike }] , # Neuron B 3
   [ 224  , { tspike : init_tspike }] , # Neuron B 4
   [ 225  , { tspike : init_tspike }] , # Neuron B 5
   [ 226  , { tspike : init_tspike }] , # Neuron B 6
   [ 227  , { tspike : init_tspike }] , # Neuron B 7
   [ 228  , { tspike : init_tspike }] , # Neuron C 8
   [ 229  , { tspike : init_tspike }] , # Neuron C 9
   [ 230  , { tspike : init_tspike }] , # Neuron C 10
   [ 231  , { tspike : init_tspike }] , # Neuron C 11
   [ 232  , { tspike : init_tspike }] , # Neuron C 12
   [ 233  , { tspike : init_tspike }] , # Neuron C 13
   [ 234  , { tspike : init_tspike }] , # Neuron C 14
   [ 235  , { tspike : init_tspike }] , # Neuron C 15
   [ 236  , { tspike : init_tspike }] , # Neuron C 16
   [ 237  , { tspike : init_tspike }] , # Neuron C 17
   [ 238  , { tspike : init_tspike }] , # Neuron C 18
   [ 239  , { tspike : init_tspike }] , # Neuron C 19
   [ 240  , { tspike : init_tspike }] , # Neuron C 20
   [ 241  , { tspike : init_tspike }] , # Neuron C 21
   [ 242  , { tspike : init_tspike }] , # Neuron C 22
   [ 243  , { tspike : init_tspike }] , # Neuron C 23
   [ 244  , { tspike : init_tspike }] , # Neuron D 0
   [ 245  , { tspike : init_tspike }] , # Neuron D 1
   [ 246  , { tspike : init_tspike }] , # Neuron D 2
   [ 247  , { tspike : init_tspike }] , # Neuron D 3
   [ 248  , { tspike : init_tspike }] , # Neuron D 4
   [ 249  , { tspike : init_tspike }] , # Neuron D 5
   [ 250  , { tspike : init_tspike }] , # Neuron D 6
   [ 367  , { tspike : init_tspike }] , # Neuron D 123
   [ 368  , { tspike : init_tspike }] , # Neuron D 124
   [ 369  , { tspike : init_tspike }] , # Neuron D 125
   [ 370  , { tspike : init_tspike }] , # Neuron D 126
   [ 371  , { tspike : init_tspike }] , # Neuron D 127
   [ 372  , { tvolt  : init_tvolt  }] , # Neuron D 0
   [ 373  , { tvolt  : init_tvolt  }] , # Neuron D 1
   [ 374  , { tvolt  : init_tvolt  }] , # Neuron D 2
   [ 375  , { tvolt  : init_tvolt  }] , # Neuron D 3
   [ 376  , { tvolt  : init_tvolt  }] , # Neuron D 4
   [ 495  , { tvolt  : init_tvolt  }] , # Neuron D 123
   [ 496  , { tvolt  : init_tvolt  }] , # Neuron D 124
   [ 497  , { tvolt  : init_tvolt  }] , # Neuron D 125
   [ 498  , { tvolt  : init_tvolt  }] , # Neuron D 126
   [ 499  , { tvolt  : init_tvolt  }] , # Neuron D 127
   [ 500  , {  volt  : init_volt   }] , # Neuron D 0
   [ 501  , {  volt  : init_volt   }] , # Neuron D 1
   [ 502  , {  volt  : init_volt   }] , # Neuron D 2
   [ 503  , {  volt  : init_volt   }] , # Neuron D 3
   [ 504  , {  volt  : init_volt   }] , # Neuron D 4
   [ 623  , {  volt  : init_volt   }] , # Neuron D 123
   [ 624  , {  volt  : init_volt   }] , # Neuron D 124
   [ 625  , {  volt  : init_volt   }] , # Neuron D 125
   [ 626  , {  volt  : init_volt   }] , # Neuron D 126
   [ 627  , {  volt  : init_volt   }] , # Neuron D 127
   [ 628  , { tspike : init_tspike }] , # Neuron E 0
   [ 629  , { tspike : init_tspike }] , # Neuron E 1
   [ 630  , { tspike : init_tspike }] , # Neuron E 2
   [ 631  , { tspike : init_tspike }]   # Neuron E 3

And so on.

The weights are listed in order of source and destination nodes, dependent on type. For sparsely-connected matrices, the pseudo-random algorithm will allow the right source and destination nodes to be worked out for each weight word.

In the database, the weights finish off with…

   [ 7666 , { weight : 0 }] , # From F0  to G0
   [ 7667 , { weight : 0 }] , # From F0  to G1
   [ 7668 , { weight : 0 }] , # From F1  to G0
   [ 7669 , { weight : 0 }] , # From F1  to G1
   [ 7670 , { weight : 0 }] , # From F2  to G0
   [ 7671 , { weight : 0 }] , # From F2  to G1
   [ 7672 , { weight : 0 }] , # From F3  to G0
   [ 7673 , { weight : 0 }] , # From F3  to G1
   [ 7674 , { weight : 0 }] , # From F4  to G0
   [ 7675 , { weight : 0 }] , # From F4  to G1
   [ 7676 , { weight : 0 }] , # From F5  to G0
   [ 7677 , { weight : 0 }] , # From F5  to G1
   [ 7678 , { weight : 0 }] , # From F6  to G0
   [ 7679 , { weight : 0 }] , # From F6  to G1
   [ 7680 , { weight : 0 }] , # From F7  to G0
   [ 7681 , { weight : 0 }] , # From F7  to G1
   [ 7682 , { weight : 0 }] , # From F8  to G0
   [ 7683 , { weight : 0 }] , # From F8  to G1
   [ 7684 , { weight : 0 }] , # From F9  to G0
   [ 7685 , { weight : 0 }] , # From F9  to G1
   [ 7686 , { weight : 0 }] , # From F10 to G0
   [ 7687 , { weight : 0 }] , # From F10 to G1
   [ 7688 , { weight : 0 }] , # From F11 to G0
   [ 7689 , { weight : 0 }] , # From F11 to G1
   [ 7690 , { weight : 0 }] , # From F12 to G0
   [ 7691 , { weight : 0 }] , # From F12 to G1
   [ 7692 , { weight : 0 }] , # From F13 to G0
   [ 7693 , { weight : 0 }] , # From F13 to G1
   [ 7694 , { weight : 0 }] , # From F14 to G0
   [ 7695 , { weight : 0 }] , # From F14 to G1
   [ 7696 , { weight : 0 }] , # From F15 to G0
   [ 7697 , { weight : 0 }] , # From F15 to G1
   [ 7698 , { weight : 0 }] , # From H0  to all D
   [ 7699 , { weight : 0 }] , # From H1  to all D
   [ 7700 , { weight : 0 }] , # From H2  to all D
   [ 7701 , { weight : 0 }] , # From H3  to all D
   [ 7702 , { weight : 0 }] , # From H4  to all D
   [ 7703 , { weight : 0 }] , # From H5  to all D
   [ 7704 , { weight : 0 }] , # From H6  to all D
   [ 7705 , { weight : 0 }] , # From H7  to all D
   [ 7706 , { weight : 0 }] , # From J0  to all F
   [ 7707 , { weight : 0 }] , # From J1  to all F
   [ 7708 , { weight : 0 }] , # From J2  to all F
   [ 7709 , { weight : 0 }] , # From J3  to all F
   [ 7710 , { weight : 0 }] , # From J4  to all F
   [ 7711 , { weight : 0 }] , # From J5  to all F
   [ 7712 , { weight : 0 }] , # From J6  to all F
   [ 7713 , { weight : 0 }] , # From J7  to all F
   [ 7714 , { weight : 0 }] , # From J0  to all G
   [ 7715 , { weight : 0 }] , # From J1  to all G
   [ 7716 , { weight : 0 }] , # From J2  to all G
   [ 7717 , { weight : 0 }] , # From J3  to all G
   [ 7718 , { weight : 0 }] , # From J4  to all G
   [ 7719 , { weight : 0 }] , # From J5  to all G
   [ 7720 , { weight : 0 }] , # From J6  to all G
   [ 7721 , { weight : 0 }]   # From J7  to all G
Posted in Uncategorized | Tagged , , , , , , , | 1 Comment

Representation of the People

TL;DR: see bottom of post

Over time, the electorates of Western societies have become more representative of society as a whole. For example, prominent steps in the UK were:

But this says nothing about how representative the representatives themselves are of their electorate. The UK House of Commons chamber in Parliament has gradually become more representative over the last 50 years but there is still a very long way to go.

Prominent attention has been given to the under-representation of minorities such as race and sexual orientation which now have a better level of representation than women (a case of under-representation of a majority). There have been active measures to dress the gender imbalance – parties having women-only shortlists for parliamentary candidates.

But we know we still have far to go. We know than alumni of Eton and Oxford University and students of ‘PPE’ are over-represented in parliament but just how over-represented are they? What other sectors of society are over-represented, and to what extent?

The table below charts how unlikely it is that various sectors of society would have the number of Members of Parliament (MPs) that they do have in the House of Commons if MPs were randomly selected from the electorate. For example, there are 16,000 barristers within the UK of adult population of 52,000,000 so one person in 3250 is a barrister. But there are 38 barristers in the 650-member House of Commons – one in 17.

If p is the probability of picking a barrister randomly from the entire UK adult population then the probability of getting exactly k barristers in n trials is given by the Binomial probability mass function:

p(x=k) = pkp(n-k)n! /k!/(n-k)!

Plugging the numbers in (k=38 and n=650 and p=16,000/52,000,000) we get to the vanishingly small probability of there being 38 barristers within the House of Commons if people were uniformly selected to be an MP from across the entire UK adult population of:

p(x=38) = 1.4 x 10-72

When dealing with such small numbers, it is more convenient to deal with ‘surprisal’ – the negative log probability – rather than probabilities directly. The larger the value of this ‘surprise factor’ means that the circumstance is further away from that expected from random (‘fair’) chance. For the barristers, this results in a surprise factor of 238.6. In Excel-speak, this is result is calculated by:


If people were uniformly selected to be an MP from across the entire UK adult population, the mean number of barristers would be 0.2. Obviously, there can only be an integer number. The probability of getting the expected mean number of MPs would be:

p(x=0) = 0.819

That this is so much more likely than p(x=38) shows how skewed the composition of the House of Commons is.

The probabilities can be surprising in themselves. Although the probability of being an Oxford graduate is much higher than that of being a barrister, the sheer number (114) of Oxford graduates in parliament produces a much higher surprise factor: 473. Compared to a surprise factor of 238 for barristers, this may not seem that much but 473 is equivalent to a probability of 3 x 10-143! Even ‘astronomically small’ does not seem an adequate description of this number.

In the table, I quantify this skewed composition by various categories. I have used the convention that positive surprise factors show that a group is over-represented in parliament whereas negative surprise factors indicate that group being under-represented in parliament. The numbers have been obtained from various sources and will therefore not be consistent, but discrepancies will make negligible difference to the interpretation of the results, partly because of the logarithmic nature of the ‘surprise’ metric.

Class Type no.* No. MPs surprise fairer no. MPs**
18+ 52,000,000* 650
18-year olds 766,000*
Profession Councillor 18,912 82 586.1 14
Graduate Oxford 3,200 114 473.4 29
School Private 53,620 228 316.0 117
Profession Lobbyist 141 24 299.2 6
Education University 411,860 585 295.2 464
Profession Barrister 16,000 38 238.6 13
Profession Solicitor 140,000 51 183.9 25
Graduate Cambridge 3,497 59 181.5 30
School Eton 260 20 105.4 14
Graduate LSE 1,603 23 66.7 23
Gender Male 26,000,000 442 67.1 442**
Profession Journalist 73,000 18 56.4 20
Age 50-59 8,852,000 197 54.8 207
Age 40-49 8,634,000 190 50.9 204
School Millfield 200 5 20.0 13
Race White 44,720,000 598 20.3 629
Sexuality Hetero. 45,240,000 603 20.1 633
Graduate Edinburgh 6,221 17 15.3 38
Graduate Glasgow 5,105 15 14.9 35
Graduate Hull 4,533 14 14.8 33
Graduate Durham 4,555 14 14.7 33
Age 60-69 7,072,000 114 10.4 178
Age 30-39 8,704,000 102 -4.9 32
School Selective 167,000 124 -6.8 27
Sexuality LGBT+ 45,240,000 47 -20.1 17
Race Non-white 44,720,000 52 -20.3 21
Age Over 70 8,515,000 28 -70.7 45
Age 18-29 1,0299,000 14 -141.0 30
School Comprehensive 545,380 293 -144.2 352


  • *: Number within the sample. In the case of schools/education, I use the number within the annual cohort of 766,000 18-year olds. This will overestimate the number of people in the entire population because student numbers have increased significantly in the last 20 or so years. For all the other criteria, I use the number within the entire UK adult population.
  • **: Number of MP if the under- or over-representation was to the same extent as gender, i.e. the surprise factor is about 67.

Most over-represented are those MPs who were formerly councillors. But this is not really surprising or unfair – local government is a junior league of government and obvious training ground for higher-level public service. More concerning is the number who were lobbyists.

The age groups should not be surprising or concerning: we would like our politicians to have had some experience before entering the House of Commons and we would expect many over 70 to be retired.: over-70s and under-40s; retirement and have MPs that have some experience.

As expected, Oxford graduates and those educated privately (and particularly at Eton) are significantly over-represented. Comprehensive schools are as under-represented as Eton is over-represented.

Oxford is extraordinarily over-represented; Cambridge only considerably so! Other English universities start coming in at a surprise factor of 15. Premier Scottish universities are also around this level so there is no obvious skewing here.

But the most significant thing to be drawn from this table is the huge under-representation of those who did not go to university at all.


Notwithstanding the non-graduate representation, the degree subjects studied by MPs and away from engineering, architecture and the biological sciences (but not maths or the physical sciences) and, surprisingly, also away from business and administration degrees.


If we find the under-representation of women in parliament unacceptable to the extent that affirmative action is taken then we should also be accepting that actions should be taken to redress the under-representations of other groups even less well represented. The last column shows the number of MPs for each group if they were under- or over-represented to the extent that women are. The number for graduates is 464. If the number of graduates were reduced from 585 to 464, as an initial move to redress the imbalance, there would still be an ‘unacceptible’ number of graduates and maybe it could be argued that some sort of action after reaching that threshold was not necessary. But it is difficult to argue against action beforehand. A party banning graduates getting onto new candidate shortlists seems absurd whereas a ban on Oxford graduates to reduce their number from 114 to 29 seems more acceptible (some would say particularly so when reviewing who they are)! Perhaps one solution is to only allow voting in proportion to this adjusted over-representation; thus, randomly, only 29 of 114 of MPs would be allowed to vote in any parliamentary sitting!

Some of the sources:

TL;DR: Progress is being made on making parliament more representative of the electorate as a whole but it is slow. The privately-educated and alumni of Oxford are among the most over-represented groups but this was to be expected. It is the difference in representation between university graduates and those who did not go to university that is the most significant anomaly – far more pronounced than gender inequality, for example. If positive discrimination is justified for redress the gender balance, why not also for education?

P.S.: contains more recent data.


Postscript, May 2019

A topical postscript: the above is about the backgrounds of the 650 UK Members of Parliament. What about the top job?

Here’s the background of former UK Prime Ministers since 1964…

Prime Minister School University Degree Occupation
Edward Heath grammar Oxford PPE civil servant
Harold Wilson grammar Oxford PPE lecturer
James Callaghan grammar (none) (none) tax inspector
Margaret Thatcher grammar Oxford Chemistry scientist
John Major grammar (none) (none) banking
Tony Blair private Oxford Law law
Gordon Brown state Edinburgh History lecturer
David Cameron Eton Oxford PPE politics
Theresa May grammar Oxford Geography banking

And here’s the background of the contenders to be the next Prime Minister, in rough order of likelihood…

Contender School University Degree Occupation
Boris Johnson Eton Oxford Classics journalism
Dominic Raab grammar Oxford Law law
Michael Gove scholarship Oxford English journalism
Andrea Leadsom grammar Warwick Pol. Sci. banking
Sajid Javid comp Exeter Econ./Pol. banking
Jeremy Hunt Charterhouse Oxford PPE management
Penny Mordaunt state Reading Philosophy PR
Rory Stewart Eton Oxford PPE foreign office
Liz Truss state Oxford PPE accountant
Amber Rudd Cheltenham Edinburgh History banking
Matt Hancock private Oxford PPE economist
Priti Patel state Keele Economics politics
Esther McVey state Queen Mary Law media presenter
Graham Brady grammar Durham Law PR

Spot any pattern?


Posted in Uncategorized | Tagged , , , , , , , , | 1 Comment

The Shape of Politics

Many people have tried to create some conceptual space in order to map the positions of particular policies, particular persons or particular parties relative to others.

The Line

By far the most prevalent of these is the left-right axis. The political terms ‘Left’ and ‘Right’ appeared during the French Revolution when members of the National Assembly divided into supporters of the king, sitting on the president’s right (‘the party of order’: the ‘conscientious defenders of the constitution’) and supporters of the revolution on his left (‘the party of movement’ : the ‘innovators’). Centrists (a.k.a. ‘moderates’) held intermediate positions.

Today, one can commonly define oneself as being somewhere on a line (the ‘political spectrum’) that runs from the Far Left to Far Right. At the extremes, the Far Left can be considered to be of revolutionary ‘extreme movement’ but the Far Right is generally associated with Fascists rather than ‘Ultra-Conservative’ defenders of the existing order, such as in many Middle East nations.

Square I: The Nolan Chart

Perhaps such a linear categorization of political position is too, well, one-dimensional. A number of people have tried to create a ‘political compass’ that points to political positions in a way that is more illuminating.

For example, David Nolan’ created a chart which inherits the traditional left-right (‘Progressive’ to ‘Conservative’) spectrum but it adds an orthogonal ‘Authoritarian’ to ‘Libertarian’ axis to form a square. This new axis covers the degree to which a government should be able to impose its will upon its citizens – whether the decisions that need to be made in a society are ‘top-down’, from a few in command (Authoritarian in the extreme), or ‘bottom-up’, with each individuals individually making decisions for themselves (Anarchic in the extreme). Hans Eysenck called these axes the ‘left-right’ and the ‘tough-tender’ respectively.

A political position can now be pinpointed with Cartesian co-ordinates, with, for example, Authoritarian Fascists now sitting in different part of the space to Ultra-Conservatives.

The ‘Political Compass’ website provides fascinating examples of Nolan charts, some of which are also shown below. Firstly, here are some examples from some recent major national elections (Note that the Authoritarian/Libertarian axes is flipped upside-down compared with some Nolan charts.)…

Here is a Nolan chart for the US presidential election of 8 November 2016

Here is a Nolan chart for the French presidential election (first round) of 23 April 2017

Here is a Nolan chart for the UK election of 8 June 2017

And here is a Nolan chart for the German election of 24 September 2017

Then, below is a Nolan chart for a country-by-country comparison within the European Union based on 2012 data…

And finally, the Nolan chart below indicates the position of US states based on their senators’ voting patterns for a selection of states: blue circles show states where both senators are Democrat (CA, IL, MI, MA, NY, PA), orange circles show states where both senators are Republican (AL, KS, TX) and white Florida has one of each.

Square II: The Pournelle Chart

And there are other, similar, 2-dimensional charts such as by Jerry Pournelle, in which the axes represent:

  1. ‘Attitude toward the State’, running from ‘the state is evil’ preference of individual freedom through to ‘statism’ (‘state worship’), and
  2. ‘Attitude toward planned social progress’, running from complete confidence in state planned social progress (called ‘rational’!) through to complete scepticism of such an approach as being naïvely utopian (termed ‘irrational’!).

[picture credit]

The Vosem Cube

A third axis can be added, for greater refinement. Whereas the Nolan Chart has the two axes:

  1. the economic axis, ranging from ‘Progressive’ to ‘Conservative’, and
  2. the personal axis, ranging from ‘Authoritarian’ to ‘Libertarian’.

the Vosem chart adds third axis for greater refinement, making it a cube. The first two axes are modified slightly from the Nolan chart so that we end up with:

  1. the economic axis, ranging from ‘Liberal’ to ‘Conservative’,
  2. the personal axis, ranging from ‘Communitarian’ to ‘Libertarian’, and
  3. the governmental axis, ranging from ‘Anarchism’ to ‘Monarchism’.

(‘Vosem’ is Russian for eight, there being 8 vertices of the cube.)

[picture credit]

A US-based Vosem chart below describes the eight corners of the cube as:

  • back lower right: conservative
  • back upper right: authoritarian
  • front lower right: traditional societies
  • front upper right: totalitarian
  • back lower left: libertarian
  • back upper left: New Labour
  • front lower left: anarcho-syndicalist
  • front upper left: liberal

In this cube:

  • The left-right axis is the cultural axis, from the permissive left to the restrictive right.
  • The up-down axis is the fiscal axis, from active government at the top to minimal government at the bottom.
  • The front-back axis is the corporate axis, from pro-business at the back to anti-corporate at the front.
  • The square at the back is the Nolan chart, with ‘progressive’ cast as ‘New Labour’.

Triangle: The Rummel Chart

Three parameters do not need to be represented by a cube if they are proportions – a triangle can be used – a ternary plot. Rudolph Rummel proposed such a plot in which we can pinpoint a political position in terms of the three coefficients L, T and A in the range 0 to 1 that represent the Libertarian (democratic), Socialist (Totalitarian, Communist) and Authoritarianism (Dynastic/Monarchical) factors. L+T+A=1 because the three parameters are proportions.


[picture credit]

A New Triangle: Liberté, Egalité, Fraternité

Paul Archer has proposed a new ternary plot where the parameters are socialism, liberalism, and conservatism and also onto the values of freedom, equality and belonging respectively:

“in order to think about whether we can find wisdom in each political tradition and whether we are allowed to want freedom and equality and belonging.”

These values are of course better known in the form of the French Revolutionary motto ‘Liberté, Egalité, Fraternité’.

Expounding on the three corners in turn:

  • liberalism (‘with a small l’) is about the freedom of the individual to be different from others. Obviously, it is associated with Liberté. There is freedom to choose to do different things, have different things and say different things (freedom of speech). It could perhaps be called ‘individualism’. Freedom from autocracy is achieved by the pluralism of the market.
  • socialism (‘with a small s’) is about equality – associated with Egalité. In order to protect the welfare of working class people from the interests of the rich, wealth is held in common (common-wealth) through public ownership, with central planning required to manage political affairs.
  • conservatism(‘with a small c’) is sceptical about change (if being absurdly reductive, it is about conserving the status quo). The society we live in today is fragile and must be protected. It has taken centuries to develop its successful institutions that could be so easily destroyed by radical change. We should therefore err on the side of caution and generally maintain existing traditions in governance and culture. Social cohesion is maintained through the ‘glue’ of shared values, customs and history. Individuals have a sense of belonging– a brotherly connectedness to others. Hence it is associated with the most problematic component of the Tricolore – Fraternité. It is in this corner that so-called primitive societies lie, as well as deeply religious ones (note the etymology of the word ‘religion’: from Latin ‘religare’ meaning ‘to bind’). Modern society has evolved from these small hierarchical societies and developed through the nation-state. Hence it is also associated with nationalism and regionalism. 


Note that democracy does not get a mention here. All three corners can be democratic. The triangle represents the landscape in which democracies can sit. Wherever in the triangle can be democratic. Indeed, the triangle’s fundamental values map neatly onto the main left-of-centre / centre / right-of-centre set of main political parties in many countries. For example:

A political position can be mapped onto anywhere on this triangle by the coordinates of s, l and c representing the degree of socialism, liberalism and conservatism respectively (the coordinates are ratiometric such that s+l+c=1). For example, the point on the edge of the triangle midway between the socialism and liberalism corners (near the SL text) is at s=0.5, l=0.5, c=0.0.

So, we don’t have to choose exclusively between equality, freedom and belonging. There are merits in all three and political positions are a mixture of them. A political party can sit at different points in the triangle on different issues. The same is true of any individual person. Most parties and most of us will be closer to the SLC text in the centre of the triangle than to any of the corners. ‘There is more that unites us than divides us’.

Navigating around this triangle:

  • Moving from C to SL (decreasing c from 1 to 0) the boundary around ‘us’ expands to cover all humans. Socialism is internationalist and liberalism favours globalisation whereas conservatism still stands by the proven political unit of the nation-state. The practice of religion also declines.
  • Moving from L to SC (decreasing l from 1 to 0) sees the individual disappear into the crowd that can become stifling and oppressive – whether it is the uniformity of socialist workers or the hierarchy of traditional roles. Society going in that direction moves from dynamism to rigid forms of governance.
  • Moving from S to LC (decreasing s from 1 to 0) sees inequality rise (and the Gini index increase from zero), whether it is the traditional inequalities of conservatism or the more modern inequalities of the liberal free market. There is also a move away from the idealism of socialism of how people should be towards how people actually are: relying on empathy to bind conservative societies together or relying on personal self-interest to drive liberal ones.

The Tetrahedron: Liberté, Egalité, Fraternité – or Autocracy

Extending this Tricolour idea further, we can add another axis, converting the triangle into a tetrahedron (triangle-based pyramid) in which the Authoritarianism of the Rummel chart is added.

The existing triangle forms the base which represents pure, direct democracy. Pure Liberté, pure Egalité and pure Fraternité can all be democratic on their own. From anywhere in the triangular, as we move towards the ‘Autocracy’ apex, others make more and more decisions on behalf of people. Of course, at the very apex, one person makes the big decisions for everyone else.

Note that, viewed from a particular angle, the tetrahedron looks like a triangle with socialism, libertarianism and autocracy in its corners – exactly as the Rummel chart is.


Left, Right and the So-Called Centre

If we take the triangle and look at it side-on with the L corner pointing towards us, we see the Left, the Centre and the Right-leaning parties sat on the classic Left-Right spectrum.


From around 1980 many conservative political parties started moving away from their ‘one-nation conservatism’ / Christian Democratic positions towards the free market and individualism (reducing c and increasing l). Also from around 1980, inequality has been stagnant or increasing, after many years of improvement beforehand.

In the 1990s, parties of the Left such as New Labour also started moving towards the free market and individualism (reducing s and increasing l). The result has been a move towards L for all realistic governing options for the electorate, with relatively little to choose between left-of-centre and right-of-centre parties.

A party of the Left can think it will get more votes by moving towards the centre; some voters to their left may then choose not to vote for anyone but they will not move over the Centre to vote for the right. Symmetrically, the same applies to a party of the Right.

But this classic left-right spectrum view of politics hides that fact that what we think of as the centre (crowded as it is with left-of-centre, centrist and right-of-centre parties) is not at the real centre of politics! It is in a corner – the L corner. The actual centre of the triangle is at SLC. The distance from S to C is no further than from S to L – in fact, it is the same. Voters are quite capable of bypassing the Centre ground.

A Re-Orientation

So there is a whole axis, orthogonal to the Left-Right spectrum, running from Liberal L to the space around SC that we can be blissfully unaware of. A move away from Liberal democracy to SC is a move to ‘illiberal democracy’ – otherwise disparagingly called ‘populism’.

The concerns of those at SC – the inequality issue of being ‘left behind’ combined with being in a changing community with a disappearing sense of community (belonging) are a long way away from L and hence are seen as extreme by the political mainstream at L and dismissed accordingly. In fact, the political leaders are actually at AL, a significant way up the autocracy scale. And hence we get this classic antipathy between ‘Populism’ and the ‘Liberal Elite’ (or

‘undemocratic liberal’). AL is a long way from SC. It is in fact diametrically opposite. There is incomprehension instead of sympathy. And thus we get that seminal pair of election-loser moments: UK Prime Minister Brown’s ‘that bigoted woman’ moment and Hillary Clinton’s ‘basket of deplorables’.

Perhaps politics today is flipping over to a new axis. The Left/Right dichotomy is changing to a Liberal/Populist one – with dramatic consequences for political parties on the old alignment.

Demonizing Others

With the traditional Left-Right spectrum, people tend to conceptually push those with significantly different values from themselves off to the extremes where autocracies lie.

We demonize them, reject what they say without even listening and probably call them Fascists.

But with the pyramid, we recognise that there are 4 directions that those with different political opinions may be and we see that ‘more socialist’, ‘more conservative’ and ‘more liberal’ are in very different directions to the ‘more autocratic’. We will not demonize them and start to listen. Getting into the mind of others is both moral and strategic:

‘Why does the other think that way?’

As Jonathan Haidt has said:

‘A good place to look for wisdom is in the minds of your opponents’

The New Centre

In his 1978 article ‘How to Be a Conservative-Liberal-Socialist’, the Polish philosopher Leszek Kołakowski maintained that Conservatism, Liberalism and Socialism are not mutually exclusive.

Kołakowski said:

A Conservative Believes:

  1. That in human life there never have been and never will be improvements that are not paid for with deteriorations and evils; …
  2. That we do not know the extent to which various traditional forms of social life–families, rituals, nations, religious communities–are indispensable if life in a society is to be tolerable or even possible. …
  3. That the idée fixe of the Enlightenment–that envy, vanity, greed, and aggression are all caused by the deficiencies of social institutions and that they will be swept away once these institutions are reformed– is not only utterly incredible and contrary to all experience, but is highly dangerous. …

A Liberal Believes:

  1. That the ancient idea that the purpose of the State is security still remains valid. …
  2. That human communities are threatened not only by stagnation but also by degradation when they are so organized that there is no longer room for individual initiative and inventiveness. …
  3. That it is highly improbable that a society in which all forms of competitiveness have been done away with would continue to have the necessary stimuli for creativity and progress. …

A Socialist Believes:

  1. That societies in which the pursuit of profit is the sole regulator of the productive system are threatened with as grievous–perhaps more grievous–catastrophes as are societies in which the profit motive has been entirely eliminated from the production-regulating forces. …
  2. That it is absurd and hypocritical to conclude that, simply because a perfect, conflict-less society is impossible, every existing form of inequality is inevitable and all ways of profit-making justified. …
  3. That the tendency to subject the economy to important social controls should be encouraged, even though the price to be paid is an increase in bureaucracy. …

As far as I can see, this set of regulative ideas is not self-contradictory. And therefore it is possible to be a conservative-liberal socialist. This is equivalent to saying that those three particular designations are no longer mutually exclusive options.

No-one is 100% socialist, 100% conservative or 100% liberal. We all have some mixture of these values, probably with most of us towards the centre of the triangle rather than off towards a corner.

We also need to get the right balance between the democratic extremes of anarchism (everyone making decisions for themselves) and autocracy (one person making the decisions on behalf of everyone else). This puts most people somewhere around the centre of the tetrahedron. We can have Liberté, Egalité, Fraternité and Democracy.

Posted in Uncategorized | Tagged , , , , , , , , , , , , , , , | Leave a comment

New Processes at Work

Automation, Education and Work, Part 2

This is the second of three parts of the talk ‘Automation, Education and Employment’. In the ‘first part’:

  • I considered how change is driven by both new technology and new processes as a result of technology, and
  • I looked at some of the technology emerging now.

Now in part 2:

  • I consider new processes that have recently emerged, and
  • I examine a number of work areas with regard to these new processes.


New Process: Self-Driving Cars

It is no secret that the new artificial intelligence technology is being applied to self-driving cars, for example, to recognise objects ahead (see the picture in part 1) to make decisions how to steer and brake. A self-driving car is really just a robot whose job is to carry something from A to B – where that something is you. Here, I’m not going to talk about the technology of self-driving cars, but look at how we will use them in different ways – a new process.

At the moment, there are many ways of getting from A to B:

  • We can drive our own car
  • We can use a car we lease,
  • We can hire a car,
  • We can book a minicab,
  • Use Uber, or
  • Hail a cab off the street.

And these are just the options if we want to travel alone. If we don’t mind travelling with strangers there‘s also:

  • Hitch-hiking
  • Car-sharing
  • Shared taxis
  • Chartered coaches, trains, planes
  • Scheduled services (bus, coach, train…)

There are many trade-offs involved in making the choice, not least cost.

I am warning against making the mistake that we just substitute old technology for new. If everyone who currently has a car suddenly had a viable self-driving car tomorrow, there would be fewer road deaths and injuries, less hold-ups and we could use the journey time more productively.

But self-driving cars change the whole process of getting from A to B. In principle, everyone’s car could drop them off at work in the morning and, instead of sat in the work car park all day, go off and do some Uber work, providing some extra income for you. But this is true for everyone else with a self-driving car. This is going to force Uber rates down very low. But in so many cases, it is not going to be worthwhile having you own car anyway.

There can be a shift from car ownership to using a contract car service. Just as you can choose a tariff for a mobile phone contract based on expected usage, you can select a car service plan (or you can PAYG instead). This might provide an inclusive number of local and/or long-distance miles. There might be some gold/silver/bronze level of service which would determine how long you would need to wait. You could pay for the option that provided you with a maximum 3-minute delay to get a car to your door between 7am and 8am work-day mornings and between 5pm and 6pm in the evening; most days, the car would be waiting on your drive for you. All this organization of where cars should be when would, of course, be coordinated by some artificial intelligence algorithm. Some people would still own cars (flashy status-symbol cars) but a very large number would just use a service that provided them with a reliable way of getting from A to B in the right format (small cab, pickup, van) and weren’t concerned about the badge on the front of the car. The services could in fact be provided by the manufacturers themselves. Their interest would be in minimizing the cradle-to-grave costs of car miles rather than minimizing up-front price and trying to tie you into expensive after-sales costs.

On longer journeys, self-driving vehicles will organize themselves into a string of wirelessly-connected vehicles, travelling closely together so as to improve energy efficiency from slipstreaming. Previously, a string of vehicles would have been called a ‘train’ or ‘caravan’ but the terminology used for a string of self-driving cars is a ‘platoon’. On trunk routes, vehicles can join and leave the platoons at the points where peoples’ journeys converge and diverge. Changes from ‘pod’ cars to ‘carriage’ buses can be coordinated so that the transfer time is only a few minutes. Just a few types of vehicle can provide the whole range of means of transport currently served by vehicles from cars to trains. Self-driving vehicles can change the whole model of how we get from A to B, significantly reducing our transport costs and worries as well as making journeys safer and more enjoyable.

Safe Jobs and Vulnerable Jobs

In the very-frequently cited ‘The Future of Employment’ paper by Frey and Osborne, there is a graph (shown below) that indicates how vulnerable different occupations are to the new technology.

The horizontal scale runs from 0.0 to 1.0 where 0.0 represents completely safe and 1.0 represents completely vulnerable. Jobs are categorized into occupation groups. On the safe left-hand side there are the large majority of managerial, engineering, health worker and teacher jobs. On the vulnerable right-hand side there are the large majority of service, sales, retail, office administration and transportation jobs. But that states the conclusions far too simply.

Calum Chace coined the clumsy term ‘unforecast’ for a postulated scenario that looks like a prediction about the future but where the point is not to make the assertion ‘I think this will happen’ (it invariably eventually turns out to not be so) but to get you to think about how the future may be.

I provide some unforecasts here. They are to get you to think about how things may be different from the stereotypical vision of the future full of anthropomorphic robots working everywhere. The nature of the work will change as a result of new technologies and processes, regardless of where on the vulnerability spectrum the current jobs lie.

Unforecast 1: Transportation

The first unforecast looks at transportation – a ‘vulnerable’ occupation.

For long-distance transportation, we are presented with the vision of platoons of self-driving trucks. And drones are offered as the worker-free solution to local deliveries. But currently, drones are a number of orders of magnitude more expensive per ton mile than trucks. And there will be legal problems managing them. And it will only take a handful of drone terrorist attacks to put their usage back for years.

Imagine that a delivery depot in a particular town currently employs 8 van drivers serving the town and its surrounding villages. The stereotypical idea is that they will be replaced by 8 self-driving vans plus 8 anthropomorphic robots to deliver the package from the van to the bed.

In the long term, this completed solution may be possible (whether this is desirable is an entirely different consideration). But in the medium-term, it will still be cheaper to employ someone to do the last 10 metres (on minimum wage). I imaging the following scenario:

  • There are just 2 delivery people doing the work previously done by 8.
  • A self driving van takes them out to the start of the delivery route.
  • They make a delivery at the drop-off address.
  • Whilst the van is moving to the next destination, the worker can load up a small, short-range drone to take a small, light parcel to its destination close by.
  • Meanwhile 7 other vans are on the road going to various way-points. A central algorithm works out an optimum route.
  • The vans park at various rendezvous points. The ‘driver’ swaps vans, maybe swapping some parcels too.
  • As well as having drones, the worker may be assisted by a ‘robo-trolley’ – something to carry bulky items so that there is no risk of back injury to the worker.

Thus, the workers spend all their time out performing delivery duties. They do not lose time just sat in the van doing nothing except getting from stop A to stop B and going back and forth to the depot.

From the standpoint of today, the job the worker is doing is very vulnerable – 75% of the delivery jobs have disappeared. But the role has changed, not least in being instructed what to do and when by an AI algorithm.

For long-distance haulage, it is a similar story. There are productivity gains from not having drivers getting paid for being sat in cabs for hundreds of miles a day. The trucks mainly travel in platoons on trunk routes, getting to distribution depots right next to the freeway junction, rendezvousing with ‘local’ drivers at truck stops.

Unforecast 2: Caring for the Elderly

Societies around the world are facing the problems of dealing with an ageing population. It is expected that there will be a large increase in the amount of physical and mental health care for the elderly. This will mean an increase in the number of jobs. Current jobs in this sphere will be secure. That is the expectation.

But people are working on robots to help in this field. Here, below, we have the RI-MAN robot being tested on the carrying of a person:

Being Japanese, the robot is very humanoid (I find this Japanese trait rather disturbing) with its face with big friendly eyes. The media reinforce this stereotypical view of robots.

People generally envisage a robot doing something that humans can do, in the same way that a human would do it. This is the case here in this example above. But is there a different way of doing things – either easier to automate or to provide a better solution? Is this the technology that is really needed? For sure, AI can improve on the currently technology to move patients around a hospital – a trolley. We might envisage AI-based improvements to a standard hospital trolley – a ‘robo-trolley’.

Where possible, the right solution is not to have robots physically help the elderly but to allow the elderly to move themselves. This is more dignifying, allowing them to keep their independence. One example would be an ‘exo-skeleton’ providing movement, fine motor skills and strength. This is a lower cost and it is simpler from a legal perspective – the user maintains responsibility for their actions.

Now, I want to contrast physical infirmity with mental infirmity. Technology for the former is currently very expensive but will come down in cost. But it will still be a substantial cost. Compare this with this unforecast regarding mental care…

In caring for patients with dementia, it is often best to lie to minimise distress. Carers should go along with what is being said, and steering the conversation onto something else. Going over the same conversations will be tedious for the carer. Potentially, a digital assistant could do much of this work (note again: this is trying to increase productivity rather than getting ‘the machines’ to do everything). These assistants (e.g. Alexa, Siri) can quite easily be given a face (just as the film industry can use CGI to map human faces to non-human faces). See below regarding an animated talking head ‘Zoe’:

Consider a psychology-trained dementia carer (we will also call her Zoe) who looks after many dementia patients. Occasionally, she can visit her patients and have face-to-face interaction. But for much of the time she is assisted by many virtual Zoes – one per patient. These virtual Zoes appear as if via videophone and can engage the patients in conversation. As well as providing supportive responses (suitably evasive, as with ELIZA), they can also record the conversations, learn from them and filter relevant information to feed back to real-Zoe for assessment. Real-Zoe monitors conversations and guides the software for many patients. If need be, real-Zoe can visit the patient in person but for the vast proportion of the time, a patient is kept engaged, and always monitored, by a virtual-Zoe. Unlike a human, the Virtual Zoe never tires of the same conversations.

Here is a significant point: Once the software has been developed, the role-out cost is very cheap – not much more than 1 iPad per patient. This is much cheaper than the hardware needed for physical care, mentioned above.

New Process: Platforms

As I have described previously, technological revolutions can involve processes (new ways of doing things) as well as the application of new technology. An example of such a wave of change that is currently underway is the ‘platform economy’. In the late-1990s dotcom boom there was great expectation of companies providing sales and services over the internet (itself the natural consequence of previous revolutions in the electronic technology of computers and communications). But then there was the dotcom crash. The companies that came to dominate afterwards (becoming some of the biggest companies in the world) weren’t just taking sales and services that had previously been done face-to-face and putting them on the internet. A new ‘platform’ way of doing things emerged.

For example, we think of Google as the internet search company (that has now branched out to do other things). But it is really an advertising company. It gets it revenue by providing a free platform whereby internet users can connect with information – but in doing so, Google gathers information about that user which enables it to then provide very focussed advertising to that user (much better than non-internet advertising which is suffering as a result). It is the same with free services like Facebook and Youtube. They are not connecting people to share information from the goodness of their hearts.

But there are other innovative methods that are being employed. One is the ‘freemium’ model where a basic service is provided for free but users can pay extra to get a ‘premium’ service. Examples of this are LinkedIn, Spotify and Skype.

Then there are the so-called ‘peer-to-peer’ services which connect people to other ‘ordinary people’ who provide some service using what they have, as a part-time activity. People can provide ‘virtual internet stores’ on Ebay. People can use their cars to provide Uber taxi services. People can use spare rooms to provide Airbnb ‘bed-and-breakfast’ (or similar) services.

Another phenomenon is providing a service that actually is done from the goodness of people’s hearts. People are willing to donate time and money to provide free products like Linux and LibreOffice and Wikipedia that are substitutes for products like Microsoft Windows, Microsoft Office and Encyclopedia Britannica – and these are products that are expensive (the first two have made Bill Gates the richest man in the world!). Some of these free products are actually superior than the original! (I would nominate Wikipedia as one of the modern Wonders of the World.)

A characteristic of these platforms is the near-zero marginal cost – the cost of setting up the product (website) initially (including the development of software) may be substantial but the cost of adding an extra user (‘customer’) is virtually nothing. For example, the total Facebook storage of 200 Petabytes for 2 billion users gives an average of 1Mbyte per user. You or I can currently buy hard drives at around $30 per terabyte (but Facebook buys disks in bulk!) That equates to 0.003 cents per user! (OK, it’s a bit more complicated than that, but you get the idea.)

Unforecast 3: Coffee Shops

What might a Starbucks outlet of the future look like? Many imagine stereotypical Japanese humanoid robots travelling around delivering coffee. But here is a different vision; a mini-unforecast:

  • The word ‘tablet’ has gained a new meaning since the arrival of computer devices like iPads. The word is of course a diminutive of ‘table’. Touchscreen ‘tables’ (huge iPads on legs) would provide an ‘internet café’ with huge screens that you don’t have to carry around.
  • Beyond normal computer/internet usage, the screens would be used to make your order and pay (just by placing your phone on a particular part of the screen).
  • We are conservative in our built environment. Our bars and restaurants are typically fake imitations of bars and restaurants of yesteryear. A vending machine might be able to make coffees to particular requirements faster and more cost effective than a human but they have no soul! So imagine instead a self-operating Gaggia providing a theatre-like performance of making the coffee: the sounds of the steam and the knocking out spent coffee into the bin as well as the visual, including the specifically-ordered choice of pattern on the top.
  • That just leaves delivering the drinks to the table (customers could help themselves to be quicker), clearing up afterwards, and opening up and shutting up shop (including managing the vacuum-cleaning robots). These tasks will be done most cost-effectively by humans for some time to come. The tasks are less frenetic than those of the human baristas that presently work feverishly away behind the counter.

After automation has taken away significant parts of the job, the job is less skilled but (hopefully) less stressful. Now: when are robots going to be cost-effective at automating those remaining tasks?

We will return to this Starbucks of the future in a short while.

Unforecast 4: University Education

The Flipped Classroom

Lecturers have talked in front of students for centuries:

Lecturing is that mysterious process by means of which the contents of the note-book of the professor are transferred through the instrument of the fountain pen to the note-book of the student without passing through the mind of either.

In an era when lectures can be recorded, it is absurd to employ lecturers to perform. In the Flipped classroom model, students view a recorded lecture and the teachers then support the students in their exercises (frequently left as homework): what is done inside and outside the classroom are reversed. It is after the lecture that students need to be able to ask questions and get help. The lectures teach and the teachers tutor.


It has been possible to broadcast courses to a huge number of students for decades: the Open University in the UK initially broadcast courses on TV in the 1970s. Courses can now be delivered over the internet (of course). Most are what are now called ‘MOOCs’: ‘Massive Open Online Courses’:

  • They are online.
  • This makes them potentially ‘massive’ – huge numbers of students can be accommodated.
  • They may be open, available to all at no cost (example: the Khan Academyon Youtube).
  • They are courses – involving tuition and examination.


  1. Streaming curriculum content to millions is easy.
  2. Having a business model to sustain the courses is more difficult.
  3. But it is the tuition and examining that is the difficult part of on-line courses.

Regarding point 2: One MOOC provider is Coursera. It provides university-level on-line courses. In some cases, these courses are virtually the same as actual undergraduate courses. (Incidentally, one of the co-founders of Coursera was Andrew Ng, a Stanford University professor who is a significant figure in the development of Deep Learning.) They have a Freemium business model. If you pay a modest fee, you can get a certificate to prove (to a potential employer, for example) that you passed the test. But if you don’t want to have proof, the course is free.

And now regarding point 3: The lack of a MOOC solution to tuition and examining means that it has promised much but not delivered – so far. New technology is available but is has been applied to old methods with limited effect. It requires new processes to improve how courses can be run on a massive scale such that they have a dramatic impact on education.

We cannot assume that new technology will not impact ‘safe jobs’. I think that the impact of automation on primary education will be small and that it will noticeably change the way teachers work in secondary schools – automation will not affect their job security. But I believe that the apparent failure of MOOCs so far has made most universities complacent. It is like the false-start of the dotcom boom and subsequent bust which was then followed by the emergence of the FANG (Facebook, Amazon, Netflix, Google) giants which is leading to a long slow decline in so many old economy businesses. This will apply to many universities once innovative new processes for MOOCs are discovered.

Next I turn to ideas about new processes in (predominantly university) education.

Peer to Peer

Examination by multi-choice is simple and is easily automated so a course can satisfy the ‘M’ of the ‘MOOC’. But it has its limitations, particularly dependent on the subject of the course being offered. Examination by essay needs a number of markers proportional to the number of students. This is possible (it is what is done currently, after all) but it is difficult for a single institution to roll out a course ‘massively’. More efficient ways of examining are sought; new processes are desired.

Just as Facebook get its users to gather information for then directing advertising to them, one approach is to get the students to mark students exams! This is ‘peer-to-peer’ marking, otherwise known as ‘peer assessment’.

One example is as follows. After submitting an essay, a student receives 5 anonymous essays to mark, with guidance on the various criteria that should be used, and they send back a score. Students will then get a marker’s grade as well as an essay grade; the closer your scores are to those of others, the better your marker’s grade will be. This would be supplemented by plagiarism-detecting software and random spot checks by professional markers employed by the course provider.

The Examination Game

Andy Clark tells a tale of how, years ago, the philosopher Dan Dennett was talking to an eminent professor of paleontology (who he does not name). The professor complained that his students were cheating at stratigraphy by just copying out diagrams from books. Dennett responded that he should get them to play a computer game. If you want to test their understanding of stratigraphy, you don’t ask the question ‘describe how such-and-such a layer is formed’; you provide them with a game in which various knobs cause various events, such as:

  • Deposition of sediment,
  • Erosion,
  • Intrusion of lava, and
  • Controlled fracture

If the students can play the game by twiddling the knobs in a correct order and with the correct intensity to create the required layers, they have demonstrated that they really do understand the process and can be marked accordingly.

Furthermore, the examiner doesn’t need to spend time marking the results. The game provides the score itself. Obviously, it takes time and effort to create such a game but, once written, there is near-zero marginal cost – it can be rolled out on a massive scale.

Note: games have cropped up again in this talk. Just as games provide a simple controlled environment to test Artificial Intelligence programs, they also provide an automatable controlled environment to test human intelligence. Another controlled environment that lends itself to automated examination is virtual reality – also associated with games.

Starbucks University

MOOCs fall short of the true university experience in not having students interacting face-to-face with each other and with the various services of the university. The MOOC model hasn’t quite been perfected such that it can seriously compete with the traditional bricks-and-mortar universities.

But here’s another ‘un-forecast’ (one that is more outlandish than the previous ones). Imagine that Starbucks buys Coursera (for a huge sum of money). They do that because they recognize that their 27,000 outlets can provide the physical location for students to meet and socialize and receive tuition and pastoral care from experts.

In unforecast #3, I presented a vision of coffee outlets of the future in which the residual job for humans to do comprised of tasks like clearing tables and locking up shop – – performing unskilled, minimum wage type work. But many of the staff across the 27,000 sites of the ‘Starbucks University’ could be upgraded to highly-skilled counsellors providing pastoral care to students and acting as ‘local tutors’. There would also be ‘remote tutors’, present on online subject-specific forums. The remote tutors would be experts in their subject. The local tutors would not be expert in any subject other than how to study through MOOCs. They would teach ‘Learning how to learn’. The local tutors would work with the students to help them find answers themselves. Only rarely would this involve a 3-way spoken interaction between the student, the local tutor and the remote tutor.

For many courses, there would still need to be a residential part of the course, but this would be a small fraction of the course period.

This is not a ‘near-zero marginal cost’ business model that allows rapid expansion leading to domination of the market, but it provides a marginal cost much less than traditional universities:

  • The ratio of remote tutors to students would be much lower than the ratio of lecturers.
  • The ratio of local tutors to students would be much lower than the ratio of assistants.

The economies of scale would mean that early adopters could enrol hundreds of thousands of students per year whilst the majority of remaining universities would fall by the wayside, with some becoming a provider of low-cost accommodation for young people and a provider of venues for residential course modules. Many of these early adopters are prestigious universities. Why pay significant sums of money to a middling traditional university when you can pay less for an online degree from a prestigious university?

Course fees would be split between the course provider (the university) and the course facilitator (Coursera, becoming Starbucks) but would be much lower than present fees. It is much better for a university to move from charging 10,000 students per year to charging 400,000 students at a quarter of the rate.

But course facilitators (Starbucks could be in competition with other coffee chains) may not charge at all!

Starbucks may gain income from its newly-acquired educational services but it could be that it earns nothing directly (making those courses very cheap);

Just as Google and Facebook provide free services to the public as a means of earning revenues in seemingly unrelated business, Starbucks’s provision of free university services could just be a way of selling more cups of coffee! This would be achieved by:

  • Students drinking coffee during the day whilst they study, rather than elsewhere, and
  • Students preferring to drink (discounted) coffee in their leisure time in the evenings making it economic for most Starbucks outlets to stay open late. Other destinations for students would suffer as a result.

The point of this (and other) unforecasts are to emphasize that:

  • The new ways of doing things (processes) that are enabled by the new technology will often be surprising.
  • Roles in supposedly ‘safe’ occupations may change radically; many jobs in ‘vulnerable’ occupations will not disappear anytime soon.
  • This can result in dramatic increases in productivity. Alternatively viewed, it can mean that costs to customers can be dramatically reduced.
  • This can be very bad for many complacent organizations who think that they are generally immune from the new technology.
Posted in Uncategorized | Tagged , , , , , | Leave a comment