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.
I came to the Netherlands on a sabbatical in 1982. And stayed.
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
The Olympics had been in Atlanta the year before
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
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
Becomes 2nd largest local SIG
Annual Web and Beyond conference + CHI Sparks Conference
2019: Restart?
Battle over name again
Now: We're back!
1982: ABC→ Python
CWI was first European open internet node
Then 64kbps connection, today nearly 10Tbps! (Nearly a doubling per year).
1994 First Web conference: I organised 2 workshops
1995 Chair European W4G
W3C: Chair Stylesheet workshop
Join CSS, HTML
Go on to chair HTML: XHTML, XForms, RDFa
Notations: ixml -- declarative data abstraction notation, XForms -- declarative programming language, declarative IoT
Conference: Declarative Amsterdam
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.
For instance, Roman numerals:
CXXVIII+CXXVIII
=CCXXXXVVIIIIII
=CCXXXXVVVI
=CCXXXXXVI
=CCLVI
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
ABC: Designed using HCI principles - user centred design, iterative design, user testing.
Views: An environment, comparable to a browser
HTML and CSS
RDFa: CSS for meaning. CSS attaches (display) properties to elements. RDFa attaches (semantic) properties to elements
XForms: Declarative programming language
ixml: data abstraction language
(You can find all these things on my home page).
We designed a programming language: ABC
We used HCI principles:
A procedural language with only 5 very high-level data types.
Our biggest take aways:
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.
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.
Let me remind you of the difference between procedural and declarative approaches.
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.
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.
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 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.
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.
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
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.
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
XForms is a declarative system for defining applications.
It is a W3C standard, and in worldwide use.
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)
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.
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.
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.
The British National Health Service started a project for a health records system.
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.
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.
Notations are a greatly overlooked issue in the field of usability.
Good notations have all the features of good interaction designs: