LongCut logo

Bret Victor - Inventing on Principle

By Rui Oliveira

Summary

## Key takeaways - **Follow a Principle, Not Just Passion**: Instead of just following passion, find a guiding principle for your work that you believe is important, necessary, and right. Use this principle to shape your career and decisions. [00:30] - **Immediate Connection for Creators**: Creators need an immediate connection to what they are making. When a change is made, its effect should be seen instantly without delay or hidden processes. [01:56] - **Coding: See Changes Instantly**: Traditional coding involves typing code, compiling, and running, with a significant delay before seeing results. A better environment allows immediate visual feedback, enabling faster discovery and iteration. [02:32], [04:04] - **Visualizing Abstract Algorithms**: Abstract algorithms can be difficult to grasp. By visualizing the data and the step-by-step execution, the computer can show you what's happening, preventing you from having to simulate it in your head. [16:41], [18:00] - **Design Tools for a New Medium**: Tools should be designed for the medium they are used in. Traditional tools derived from pencil and paper are not ideal for digital mediums; new tools should foster an immediate connection to the creation. [27:36] - **The Activist Lifestyle in Technology**: The activist lifestyle, dedicated to fighting for a cause based on a sense of right and wrong, is not limited to social causes. Technologists can also identify wrongs in the world and dedicate themselves to fighting for a principle through invention. [34:38], [37:40]

Topics Covered

  • Does immediate feedback unlock creative discovery?
  • Are your tools baking in obsolete assumptions?
  • Technologists can fight for moral principles.
  • Inventing problems to solve for a better world.
  • How to find your specific guiding principle?

Full Transcript

[Applause]

so um unlike the previous session I

don't have any prizes to give out I'm

just going to tell you how to live your

life this talk is actually about a way

of living your life that most people

don't talk

about as you approach your career you'll

hear a lot

about following your

passion or doing something you love

I'm going to talk about something kind

of different I'm going to talk about

following a

principle finding a guiding principle

for your work something you believe is

important and necessary and right and

using that to guide what you

do the three parts of this talk I'm

first going to talk about the principle

that guides a lot of my work going try

to give you a taste of what comes out of

that and I'm going to talk about some

other people that have lived this way

what their principles are what they

believe in

but these are all just examples to help

you think about what you believe in and

how you want to live your

life so to begin with

me ideas are very important to me I

think that bringing ideas into the world

is one of the most important things that

people do and I think that great ideas

in the form of great art stories

inventions scientific theories these

these things take on lives of their own

which give meaning to our lives as

people so I think a lot about how people

create ideas and how ideas grow and in

particular what sorts of tools create a

healthy environment for ideas to

grow and I've spent a lot of time over

the years making creative tools using

creative tools thinking about this a lot

and here's something I've come to

believe

creators need an immediate connection to

what they're creating so that's my

principle creators need an immediate

connection to what they create and what

I mean by that is when you're making

something if you make a change or you

make a decision you need to see the

effect of that immediately there can't

be a delay and there can't be anything

hidden readers have to be able to see

what they're doing so now I'm going to

show you a series of cases where I

noticed that that principle is violated

and I'll show you what I did about that

and then I'm going to talk about the

larger the larger context which I do

this

work so to begin with let's think about

coding here's how coding works you type

a bunch of code into a text editor kind

of imagining in your head what each line

of code is going to do and then you

compile and run and something comes out

so in this case it's just JavaScript

drawing to a canvas and it draws this

little scene with a

tree but if there's anything wrong with

the scene or if I if I want to make

changes if I have further ideas I have

to go back to the code and I edit the

code compile and

run see what it looks like anything

wrong I go back to the code most of my

time is spent working in the code

working in a text editor blindly without

an immediate connection to this thing

which is what I'm actually trying to

make so I feel this goes against this

principle I have that creators need an

immediate connection they're making so I

tried to come up with a coding

environment that I thought might be more

in line with this principle

have so what I have here is I've got

this picture on the side and the code on

this side and this this part draws the

sky and this draws the mountains this

draws the

tree and when I make any change to the

code the picture changes

immediately so the code and the picture

are always in sync there's no compile

and run I just change things in the code

and I see things change in the

picture and now that we have this

immediate connection between the code in

the picture we can start thinking about

ways of changing the code other than

typing so for example this number here

is the the length of the branches if I

want to control that number I just point

my mouse to it hold down the control key

and I can dial it up and

down so I can see what it looks like for

big branches or small branches and I can

kind of converge on what feels right to

me artistically

and this works for any number of the

code I just point to it dial it up and

down and some of these numbers here I I

know what they do but still kind of

surprising to see them do

it and other ones are just um completely

