Three interwoven timelines

Steven Pemberton, CWI, Amsterdam

The Author


  1. SIGCHI is 40!
  2. Timeline
  3. Me in SIGCHI
  4. Timeline
  5. 1997 Conference Chair, CHI 97 Atlanta
  6. 1998-2004 Editor-in-Chief interactions
  7. Awards
  8. CHI Nederland is 25!
  9. CHI Nederland
  10. Success
  11. Me
  12. 1988 Internet
  13. 1988 Views
  14. 1991 Web
  15. W3C
  16. Now
  17. HCI
  18. Notations
  19. Example: Numbers
  20. Notations and HCI
  21. Amsterdam: Notations
  22. ABC
  23. ABC: results
  24. ABC: results
  25. ABC: results
  26. ABC: results
  27. ABC: results
  28. ABC: results
  29. TAXATA
  31. The Original Web: Declarative
  32. The first declarative definition
  33. Procedural code
  34. Declarative programming
  35. The design of programming languages
  36. 2022
  37. Moore's Switch
  38. Declarative programming
  39. A Procedural Clock
  40. A Declarative Clock
  41. A Running Declarative Clock
  42. XForms
  43. Example: 150 person years becomes 10!
  44. Example: Insurance Industry
  45. Example: Insurance Industry
  46. Example: Insurance Industry
  47. Example: NHS
  48. Example: NHS
  49. State
  50. Clock
  51. Map
  52. Conclusion (programming)
  53. Conclusion (notations)
  54. Thank you!

SIGCHI is 40!

SIGCHI 40 logo

SIGCHI: Timeline

1982 May First 'CHI' conference, Gaithersburg USA, organised by SIGSOC

Social and Behavioural Science Computing existed already 13 years since 1969.

SIGSOC renames to SIGCHI

1983 Boston first conference named CHI.

April 1982 bulletin cover July 1982 Bulletin April 84 Bulletin


I came to the Netherlands on a sabbatical in 1982. And stayed.

Steven 1982ish


Bulletin online All my research is technical but has an underlying question: how do you make computers easier to use.

1991 CHI in New Orleans, my first, presentation

1993 first 'international' CHI, InterCHI 93 Amsterdam: I am local organiser, and de facto SV chair

1994 January, Editor-in-Chief SIGCHI Bulletin, up to 1999

1995 Student Volunteer Chair at CHI 95, Denver

1995 SIGCHI Bulletin online on web, one of the first

1997 Conference Chair, CHI 97 Atlanta

CHI97 chairs

The Olympics had been in Atlanta the year before

1998-2004 Editor-in-Chief interactions

interactions cover

My favourite issue: A study of what would happen if mobile phones included cameras.

This was before most people (including me) even had a mobile phone.


2009 Lifetime Service Award

2022 Lifetime Practice Award, New Orleans

CHI Nederland is 25!

CHI NL logo

CHI Nederland: Timeline

1985: Dutch language, non-SIGCHI "MCI” (Mens-computer Interactie).

1993: InterCHI in Amsterdam, all 3 chairs from MCI

1995: Plans to merge. Battle over name

1998 January: First conference with Jakob Nielsen as keynote: 200 attendees

Jakob Nielsen


Becomes 2nd largest local SIG

Annual Web and Beyond conference + CHI Sparks Conference

Web and Beyond 2010


2019: Restart?

Battle over name again

Now: We're back!

CHI NL logo

Me: Research Timeline

1982: ABC→ Python

Steven demonstrates B at a Mac

1988 Internet

Steven at a terminal

CWI was first European open internet node

Then 64kbps connection, today nearly 10Tbps! (Nearly a doubling per year).


Views running

1991 Web

Tim Berners-Lee and Steven

1994 First Web conference: I organised 2 workshops


1995 Chair European W4G

W3C: Chair Stylesheet workshop


Go on to chair HTML: XHTML, XForms, RDFa


Notations: ixml -- declarative data abstraction notation, XForms -- declarative programming language, declarative IoT

Conference: Declarative Amsterdam

Declarative Amsterdam logo


A problem is that the people designing things are usually not the people who will be using those things, and yet they tend to design for themselves.

So... you have to use HCI techniques:


Few talk about the usability of notations.

Yet the design of notations affects what you can do with them.

Example: Numbers

For instance, Roman numerals:

Notations and HCI

MU5 computer

Algol 68: First language for users not computers, from CWI. Ahead of its time. Consistency. If you use the word "dereference", then Algol 68 has touched your life. Compare with Pascal: designed for machines.

Newspeak: How to reduce number of dynamic errors - No array errors, no dereferencing NIL, No ELSE

Amsterdam: Notations

ABC: Designed using HCI principles - user centred design, iterative design, user testing.

Views: An environment, comparable to a browser


RDFa: CSS for meaning. CSS attaches (display) properties to elements. RDFa attaches (semantic) properties to elements

XForms: Declarative programming language

A redesign of maths notation

ixml: data abstraction language

(You can find all these things on my home page).


We designed a programming language: ABC

We used HCI principles:

ABC: results

A procedural language with only 5 very high-level data types.

Our biggest take aways:

ABC: results

ABC: results

ABC: results

ABC: results

ABC: results

Many cryptographic algorithms in use today were designed with ABC

ABC went on to form the basis of Python.


In building a programming environment for ABC, we developed a concept that was a stronger version of WYSIWYG, that we called TAXATA: Things are exactly as they appear

We built a system (Views) that made this principle the central element of the design: if you changed something (edited it) the system changed itself to match.

I demo'd this at CHI 91.


A screen dump of Views running in 1993

This system had an extensible markup language, vector graphics, style sheets, a DOM, client-side scripting ... today you would call it a browser (it didn't use TCP/IP though).

It ran on an Atari ST (amongst others).

This work led me to get involved with the World Wide Web at W3C, co-designing HTML, XHTML, CSS, and a bunch of other technologies.

The Original Web: Declarative

Let me remind you of the difference between procedural and declarative approaches.

The first declarative definition

Procedural approaches describe how to achieve something.

Declarative approaches describe what to achieve.

In school you learn procedurally how to add, subtract, multiply and divide, and then you are told

The square root of a number is another number that when you multiply it by itself, gives you 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
    epsilon ← 1.19209290e-07
    while abs(x − x') > epsilon × x: {
        x ← x'
        x' ← ((a ÷ x') + x') ÷ 2
    return x'

This is why documentation is so essential in procedural programming, because the distance between the description of the problem space and the code is so great.

Declarative programming

The Views system client-side programming language was a first attempt at defining a declarative programming language.

We saw that it gave you immense power, and ease of use at the same time.

So let me talk about the principles.

The design of programming languages

The first programming languages were designed in the 50s:

Cobol, Fortran, Algol, Lisp.

They were designed with the economic relationship of computer and programmer in mind: compared to the price of a computer, programmers were essentially free.

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.


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 1950's!

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

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 telling the 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


XForms is a 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 to program it.

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 to program it.

XFormser: It's already running.

Example: NHS

The British National Health Service started a project for a health records system.

Example: NHS

The British National Health Service started a project for a health records system.

One person then created a system using XForms.


XForms is all about state. (Which means it meshes well with REST - Representational State Transfer).

Initially the system is in a state of stasis.

When a value changes, by whatever means, the system updates related values to bring it back to stasis.

This is like spreadsheets, but much more general.

The result is: programming is much easier, since the system does all the administrative work for you.


; SourceArticle


; SourceArticle

Conclusion (programming)

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 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.

Conclusion (notations)

Notations are a greatly overlooked issue in the field of usability.

Good notations have all the features of good interaction designs:

Thank you!