TRANSKRYPCJA 🔗
WEBVTT
00:00:00.160 --> 00:00:03.359
Hey, it's Jason, host of the Code with Jason podcast.
00:00:03.520 --> 00:00:04.480
You're a developer.
00:00:04.639 --> 00:00:06.240
You like to listen to podcasts.
00:00:06.400 --> 00:00:07.759
You're listening to one right now.
00:00:07.919 --> 00:00:13.679
Maybe you like to read blogs and subscribe to email newsletters and stuff like that.
00:00:13.839 --> 00:00:14.960
Keep in touch.
00:00:15.199 --> 00:00:23.440
Um, email newsletters are a really nice way to keep on top of what's going on in the programming world.
00:00:23.679 --> 00:00:26.800
Um, except they're actually not.
00:00:27.199 --> 00:00:36.399
I don't know about you, but the last thing that I want to do after a long day of staring at the screen is sit there and stare at the screen some more.
00:00:36.640 --> 00:00:40.240
That's why I started a different kind of newsletter.
00:00:40.320 --> 00:00:43.679
It's a snail mail programming newsletter.
00:00:43.920 --> 00:00:51.600
That's right, I send an actual envelope in the mail containing a paper newsletter that you can hold in your hands.
00:00:51.840 --> 00:00:59.280
You can read it on your living room couch, at your kitchen table, in your bed, or in someone else's bed.
00:00:59.359 --> 00:01:02.159
And when they say, What are you doing in my bed?
00:01:02.399 --> 00:01:04.879
You can say, I'm reading Jason's newsletter.
00:01:04.959 --> 00:01:06.159
What does it look like?
00:01:06.560 --> 00:01:12.640
You might wonder what you might find in this snail mail programming newsletter.
00:01:12.879 --> 00:01:20.480
You can read about all kinds of programming topics like object-oriented programming, testing, DevOps, AI.
00:01:20.719 --> 00:01:23.760
Most of it's pretty technology agnostic.
00:01:24.159 --> 00:01:42.000
You can also read about other non-programming topics like philosophy, evolutionary theory, business, marketing, economics, psychology, music, cooking, history, geology, language, culture, robotics, and farming.
00:01:42.239 --> 00:01:46.239
The name of the newsletter is Nonsense Monthly.
00:01:46.560 --> 00:01:50.560
Here's what some of my readers are saying about it.
00:01:50.879 --> 00:01:57.120
Helmut Kobler from Los Angeles says, Thanks much for sending the newsletter.
00:01:57.280 --> 00:02:00.879
I got it about a week ago and read it on my sofa.
00:02:01.120 --> 00:02:06.400
It was a totally different experience than reading it on my computer or iPad.
00:02:06.719 --> 00:02:12.240
It felt more relaxed, more meaningful, something special and out of the ordinary.
00:02:12.960 --> 00:02:18.879
I'm sure that's what you were going for, so just wanted to let you know that you succeeded.
00:02:19.199 --> 00:02:20.879
Looking forward to more.
00:02:21.840 --> 00:02:31.520
Drew Bragg from Philadelphia says, Nonsense Monthly is the only newsletter I deliberately set aside time to read.
00:02:31.759 --> 00:02:44.240
I read a lot of great newsletters, but there's just something about receiving a piece of mail, physically opening it, and sitting down to read it on paper that is just so awesome.
00:02:44.479 --> 00:02:46.400
Feels like a lost luxury.
00:02:47.280 --> 00:02:57.919
Chris Sonnier from Dickinson, Texas says, just finished reading my first nonsense monthly snail mail newsletter and truly enjoyed it.
00:02:58.240 --> 00:03:03.199
Something about holding a physical piece of paper that just feels good.
00:03:03.439 --> 00:03:04.479
Thank you for this.
00:03:04.639 --> 00:03:06.240
Can't wait for the next one.
00:03:06.560 --> 00:03:16.319
Dear listener, if you would like to get letters in the mail from yours truly every month, you can go sign up at nonsense monthly dot com.
00:03:16.960 --> 00:03:20.240
That's nonsensemonthly.com.
00:03:20.719 --> 00:03:25.439
I'll say it one more time nonsense monthly dot com.
00:03:25.759 --> 00:03:29.520
And now without further ado, here is today's episode.
00:03:54.159 --> 00:03:55.840
Hey Jason, how's it going?
00:03:56.479 --> 00:03:58.159
I'm doing great.
00:03:58.319 --> 00:03:59.599
How about yourself?
00:03:59.919 --> 00:04:01.439
Um, about the same.
00:04:01.520 --> 00:04:04.159
Uh just my normal level of confusion, really.
00:04:06.319 --> 00:04:08.800
Yeah, it's a perplexing time.
00:04:10.319 --> 00:04:11.919
Yeah, it certainly is.
00:04:12.080 --> 00:04:16.079
It's um I uh yeah, it's it's funny.
00:04:16.160 --> 00:04:32.560
I've only just managed to convince myself uh to stop reacting at the kind of day level and go back to something more sane, uh which has actually made my life a lot less stressful.
00:04:33.120 --> 00:04:35.600
So hopefully I can keep that up.
00:04:36.480 --> 00:04:40.800
Like reacting on a day-to-day basis to what kind of stuff?
00:04:41.439 --> 00:05:15.199
Uh it's uh fundamentally I'm trying to keep off the socials, um, but it's uh just reacting to the kind of bright shiny stuff that's going on, the the you know, the latest Claude, the you know, the the the new agent that will cure your world and and you know run your life for you, the latest techniques, uh all of this stuff is changing just so ridiculously rapidly.
00:05:15.759 --> 00:05:20.959
And 90% of it, to be honest, is just irrelevant.
00:05:21.199 --> 00:05:41.439
Um so um I've been thinking a lot about what it is that I actually need to focus on, and more and more I am convinced that uh I need to get back to fundamentals and uh just keep that as my kind of guiding star.
00:05:42.319 --> 00:05:47.439
Um that is so that is so the right idea.
00:05:48.319 --> 00:05:55.680
And that is something that I've been trying to steer people toward when I've been talking with them.
00:05:56.240 --> 00:06:10.959
Um, and it's interesting that you and I have have apparently converged on the same idea, and I'm curious what that means to you, you know, when focusing on the fundamentals instead of the new shiny stuff.
00:06:11.120 --> 00:06:13.519
What what does that mean, the fundamentals?
00:06:14.079 -->
Load full transcript
00:06:23.920
Um well, if just look at it, uh the only area where I can really talk with any kind of authority, I guess, is software development.
00:06:24.000 --> 00:06:28.399
So let me talk about that uh rather than look at the the massive big picture.
00:06:28.800 --> 00:06:42.079
Um but I I I have this um theory that in software development we repeat our own mistakes once every seven or so years.
00:06:42.879 --> 00:06:49.439
And you know, it's just a very, very cyclic world in which we we know keep reinventing the past.
00:06:50.560 --> 00:07:05.120
And uh if you look back to that past, if you look back to the um the lessons we learned in the sixties and seventies and eighties, um those lessons are still true today.
00:07:05.920 --> 00:07:18.720
Um the uh uh the the values of the um manifesto for agile software development are still true today.
00:07:19.920 --> 00:07:33.839
Um what's changed today is that we now have these you know amazing new technologies that uh turn us all into godlike beings, you know.
00:07:34.480 --> 00:07:50.720
Uh and it's very easy to forget our training and forget our common sense uh because we're empowered just to be able to wish for something and it happens.
00:07:51.199 --> 00:08:07.120
Um but the actual underlying uh issues of you know how do I know what I'm creating is what I want and how do I steer myself towards something better, those have not changed.
00:08:07.360 --> 00:08:17.920
And you just need to be able to to use uh these new powers within that kind of framework, within that kind of value system.
00:08:18.560 --> 00:08:28.720
Um and you need to be able to curb uh this natural idea of hey, let's try and do this, let's add this feature, let's go and do that and that.
00:08:28.959 --> 00:08:33.120
Uh curbing that is just it requires a lot of discipline.
00:08:33.440 --> 00:08:39.279
And when you do um things get better, in my opinion.
00:08:39.919 --> 00:08:40.559
Mm-hmm.
00:08:41.919 --> 00:08:43.360
Totally agree.
00:08:44.080 --> 00:08:53.039
Um there are okay, so I can share some of the like bedrock truths that I that I have been thinking about.
00:08:53.200 --> 00:08:55.519
And there's this quote from Stephen Covey.
00:08:55.600 --> 00:09:00.320
He said something like, when it's not really a quote, just a passage from a book.
00:09:00.399 --> 00:09:09.919
He said, when um things are rapidly changing, it's very helpful to have principles that will never change.
00:09:10.480 --> 00:09:17.039
Um and there in in software development, we have a lot of principles that will never change.
00:09:17.360 --> 00:09:31.200
And in this time of rapid change, I think it's very helpful to distinguish between what has been invalidated by AI and what hasn't, and in principle can't ever be.
00:09:31.679 --> 00:09:52.879
Um and I think a lot of people are um they they haven't paused and thought about these things, and so maybe they are allowing themselves to be confused and thinking that the the existence of AI invalidates things that it doesn't invalidate.
00:09:53.039 --> 00:10:10.879
Um I was talking the other day with my friend Leo, who is a really smart guy and a really good programmer, um, and he was sharing that he was feeling overwhelmed because the agents were creating so much work for him.
00:10:10.960 --> 00:10:15.759
There were all these, there's all this code that he that he had to review and stuff like that.
00:10:15.919 --> 00:10:22.480
There's all this automation, but now he's the bottleneck because he has to do all this work now.
00:10:23.519 --> 00:10:29.120
And I told him that I felt like his workflow was really upside down.
00:10:30.240 --> 00:10:33.440
Um and and his situation's not unique.
00:10:33.600 --> 00:10:35.360
I've I've heard that from other places.
00:10:35.519 --> 00:10:44.960
People feel like they're overwhelmed, they feel like they're the bottleneck now because AI is generating so much code that they now have to review.
00:10:46.080 --> 00:11:01.679
And I I I feel like there's I haven't quite articulated it yet, but there's something there that's that's a little bit off with regard to understanding the the fundamental principles of of how that kind of stuff works.
00:11:02.000 --> 00:11:40.639
Yeah, absolutely there is, and I think the the problem there is that Leo is becoming the tail and not the dog and the so one of the one of the um tenets of the waterfall method is that uh you put effort up front to stop yourself wasting effort down the road.
00:11:41.120 --> 00:11:52.000
So you you get the requirements nailed before you well, not before, but you get the requirements nailed, and then you go and work on architecture and then design.
00:11:52.240 --> 00:11:57.440
And if any of those things reveal problems, you go back up the ladder and and modify.
00:11:57.600 --> 00:12:07.759
But in general, you try to do that, and the reason for that has always been that the cost of each stage is higher than the stage before.
00:12:08.000 --> 00:12:18.559
And the the assumption was always that the cost of the implementation was always the dominant factor, and therefore that's what you were trying to reduce.
00:12:19.759 --> 00:12:39.440
Um so in that respect, the fundamentals to me is not uh that you design up front, but the fundamental is you try to uh leverage the um ways of reducing the dominant cost.
00:12:40.240 --> 00:12:52.320
Now, in the AI world, sorry, in the in in the world like four years ago, three years ago, the dominant cost was still the cost of developers writing code.
00:12:52.559 --> 00:12:58.799
Um, you know, it'd be very easy to say, write me a system that does this, then that costs you like nothing.
00:12:59.120 --> 00:13:05.919
And then, you know, two months later a system arrives, and that's just cost you$100,000 or whatever it is.
00:13:06.559 --> 00:13:09.919
So now that's not true anymore.
00:13:10.080 --> 00:13:24.639
And now the dominant cost is not necessarily the cost of actually creating the code,
the dominant cost is is the ceremonies that surround that, and that's not we what we've adjusted to.
00:13:24.799 --> 00:13:40.480
Um because as you say, Leo is the bottleneck, and so Leo has still become is still the dominant cost, but the activity that's making him that is not the activity of writing code.
00:13:41.200 --> 00:13:44.799
Um, and then we gotta work out, okay, so how do we deal with that?
00:13:45.039 --> 00:14:11.200
One of the ways we deal with it, I think, is that um if you just let AI write code and then your job is to look at the PR, um, then what you're doing is you're inviting that AI to produce typical AI code, which is, I don't know, maybe five times larger than the code that a human would write.
00:14:11.360 --> 00:14:17.519
Um it's not necessarily, you know, wrong, but it's still ridiculously complicated.
00:14:17.600 --> 00:14:27.120
It's overembellished, it has too many features, um, it tends to have experiments in it that are then ignored but not deleted.
00:14:27.360 --> 00:14:36.080
Um and all of those things make these these PRs, you know, something that you really don't want to do because they're so tedious.
00:14:36.480 --> 00:14:42.559
Um and also so soul destroying because you look at this and say, this is really crap code.
00:14:43.120 --> 00:14:46.559
But at the same time, it works.
00:14:46.879 --> 00:14:48.159
You know, what am I gonna do?
00:14:48.320 --> 00:14:51.279
I'm gonna go say to the AR, no, go back and try again.
00:14:51.519 --> 00:14:54.799
No, I'm not gonna do that because it's gonna get me in trouble, you know.
00:14:55.039 --> 00:15:08.000
Um, and so we are now becoming these kind of like yes men and yes women to this this you know this beast.
00:15:09.279 --> 00:15:25.440
Um I think that the the reason I think that the tail is is wagging the dog here is because if we actually invest if we say, okay, so the most m the most expensive part here is the PR, effectively.
00:15:25.600 --> 00:15:29.600
I mean, I mean there's more to it than that, but let's just take that as being a a base case.
00:15:30.799 --> 00:15:34.320
Then what are we going to do to reduce the cost of that?
00:15:34.799 --> 00:15:54.480
And I think what we do to reduce the cost of that is way better supervision of what the AI is doing and the injection of what you already know and the the principles and values that you already have into the AI's work.
00:15:55.440 --> 00:16:03.759
Um I am forever hitting control C and saying, you know, what are you doing?
00:16:03.840 --> 00:16:05.200
Why are you doing that?
00:16:05.440 --> 00:16:06.000
You know.
00:16:06.639 --> 00:16:20.159
Um the the the classic case is when you're you're coding away, or sorry, you're not coding away, it's coding away, and it comes across this this problem, a test that fails, whatever it might be.
00:16:20.480 --> 00:16:24.240
And rather than stopping and saying, well, okay, why is this test failing?
00:16:24.399 --> 00:16:26.480
It immediately tries to apply a band-aid.
00:16:26.960 --> 00:16:44.399
And that maybe works, maybe doesn't work, and then there'll be another one, and it will just disappear down these black holes of um, you know, almost like panic, as as it adds things and adds things until it finally gets this test to pass.
00:16:44.879 --> 00:16:59.279
And what it's done is it's generated I don't know how much code with lots of flags and oh, you know, I have to say this condition and this condition, then do this, otherwise do the it hasn't looked at the big picture.
00:16:59.360 --> 00:17:02.080
All it's looked at is I need to get this test to pass.
00:17:02.240 --> 00:17:06.880
And so your code has just exploded uh for all the wrong reasons.
00:17:07.039 --> 00:17:20.000
And that's that kind of desperation is you know, the second you see that starting, you control C and you say, okay, let's go back to the commit and let's work out, you know, what actually is happening here.
00:17:20.160 --> 00:17:24.720
Maybe what we've got is an architectural issue or a design issue.
00:17:24.960 --> 00:17:29.200
I mean, it's possibly an implementation bug as well, but you know, it could be something different.
00:17:29.359 --> 00:17:40.640
I mean, normally, for me at least, when code does unexpected things, that's the code's way of telling you to set back and think, why is it doing that?
00:17:40.880 --> 00:17:41.119
Right?
00:17:41.279 --> 00:17:45.119
It's not an imperative to fix the code.
00:17:45.359 --> 00:17:50.640
It's a nudge to say, yeah, there may be something bigger wrong here.
00:17:51.200 --> 00:18:09.279
And my experience is if I work more closely during that, during the implementation phase, and during the design phase too, when it's planning, if I work more closely and you know, don't just sit there and say, yes, continue, yes, continue, yes, continue the whole time.
00:18:09.680 --> 00:18:20.319
Um that I find results in better code and code that I would be more proud of when it comes out.
00:18:20.880 --> 00:18:38.880
Okay, so I want to share the the this is this is rustling up in my mind some like deep fundamental truths that I've learned recently, and they apply definitely to programming big time and to other areas as well.
00:18:39.279 --> 00:18:52.079
Um, so I've talked on the podcast a million times about David Deutsch and his two books, although I haven't mentioned him for a while, but his two books are um The Fabric of Reality and The Beginning of Infinity.
00:18:52.400 --> 00:18:59.039
And the Fabric of Reality, it stitches together like four uh different areas.
00:18:59.279 --> 00:19:25.920
I don't know if I'll remember them all, but they're biological evolution, um, computation, epistemology, and yeah, I don't remember the fourth one, but it it strings together these things and draws parallels uh between them because they all have that they share certain important things in common, and I think uh software development absolutely has this in common too.
00:19:26.160 -->
00:19:33.599
So the the thing that they have in common is the idea of conjecture and refutation.
00:19:34.400 --> 00:19:46.480
So with with epistemology, knowledge creation, the idea, of course, isn't to get the right answer right from the start.
00:19:46.720 --> 00:20:01.519
We have to make guesses, and then we we start with a relatively large number of guesses, most of which we know are not going to be correct, but we don't know from the start which one is correct.
00:20:01.839 --> 00:20:12.319
And so the question isn't how do we be right, the question is how do we detect and eliminate errors.
00:20:13.039 --> 00:20:16.559
Same thing with biological evolution.
00:20:16.880 --> 00:20:28.720
Uh evolution blindly stumbles through design space, and the vast majority of mutations are not an improvement.
00:20:29.440 --> 00:20:35.119
But then every great once in a while a mutation is an improvement, and so it's kept.
00:20:35.440 --> 00:20:49.839
And the the process isn't one of just starting out with with an improvement, the process is the elimination of the things that aren't an improvement, same exact process.
00:20:51.200 --> 00:21:19.680
That is there's a certain parallel there in software development because when we are working on a system, we can be virtually guaranteed that many, if not most, of the changes we make to the system will turn out in hindsight to have been the wrong thing, but we can't know in advance which ones.
00:21:20.079 --> 00:21:29.200
Um, and so the question isn't, you know, going back to your waterfall comment, uh, the question isn't how do we be right right from the start.
00:21:29.359 --> 00:21:59.440
The question is how do we detect and eliminate uh the things that are wrong, and of course, how do we design our system in such a way that when something inevitably turns out to be wrong, and again, we don't know in advance what thing it will be, but we can design our system such that on average those changes are relatively easy to make.
00:22:00.000 --> 00:22:04.640
But again, it's that idea of uh conjecture and and refutation.
00:22:06.400 --> 00:22:07.279
I'll pause there.
00:22:14.160 --> 00:22:20.960
I would take a little bit of issue with that.
00:22:21.920 --> 00:22:40.400
Um not wishing to uh argue with um great thinkers, but uh it kind of implies to me that there is a correct way that we're trying to stumble towards through experimentation.
00:22:41.519 --> 00:22:48.160
And that to me feels regressive.
00:22:48.640 --> 00:23:04.480
Um and it feels to me a bit like the way I AIs are currently um basically narrowing the the solution space constantly through statistics.
00:23:05.279 --> 00:23:20.079
Um I I it's kind of trite, but there's that um Shaw George Bernard Shaw quote from what is it, Man and Superman, I guess.
00:23:20.240 --> 00:23:33.599
Um it says something like the reasonable man adapts himself to the world, um the unreasonable man is constantly trying to change the world, therefore all progress depends
on unreasonable men.
00:23:34.079 --> 00:23:56.960
Um and I think there's actually uh there's an element of truth to that in that the things that you talk about with like evolution, the the real change that comes through evolutionary um growth is not that constant refinement.
00:23:57.119 --> 00:24:09.119
It's the every now and then there is some ridiculous change that you would never want, you'd never think of, and yet suddenly it turns out it works.
00:24:09.680 --> 00:24:33.839
Um and I think the same thing is true in in just about every aspect, that we are constantly making minor adjustments and fixing things, but the the real the real progress is made when someone says, what if we dot dot dot and we tried something just totally different.
00:24:34.079 --> 00:24:54.319
And that I think is the weakness of AI and the strength of humans, uh, in that uh one of one of the things I get a lot of pleasure from when I'm coding with AI is when I hit control C and say, what if we think about it this way?
00:24:54.880 --> 00:25:00.240
And suddenly what was a block just opens up and we can just move forward.
00:25:00.400 --> 00:25:13.680
Um to be clear, there's a there I want to distinguish between two things.
00:25:14.240 --> 00:25:25.440
Um, you know, in science, there's the scientific method, and then there are the fruits of science, and then like all the outstanding hypotheses and stuff like that.
00:25:25.920 --> 00:25:48.160
Um and with evolution, there's the process of evolution, and then there are the actual designs of organisms that exist, and then of course, in software development, there is the process of software development, and then the the fruits, the the actual systems that we create.
00:25:49.119 --> 00:25:55.920
And AI, I think you would probably agree with this, AI is terrible at the process.
00:25:56.960 --> 00:26:15.200
Um, it will, it if if you don't give it guardrails, it will just behave chaotically and and use a cowboy coding kind of behavior, and the results will be fairly poor as a result.
00:26:16.480 --> 00:26:46.799
Um if we have okay, if if we have in science um a lot of not even just science, but like philosophy or any area of knowledge creation, we have a bunch of ideas uh of of indeterminate value or validity or whatever, and how do we know which ones to keep and which ones to discard?
00:26:48.160 --> 00:26:56.079
And the answer is we subject them to arguments with a hypothesis.
00:26:56.240 --> 00:27:05.039
The question is, does this hypothesis adequately explain the phenomena that we observe?
00:27:05.440 --> 00:27:09.680
And if it doesn't, then it's no good.
00:27:09.920 --> 00:27:18.000
And the equivalent in software to me is does this code satisfy a test?
00:27:18.880 --> 00:27:36.000
And if it doesn't, if if it's too much code, you know, beyond what's needed to pass the test, then we toss it out because it is um it we we haven't said that we needed it, or if it makes a test fail, then we toss it out.
00:27:37.039 --> 00:28:01.599
And so that's that's part of um my way of harnessing the AI so that even though by default it behaves badly, we can s subject it through this to this process of um refutation or whatever you want to call it to keep the to keep the outputs bounded so that the fruits are more likely to be good.
00:28:03.680 --> 00:28:11.680
Yeah, I think you're I think you're on yeah, I think what you're saying is is true.
00:28:12.319 --> 00:28:16.720
Um I don't think it's the whole picture though.
00:28:17.839 --> 00:28:21.920
And I'm trying to put my finger okay, so let's go back to science, right?
00:28:22.480 --> 00:28:33.440
Um there are there are one and a half tests that you apply to a theory, I think, as a scientist.
00:28:33.680 --> 00:28:39.519
One is does it meet the observable universe in some way?
00:28:40.480 --> 00:28:50.240
But the second the I think either explicitly or implicitly most scientists apply is is it elegant?
00:28:51.759 --> 00:29:06.000
Because there is a very strong feeling, I think, in science, that minimal explanations are better than complex ones.
00:29:06.480 --> 00:29:28.000
Because it's more likely that the underlying nature of whatever's going on um is is minimal, it doesn't involve you know a hundred random constants, uh, but there is some actual reason that this theory is uh true.
00:29:28.960 --> 00:29:32.160
And um I mean not everything is like that.
00:29:32.240 --> 00:29:41.359
There are you know like the four-color theorem proof is anything but but minimal, um, although they have actually got a better one recently.
00:29:41.519 --> 00:29:53.599
Um but in general, this idea of elegance, of minimalism, um, or expressiveness to put it another way, is I think really important.
00:29:53.680 --> 00:29:57.119
And I think the same thing applies to software.
00:29:57.440 --> 00:30:20.960
I mean, the entire history of how you design programs has been a fight to tame complexity and to uh find ways of expressing things that are uh not minimal as much, but it's certainly less less complex, more understandable than they were.
00:30:21.839 --> 00:30:50.000
Um and what we're doing now is we are um we're turning from being theoreticians and verifying using experiments to being um empiricists, and we're basically doing, you know, coding with AI is like a um you know throwing darts at the board and waiting to see which one hits.
00:30:51.359 --> 00:31:00.559
Uh and I think that's where we want to, you know, we started off talking about fundamentals, and I think that's where we need to reclaim the high ground.
00:31:00.640 --> 00:31:28.480
I think that's where we need to put our effort as developers, is coming up with these new uh theories, these new ways of doing things that feel more like the old ways when the old ways worked, you know, have that kind of elegance to them, um, rather than just brute forcing everything.
00:31:28.960 --> 00:31:35.680
Okay, I want to jump on that idea of elegance, because I think that is
extremely important.
00:31:36.720 --> 00:31:49.440
Um, you know, one one obvious uh property of elegance is things that are elegant are easy to easier to understand than things that aren't.
00:31:49.680 --> 00:31:53.039
And I guess, you know, what is elegance?
00:31:53.279 --> 00:32:12.799
Um I tell me if you concur with this definition, but to me, something is elegant to uh uh in proportion with how simple the explanation is for something.
00:32:12.960 --> 00:32:24.559
It it if if two explanations explain something equally well, but one is simpler than the other, then the simpler one is more elegant.
00:32:24.720 --> 00:32:26.079
Does that seem like the right idea?
00:32:26.400 --> 00:32:27.519
Yeah, I think so.
00:32:27.680 --> 00:32:28.880
I think Yeah.
00:32:30.640 --> 00:32:42.160
Elegance it's it uh yeah, things are elegant if everything has a purpose.
00:32:44.960 --> 00:32:49.759
Um that is you know that moves it towards whatever it is you're trying to do.
00:32:49.920 --> 00:33:03.759
You know, whether that's like you know um fashion or whether that's a mathematical theorem, I think i the there's an essence to things.
00:33:04.799 --> 00:33:09.759
And elegance is a qu is is an expression of the essence of something.
00:33:10.160 --> 00:33:10.480
Right.
00:33:10.720 --> 00:33:13.119
And elegance is economical.
00:33:14.799 --> 00:33:16.480
Where it has to be.
00:33:16.799 --> 00:33:17.279
Right.
00:33:17.839 --> 00:33:18.240
Yeah.
00:33:18.400 --> 00:33:22.240
I mean you can be flamboyantly elegant, I guess.
00:33:23.599 --> 00:33:30.400
Uh but yeah, I mean, in general, elegance is is minimal.
00:33:31.680 --> 00:33:32.319
Right.
00:33:32.960 --> 00:33:51.359
Um and so one of the ways that elegance has value in software systems is again, it's easier to understand, and things that are easier to understand are easier to change, and systems that are easier to change are less expensive to maintain.
00:33:52.480 --> 00:34:04.559
Um with regard to elegance, there's an analogy that I've been using a lot lately, which is that of planetary motion and epicycles.
00:34:04.640 --> 00:34:13.199
The ancient Greeks observed the motion of the planets and they tried to model the motions of the of the planets.
00:34:13.519 --> 00:34:52.880
They didn't try to, they did it using uh perfect circles, perfectly circular orbits, but the perfectly circular orbits didn't accurately model the movements, and so they added these smaller circles on top of the circles called epicycles, and sometimes they had yet smaller circles on top of those smaller circles, because if you add enough circles on circles, you can approximate anything to uh an arbitrary degree of precision.
00:34:53.440 --> 00:35:06.239
Um, so their model worked, and it gave you know basically the right values, but it wasn't elegant and it also wasn't correct.
00:35:06.719 --> 00:35:10.880
Their model didn't match what's really happening in reality.
00:35:11.920 --> 00:35:25.199
And then um who figured
out the well, I don't know, Copernicus or who whoever Newton Newton used calculus to prove, well not to prove, but to derive the motion.
00:35:26.000 --> 00:35:26.320
Okay.
00:35:27.440 --> 00:35:36.480
Um and and you know, then we landed on the right model, which is elliptical orbits.
00:35:36.639 --> 00:35:47.920
Oh yeah, obviously the uh I left out the the the big significant thing, the geocentric model of the solar system versus a heliocentric model of the solar system.
00:35:48.400 --> 00:35:53.039
Once you switch to a heliocentric model, everything just snaps into place.
00:35:53.440 --> 00:35:57.440
And it's so much simpler, gives the same answers.
00:35:57.760 --> 00:36:00.159
Um And it was wrong.
00:36:00.800 --> 00:36:01.440
Sorry?
00:36:01.679 --> 00:36:03.199
And it was wrong.
00:36:03.920 --> 00:36:04.239
Right.
00:36:04.400 --> 00:36:06.559
The geocentric model was wrong.
00:36:06.880 --> 00:36:07.599
No, no, no.
00:36:07.679 --> 00:36:15.039
The the heliocentric, the the the Newtonian model was again only an approximation.
00:36:15.119 --> 00:36:16.480
It wasn't correct.
00:36:17.039 --> 00:36:18.400
Oh, right, right, right, right.
00:36:18.559 --> 00:36:20.880
Okay, let's let's get to that in a second.
00:36:21.119 --> 00:36:42.960
Um but just I would also say you you dissing dissing the Greeks is uh actually I've never thought this before, and it's probably absolute bullshit, but you could argue that what the Greeks actually did was invented Fourier analysis 1500 years early.
00:36:44.880 --> 00:37:06.079
And if other people had decided if the Greeks had refined that to a point where um it was uh arbitrarily accurate and they'd come up with the math behind it, think what that would have done to the progress of science and mathematics.
00:37:06.880 --> 00:37:16.880
Think how much analysis relies on being able to uh manipulate Fourier transforms rather than the actual functions themselves.
00:37:17.599 --> 00:37:23.440
So one argument would be that the Greeks, we actually missed a major opportunity.
00:37:24.960 --> 00:37:33.920
Um there are um I may be wrong, but I believe there is no formula for the perimeter of an ellipse.
00:37:34.719 --> 00:37:42.159
Where would be if you had, or you could have a limiting value if you had Fourier analysis defining that ellipse.
00:37:42.639 --> 00:37:55.039
So I I think that's actually a really good example of where a local optimization and where elegance actually didn't necessarily do us a favor.
00:37:56.320 --> 00:38:14.239
And that comes back to that idea of the unreasonable man, the idea that um quite often real progress is made by looking at things wrongly and by doing things that are not obviously optimal.
00:38:14.880 --> 00:38:15.840
Exactly.
00:38:16.239 --> 00:38:26.239
Yeah, I think it was David Deutsch who said we go from misconception to misconception, and they're just higher quality misconceptions.
00:38:26.639 --> 00:38:31.039
Um, and I do want to say for the record that I'm not dissing the Greeks.
00:38:31.920 --> 00:38:44.719
Their model, flawed as it was, survived for 2,000 years before sorry, 1500 years uh before we we improved upon it.
00:38:44.960 --> 00:38:52.880
And it's only been 500 years since then, so they uh theirs survived for longer than than ours even has so far.
00:38:53.119 --> 00:38:58.320
And you know, give me a telescope and say, hey Jason, explain what's going on out here.
00:38:58.480 --> 00:39:02.480
Uh I'm sure I wouldn't have come up with any model whatsoever.
00:39:02.719 --> 00:39:09.519
So I think they were pretty smart for coming up with that that model that gave the right answers.
00:39:09.840 --> 00:39:13.119
Yeah, and also without telescopes.
00:39:13.440 --> 00:39:14.480
Yeah, yeah.
00:39:15.440 --> 00:39:24.800
Um, okay, so coming back to programming, um I think a model is an explanation.
00:39:24.960 --> 00:39:31.039
You know, a model of the solar system is an explanation for how the solar system works.
00:39:31.280 --> 00:39:42.239
It's just kind of a you know geometric physical pictorial explanation or or whatever rather than an explanation that's just in words, but it's still an explanation.
00:39:42.719 --> 00:39:46.559
It's an explanation and it's a search for the truth.
00:39:47.199 --> 00:39:55.679
And so with modeling and software, I look at it as something very similar.
00:39:56.239 --> 00:40:19.760
Um, a software model is an explanation and it's a search for the truth, but not exactly the truth, because you can contrive arbitrary models in programming, like in Saturn CI, my CI platform, uh the central concept is that of a job run.
00:40:20.719 --> 00:40:27.440
I could have picked something else, I could have called it a build or a run or a job, but I call it a job run.
00:40:28.320 --> 00:40:54.400
There's no single objectively correct answer in all cases, but you can have like a um, you know, you you have like an interlocking system of models, and it is objectively the case that all of your models are consistent conceptually with all of your other models, or they aren't.
00:40:54.639 --> 00:41:11.360
And I've had many cases, and I'm sure you have too, Dave, where I have the equivalent of an epicycle model, an equivalent of a geocentric model, and then there's some small shift that takes place in my mind.
00:41:11.840 --> 00:41:23.599
You know, I I I rename a model from something to something slightly different, and then a hundred things snap into place, and it's like, oh wow, this is the right answer.
00:41:24.960 --> 00:41:27.119
Yeah, it's like a crystallization.
00:41:28.639 --> 00:41:29.360
Mm-hmm.
00:41:30.000 --> 00:41:52.320
Um yeah, I I I think um one of the techniques I use to to do that is first of all, I think it's really important to have the kind of spidey sense that says this is wrong, or this can't be right, I guess is more accurate.
00:41:52.719 --> 00:42:10.079
Um things that feel too complex or that are breaking in unexpected ways or that are failing to
deal with things they should have dealt with, those kind of indicators that something is wrong is a really important sense.
00:42:10.320 --> 00:42:14.559
And sometimes you can fix that by just brute forcing it.
00:42:14.639 --> 00:42:21.039
You can sit there and say, something is wrong, I'm gonna find out what it is, and you try and do some analysis to do that.
00:42:21.440 --> 00:42:31.599
And that is the the reasonable approach, and that's what um I think m most of the industry is doing now.
00:42:33.599 --> 00:42:51.760
But one of the techniques I've discovered that that works really well for me at least, is um throwing randomness into it, doing something really stupid, and then seeing how the parts fall.
00:42:52.400 --> 00:43:04.159
And quite often that kind of disruption gives me a better insight into how things are interacting and how things kind of um want to interact.
00:43:04.960 --> 00:43:11.920
Um and in a way it's a little bit like um annealing, right?
00:43:12.320 --> 00:43:25.360
Where you introduce randomness and then let things cool down and see how they settle because they'll tend to settle more compactly than they were initially, right?
00:43:25.760 --> 00:43:35.039
Initially they were all randomly oriented, then you can you can heat them up and then cool them down, and they're more likely to have settled into a kind of lower energy state.
00:43:35.199 --> 00:43:37.039
And I think it's the same with code.
00:43:37.199 --> 00:43:56.079
And so again, I come back to this idea that um one of the ways that people can uh participate better is by lobbing these little hand grenades of randomness into the process and seeing what happens.
00:43:58.320 --> 00:43:58.960
Yeah.
00:43:59.440 --> 00:44:03.039
Um Another way I look at that, okay.
00:44:03.280 --> 00:44:10.639
Half-baked thought in my mind, it's like looking at something from a different angle.
00:44:10.880 --> 00:44:14.559
There are so many things that we can only observe indirectly.
00:44:14.800 --> 00:44:15.840
Yeah, I don't know.
00:44:21.920 --> 00:44:23.360
So I'll abandon it.
00:44:23.519 --> 00:44:37.519
Um sadly, I have a hard stop at the hour, but I want to make sure that before we go, we um we make sure to touch on this event that is coming up in just a few months here.
00:44:37.760 --> 00:44:44.239
Um Renaissance Code uh taking place in Potosky, Michigan.
00:44:44.719 --> 00:44:49.519
And you, my friend, will be there with us speaking.
00:44:50.239 --> 00:44:50.800
Speaking?
00:44:50.960 --> 00:44:52.559
I thought I was just participating.
00:44:52.719 --> 00:44:53.760
I will definitely speak.
00:44:54.079 --> 00:44:55.280
I can speak if you want me to.
00:44:55.360 --> 00:44:57.119
I didn't realize there were talks even.
00:44:57.360 --> 00:45:00.719
But yes, I will I will I'm I'm looking forward to that.
00:45:00.880 --> 00:45:10.000
I mean, basically, it's gonna be my understanding is it's gonna be a small group of people who really want to be there.
00:45:10.480
--> 00:45:14.800
And uh that's always gonna be an interesting experience.
00:45:15.280 --> 00:45:17.119
That's exactly what it is.
00:45:17.280 --> 00:45:24.320
Um, and it's in an unusual place, like dear listener, you probably have never heard of Potaski, Michigan.
00:45:24.559 --> 00:45:38.559
Um it's it's not, you know, it's not in a big city because I don't want big city surroundings honking horns and air pollution and buildings and all that stuff.
00:45:38.800 --> 00:45:52.960
It's in a small, quiet town on Lake Michigan, and a lot of people know this, but a lot of people um are unaware that Lake Michigan is so big that you can't see the other side.
00:45:53.039 --> 00:45:55.599
It it's it's just like being at the ocean.
00:45:55.760 --> 00:46:02.320
You look out, and the horizon is just water, so that's that's what it's situated on.
00:46:02.880 --> 00:46:12.000
Um, so just a very quiet nature setting, and we'll all be staying in this very small hotel.
00:46:12.400 --> 00:46:20.320
I I did a room block for like I forget 20, 25 people, whatever, and it was almost the entire hotel.
00:46:20.559 --> 00:46:30.400
So like we will be taking over this entire hotel ourselves, pretty much, and it's just yeah, Dave, it's just you and me speaking.
00:46:30.559 --> 00:46:42.480
Um, so most of the time we'll be free so we can have these long ranging, wide-ranging conversations like the one you and I are are having today.
00:46:43.440 --> 00:46:45.440
Which I'm really looking forward to.
00:46:45.679 --> 00:46:53.119
It's um back in back in the day, um uh I can't remember who it was.
00:46:53.440 --> 00:47:02.960
Um we used to meet uh a couple of times anyway, we met in a fishing lodge in Oregon.
00:47:03.199 --> 00:47:06.079
Um and there were like ten of us.
00:47:07.440 --> 00:47:10.639
And it was the same kind of idea.
00:47:10.800 --> 00:47:15.280
We would just sit and talk, and in the evening we'd watch a movie.
00:47:15.440 --> 00:47:24.320
Um I was introduced to the Princess Bride there uh as the official movie of the Agile Movement.
00:47:24.559 --> 00:47:32.480
Um and uh similarly, uh the other Dave Thomas um has a retreat.
00:47:32.639 --> 00:47:34.559
He I don't know if he still runs it.
00:47:34.800 --> 00:47:47.840
Um he has like a a winter home on Anguilla, which is a little island out in the Caribbean, and people will meet up there like once a year and just share ideas.
00:47:48.000 --> 00:47:50.880
And this is very much in that that vein.
00:47:51.119 --> 00:47:53.920
And uh it's always stimulating.
00:47:54.719 --> 00:48:10.239
And you come away having literally it's not just you, it's not just like a friend in that you exchange business cards, it's uh it's someone actually you have spent time talking to and understand and arguing with, and that's always a nice way to meet people.
00:48:11.199 --> 00:48:35.199
Yeah, and I fully expect that pretty much everybody who comes to this conference will come away with a new, I don't want to necessarily say like a new lifelong friend, that's a big guarantee, but I think there's a good chance that a lot of lasting friendships will be made.
00:48:35.280 --> 00:48:38.239
This this is the kind of thing where that kind of thing happens.
00:48:39.920 --> 00:48:42.719
Yep, and you'll find kindred spirit.
00:48:43.039 --> 00:48:44.159
Oh, yeah.
00:48:46.000 --> 00:48:46.639
Yeah.
00:48:46.880 --> 00:49:02.639
Um, okay, so dear listener, if you're interested in joining Dave and I and a small handful of other interesting people such as yourself, um, you can go to RenaissanceCode.com.
00:49:03.519 --> 00:49:09.039
Um, you might need to look up the spelling as I did for Renaissance.
00:49:09.280 --> 00:49:22.000
Um, but renaissancecode.com and tickets are on sale now, and the conference is in October uh in um in northern Michigan.
00:49:22.239 --> 00:49:28.880
Um final thing before we go, Dave, any links or anything like that you want to share with people?
00:49:29.199 --> 00:49:31.920
Um not directly.
00:49:32.320 --> 00:49:51.679
Um on the AI front, if you're not currently using superpowers, then uh I would recommend you check out superpowers because it's uh uh it's a good way of throwing the focus back on you, in that it's very much to do with interviewing you.
00:49:52.159 --> 00:50:03.519
Um an obvious shout out that both you and I will be at uh RubyConf in uh uh what's it called Round Rock, Red Rock, I can't remember.
00:50:03.679 --> 00:50:07.840
Uh up north of Las Vegas uh in a couple of weeks.
00:50:08.559 --> 00:50:09.599
Yeah, yeah.
00:50:09.760 --> 00:50:11.039
That'll be great too.
00:50:11.199 --> 00:50:17.599
And dear listener, if you're gonna be at RubyConf, uh I would love to meet you in person and hang out.
00:50:18.000 --> 00:50:21.920
Um and if you're if you don't have a ticket, you should get a ticket.
00:50:22.079 --> 00:50:24.320
Uh so we can we can hang out.
00:50:24.400 --> 00:50:27.840
It's a wonderful, wonderful spot out in the desert.
00:50:27.920 --> 00:50:28.880
I've been there many times.
00:50:29.119 --> 00:50:29.599
Right.
00:50:29.840 --> 00:50:39.360
And it's just um it's a throwback, my understanding anyway, is it's a throwback more to the original spirit of the Ruby Conf.
00:50:40.000 --> 00:50:42.320
So I'm looking forward to that.
00:50:42.719 --> 00:50:53.679
Yeah, that's uh oh uh dear listener, you may not be aware, I'm co-chairing RubyConf, and part of my desire for this one is to make it fun.
00:50:54.559 --> 00:51:07.199
Um and and uh inject that uh spirit into the event and uh levity and friendship and all those those things.
00:51:07.360 --> 00:51:08.880
So I hope to see you there.
00:51:09.039 --> 00:51:11.360
And Dave, thanks so much for coming on the show.
00:51:11.599 --> 00:51:13.199
Always a pleasure, Jason.