surprising so down here I've got um I've

got this for Loop where I'm counting to

16 I'm putting 16 little pink blossoms

on every branch and I can turn that down

for Less Blossom or turn it up for more

but look at what I'm doing here I'm just

kind of moving that number up and down

around 20 or so and it has this really

interesting shimmering effect it kind of

looks like the the wind is blowing

through the

tree and the first time I saw this I

immediately started thinking about how I

could use this effect for an

animation how would I ever have

discovered that if I had to compile and

run between every

change so much of art so much of

creation is Discovery and you can't

discover anything if you can't see what

you're

doing so I've shown you adjusting the

code let's add some code so I'd like to

put a sun up here in the sky so I go to

the end of the draw Sky function and I

want to fill a circle so I start typing

context fill Circle and as soon as I

start typing I get this autocomplete

list of the different fill methods so

those are the different things I could

type there fill Circle fill wct fill

text and as I move up and down this

autocomplete list I immediately see what

what each of them is

doing so I don't have to imagine what it

would do from the method name I don't

have to look at the

documentation I just see it see it

immediately so I want the circle and I'm

going to adjust the x coordinate and the

y coordinate change the radius of

it and that looks about right probably

should be yellow so I'm going to set the

fill style context fill style same auto

complete as before choose fill Style F

gives me white by default um and I can

change that color code the same way I

change any number point to it hit the

control key and you got color palette so

I can choose nice yellow for my my

son although the white was kind of

interesting I

thought kind of didn't expect that but

with white it now looks like the Moon

instead right

Hey look it's

nighttime so having this immediate

connection allows ideas to surface and

develop in ways that would be impossible

before but there's still a problem here

I think which is I've got this picture

and I've got this code over here and I

have to maintain the mapping between the

two in my head so I've got all these

lines of code and just looking at this

line I don't immediately know what it

does so here's what I can do I can hold

down the option key my cursor changes to

a magnifying glass and now as I roll

over each line of code it's highlighting

in the picture what's being drawn in

that

line so if I want to know what's going

on in this function I just kind of roll

down the function and see what what see

what

highlights so here I've got two calls to

draw a mountain I don't know which is

which well that's that mountain and

that's that

mountain and this has to work the other

way too that if I see part of the

picture I need to know what code was

responsible for drawing it so I do the

same thing I hold down the option key

and now as I move over each pixel of the

picture you'll see on the right it's

jumping to the line of code that Drew

that

pixel so that Drew the sky and that Drew

the tree I drew the

blossom so this is really important for

maintaining that map but it's also

really useful just for navigating around

so you know I want to make the I want to

make the Sun a little bit bigger so I

jump there make this sun a little bigger

I want to bring up the tree a little bit

so I jump there bring up the tree a

little bit I want to bring up the Mounds

a little bit so I jump there bring up

the mountains a little bit and I can

make these changes as quickly as I think

of

them and that is so important to the

creative process to be able to try ideas

as you think of them

if there's any delay in that feedback

loop between thinking of something and

seeing it and building on it then

there's there's whole world of ideas

which which will just never

be these are thoughts that we can't

think

ideas are very important to me and the

thing about

ideas is that ideas start

small ideas start out tiny and weak and

fragile in order to develop and mature

ideas need an environment where the

Creator can nurture them and kind of

take care of them feed them and shape

their growth and to me that's what this

principle of immediate connection is all

about

and because ideas are so precious to

me when I see this principle

violated when I see ideas stillborn or

stunted because the Creator couldn't see

what they're doing I feel that's

wrong and not wrong in the sense of

violating some UI guideline or going

against some best practice but wrong in

a deeper sense than

that and I'll come back to this but I

want to show you another example of

following this principle so in this code

here there's no State there's no

persistent state so there's no time

there's no

interactivity and I was thinking about

how would we handle those aspects of

coding in a way that's in line with this

principle I have creators need an

immediate

connection so what I have here is a

little platform game so here's my little

guy he can run around he can jump he can

die and the code for him is over here so

this code makes them run around this

makes them jump this makes them collide

with things

and down here I've got some code for

this little turtle and the turtle is not

doing much right now because I haven't

finished writing his code so I'm just

going to do that right now say on each

tick his Exposition plus equals his

Direction times the time interval 160th

of a second times some speed which um I

don't know could be fast could be

slow if it's negative he walks backwards

and these are all ideas I can use for

other enemies but um I think Turtles are

supposed to be slow so that's a good

speed for a

turtle and then up here I've got some

code that says when my guy collides with

the turtle he gets some y velocity so he

bounces into the air and the turtle gets

stomped so that looks like that and the

turtle gets up after a bit

