-
YEHUDA KATZ: So it's been ten years.
-
Unlike DHH I can't get up here and
-
tell you I've been doing Rails for ten years.
-
I've been doing Rails for nine or eight or
something
-
like that. But, Rails has been around
-
for ten years, and so it's not surprising
-
that a bunch of people are gonna get up here
-
and do a little bit of a retrospective.
-
So this is sort of my feeling. Oh my god,
-
I remember sort of thinking back in 2008,
-
when DHH was, was giving his talk about sort
of
-
a look back around the same year that Merb
-
was becoming a thing, and DHH, and we were
-
eventually gonna, you know, merge a little
bit later.
-
But in 2008, when DHH gave the great surplus
-
talk, that was sort of a retrospective year
too,
-
because we had gotten to the point
-
where Rails was big enough that it couldn't
-
actually host a competitor.
-
And I think it's really great that we ended
-
up merging in and we ended up getting another
-
five, six years of, of, of great, a great
-
framework community. But now it's another
opportunity to look
-
back and think about sort of what, what the
-
Rails community is and how you should think
about
-
taking the lessons of Rails to other environments.
And
-
that's sort of what my talk is about today.
-
So, I'm gonna start by saying, I think, if
-
you think about one thing about Rails, if
you
-
want to think about what Rails is above anything
-
else, I think Rails popularized the idea of
convention
-
over configuration. And you've been hearing
the term convention
-
over configuration for ten years now. So probably
it's
-
sort of, it's a meaningless term. It's sort
of
-
like when you hear the same word over and
-
over and over again, eventually you reach
semantic saturation.
-
I think we've all reached semantic saturation
of the
-
term convention over configuration.
-
I want to unpack it a little bit. I
-
think one way of thinking about it is, is
-
this other term called the paradox of choice.
This
-
idea that people, well I'll let DHH say what
-
it is, people like choices a lot more than
-
they like having to actually choose. Right,
so there's
-
this, I think this sort of narrow point, but
-
it's still a very important point, which is
that
-
people go into environments, they go into
programming environments
-
or groceries or whatever, and they like the
idea
-
of having a whole lot of choices, a lot
-
more than they like having to actually choose
what
-
to do.
-
And this is sort of the state of the
-
art, this is what we knew in 2008 when
-
David gave the great surplus talk back then.
And
-
what I want to do is go a little
-
bit beyond sort of these, these pithy points
and
-
talk a little bit about what, what's happening,
what
-
is actually going on that's causing this idea
to
-
occur. What's hap- causing the paradox of
choice? And
-
actually there's been a lot of science, even
in
-
2008 there was science, but in between 2008
and
-
now, or certainly 2004 and now, there's been
a
-
tremendous amount of science about what is
causing the
-
paradox of choice. What is causing convention
over configuration
-
to be effective.
-
And if you want to Google it, if you
-
want to go find something, more information
about this
-
on Wikipedia, the term is called ego depletion.
Sometimes
-
the idea of cognitive depletion. And in order
to
-
understand what's happening here, you first
need to understand,
-
you first need to think about sort of, like,
-
your everyday, your everyday job, your, how
you feel
-
during the day.
-
So you wake up in the morning. You get
-
out, you go out of the house, and you're
-
pretty much fully charged. You're ready to
attack the
-
world, you, hopefully it's sunny and you can
skip
-
down the street. And you're, you're ready
to do
-
anything. You're ready. You have all the,
the, the
-
cognitive resources in the world.
-
And then, you know, you get to your desk.
-
I find it amusing that, that character is
a
-
programmer. It's so perfect. So you get to
your
-
desk and you know you've, you've done a little
-
bit of work, and you're cognitive resources
start to
-
deplete a little bit. You got a little bit
-
fewer cognitive resources. You know, eventually
something happens during
-
the day that you might not, that might not
-
be so pleasant, and your cognitive resources
deplete and
-
then you reach a point, at some point during
-
the day - this is a Van Gogh painting
-
- you reach a point some time during the
-
day where you're really flagging. You're feeling
like you
-
don't have a lot of capacity to left to,
-
to do anything or to think hard. And eventually
-
you totally run out. You run out of cognitive
-
resources entirely and you're done.
-
And so the idea here is the concept of
-
cognitive depletion or ego depletion, you
have a certain
-
amount of resources and they run out. And
I
-
think most people think about this in terms
of,
-
like, you're day job. Right, so you wake up
-
in the morning. Throughout the day your resources
deplete.
-
You get to the end of the day, you're
-
out of resources. Rinse and repeat. I think
that's
-
how most people think about it and that's
sort
-
of how I framed it here.
-
But the really interesting thing about ego
depletion or
-
cognitive depletion is that what actually
turns out to
-
be the case is that there's sort of this
-
one, there's this one big pool of resources,
this
-
one battery, that's actually used for a lot
of
-
different things. And so there's a lot of
studies
-
about things like grocery stores, right. So
why is
-
it that when you go to a grocery store,
-
why do you find yourself so willing to buy
-
something at the impulse, at the impulse aisle?
Right,
-
at the end of the, at the end of
-
the grocery trip.
-
And the reason is that you spent all this
-
time in the grocery store doing not very difficult
-
activities, but you're making a lot of choices.
So
-
you're making choices the entire time, as
you're walking
-
around the grocery store. And eventually your
brain just
-
runs out of resources to do anything else,
and
-
it's actually drawing from the same pool of
resources
-
that will power comes from. So even though
choice
-
making and will power feel like two totally
different
-
things, when you get to the end of the
-
grocery trip and you've used all of your resources
-
on choice making, you're out of resources
to not
-
buy the candy bar at the, at the impulse,
-
from the impulse aisle.
-
And the same thing is true about a lot
-
of things. They've done studies where they'll
just take
-
two halves of a room, like this one, and
-
they'll say, you guys memorize two numbers,
you guys
-
memorize seven numbers, and then when they're
totally done
-
and you've done the memorization, they'll
take you into
-
a processing room and they'll say, OK. You
have,
-
you know, cookies, and you have some fruit.
And
-
you get to basically decide which one to eat.
-
And it turns out that the people who did
-
the not much more difficult job of memorizing
seven
-
numbers are far more likely to eat the cookies.
-
And the same thing is true in the other
-
direction. If you have people eat cookies
first, and
-
then go and do a cognitively difficult task,
so
-
a task that requires. One of the most famous
-
experiments has to do with an impossible task.
How
-
long can people persevere doing a task that
you
-
can literally never finish? And it turns out
that
-
people who eat the cookies first actually
have, spend
-
a lot more time trying to do the impossible
-
task than the people that, that were, had,
had
-
to sit in front of a tray of cookies
-
and were told not to eat it.
-
And so there's, there's all these experiments,
there's, by
-
now in 2014 there is a ton of them,
-
and basically what they show in aggregate
is that
-
there is this pool of resources that we have
-
to do our job, challenging tasks, to do cognitive
-
dissonance. So there's studies around, if
you just tell
-
people, you need to get up and give a
-
speech about something that's different than
what you actually
-
believe, people who do that actually have
less will
-
power afterwards. They have less ability to
do challenging
-
tasks. They have less general cognitive resources
than people
-
who are asked to give a speech about something
-
they do believe. Even if the actual act of
-
giving the speech is equally, is equally difficult.
-
And so I think what's kind of interesting
about
-
this is that, really what we want in programming
-
is we want to be doing, having as much
-
time as we can for the challenging tasks,
right.
-
We want to be spending all of our time
-
on challenging tasks and as little of those
very
-
scarce resources as we can on things like
the
-
will power to write your code in exactly the
-
right way, or making a lot of choices.
-
And here are some terms that you might have
-
heard, basically, about this paradox of choice
or ego
-
depletion or the concept of decision fatigue.
These are
-
all ways that you've heard that describe this
general
-
concept, this general concept of you just
have this
-
battery, and it runs out at some point, and
-
there's all these really counter-intuitive
things that don't seem
-
like they're very hard but are taking away
resources
-
that you need to work on hard problems.
-
So, how do we, how do we solve this?
-
How do we actually solve this problem? Because
obviously
-
it's the case that you, if you want to
-
be spending a lot of time on your challenging
-
problems, if you just ignore the problem of
will
-
power or the problem of, of choices, you're
just
-
gonna end up making a lot of mindless choices
-
all day. And, so what we need to do
-
is we need to find some psychological hacks
that
-
we can apply that will keep us doing the
-
right thing, basically all the time. Keep
us from
-
wasting cognitive resources.
-
And I think my favorite study about, about
this,
-
about the kinds of cognitive hacks that work
effectively,
-
is the idea of what happens to organ donation
-
if the organ donation requirement is opt in,
in
-
other words, you go to the DMV and there's
-
a form that says, yes, I agree to donate
-
my organs and here are the ones I agree
-
to donate. And when the organ donation is
opt
-
out, in other words, you have to explicitly
say,
-
I do not want, I, I do not want
-
my organs to be donated. And what you can
-
see is that, in the countries where it's opt
-
in, it's actually a very, very low rate and
-
in the countries where it's opt out, it's
a
-
surprisingly high rate. It's basically almost
universal.
-
And I, and I think to, to some degree
-
you might expect that this is the case. But
-
I think this difference is really counter-intuitive,
because you
-
would expect that if somebody, you know, goes
and
-
they're sitting at a form and the form says,
-
Do you want to donate your organs? And the
-
excuse that they're telling themselves in
their head for
-
not checking the check box is, you know, my
-
mom would be super angry if she found out
-
or my religion tells me that I shouldn't do
-
this or, you know, growing up, I heard people
-
say negative things or whatever, whatever
the excuse is
-
you tell yourself to not check the check box,
-
you would think that some of those people,
more
-
than, you know, zero point one percent of
those
-
people, would pick up the pen and opt out.
-
But the interesting thing is that, by just
changing
-
the default from yes to no, all of the
-
sudden, all those excuses, all those things
that people
-
tell themselves about the reasons that they
really shouldn't
-
check the check box, suddenly go away.
-
And what's, I think even more interesting
about this
-
is that, these choices are actually made on,
on
-
really big DMV forms. So you basically what
you
-
can see is that people have already gone through
-
this really complicated, somewhat trivial
but very choice-heavy process
-
of filling out this DMV form, and by the
-
time they get to the bottom and are asked
-
about organ donation, they're so cognitively
depleted that they
-
have no energy left to even really think about
-
it. They basically just do the defaults.
-
So I think, honestly, defaults are our most
powerful
-
psychological hack, our most powerful weapon
in trying to
-
deal with the pro- the fact that we have
-
this limited source of cognitive capacity
that we want
-
to make good use of when we're programming.
And
-
the really cool thing about defaults in general
is
-
that defaults are actually really effective
on both sides
-
of the spectrum. So some days, you get to
-
work, you're ready to go, you're like, in
an
-
amazing mood. Everything is perfect. Everything
is awesome.
-
And on those days, the defaults, you have
a
-
big store of cognitive resources, and the
defaults keep
-
you high up. They keep you in the charge
-
state of a longer time. You don't have to
-
make choices that would go deplete, and remember
the
-
choice-making doesn't deplete per minute.
It's not every minute
-
of choices depletes. It's every choice depletes
your cognitive
-
resources. So, having a set of defaults that
tells
-
you, here is what you're gonna do in general
-
and, you have to, you know, you have to
-
think hard to opt out. That's really great
when
-
you're in a good mood, when things are charged.
-
But it's actually also really great when you're
in
-
a bad moon. When you're really depleted and
you
-
still have to go to work and do your
-
job, because the default keeps you on the
straight
-
and narrow, right. You don't have enough energy
left
-
to really think about what you're doing, and
so
-
everybody has bad days. Everybody works on
teams with
-
developers who aren't great. Let me say it
a
-
different way. Everyone has at some point
worked on
-
a team, hopefully not. But you have junior
developers.
-
You know, you hire people who are, who are
-
new to whatever it is that you're doing, or
-
you have a bad day, or you're stressed out
-
because your mom gave you a call at lunch
-
and now you're in a bad mood.
-
Right, so everybody gets to a point where
they
-
have cognitively, my mother's gonna be so
angry now.
-
Let's say, an ex-girlfriend or whatever. So
everyone has
-
days where they're cognitively depleted. And
on those days,
-
defaults are also really powerful, because
they keep you,
-
when. Instead of having you be sort of in
-
a bad mood and you'll just sort of do
-
whatever, you know, you feel like, you're
basically kept
-
on the straight and narrow. You're kept on
the
-
right path.
-
And I think this actually helps to explain
why
-
yak-shaving doesn't feel as good as you might
think.
-
So, yak-shaving isn't the most terrible activity
in the
-
world. I think sometimes you need to yak-shave.
But
-
I think if you think about doing, like, four
-
hours of yak-shaving in an eight hour day,
pretty
-
much after four hours, if you, you know, let
-
me set up my, you know, my vagrant box,
-
or let me go set up my testing environment.
-
After like four hours of that, you're totally
cognitively
-
depleted. Doesn't matter that you only spent
four hours
-
out of an eight hour day. Basically you have
-
no more cognitive resources left. And I think
this,
-
this means we should be very careful about
yak-shaving.
-
Because yak-shaving may feel good and it may
be
-
important in a lot of cases, but we need
-
to be very honest about the fact that there
-
is, there's a certain amount of cognitive
resources that
-
we have and yak-shaving takes up more of them
-
than you would expect. And they don't leave
us
-
time after, even two hours or three hours,
they
-
don't leave us a lot of cognitive resources
to
-
actually do the task that we were yak-shaving
towards.
-
So, obviously, occasionally you know you need
to refactor
-
and, and do all kinds of these kinds of
-
tasks, but you should be careful about thinking
that
-
you'll get a lot done afterwards.
-
So, I think this is sort of the unpacking.
-
This is a scientific unpacking of what it
is
-
that we're talking about. But, and I think
everyone
-
in this room can nod their heads along with
-
what I'm saying. They can agree with what
I'm
-
saying. Makes sense. But what ends up happening
in
-
the rest of the world, and also there's usually
-
a devil on your shoulder, is that people find
-
all kinds of excuses to argue against the
thing
-
I just said.
-
So I just outlined sort of an unpacking of
-
sort of the conventional reconfiguration story,
and somehow, we,
-
as a human race, actually find a lot of
-
ways to, to argue against these things. And
one
-
of these, one of these ways that we find
-
to argue against it is to tell ourselves that
-
we're unique and we're special, and I'll just
let
-
David from 2008 talk about this for a second.
-
DHH: One point I keep coming back to, over
-
and over again when I talk about Ruby and
-
Rails, is that we confessed commonality. We
confessed the
-
fact that we're not as special as we like
-
to believe. We confessed that we're not the
only
-
ones trying to climb the same mountain. And
I
-
think this is a real important point because
it's
-
somewhat counter intuitive, I think, for a
lot of
-
developers to think that they're not that
special. I
-
think it's counter intuitive for humans in
general to
-
think they're not that special.
-
But, when they do think that they're special,
when
-
they do think that they're the only ones climbing
-
that mountain, they kind of get these assumptions
that
-
they need very unique and special tools that
will
-
only work for them. And I think that's a
-
really bad way to approach getting greater
productivity. Because
-
I think what really makes this special and
makes
-
it work is all the points where we recognize
-
that we're exactly the same.
-
Y.K.: And I think that's really the point,
is
-
that the way we gain better productivity is
by
-
pushing back against this impulse. I think,
we have
-
it in the Rails community to some degree.
I
-
think it's especially significant outside
of the Rails community,
-
where people didn't already come together
around the idea
-
that we're gonna build shared tools and shared
solutions.
-
But I think we really do have to push
-
back against this idea.
-
And I think my favorite example of this sort
-
of, taken to an absurdist extreme, is sort
of
-
famous interview. What is your most surprising
app on
-
the home screen? Well, it's Operator. It's
a custom-designed,
-
one-of-a-kind bespoke app I had built for
my assistant
-
and I to communicate and collaborate. Did
this person
-
need a custom bespoke one-of-a-kind application
to communicate with
-
their assistant? No. Almost certainly not.
-
But they decided they were so special, they
were
-
so, they themselves were so one-of-a-kind,
such a unique
-
snowflake, that they needed a special tool
to communicate
-
with their assistant. And I think this is
sort
-
of how, this is how we act. This is
-
how we behave. And if you look at, sort
-
of, how people talk about software, you see
things
-
like, this is a tool set for building the
-
framework most suited to your application
development. Your application,
-
your company, your industry is so special,
that you
-
can't use general-purpose tools. You need
to use a
-
tool set to build your own framework.
-
Or, in an ecosystem where overarching, decides-everything-for-you
frameworks are
-
commonplace, and many libraries require your
site to be
-
reorganized to suit their look, feel, and
default behavior
-
- we should continue to be a tool that
-
gives you the freedom to design the full experience
-
of your web application.
-
And, who could be against freedom? Right?
Freedom is
-
a really effective thing to put on the wall
-
to say, this is the thing that we're arguing
-
for. We're arguing for freedom. But this is
just
-
another way, it's just another way that you,
that
-
peoples' brains sneak in arguments against
that, that helped
-
us create the paradox of choice in the first
-
place, right. People say, you know, I'm special.
I
-
can't use these shared tools. I can't use
these
-
tools that were built for everybody. I need
to
-
use special tools. I need to use small libraries
-
that help me build my own abstractions. I
can't
-
share with the community.
-
And then, even if people come to the conclusion
-
that maybe abstractions, maybe shared solutions
are a good
-
idea, then you get another argument. The devil
on
-
your shoulder or the devil in your community.
It
-
makes another argument, which is the law of
leaky
-
abstractions. And this is not, this is sort
of
-
like the law of Demeter. It's not a suggestion,
-
or an observation. It's a law. The law of
-
leaky abstractions.
-
And I think any time somebody couches an observation
-
about software development as a law, you know
something
-
fishy is going on. You know that something's
not
-
right. Because software development isn't
a science. You, basically
-
people want you to put on your science hat,
-
and say, aha! It's a law! It's like the
-
law of gravity. I can derive some conclusions
from
-
this law. What, what, what conclusions do
they want
-
you to derive? Abstractions are bad. You should
never
-
use abstractions. You should do everything
yourself.
-
And, so this law of leaky abstractions was
originally
-
built by, or written by Joel Spolsky, and
Jeff
-
Atwood, who was his partner at Stack Overflow,
actually
-
responded, I think, kind of brilliantly to
this. And
-
he said, you know, I'd argue, that virtually
all
-
good programming abstractions are failed abstractions.
I don't think
-
I've ever used one that didn't leak like a
-
sieve. But I think that's an awfully architecture
astronaut
-
way of looking at things. Instead, let's ask
ourselves
-
a more programatic question: does this abstraction
make our
-
code at least a little easier to write? To
-
understand? To troubleshoot? Are we better
off with this
-
abstraction than we were without it?
-
It's out job as modern programmers not to
abandon
-
abstractions due to these deficiencies, but
to embrace the
-
useful elements of them. To adapt the working
parts
-
and construct ever so slightly less leaky
and broken
-
abstractions over time.
-
And I think people use this idea, these excuses,
-
things like the law of leaky abstractions,
to give
-
an excuse for themselves to not share solutions.
And
-
I think sort of the hilarious thing, and this
-
is sort of a compressed super conflated set
of
-
abstractions. Every single one of us is sitting
on
-
top of abstractions that maybe occasionally
leak, but really,
-
how many people ever have to drop down into
-
the X86 or the arm level? Or even the
-
C level? Right. People. We can build higher
and
-
higher sets of abstractions, and we can keep,
we
-
can keep building on top of these abstractions,
and
-
build, and, and allow us to sort of eliminate
-
more and more code that we had to write
-
before. That we had to write in 1960, 1970,
-
1980. Sort of every year is another set of
-
things that we have discovered as a community
that
-
we don't have to worry about, that were shared.
-
And I think, sort of, people look at us
-
and they say, oh my god it's a pile
-
of hacks. It's hacks on hacks on hacks on
-
hacks. But actually it's not. Actually what's
going on
-
here is that every single time you start off
-
with this sort of experimental playground,
people are building,
-
you know, at the bottom layer, people were
building
-
their own hardware. And eventually people
came to the
-
conclusion that you don't have to build your
own
-
hardware. We can standardize around things
like X86.
-
And then we standardized around it and people
stopped
-
worrying about all the craziness that was
underneath. And
-
then people said, we can build C, and if
-
we build C, people can stop worrying, most
of
-
the time, about what's below it. So really
every
-
one of these layers is not a pile of
-
hacks built on a pile of hacks. It's us,
-
as a group of people, as a community of
-
programmers, deciding that 90% of the things
that we're
-
doing, we've figured out we don't actually
need to,
-
to worry about.
-
And, I think, fundamentally, this is about,
sort of
-
the history of programming is that we have
shared
-
solutions. We make progress by building up
the stack.
-
By eliminating code that we didn't have to
write.
-
And Steve Jobs actually talked about this
in 1995.
-
Sort of exactly the same thing. So let me
-
let him talk.
-
STEVE JOBS: Because it's all about managing
complexity, right.
-
You're developers. You know that. It's all
about managing
-
complexity. It's, like, scaffolding, right.
You erect some scaffolding,
-
and if you keep going up and up and
-
up, eventually the scaffolding collapses of
its own weight,
-
right. That's what building software is. It's,
how much
-
scaffolding can you erect before the whole
thing collapses
-
of its own weight.
-
Doesn't matter how many people you have working
on
-
it. Doesn't matter if you're Microsoft with
three, four
-
hundred people, five hundred people on the
team. It
-
will collapse under its own weight. You've
read the
-
Mythical Man Month, right. Basic premise of
this is,
-
a software development project gets to a certain
size
-
where if you add one more person, the amount
-
of energy to communicate with that person
is actually
-
greater than their net contribution to the
project, so
-
it slows down.
-
So you have local maximum and then it comes
-
down. We all know that about software. It's
about
-
managing complexity. These tools allow you
to not have
-
to worry about ninety percent of the stuff
you
-
worry about, so that you can erect your five
-
stories of scaffolding, but starting at story
number twenty-three
-
instead of starting at story number six. You
get
-
a lot higher.
-
Y.K.: And I think that's fundamentally what
we do
-
as software people. For all of the complaints
that
-
people make about, you know, oh my god, every
-
abstraction leaks. All we've ever done, even
in, even
-
as far back as, you know, in the 60s,
-
but even in 1995, Steve Jobs was already talking
-
about this idea that we can build higher by
-
building shared solutions. And I'm gonna let
him speak
-
one more time, because I think, really, it's
really
-
fascinating how much this idea of how you
get
-
better programmer productivity hasn't really
changed, fundamentally, since that
-
time.
-
STEVE JOBS: But, on top of that, we're gonna
-
put something called open step. And open step
lets
-
you start developing your apps on the twentieth
floor.
-
And the kinds of apps you can deliver are
-
phenomenal. But there's another hidden advantage.
-
Most of the great break through, the page
makers,
-
the illustrators, et cetera, the directors,
come from smaller
-
software companies. That's been said a few
times today.
-
They don't come from the large software companies.
They
-
come from the smaller ones. And one of the
-
greatest things is that using this new technology,
two
-
people or three people in a garage can build
-
an app and get it from concept to market
-
in six to nine months, that is every bit
-
as feature-rich, every bit as reliable, and
every bit
-
as exciting as a giant software company can
do
-
with a hundred fifty person team.
-
It's phenomenal.
-
Y.K.: So, I think what's kind of cool about
-
this is that, this idea that we can take
-
shared problems that everyone has, shared
problems that a
-
community of people have, solving the same
problem, and
-
we can build up shared solutions. This is
not
-
new. It's not, it shouldn't be controversial.
It's kind
-
of fundamental to what we do as software developers.
-
And yet, if someone isn't up here telling
you
-
this, it's so easy to forget. There are so
-
many excuses that people tell themselves.
-
Sort of what happens in reality is you have
-
this bulk of shared solutions, you have an
area
-
of experimentation - sort of the wild west
-
-
and you let the area of experimentation fold
back
-
into shared solutions. This is sort of how
Rails
-
works, right. So you build higher and higher
and
-
higher stacks. You get to a point where you,
-
you know, you could build something like Devise
in
-
the Rails community, because there's so much
of what
-
underpins Devise, you know, everybody uses
the same set
-
of model abstractions, everyone has similar
ways of talking
-
about users, right. So you can build an abstraction
-
on top of that because everyone has sort of
-
built up this shared understanding of what
it is
-
that we're doing.
-
And, it's so easy to let yourself be confused
-
by the fact that the area of experimentation
is
-
the wild west, and forget that that area of
-
experimentation is sitting on top of huge,
a huge
-
stack of abstractions. And this is sort of,
I
-
think, to me, the answer to why the node
-
community seems, they're sitting on top of
maybe, you
-
know, the most advanced dynamic language git
in the
-
world, on top of all kinds of abstractions.
And
-
they sit on top and they say, oh my
-
god, we need to build a lot of tiny
-
modules, because if we don't build tiny modules,
this,
-
the abstraction's gonna kill us.
-
But, for me, this has always been a paradox.
-
You're sitting on top of a stack of abstractions
-
that's far higher than anything that you're
claiming to
-
be afraid of. So, why are you so afraid?
-
And I think it's because of this area of
-
experimentation, right. When you're in an
area of experimentation,
-
of course abstractions are gonna leak. You're
still figuring
-
out what it is that you're doing.
-
But the goal of a good community that's gonna
-
help people be more productive is to eventually
notice
-
that the area of experimentation is over.
And move
-
into a conventional system where you can say,
we
-
don't need to argue about this anymore. It
was
-
a worthy thing for us to discuss when we
-
were thinking about the problem, but we can
take
-
that and we can roll it in, into our
-
set of shared defaults, and we can climb up
-
the ladder, right.
-
And this is what, this is what Steve was
-
saying. He was saying, you know, instead of
having
-
everybody start from some, some floor, sort
of this
-
is how iOS programming works today, right.
Ironically. Is
-
everyone starts from the same base. There
is not
-
a lot of shared programming. A lot of shared
-
solutions. And I think, fundamentally, open
source has been
-
something that has really kick started this
idea of
-
experimentation merging through the shared
solutions.
-
Because trying to essentially plan it the
way big
-
companies like Apple or Microsoft do it, is
just
-
not gonna get the job done across the board.
-
It'll, it'll solve some problems, but getting
the open
-
source communities, the power of the open
source community,
-
means that you can have all these little verticals,
-
all these little areas where people are trying
to
-
build higher abstractions for shared communities.
-
And interestingly, it's not enough to make
these abstractions
-
cheap. I think when you think about how people
-
actually go and they build on top of these
-
stacks, it's not enough, if every layer in
the
-
abstraction, in fact, if x86 and then C and,
-
you know, Linux, and Posits. If every one
of
-
those things cost a little, by the time you
-
actually got to build software, you would
be so
-
overwhelmed with the weight of the abstraction
that you
-
would never be able to do anything.
-
So, it's really fundamental that the abstractions
that we
-
build eventually get to the point where they're
basically
-
free. Where they have no cognitive capacity.
So that
-
we can keep building higher and higher and
higher,
-
right. And the Rails philosophy is basically,
how do
-
you do that? How do you, how do, how
-
do you say, you know, we're gonna experiment
for
-
a little bit, but eventually we're gonna work
really
-
hard, we're gonna push really hard at making
the
-
cost of that thing that everyone was just
experimenting
-
with a minute, a little, a minute ago free,
-
so that we can go build another level up
-
and another level up.
-
And, I have a few sort of closing points
-
to make about the ecosystem. So, first of
all,
-
Rails is not the only way that we have
-
to share. I think I was pretty sad when
-
the queue abstraction didn't end up in Rails,
but
-
I kind of am sad that we didn't get
-
to see sort of what you can build up
-
on top of the queue abstraction, there's really
no
-
reason that all the queue guys didn't get
together
-
and say, you know, we're gonna build some
abstraction
-
on top of that. And once you build the
-
abstraction on top of that, then you can see
-
how high you can go, right.
-
And a sort of similar thing happened in the
-
JavaScript community. In the JavaScript community
there were a
-
lot of different promise implementations,
and what happened over
-
time is that people realized that not having
a
-
standard way to talk about this was actually
making
-
it hard to build up.
-
So we said, let's actually get together and
let's
-
decide that we're gonna have a standard way
of
-
talking about that. We'll call it PromisesA+.
And now
-
Promises are in the DOM. And now, you know,
-
we can build up another level and make asynchronous
-
things look synchronous. And then we can build
up
-
another level, and we can put that idea into
-
the language.
-
And, you know, I don't know where we're gonna
-
go from there. But we can start building higher
-
and higher abstractions. But it requires taking
the first
-
step. So I, I guess what I'm saying is,
-
getting something into Rails core is not the
only
-
way that you can build these abstractions.
It, it
-
requires some discipline to actually get to
the point
-
where we're agreeing on something, but I think
if
-
you find that there is some topic, like, for
-
example, jobs or, you know, queuing or jobs,
and
-
everybody does them or a lot of people do
-
them but we don't have a good way of
-
building on top of them, that's a good opportunity
-
for someone to go and say, I'm gonna do
-
the hard work to say, let's create a shared
-
idea of what it is that we're doing.
-
And sometimes it's via an inter-op player
and sometimes
-
it's via standardizing around one solution.
-
And, another part of this is, when I started
-
working on Ember in the JavaScript community,
I thought
-
a lot of these ideas were obvious. I thought
-
it was gonna be, you know, a slam dunk.
-
Everybody should agree that building a shared
set of
-
solutions is the right thing. And what I found
-
was that, what I found instead is how powerful
-
the unique snowflake bias is, and how powerful
the
-
leaky abstraction fallacy can be in communities
that don't
-
place a high value on shared solutions.
-
So, if you don't see the power of shared
-
solutions, if you're not familiar with the
idea, with
-
the wins, it's really easy to pull out those
-
olds canards, the I am a unique snow flake,
-
I can't use a tool like Ember, because I
-
have special needs. I need to use a toolkit
-
that lets me build my own framework, because
my
-
needs are oh-so-special.
-
Or, you know, you know, I looked at Ember
-
when it was new, and Ember leaked all over
-
the place. So the law of leaky abstractions
means
-
you can't build in JavaScript a shared solution.
But,
-
of course these things are not true. And I
-
think, what I want to say is, I think
-
Rails, ten years on, has basically proved
that these
-
things are not true.
-
Before Rails, people spent a lot of time working
-
on their own bespoke solutions, convinced
that their problem
-
was just too special for shared solutions.
An when
-
Rails came out, they looked at the very idea
-
of convention over configuration as a joke.
And then,
-
one day, Rails developers started beating
the pants off
-
those people. And I think, in closing, if
you
-
find yourself in an ecosystem where developers
still start
-
from floor one every time, learn the lessons
of
-
Rails.
-
Everybody should band together, push back,
both in your
-
own brain and on other people, on the excuses
-
that drive us apart instead of the things
that
-
bind us together. The legacy of Rails isn't
MVC
-
or even Ruby. It's powerful ten years of evidence
-
that by sticking to our guns, we can build
-
far higher than anyone ever imagined.
-
Thank you very much.