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