the problem is I don't want the player

to be able to get up here yet I want the

player to bounce off the turtle and go

through this little passageway down here

and I'll have to go around and you know

solve puzzles and whatnot to come back

and get the star so the turtle is too

bouncy right now now of course I can

just turn that down in the

code and now I can try it but now it's

not bouncy

enough and so while it's nice that I can

kind of adjust the code while it's

running instead of having to stop and

recompile and find my place again I

can't immediately see what I need to see

which is whether or not he can make that

jump so here's what I'm going to do I'm

going to bounce off the turtle and pause

the game so I pause the game and now

there's this slider up here which lets

me rewind through

time and now I can rewind to back before

I made the jump and changed the code to

make him less bouncy and now when I move

it forward it's going to simulate

forward using the same input controls

the same keyboard commands are recorded

as before but the new

[Music]

code this is not good

enough I need to be able to see changes

immediately I need to be able to see

immediately whether or not my bounciness

is

correct none of this

stuff and if you have a process in time

and you want to see changes immediately

you have to map time to

space so here's what I'm going to do

going to bounce off my turtle pause the

game and now hit this button here which

shows my guy's

Trail so now I can see where he's been

and when I rewind

this Trail in front of him is where he's

going to be this is his

future and when I change the code I

change his

future so I can find exactly the value I

need so that when I hit play he slips

right in

there so creators need to be able to see

what they're doing if you're designing

something beded in time you need to be

able to control time you need to be able

to see across time otherwise you're

designing

blind as I was playing with this I

noticed it's fun to play with gravity so

I can make gravity a little negative and

he starts to float up in the

air and I can kind of play with that and

try to get to try to stay

there and you could probably make an

entire game around just just this

mechanic here this gravity manipulation

in fact I bet I could fiddle with any

part of this code and come up with an

idea for a game even if I just if I just

comment out the first statement in the

code now my guy can't move left he can

only move

right which sounds kind of silly but

Terry Kavanaugh actually made a

beautiful game around that concept

called Don't Look

Back ter Kavanaugh um he made another

really wonderful game which you might

have seen called V as letter v six times

and the way that game works is that you

can't jump instead you can only flip up

play down and you fall up instead of

falling down so it kind of works like

this that You' fall go on the ceiling or

you can walk around on the ground and so

you'd have these levels which kind of

look like this and you'd kind of walk

around and you have to learn how to

navigate train like

this and so if you had like a

something like that you wouldn't be able

to jump over it you'd have to like flip

over and flip over and you got an

amazing amount of gameplay about out of

this

concept so again being able to try ideas

as you think of

them this example and the last one with

the tree these are both very visual

programs we able to see our changes just

by seeing how the picture changes so I

was thinking about how we could do more

abstract coding that's more in line with

this principle how can we write a

generic algorithm in such a way that we

can see what we're

doing so as an example let's take a look

at binary search um super quick

refresher on how binary search works you

have an array of values that are in

order and you have a key which is the

value that you're trying to locate

within the array and we keep track of

two variables which are the lower and

upper bounds of where you think that

value could possibly be right now it

could be anywhere and you look right in

the middle of that range what you find

is too small then the key has to be

after that you look in the middle of the

range what you find is too big the key

has to be before that and you kind of

keep subdividing your range until you

narrow in on the value you're looking

for and in code binary search looks like

this and from my perspective you can't

see anything here

you can't see anything I see the word

array but I don't actually see an

array and so in order to write code like

this you have to imagine an array in

your head and you essentially have to

play computer you have to simulate in

your head what each line of code would

do on a computer and to a large extent

the people that we consider to be

skilled software Engineers are just

those people that are really good at

playing

computer but if we're writing our code

on a

computer why are we simulating what a

computer would do in our head why isn't

the computer just do it and show

us so let's write binary

search

function binary search takes a key and

an array and then over here on this side

it's saying okay it takes key in an

array such as what give me an example we

need something to work with here so for

instance my array might be a b c D

EF and let's say for instance we're

looking for the

D so now let's start coding um the lower

bound starts out at zero over here it

says low equals zero nothing amazing

there upper bound starts out at the end

of the array so high equals array length

minus one and over here it says High

equals

5 so I have my abstract formula in the

code over here it's giving me the

concrete value corresponding to these

example arguments so I don't have to

maintain this picture in my head it's

just showing it to

me so now I need the the index in the

middle of the array so I'm going to take

the average of those two mid equals low

plus High over two

and well that's obviously not right 2.5

is not a valid array index so I guess I

need to round this

off so I'm going to add the floor

function and it rounded down to two and

I caught that bug literally the second I

typed it instead of writing the tire

