Programming, Past and Future

Steven Pemberton, CWI, Amsterdam

The author

Contents

About me

Richard GrimsdaleMy university tutor was Richard Grimsdale, who built the first ever transistorised computer

Turing

Alan Turing on UK £50 noteGrimsdale's tutor was Alan Turing. (Making me a grand-tutee of Turing).

Turing is considered the father of AI. In his 1950 paper "Computing Machinery and Intelligence", (75 years ago next month!) he starts with

"I propose to consider the question, 'Can machines think?'",

and introduces what is now called the Turing Test of machine intelligence.

Post-University

MU5I (coincidentally) went on to work in the department in Manchester where Turing worked and wrote that paper.

I worked on the 5th computer in the line of computers Turing also worked on, the MU5.

Later I was university lecturer in Brighton

Amsterdam

A project meetingMoving to The Netherlands, I co-designed the programming language that Python is based on.

I wrote a part of gcc

ABC

That programming language was a research project to design a programming language more aligned with the programmer's needs.

For instance no (built-in) limits.

Many modern-day encryption algorithms were designed using ABC for that reason.

We designed it using what you would now recognise as User Interface principles:

Python

Guido van Rossum moved on to an operating system project, and needed a systems programming language for it, so built on what we had learned.

Origins of Python article
Origins of Python Documentary

Internet

Steven at a computer in the 80'sI was the first user of the open internet in Europe, in November 1988.

CWI set up the first European internet node (64Kbps!), and then two spin-offs to build the internet out in Europe and the Netherlands.

Since 1988, the internet connection in Amsterdam has nearly doubled per year, and is currently the fastest internet switch in the world, peaking at over 14Tbps.

Speed

Over 14 Tbps!

Views

The Views SystemIn the late eighties, I co-designed a system that looks like a browser:

Web

Steven with TIm Berners-LeeI organised workshops at the first Web conference at CERN in 1994

I was chair of the HTML, XHTML, and XForms Working groups at W3C.

I co-designed HTML, CSS, XHTML, XForms, RDFa, and several others.

I still chair XForms and ixml.

The Evolution of Programming

Thirty seven years of Internet in Europe

Thirty seven years ago, the open internet started in Europe.

I would contend that we still consider the internet as something new.

But on that day in 1988, public computing was also only just over thirty years old.

1957: The first municipal computer (Norwich, UK)

The First Computer in Norwich

Just one of 21 cabinets making up the computer.

2015: The Raspberry Pi Zero

Raspberry Pi in Norwich

The first computer so cheap that they gave it away on the cover of a magazine

How do they compare?

The Elliot ran for about a decade, 24 hours a day.

How long do you think it would take the Raspberry Pi Zero to duplicate that amount of computing?

How do they compare?

The Elliot ran for about a decade, 24 hours a day.

How long do you think it would take the Raspberry Pi Zero to duplicate that amount of computing?

The Raspberry Pi is about one million times faster...

Compare

The Raspberry Pi is not only one million times faster. It is also one millionth the price.

A factor of a million million times better.

A terabyte is a million million bytes: nowadays we talk in terms of very large numbers.

Want to guess how long a million million seconds is?

Compare

The Raspberry Pi is not only one million times faster. It is also one millionth the price.

A factor of a million million times better.

A terabyte is a million million bytes: nowadays we talk in terms of very large numbers.

Want to guess how long a million million seconds is?

A really big number...

Moore's Law

In fact a million million times improvement is about what you would expect from Moore's Law over 58 years.

Except: the Raspberry Pi is two million times smaller as well, so it is much better than even that.

This probably has to do with how early computers were priced.

How computers were priced

Pre computers computing

When Edison introduced electric light in the home, he charged not what it cost to produce the electricity, but what it would cost you to produce the same light without electricity, but now with extra advantages, such as instant-on, and less danger.

Similarly, the first computers were not priced on how much they cost to produce, but on how much you would have to pay to do the same work without computers.

Sixty Years of Moore's Law

Moore's original graph

In 1965 Gordon Moore proposed that the number of 'components' on a chip would double per year at constant price (and size).

In 1975, he adjusted it to 18 months.

In 2025 Moore's Law has turned 60 years old.

Or less prosaically: Moore's Law is 40 iterations of itself old.

Reports of Moore's Law's death are greatly exaggerated

The first time I head that Moore's Law was nearly at an end was in 1977. From no less than Grace Hopper, at Manchester University.

Since then I have heard many times that it was close to its end, or even has already ended. There was a burst of such claims in 2015, which caused a wag to tweet:

"The number of press articles speculating the end of Moore's Law doubles every eighteen months."

Moore's Law: not dead yet

50 years of processors

Source

An article by a journalist who had been mourning Moore's Law for a decade, and realised he was wrong.

What exponential growth really means

Often people don't understand the true effects of exponential growth.

A BBC reporter: "Your current PC is more powerful than the computer they had on board the first flight to the moon". True, but oh so wrong.

Paper

Take a piece of paper, divide it in two, and write this year's date in one half:

Paper

Divide the other half in two vertically; write the date 18 months ago in half:

Paper

Divide the remains in half, and write the date 18 months earlier, i.e 3 years earlier than today:

Paper

Repeat until your pen is thicker than the space you have to divide in two:

This demonstrates that your current computer is more powerful than all other computers you have ever had put together (and way more powerful than the computer they had on board the first moonshot).

1957

In the 50's, computers were so expensive that nearly no one bought them, nearly everyone leased them.

To rent time on a computer then would cost you of the order of $1000 per hour: several times the annual salary of a programmer!

When you leased a computer in those days, you would get programmers for free to go with it.

Compared to the cost of a computer, a programmer was almost free.

