I have to wonder about the impact that programming will have on businesses.
In the simplest sense, the principle purpose of a programming language is to remove some ambiguity from a set of expressions. The more ambiguity is removed, the “lower-level” the language is, until you get to assembly – where there is only one possible way to execute the program.
The higher level a language, the more ambiguity can be left in. There are a number of types of ambiguity, but let’s talk about two: the ambiguity of application, and the ambiguity of execution.
In the ambiguity of application, a program can be executed against an unknown set of ‘things’ – as long as they meet some criteria, the program will work. Consider, in Python, iterating over a list, a tuple, or a dictionary. In all cases the form is the same:
for element in iterable:
The ambiguity of execution comes in the form of a declarative language – the programming specifies the output – the compiler or interpreter chooses to get to that output. SQL is the most common declarative language in use, that I know about. For instance:
Select sum(amount_paid) from invoices where datetime > ‘2013-11-01’
The execution path can differ on the underlying database software and design.
As languages become higher level, both the barrier to entry and the usefulness of the language increases.
The power of programming is that you can specify the operations or output needed, and the computer can execute it – not a person.
In pre-computer business (and for much business today) people decide on the process and then they have a person complete the process. There are varying amounts of ambiguity that people can handle; at the lowest level, the employee may check with their supervisor for any deviation from the expected process, no matter how minor. This is similar to a computer whose program has not been created to deal with that instance; so similar, in fact, that I don’t see much difference.
Programming is much, much more efficient than using people, in a way that I’ve only recently begun to understand. A program describes how to accomplish something - precisely, with no ambiguity. Using version control, you can examine how a program has developed - including comments on why certain choices about how to accomplish the task were made.
This knowledge is cumulative.
Unlike an employee, who may leave. New employees have to be trained, and you start from zero every single time.
An organization that employs people to do ostensibly traditional tasks, but in a fashion that results in programming code, would be constructing an incredible amount of organizational history. Even if the result of the work is a collection of programs, each used only a handful of time, having that level of precision about what a task entailed in written form enables a new kind of learning organization. One that only every gets better.