function in 20 unit

tests so now I get the value out of the

array and then I need to subdivide my

range which so there's an if statement

which I'll just paste in

here so in this case the the value I

found is less than the key so it's

taking this first branch of the F

statement it's adjusting the lower bound

of course if the key was

smaller then it would take the spren of

the F statement and adjust the upper

bound or if the key was C then we would

have just happened to find it on the

first shot and we'd return the index so

this is the first

iteration of this

algorithm and now what we need to do is

Loop we've subdivided the array we need

to keep subdividing until we narrow in

on what we're looking for so we need to

loop I will just Loop while one do all

this and now what we have are three

columns corresponding to three

iterations of this Loop so this First

Column here is exactly what you saw

before low and high span the entire

array we found a c it was too low so we

adjust our lower bound Loop up to here

second iteration bounce are tighter we

found an e adjust the upper bound third

iteration Loop up to here low and high

are the same we've narrowed it down to a

single candidate is indeed the key we're

looking for and we return its index so

there's nothing hidden here you see

exactly what the algorithm is doing at

every point and I can go up to here and

try different keys so I can see how the

algorithm behaves for these different

input

arguments and by looking across this

data I can develop an intuition for how

this algorithm works so I'm trying

different Keys here and say I try

looking for a

G and this looks a little different it's

not actually

returning and the reason for this is I'm

looking for a key which is not actually

in the array and the only way of

breaking out of this Loop is by finding

the key so it's kind of stuck here

looping

forever so we can take a look at this

and see what went wrong where where's

this algorithm going off the rails these

first few iterations look fine but this

this iteration looks weird because low

is greater than high where our range is

completely

collapsed so if we get to this point

then we know the key can't be found so I

see this faulty condition here I say oh

that's not right low has to be less than

or equal to

high okay well I'll just put that over

as the condition of my while statement

low less than or equal to high and then

that would break out of the loop and I

would return some Sentinel to say that

could be found so here we have three

itation of the loop couldn't be found we

return the non-filing

value so that's what it might be like to

write an algorithm without a blindfold

on so I've got this principle again that

creators need to be able to see what

they're doing that they need this

immediate connection to what they're

making and I've tried to show this

principle through three coding examples

but that's just because this is a

software engineering conference I

thought I was supposed to talk about

programming but to me this principle has

nothing to do with programming in

particular it has to do with any type of

creation so I'd like to show you a

couple more demos just to show you the

breadth of what I have in mind

here so to begin with let's take a look

at a different branch of

engineering so here I have an electronic

circuit that I drew um I'm not quite

done drawing it so let me finish up

there

and

1.2 and now we have a working

circuit I mean I assume it's a working

circuit I don't actually see anything

working

here so this is exactly the same as

writing code that we work in this static

representation but what we actually care

about is the data the values of the

variables and we can't see that here now

in a circuit the variables are the

voltages on these different wires so

each of these wires has a voltage that's

changing over time and we have to be

able to see that now if I was building

the circuit on a lab bench building it

physically I could at least take an

oscilloscope and kind of poke around and

see what's going on in the different

wires what's going on here or here so at

the very least I should be able to do

that so what I have here is a plot of

the voltage on this wire over time we

can see it's high it's low high and low

so this is clearly oscillating if I

built this physically also I would

actually be able to see the circuit

doing something so in this case I've got

these two LEDs up here these are LEDs

little lights presumably they're there

for a reason I can hit play and watch it

simulate out in real time so now you can

see what the circuit's

doing in order to design a circuit like

this you have to understand the voltage

on every wire you have to understand how

the voltages are changing throughout the

entire circuit and just like coding

either environment shows that to you or

you simulate it in your head and I have

better things to do with my head than

simulate what electrons are doing so

what I'm going to do I'm going to spread

these out a little bit so same circuit

just spread out a little bit and I'm

going to add the voltage at every node

so now you can see every voltage

throughout the circuit and I can even

hit play and watch it all kind of

simulate out in real time

although what I prefer to do is just

move my mouse over it and I can kind of

look in areas that are interesting to me

and see what the values

are I can compare any two nodes so if

you look at say the node over here while

I Mouse over this one you can see the

shadow of the one I'm mousing over is

overlaid on that the shadow of the one

I'm mousing over is actually overlaid on

all of them and so I can compare any two

modes just by mousing over one of them

and looking at the other one

and again I can immediately see the

results of my changes so I've got the

70k resistor here I want to change its

value I just click and drag it and now I

see the waveforms changing

immediately and you'll notice that when

I click and drag it leaves behind the

shadow of the waveform before I started

dragging so I can compare I can

immediately see the results of my

changes two golden rules of information

