Are we there yet?
by Rich Hickey (1h 10min)
00:32 Are we being well served by object orientation as commonly embodied?
01:00 Ruby, Java, Scala etc. are all single dispatch, stateful object oriented
01:42 They are superficially different.
02:02 They have more to do with the sensibilities of the programmer than they
have to do with significant differences in the programming model.
02:17 Are we done? Are we gonna keep making languages that are just very
slight incremental differences to the things that we know?
02:29 One thing is undeniable: people like object-orientation.
03:20 What drives us to makes changes?
03:28 What things should drive us to that?
Expectations of people for software will only ever increase.
05:05 The complexity I want to talk about today is the incidental
complexity: The complexity that arises from the way our tools work, from the
ideas that embody our tools, from the ways our tools don’t work, from the ways
our approaches don’t work.
05:22 We have a certain number of hours in the day. We have to solve problems.
05:24 Are the problems you are solving the problems of the application domain
or the problems you set in front of yourself by choosing a particular language
or tool or development strategy?
The worst kind of incidental complexity is the kind that’s disguised as simplicity.
08:25 I think people that moved from C++ to Java did so in no small part due
to the fact that they were no longer willing to bear this implicit complexity. I
don’t wanna do manual memory management. It’s not part of the problem I’m trying
to solve at all.
09:19 Is this a mutable thing or not? When will I see a consistent value?
09:37 This isn’t just a concurrency problem.
09:47 This is a big source of incidental complexity in programs, because we
don’t know when we have a stable value.
10:16 If you hand a mutable thing to somebody and they may hand it to other
people and then you need to change it. Who is gonna be affected by that? You
have no idea.
10:37 This is every mutable language I’ve listed (Java, Ruby, Scala, JS etc.).
There is no way to fix it.
10:43 We don’t have any standard time management.
Familiarity Hides Complexity.
11:00 Because we are so familiar with this, we are absolutely completely blind
11:08 When people choose different languages, a lot of times they make the
decisions on very superficial differences like syntax or perhaps sort of “this
makes me feel good” expressivity differences, which I admit completely are real
and valid, but are somewhat emotional.
11:26 In the meantime our systems are getting very hard to build, maintain and
correct. In no small part that’s due to the incidental complexity.
11:39 We have these giant test suites and we run them every time we change any
little thing, because we don’t know if we change something over here, it’s not
gonna break something over there. And we can’t know.
12:17 We want to hide chunks of stuff, name them, encapsulate them, get them
out of our way, so that we do not have to think about them and we can build
something on top of that.
12:40 And I think it’s one of the selling points of object orientation, that
this is the way to make these kind of units, that we can combine to make
programs that are easier to understand.
12:54 It ends up that they are really not the best unit for that. The best
unit for that are functions, in particular pure functions.
If you want something, you do not have to worry about, you should love the pure function.
13:10 The pure function takes immutable values. It does something with them.
The stuff it does has no effect on the world and no connection to the outside
world. Then it returns another immutable thing.
13:24 So the entire scope of its activity is local. It has no notion of
14:06 In contrast objects and methods don’t have this property.
14:19 As great as functions are as building blocks, our programs in general
are not functions. There are programs that are functions: compilers and theorem
14:30 But a lot of programs run indefinitely long and people have an
expectation of being able to see their behaviour, to have inputs as the program
runs and get something different every time.
Most programs are processes.
15:50 Object orientation was a way to say: How do we take our mental modal for
the processes we see in the world and embody them in some kind of programming
16:15 Any programming model that tries to model the real world is essentially
gonna be a simplistic thing.
16:48 Even though objects putatively are about process, there is no concrete
notion of time in objects. No more so than there are in functions, but at
least functions aren’t pretending to play with time. Functions say: there is no
17:07 Objects are pretending to deal with time and yet our objects systems
don’t have any reified notion of time. There is nothing you can talk about
17:17 Because most of them were born in the days when your program ruled the
computer. You had a single monotonic execution flow. There was a single
universal process controlling everything.
17:32 Now that that’s not longer true, we try to use locks to restore that
vision of the world, but that vision of the world was never correct.
17:44 And you can tell in one key way, because we still don’t really have a
concrete representation we can use for perception or memory. These objects are
all live. They are time-bound.
The object orientated model has gotten time wrong.
18:27 We’ve left out any concrete notion of time and there is no proper notion
18:50 We’ve conflated two things: we’ve said the idea that I attach to this
thing that lasts over time is the thing that lasts over time.
19:38 Time must be atomic and move in chunks. Time isn’t a real thing you
can touch, but it’s something you derive from seeing these epical transitions.
20:08 There is no river. There is water there at one point in time and at
another point in time there is other water there. River is all in our head.
21:08 There are no changing values. There are values at points in time and
all you ever gonna get is the value for a point in time.
21:33 In Whitehead’s model (simplified) there is this immutable thing, then
there is a process in the universe that’s gonna create the next immutable thing.
21:55 Entities that we see as continuous are a superimposition we place on a
bunch of values that are coarsely related.
22:38 Actual entities are immutable.
The future is a function of the past.
22:51 Process is what creates the future from the past.
22:57 Identities are mental constructs. It’s an extremely useful
psychological artefact. that’s why we have object-oriented languages. It helps
us understand things.
23:12 But we have to make sure we understand that objects are not things that
change over time. We superimpose object on a set of values we saw over time.
23:44 Time is strictly a derivative if this series of events.
There is a becoming of continuity, but no continuity of becoming.
— Alfred North Whitehead
25:32 A state is a snapshot. This entity had this value at this point in time.
This concept of mutable state makes no sense.
25:53 Time is a completely relative thing. All time can ever tell you is
this thing happened before or after that other thing or at the same point. It’s
not a measurable thing, it doesn’t have dimension.
26:18 You can’t have logic on top of rivers, that can change. You can only
have logic on top of values.
26:50 I do think we need identity. I think that the appeal of object
orientation is valid. We care about this because it’s the way we are thinking
about the world.
27:26 But we can’t screw up time and state the way we have and have it still
28:14 We don’t make decisions about the world by direct cognition. There is a
disconnect between our logical system and the actual world. It’s not live.
28:44 The other thing we don’t get to do in the real world is to stop the
world. Especially not to observe it.
29:50 Perception is uncoordinated. It’s massively parallel. It’s not message
We are always considering the past. We are never perceiving the present.
31:07 Our sensory systems are incredibly oriented around discrete events.
31:42 You cannot do logic if everything you are trying to consider is moving
32:02 We discretise things and then we have simultaneity detectors.
32:24 Making things happen and perceiving things are completely different.
They shouldn’t be in the same construct. (methods)
33:22 Action has to be sequential.
33:33 This is a model for how to think about time:
33:46 A point in time is a value. It can’t be changed.
33:50 We will still probably organise our programs by identities. As long as
you remember that the identity is a derived notion. It isn’t a thing that’s
doing stuff. description: Are we being well served by object orientation as