Programming in the 50's

TypingIn the 50's the computer's time was expensive. A programmer would:

Why? Because it was much cheaper to let 3 people check it, than to let the computer discover the errors.

The design of programming languages

The first programming languages were designed in the 50s:

Cobol, Fortran, Algol, Lisp.

They were designed with that economic relationship of computer and programmer in mind.

It was much cheaper to let the programmer spend lots of time producing a program than to let the computer do some of the work for you.

Programming languages were designed so that you tell the computer exactly what to do, in its terms, not what you want to achieve in yours.

The argument for having programming languages at all was not that it made programmers' lives easier, but that you could run programs on more than one machine (since they were all different).

1968

A short ten years later, there was already talk of a software crisis.

Programs being written that weren't functional, and/or weren't delivered on time, and/or on budget.

Back to now

It happened slowly, almost unnoticed, but nowadays we have the exact opposite position:

Compared to the cost of a programmer, a computer is almost free.

I call this Moore's Switch.

Moore's Switch

Moore's Switch illustrated
Relative costs of computers and programmers, 1957-now

But, we are still programming in programming languages that are direct descendants of the languages designed in the 1950s!

We are still telling the computers what to do.

Declarative programming

A new way of programming: declarative programming.

This describes what you want to achieve, but not how to achieve it.

Let me give some examples.

The first declarative definition

Declarative approaches describe the solution space.

A classic example is when you learn in school that

The square root of a number is a number that multiplied by itself gives the original number.

This doesn't tell you how to calculate the square root; but no problem, because we have machines to do that for us.

Procedural code

function f a: {
    x ← a
    x' ← (a + 1) ÷ 2
    eps ← 1.19209290e-07
    while abs(x − x') > eps × x: {
        x ← x'
        x' ← ((a ÷ x') + x') ÷ 2
    }
    return x'
}

This is why documentation is so essential in procedural programming, because there is such a large gap between the problem space and the solution space.

What does 'Declarative programming' mean?

A Procedural Clock

A clock in C, 1000+ lines

1000 lines, almost all of it administrative. Only 2 or 3 lines have anything to do with time.

And this was the smallest example I could find. The largest was more than 4000 lines.

A Declarative Clock

type clock = (h, m, s)
displayed as 
   circled(combined(hhand; mhand; shand; decor))
   shand = line(slength) rotated (s × 6)
   mhand = line(mlength) rotated (m × 6)
   hhand = line(hlength) rotated (h × 30 + m ÷ 2)
   decor = ...
   slength = ...
   ...
clock c
c.s = system:seconds mod 60
c.m = (system:seconds div 60) mod 60
c.h = (system:seconds div 3600) mod 24

A Running Declarative Clock

The Views System

The Declarative Clock in XForms

XForms

XForms is an XML-based declarative system for defining applications. BBC Sport App

It is a W3C standard, and in worldwide use.

Example: 150 person years becomes 10!

A certain company makes one-off BIG machines (walk in): user interface is very demanding — traditionally needed:

5 years, 30 people.

With XForms this became:

1 year, 10 people.

Do the sums. Assume one person costs 100k a year. Then this has gone from a 15M cost to a 1M cost. They have saved 14 million! (And 4 years)

Example: Insurance Industry

Manager: I want you to come back to me in 2 days with estimates of how long it will take your teams to make the application.

Example: Insurance Industry

Manager: I want you to come back to me in 2 days with estimates of how long it will take your teams to make the application.

[Two days later]

Programmer: I'll need 30 days to work out how long it will take.

Example: Insurance Industry

Manager: I want you to come back to me in 2 days with estimates of how long it will take your teams to make the application.

[Two days later]

Programmer: I'll need 30 days to work out how long it will take.

XFormser: It's already running!

Example: NHS

The British National Health Service started the Lorenzo project for a distributed national health records system.

Example: NHS

The British National Health Service started the Lorenzo project for a distributed national health records system.

One person then created a system using XForms.

Example: Map

I've got a position in the world as x and y coordinates, and I want to display the map tile of that location at a certain zoom.

My data:

x, y, zoom

Openstreetmap has a REST interface for getting such a thing:

http://openstreetmap.org/<zoom>/<x>/<y>.png

Map interface

However, the Openstreetmap coordinate system changes at each level of zoom.

As you zoom out, there are in each axis half as many tiles, so there are ¼ as many tiles. And the interface indexes tiles, not locations.

So to get a tile:

  1. You have to know how big a tile is
  2. you have to calculate the correct index using this plus the zoom.

Declarative Example

The data: x, y, zoom

scale = 226 - zoom
tilex = floor(x/scale)
tiley = floor(y/scale)
url = concat("http://tile.openstreetmap.org/", zoom, "/", tilex, "/", tiley, ".png")

That is really all that is needed (modulo syntax, which looks like this:)

<bind ref="tilex" calculate="floor(../x div ../scale)"/>

That's the form. Now the content:

<input ref="zoom" label="zoom"/>
<input ref="x" label="x"/>
<input ref="y" label="y"/>
<output ref="url" mediatype="image/*"/>

and the tile will be updated each time any of the values change.

Live tile with zoom

Source

Map

Source

Map

Source

Summary

For historical reasons, present programming languages are at the wrong level of abstraction: they don't describe the problem, but only one particular solution.

Declarative programming allows programmers to be at least ten times more productive: what you now write in a week, would take a morning; what now takes a month would take a couple of days.

Once project managers realise they can save 90% on programming costs, they will switch to declarative programming.

I believe that eventually everyone will program declaratively: fewer errors, more time, more productivity.

Nov 6/7 Declarative Amsterdam, Science Park, Amsterdam. http://declarative.amsterdam/