design show the data show comparisons

that's all I'm doing here but even this

isn't quite good enough what we're

seeing here are the voltages but in

electronics there's actually two data

types there's voltage and there's

current and what we're not seeing is the

current flowing through each of these

components and in order to design a

circuit you need to understand both the

voltage and the current you need to

understand the interplay between the two

that's what analog design is so what I'm

going to do is spread these out a little

bit more and now I'm going to replace

each of these

components with with a plot of the

current going through it over time so

each of these blue boxes represents a

component and you can see which

component it is because has a little

badge in the corner a little icon but

now you can see everything that's going

on in the circuit and see how the

current changes you can see how voltage

and the current changes there's nothing

hidden there's nothing to simulate in

your head so what we have here is a

different way of representing a circuit

just in general you could draw any

circuit with these blocks but instead of

being made out of little squiggly

symbols it's made out of data and I

think it's important to ask why do we

have these squiggly symbols in the first

place why do they exist they exist

because they're easy to draw with pencil

on

paper this is not paper so when you have

a new medium you have to rethink these

things you have to think how can this

new medium allow us a more immediate

connection to what we're making how can

this new medium allows to work in such a

way we can see what we're doing and it's

really the same situation with

programming our current conception of

what a computer program is a list of

textual definitions that you hand to a

compiler that's derived straight from

Fortran and alol in the late 50s those

languages were designed for Punch

Cards so you would type your program

onto a stack of cards and hand it to the

computer operator it's the guy in the

bottom picture and you would come back

later so there was no such thing as

interactivity back then and that

assumption is baked into our current

Notions of what programming

is C was designed for

teletypes so that's Ken Thompson and

Dennis Richie up there Richie made C and

there are no video displays in this

picture Richie is basically typing on a

fancy typewriter that types back to him

and anytime you use a console or

terminal window you're emulating a

teletype and even today people still

think of a reppel or an interactive top

level as being interactive programming

because that's the best that you could

do on a

teletype so I have one more demo I want

to show because I want to emphasize that

this principle mediate connection is not

even about engineering it's about any

type of creation so I want to move to a

different field

entirely so let's think about

animation so I've got this painting here

with the tree and leaf on it and I want

to make a little video with the leaf

kind of drifting down the tree and the

normal way of doing this in a

conventional animation package like

flash is through key

frames so you basically say where you

want the leaf to be at different points

in time and then you hit play and see

what it looks

like

so I'm I'm going to say okay at frame 20

I'm going to create a key

frame and the leaf should be

there then frame 40

create a key frame and leave me there

and I am just totally guessing here I

cannot see the motion I cannot feel the

timing I'm just throwing things in time

and

space and so I've got this slea at

different points in time I'm going to

add a tween which tells flash to connect

the

dots and then I'm going to hit play and

see what it looks

like and it looks ridiculous it looks

like billiar balls bouncing back and

forth and the thing is I kind of know

what I want right it's a leaf I want

Leaf drifting down from a tree and I can

even kind of perform that see with my

hand Leaf drifting down from a

tree but Flash doesn't know how to

listen to my

hand but maybe there's a new medium that

does know something about listening to

my

hand so what I'm going to show you here

is a little app I made for performing

animation and we're not really set up to

um do a live demo off the iPad so I'm

just going to play you a video of me

making a

video the way the scene's going to play

out is um the leaf is going to kind of

drift down from the tree and the scene's

going to pan over and the rabbit's going

to do something and um two things one

this going to move pretty quickly and

second I'm going to be using both hands

at almost all times

so I've got these different layers the

background the mid-ground the foreground

I'm choosing which layer to move using

my left thumb I'm going to move my leaf

to its position move my bunny off stage

and start time rolling now I'm going to

perform the leaf drifting down from the

tree run it back check out that how that

looked the motion looks pretty good but

the leaf kind of needs to rock back and

forth so I'm going to pull out a

rotation controller run it back find

where the leaf is about to break off and

record the rotation and I add a little

flip there just because it felt right in

the moment it wasn't even

planned stop because I want to pan over

so I want to drag a whole bunch of

layers at once I grab all the layers

into a list I turn down the sensitivity

of the background layers so they'll move

slower for a kind of Parallax effect I

only want to move horizontally so I pull

out a horizontal dragger and check out

how it looks um I don't quite like The

Parallax so I adjust the sensitivi a

little bit try out again I like that

better so I get ready to go

I run it back to the beginning so I can

kind of get back into the rhythm of the

piece the leaf hits I wait a beat and I

start panning and I don't know how many

frames I waited I don't know how long it

was I went when it felt

right so I pan over to this winter scene

and kind of slow down and

