March 13, 2017

Programming like it is still Middle Ages, Part 1 - Modes of Production

Human economic activity generally revolves around production: nearly all what we consume has to be produced first.  Production of anything requires inputs, labor, and capital.  Inputs are goods which are consumed in production of the output goods: as parts, as materials used in production, as other necessities such as electricity for lighting shops, etc.  Labor is provided by people (and only by people - robots are tools), and capital is the set of durable goods (tools, machines, buildings, etc) needed to production but which is not consumed as a part of production.  Of course, to produce something one need to know how to produce it: the knowledge is clearly the crucial part of production, but it is not consumed during production (if anything, more knowledge is gained in the course of production). Knowledge is costly to acquire and thus is properly categorized as a form of capital.

Sometimes it is hard to tell which is which (for example clearly capital goods like tools and buildings are also consumed, although slowly: they depreciate with time and use).  It is also hard to disentangle labor from knowledge, especially in the white-collar occupations.  Let's just say that some factors of production may to a some extent belong to multiple categories.

Historically, the human society progressed through a series of production modes (although any society normally has multiple production modes co-existing), which can be roughly classified as following:
  • Hunter-gatherer mode: there is not much capital involved, and all inputs occur naturally. Finding and taking them is all labor, and no attempts are made to codify or preserve knowledge.  This mode of production was prevalent in primitive societies and its productivity is only sufficient for sustenance-level living.  This mode of production does not actually require sentience: the instincts are sufficient, and animals are hunting and gathering nearly as well as humans can.
  • Agrarian mode: the capital is overwhelmingly in a form of naturally occurring things: land and livestock, and all inputs (rain, sun, etc) are natural.  Like hunter-gatherer mode, it is labor intensive, but does not require advanced knowledge (the oral tradition is sufficient to pass the knowledge on); however this mode is also more productive than previous which allowed agrarian societies to produce surplus product, and enabled accumulation of capital and knowledge needed for creating civilization.  Pretty much any able-bodied man can be an agrarian worker with only a little instruction.  Agrarian mode of production was dominant from antiquity and until the modern industrial era.
  • Artisanal mode: the production is characterized by increasing division of labor and introduction of the supply chain: the inputs of artisans are often intermediate goods produced by agrarians or other artisans. Artisanship also requires specialized knowledge and more capital (mostly in form of buildings and specialized hand tools).  The specialized knowledge is passed down by guilds in master-apprentice arrangements, but there is not much knowledge exchange between guilds.  Artisanship is still labor-intensive, and every product is unique because there are no widely accepted standards or best practices (and, in fact, guilds considered keeping their unique knowledge to themselves as something desirable and a way to limit competition).  The uniqueness could be desirable (as in art), but for most goods it is deleterious.  Within their broad specializations artisans are expected to be capable of doing pretty much any task.  The artisanal mode of production coexisted (and was supported) by agrarian mode, and reached its peak during late Middle Ages.
  • Industrial mode: the supply chains become very complex and hierarchical, and the production is capital-intensive because tools and machines become complex and even more specialized. The industrial production involves two very distinct kinds of labor: the manual (aka blue-collar) labor, basically using people to perform routine and repetitive actions for which there are no adequate machines (or when it is cheaper to use labor) and the white-collar labor of managers and engineers who create plans and instructions for the production.  The blue-collar workers are expected to follow these instructions precisely, in a machine-like fashion.  The knowledge needed for the production becomes so complicated that industrial production is impossible without shared written records (in textbooks, industry publications, etc) and specialized training by educational institutions.  Because more and more operations involved in production are performed by machines, the output of industrial production is by necessity more standardized than output of artisans.  The industrial mode of production also requires the supply chain of capital goods which often involves even more complex and knowledge-intensive production.  Most modern production (including agriculture) is industrial.
The common trends in this progression are increasing capitalization and reduced labor-intensity (which allows for dramatic gains in productivity per worker), with increasing complexity of supply chains and the knowledge required for production.  Basically, to achieve higher productivity more capital and knowledge are required.  (The productivity per worker is important because it directly translates into how much goods is available for consumption per person: i.e. it defines the welfare of the society).

Relatively recently (see Prof. Daniel Bell's book The Coming of Post-Industrial Society: A Venture in Social Forecasting, 1973) it became fashionable to postulate the fifth mode of production: post-industrial, or knowledge-based economy increasingly defined by production of the so-called Intellectual Property (IP for short).  This notion is vague and conflates knowledge and information: knowledge is something residing in a brain, while information (in a narrow meaning as an economic good) is something existing outside of a person.  The post-industrial mode of production is supposed to reduce both capital requirements and labor and is supposed to displace the industrial production, while being dependent on computers and information technology.

This notion of the fifth production mode is arguably dubious, because it cannot exist without industrial production going on elsewhere (people need to eat and dress, and computers need to be manufactured).  In fact, it is nothing more that a part of industrial mode of production: the part involving white-collar labor.  It is possible to have a society specializing in this, but only if it is integrated by global trade with industrial societies.

As I will argue in the second part of this post, the confusion surrounding the notion of post-industrial mode of production has served to cloud our thinking about the nature of software development.

Welcome to AutoCoder.AI blog

First, a little bit about ourselves: AutoCoder.AI is an early-stage startup focused on Software Development Automation.  We're inventing and developing the new ways to program with assistance from an advanced AI.  It's not about a new language or a new development environment: we're not interested in more of the same.  What we want to change is what programming is: we're not afraid to reexamine the fundamentals and try radically new approaches to old (and hard) problems.

The founders of the company are not wide-eyed optimists fresh out of college: we are industry veterans, with over a million lines of production code behind us, and here's a sample (by far incomplete) of what we built as engineering leaders and entrepreneurs:
  • A family of Unix-compatible operating systems.
  • The second commercial Internet Service Provider in the world.
  • Compilers and interpreters.
  • A line of widely used credit card terminals.
  • An embedded O.S.
  • Engineering of the first commercial DS-3 Internet backbone and managing Internet connectivity between US and Europe in early 90s.
  • The first IP router capable of Tbps speeds.
  • Secure middleware for US Department of Defense.
  • The high-performance web reputation service with millions of active users.
  • The key differentiating features of the best-rated cloud-based data warehouse.
Our current endeavor is born out of growing dissatisfaction with the direction of our profession: we feel that there was little or no progress in software quality and no reduction in routine drudgery which takes most of the programmers' work days. For those of us who were writing code since early 1980s it is obvious that there are alarmingly few signs of positive change in our field: the computers got tremendously faster but we still seem to be stuck in the same tar pit as far as creating software goes (the allusion to Fred Brooks' classic book is intended).

"The software is eating the world"... this is quite true in a sense that more and more artifacts produced by the civilization contain or comprised of software.  But as the prominent Soviet computer scientist Prof. Andrey Ershov (if you haven't heard about him, he's the guy who invented hashing) once quipped: If architects were designing buildings the way programmers write code the very first stray woodpecker would destroy the civilization.

To get a sense of how much things have not changed since his time read his 1972 JCC presentation Aesthetics and the human factor in programming - it is amazing that his words are just as relevant today as they were 45 years ago.

So... this blog.  It is not intended as an official company's marketing outlet.  In fact, all the opinions expressed here are our personal opinions, and what will be posted in this blog may have no bearing whatsoever on what our company does.  It's just a place for gratuitous rants, senseless curmudgeonry, and half-baked thoughts.  You've been warned.