stop and then I run it back because I

want to do something for my bunny throw

away those tools CU I'm done with

them

and wait until I think my bunny should

move and he hops away and I've got a few

different poses from a bunny so I pull

those out and then I find the point

where the bunny is about to take off the

ground which is right there I switch his

pose and I kind of toggle between the

poses as he hops away and then I run it

back cuz I want to check out how it

looks and I'm just going to bring that

up full screen for you this is the

piece so I made that in 2 minutes

performing with my hands like a musical

instrument very immediate connection

between me and what I was trying to

make one of The Inspirations for this

tool was an animation that I tried to

make several years ago not that one but

it also began with a leaf drifting down

from a tree and I spent all day in

flashh trying to key frame that

leaf could do

it and so that was the end of that you

know I I still have my

storyboards sometimes I play the music I

wrote for the piece but the piece itself

is locked in my

head and so I always think about the

millions of pieces that are locked in

millions of

heads and not just animation and not

just art but all kinds of ideas all

kinds of ideas including critically

important ideas world changing

inventions life-saving scientific

discoveries these are all IDE

ideas that must be grown and without an

environment in which they can grow where

their creator can nurture them with this

immediate connection many of these ideas

will not

emerge or they'll emerge

stunted so I have this principle that

creators need an immediate connection

and all of those demos that I just

showed you simply came from me looking

around noticing places where that

principle was

violated then trying to fix that that's

really all I did I just followed this

guiding principle and it guided me to

what I had to

do but I haven't said much about the

most important part of the story which

is

why why I have this principle why I do

this when I see a violation of this

principle I don't think of that as an

opportunity

when I see creators constrained by their

tools their ideas compromised I don't

say oh good an opportunity to make a

product or an opportunity to start a

business or an opportunity to do

research or contribute to a

field I'm not excited by finding a

problem to solve I'm not in this for the

the joy of making

things ideas are very precious to

me and when I see ideas

dying it hurts

I see a

tragedy to me it feels like a moral

wrong it feels like an injustice and if

I think there's anything I can do about

it I feel it's my responsibility to do

so not opportunity but

responsibility now this is just my thing

I'm not asking you to believe in this

the way that I do my point here is that

these words that I'm

using

Injustice responsibility moral

wrong these AR the words we normally

hear in a technical

field we do hear these words in

association with social causes so things

like

censorship gender discrimination

environmental destruction we all

recognize these things as moral

wrongs most of us wouldn't witness a

civil rights violation and think oh good

an

opportunity I hope

not instead we've been very fortunate to

have had people throughout history who

recognize these social wrongs

and saw it as their responsibility to

address them and so there's this

activist lifestyle where a person

dedicates themselves to fighting for a

cause that they believe

in and the purpose of this talk is to

tell you that this activist lifestyle is

not just for social activism as a

technologist you can recognize the wrong

in the world you can have a vision for

what a better world could be and you can

dedicate yourself to fighting for a

principal social activists typically

fight by organizing but you can fight by

inventing so now I'd like to tell you

about a few other people who have lived

this way starting with Larry

tesler Larry has done a lot of wonderful

things in his life but the work I'm

going to tell you about he did in the

mid-70s at Z

Park and at the time there really wasn't

a such thing as personal computers the

notion of personal Computing was very

young and Larry and his colleagues at

Park felt that it had transformative

potential that personal Computing could

change how people thought and lived and

I think all of us in this room would

agree that they turned out to be right

about that but at the time software

interfaces were designed around

modes so in a text editor for instance

you couldn't just type and have words

appear on the screen like on a

typewriter you would be in command mode

if you wanted to insert text you'd have

to press I to go into insert mode and

Escape back out to command mode or maybe

you hit a to go into impend mode or if

you want to move text around you hit M

to go into move mode and You' have to

select and You' be in mode to select and

move things around and

Larry would watch people using the

computer Larry actually pioneered the

concept of software user studies another

thing that he did but he would watch

people using the software and he found

that many people even after training and

weeks of use many people were not

becoming comfortable with the

computer and he believed that it was

these modes that were to blame that the

the complexity of modes was a kind of

barrier that many people couldn't

couldn't cross and so this kind of

represented a a

threat to this dream of what personal

Computing could

be so Larry made it his personal mission

to eliminate modes from software and he

formed a principle no person should be

trapped in a mode

his slogan that he would go around

saying was don't mode me in and he had

it printed on his

T-shirt and this principal informed

everything that he did he he thought

about it with all the work that he did

and eventually he came up with a text

editor called Gypsy which essentially

introduced text editing as we know today

there was an insertion point and when

you typed words appeared on the

screen to select text he invented

modeless selection with click and drag

so you just click and drag Dr over the

text you want to select like using a

highlighter one of the first uses a drag

to move text around he invented these

commands that he called cut copy paste

you select and cut later on you paste in

whenever you're ready you're never

trapped in a mode you're never to

switching between modes when you hit the

W key on the keyboard you get W on the

screen

always and he would watch people using

his software and he found that someone

who had never seen a computer before

which was most people back then could be

up and running like half

hour so this was clearly a

transformative change in enabling people

to connect with

computers and his ideas about

modess spread to the rest of the desktop

interface which was then being invented

at park at the same time and today

they're so ingrained in the Computing

experience that we kind of take them for

granted now I said that Larry made

elimination of modes his personal

mission that's actually his words and if

you think he's exaggerating here's

Larry's license plate for the last 30

[Music]

years nowadays of course Larry has a

website at no

mod.com and he's on Twitter it's no

modes and so like I said Larry has done

a lot of amazing work in his career but

his

self-identity is clearly associated with

this

cause and so so I'd like to ask what

what exactly did Larry do like how would

we best describe what Larry

did a typical

biography might say Larry Tesla invented

cut copy

paste which is true but I think that's

really misleading because this invention

was very different than um say Thomas

Edison inventing the

phonograph Edison basically just

stumbled over the technology for audio

recording and he built it out as Y and

yeah he came up with like a list of

possible applications for this

technology but he didn't have any

cultural intent whereas what Larry did

was entirely a reaction to a particular

cultural

context so another thing that you might

hear is that Larry tesler solved the

problem of modess text manipulation

solved the problem and you know

obviously that's true you worked on this

problem for a long time eventually

solved it but I think that's really

misleading too

because this problem that he solved only

existed in his own

head nobody else saw this as a

problem for everybody else modes were

just how computers worked there wasn't

anything wrong with them anymore than we

think there's something wrong with

having two arms it's just kind of was a

fact of

life so the first thing that Larry did

was that he recognized a wrong that had

been unacknowledged in the

culture and the thing is that's how many

great social changes began as well so

150 years ago Elizabeth Katy Stanton had

to stand up and say women should vote

and everybody else said like that's

crazy what are you talking about today

we recognize gender discrimination as a

wrong back then it was part of society

it was

invisible she had to recognize it and

she had to fight it and to me that's a

much closer model to what Larry did than

the Thomas said model of inventing a

bunch of random technology so could

patent

it now to be clear I'm not making any

judgments about the relative importance

or impact of these two people I'm just

talking about their motivations and

their approach both of them recognized a

cultural wrong they invisioned a world

without that wrong and they dedicated

themselves to fighting for a

principle she fought by organizing he

fought by

inventing and many other seminal figures

in Computing had similar motivations

so certainly Doug

angelart uh Doug engelbart basically

invented interactive Computing the

concept of putting information on a

screen navigating through it looking at

information in different ways pointing

to things and manipulating them he came

up with all this at a time when

real-time interaction with the computer

was just almost unheard of today he's

best known as the inventor of the mouse

but what he really invented was this

entirely new way of working with

knowledge his explicit goal from the

beginning

was to enable mankind to solve The

World's urgent

problems and his vision he had this

vision of what he called knowledge

workers using complex powerful

information tools to harness their

collective

intelligence and he only got into

computers because he had a hunch that

these new fangle computer things could

help him realize that Vision everything

that he did was almost single mindedly

driven by pursuing this

Vision here's alen k alen k ran the lab

at Zar Park where we got the desktop

interface so things like Windows and

icons command menus he also invented

object-oriented programming lots of

other

things his goal and a quote was to

amplify human reach and bring new ways

of thinking to a faltering civilization

that desperately needed it isn't that

great his approach was through children

he believed that if children became

fluent in thinking in the of the

computer meaning if um if programming

was a form of basic literacy like

reading and writing then they'd become

adults with new forms of critical

thought new ways of understanding the

world and we'd have this more

enlightened Society similar to the

similar to the um the difference that

literacy brought to society and

everything that he did everything he

invented came out of pursuing this this

Vision this goal with

children and following principles that

he adopted from p and monor Jerome

Bruner these people who had studied how

children

think and the figure probably most

widely associated with software

activism is Richard stalman

stalman started the G new project which

today makes up a big chunk of any Linux

system he also started the free software

Foundation wrote GCC GPL many many other

things his principle is that software

must be free as in Freedom and he has

very precise meaning associated with

that

statement he's always been very clear

that softare freedom is a matter of

moral right and wrong and he's taken a

particularly uncompromising approach in

his own life to

that all of these tremendously

influential people dedicated their

lives to fighting for a particular ideal

with a very clear sense of right and

wrong often really fighting against an

authority or mainstream that did not

recognize their wrong as being wrong and

today the world is still very far from

any of their ideals and so they still

see a world in crisis and they keep

fighting they're always

fighting now I'm not saying that you

have to live this

way I'm not saying that you should live

this

way what I'm saying is that you can that

this life style is an option that's

available to you and it's not one that

you're going to hear about much your

career counselor is not going to come

back to you and say you should start a

personal crusade in a social field they

might but not in

technology instead the world will try to

make you define Yourself by a

skill that's why you have a major in

college that's why you have a job title

you are a software

engineer and you'll probably specialize

to be a database engineer or front-end

engineer you'll be given front ends and

ask to engineer them and that could be

worthwhile and

valuable and if want to spend your life

pursuing excellence and practicing a

skill you can do that that is the path

of the Craftsman that is the most common

path the only other path you really hear

about much is the path of the problem

solver so I see entrepreneurship and

academic research is kind of two sides

to that coin there's a field there's a

set of problems in that field or needs

in the market you go in you choose one

you work it you make your contribution

there maybe later on you choose another

problem you work it you make your cont

rtion

there again that can be worthwhile

valuable and if that's what you want to

do then you can take that path but I

don't see Larry Tesla on either of those

paths I wouldn't say that he was

contributing to the field of user

experience design because there was no

such thing he didn't choose some open

problem to solve he came with some

problem that only existed in his own

head no one else even

recognized and certainly he did not

Define himself by his craft he defined

himself by his cause

by the principle he fought to

upheld I'm sure if you look at Wikipedia

it'll say that he's a computer scientist

or user experience something but to me

that's like saying Elizabeth ktie

Stanton was a community organizer no

Elizabeth Katy Stanton established the

principle of women's suffrage that's who

she was that was the identity she chose

and Larry tesler established the

principle of modess he had this Vision

he brought the world to that vision

so you can choose this

life or maybe it'll end up choosing you

it might not happen right away it can

take time to find a principle because

finding a principle is essentially a

form of self-discovery that you're

trying to figure out what your life is

supposed to be about what you want to

stand for as a

person took me like a

decade 10 years before any real

understanding of my principal solidified

that was my 20s when I was young I I

felt I had to live this way but I would

get little glimmers of What mattered to

me but no big picture it was really

unclear and this was very distressing

for me what I had to do was just do a

lot of

things make many things make many types

of things study many things experience

many many things and use all these

experiences as ways of analyzing myself

taking all these experiences and saying

does this resonate with me does this

repel me do I not care building up this

Corpus of experiences that I felt very

strongly about for some reason and

trying to make sense of it trying to

figure out why what is the secret

ingredient in all these experiences that

I'm reacting to so

strongly now I think everyone's

different and all those guys I talked

about they have their own origin stories

which you can read

about I will just say that confining

yourself to practicing a single skill

can make it difficult to get that broad

range of experience which seems to be so

valuable for this sort of

work and

finally if you choose to follow a

principle a principle can't just be any

old thing you believe in you'll hear a

lot of people say that they want to make

software easier to use or they want to

Delight their users or they want to make

things simple that's a really big one

right now everyone wants to make things

simple and those are nice thoughts

they maybe give you a little kind of

give you a direction to go in but

they're too vague to be directly

actionable Larry tesler likes Simplicity

but his principle was the specific

nugget of insight no person should be

trapped in a mode and that is a powerful

principle because it gave him a new way

of seeing the world it divided the world

to right and wrong in a fairly objective

way so he could look at somebody

selecting text and ask is this person in

a mode yes or no if yes you had to do

something about that and likewise I

believe that creators need powerful

tools it's a nice thought that doesn't

really get me

anywhere my principle is that creators

need this immediate connection so I can

watch you changing a line of code and I

can ask did you immediately see the

effect of that change yes or no if no I

got to do something about that and again

all those demos that I showed you came

out of me doing that of me following

this principle and letting it lead me to

exactly what I need to do so if you're

guiding a principle embodies a specific

Insight it will guide you and you'll

always know if what you're doing is

right there are many ways to live your

life that's maybe the most important

thing you can realize in your life is

that every aspect of your life is a

choice

with are default

choices you can choose to sleepwalk

through your life and accept the path

that's been laid out for you you can

choose to accept the world as it

is but you don't have

to if there's something in the world you

feels are

wrong and you have a vision for what a

better world could

be you can find your guiding

principle and you can fight for a

cause so after this talk I'd like you to

take a little time and think about what

matters to you what you believe

in and what you might fight

for thank you

Loading...

Loading video analysis...