WEBVTT
00:00:00.160 --> 00:00:06.639
Stable salt is built on stable partition, is built on rotate, is built on reverse, is built on iter swap, right?
00:00:06.639 --> 00:00:07.519
Range swap.
00:00:07.519 --> 00:00:13.839
It's abstractions all the way down, and when you get to the bottom, the abstraction, you know, the the the complexity disappears.
00:00:14.080 --> 00:00:22.320
So let's take a step back here, because I feel like my ice cream sandwich for lunch was not substantial enough food for my brain to operate at the level that yours is operating at right now.
00:00:22.640 --> 00:00:24.480
Well, the meaning is what we give it, right?
00:00:24.480 --> 00:00:28.960
Ultimately we we we we build things, hopefully to make the world a better place.
00:00:28.960 --> 00:00:39.679
But if if if these kind of quality ideas are important to us, then then these ideas should come along for the ride and should be the way we think about things, I think.
00:00:56.000 --> 00:01:06.000
My name is Connor, and today with my co-host Ben, we chat about the most recent C now, lasting software quality, programming as theory building, and more.
00:01:06.000 --> 00:01:09.280
We are back.
00:01:09.280 --> 00:01:12.159
Well, actually, should we talk about I was about to say we're back.
00:01:12.159 --> 00:01:13.680
Should we talk about what we're gonna talk about?
00:01:13.680 --> 00:01:14.799
Or is this the open?
00:01:14.799 --> 00:01:15.920
Maybe this is the open.
00:01:15.920 --> 00:01:17.200
Well, well, yeah.
00:01:17.200 --> 00:01:27.280
I mean, for the for the listener, we were just chatting for the last 20 plus minutes because uh Ben was eating his lunch and an ice cream sandwich, because I had no time to prepare lunch.
00:01:27.280 --> 00:01:29.840
And now we hit the record button.
00:01:29.840 --> 00:01:38.159
And we gotta figure out what we're gonna talk about because we don't have any necessarily pre-what do you call them, lined up topics.
00:01:38.159 --> 00:01:50.159
Anyways, listeners, you may leave comments on the GitHub discussion for episode 289 if you can hear the creaks of Ben's headphones, and we will address in future conversations.
00:01:50.159 --> 00:01:51.439
Is that what we are?
00:01:51.439 --> 00:01:52.400
So 289?
00:01:52.400 --> 00:01:53.840
Uh I think so.
00:01:53.840 --> 00:01:55.040
Maybe it's 288.
00:01:55.040 --> 00:01:57.040
I might have gotten I might have an off by one error.
00:01:57.040 --> 00:01:57.920
Let me check.
00:01:57.920 --> 00:02:00.000
It is episode 288.
00:02:00.000 --> 00:02:00.879
I was off by one.
00:02:00.879 --> 00:02:03.519
So we're closing in on 300 episodes.
00:02:03.519 --> 00:02:04.799
Five years straight.
00:02:04.799 --> 00:02:06.000
We haven't missed a week yet.
00:02:06.000 --> 00:02:09.759
I have been thinking when the baby comes, how that's gonna work.
00:02:09.759 --> 00:02:10.800
Uh yeah.
00:02:10.800 --> 00:02:12.400
We might just have to record a couple.
00:02:12.400 --> 00:02:16.960
I'm gonna have to queue up like at least a month, if not two months.
00:02:16.960 --> 00:02:22.159
I mean, it's sometimes already like a single conversation gets cut into four episodes, which is a month right there.
00:02:22.159 --> 00:02:26.719
So I I think like a two two months should give me enough wiggle room.
00:02:27.120 --> 00:02:29.599
I would say two months is a good thing to shoot for.
00:02:29.599 --> 00:02:35.199
Definitely the first month, expect expect to be very sleep deprived.
00:02:37.360 --> 00:02:45.039
not advice or feedback, but just the number one thing people people do tell me that that first month just the fact that the baby is waking up every couple hours.
00:02:45.039 --> 00:02:52.639
And admittedly, between Shima and I, I operate much better on less sleep, and I've done it before.
00:02:52.639 --> 00:02:54.800
She does not, so it's gonna be interesting.
00:02:54.800 --> 00:03:02.400
Like as as soon as she's like less than seven hours a night, she is pining for more sleep, so it shall be an adventure.
00:03:02.960 --> 00:03:05.840
Yeah, well, you j you go to sleep when the baby sleeps, I think.
00:03:05.840 --> 00:03:06.800
That's what people say.
00:03:06.800 --> 00:03:08.240
That's kind of what you have to do.
00:03:08.400 --> 00:03:08.719
Yeah.
00:03:08.960 --> 00:03:13.919
And the baby only sleeps two hours at a time, usually, sort of thing.
00:03:14.319 --> 00:03:26.639
Fingers crossed that we get one of those babies that just very quickly I've I have a number of friends and uh one sibling that have kids, and I guess extended family through Shima that have kids, and I've heard varying different stories.
00:03:26.639 --> 00:03:32.560
Some babies, you know, are much better sleepers much more soon, others are not.
00:03:32.560 --> 00:03:36.319
It's what do you call it, toss of the dice what you end up with.
00:03:36.800 --> 00:03:37.280
Yeah.
00:03:37.280 --> 00:03:42.000
Yeah, my youngest didn't sleep through the night until he was, I think, a year old.
00:03:42.000 --> 00:03:44.000
That's a long, that's a long time.
00:03:44.000 --> 00:03:48.639
So get used to uh get used to the small hours.
00:03:48.639 --> 00:04:04.080
I used to watch I used to my oldest, I used to have him on a a pillow and I used to be on the couch and I would do the feeding in the middle of the night, and I would watch reruns of Daltrek Next Generation because that was the only good thing that was on at like 2 a.m.
00:04:04.080 --> 00:04:04.879
or 3 a.m.
00:04:04.879 --> 00:04:06.000
or whenever it was.
00:04:06.000 --> 00:04:09.599
Oh yeah, this must have been pre like YouTube pre-streaming.
00:04:09.599 --> 00:04:14.479
YouTube was YouTube was around, but it was in the very early days between like 2006.
00:04:16.480 --> 00:04:19.199
Oh, that's like right when it didn't when did YouTube start?
00:04:19.199 --> 00:04:20.560
I think 2005 it launched.
00:04:20.560 --> 00:04:25.839
I was I was gonna say that's like right right when it there must have just been like a couple cat videos on on YouTube.
00:04:25.839 --> 00:04:29.279
Well the the elephant video and yeah, some cat videos.
00:04:29.279 --> 00:04:30.160
Wow.
00:04:30.160 --> 00:04:35.120
Yeah, I didn't actually I've actually been concerned, that's well, not that it I'm actually concerned about it.
00:04:35.120 --> 00:04:37.920
I guess we'll start talking about something tech related in a minute.
00:04:37.920 --> 00:04:49.120
But I've been thinking, because I consume so much podcast content and audiobooks in between, and uh the time to consume that is going to evaporate.
00:04:49.120 --> 00:05:00.240
But if you're telling me that while you're feeding the baby, I guess in the first few months, it's not like you're having a conversation with the kid while the kid's feeding, you have to entertain yourself.
00:05:00.240 --> 00:05:01.519
Maybe that is the opportune.
00:05:01.519 --> 00:05:04.160
Maybe I'll be chomping at the bit, you know, for the 3 a.m.
00:05:04.160 --> 00:05:07.199
feeding uh when my wife's trying to sleep.
00:05:07.199 --> 00:05:15.680
Maybe I'll be thinking, like, thank God, like I haven't been able to listen to the the most recent, I don't know, insert my favorite podcast, co-recursive.
00:05:15.680 --> 00:05:17.439
Well, what is my favorite podcast right now?
00:05:17.439 --> 00:05:18.399
I don't know.
00:05:18.879 --> 00:05:23.040
Anyways, enough baby talking about it you have that ahead of you.
00:05:23.279 --> 00:05:23.680
Yeah.
00:05:23.680 --> 00:05:26.560
Stay tuned, listener, for uh, I don't know, what do you call it?
00:05:26.560 --> 00:05:30.079
Parent corner coming to a podcast near you.
00:05:30.639 --> 00:05:31.439
Parent corner.
00:05:31.680 --> 00:05:33.199
Yeah, late 2027.
00:05:33.199 --> 00:05:35.199
But I promise I won't disappear.
00:05:35.199 --> 00:05:40.480
You know, there's a podcast I listen to called Tomorrow FM or something like that.
00:05:40.480 --> 00:05:45.120
It's hosted by two front-end web devs, Dax and some other guy.
00:05:45.120 --> 00:06:11.360
And I think one of them was having a kid, and then as soon as the kid showed up, they haven't posted a podcast for like months, which uh I keep waiting for like the come like the return to the podcast to hear, because he was saying leading up to it that everyone was telling him it was gonna be really difficult, and he said, I really hope that this is just like another thing that's like way easier for me than it is for other people, so that he could come back and be like, I knew it was not gonna be that hard, but we've never gotten the update on that.
00:06:11.360 --> 00:06:13.519
Anyways, what are our topics for today?
00:06:13.519 --> 00:06:15.920
Is there anything at the top of mind that you'd like to chat about?
00:06:16.319 --> 00:06:18.399
What have you been up to since we last spoke?
00:06:18.399 --> 00:06:23.120
Because I uh um of course I went to C now, so we could talk some about that.
00:06:23.519 --> 00:06:26.480
Oh yeah, I totally forgot that I also went to NPC.
00:06:26.480 --> 00:06:28.000
And you went to NDC Toronto.
00:06:28.000 --> 00:06:38.560
I went to NDC Toronto, the inaugural edition of that version of it, but technically the fifth edition of what was formerly CPP North.
00:06:38.560 --> 00:06:41.759
Sure, that's a great to topic for at least our first episode.
00:06:41.759 --> 00:06:43.519
How was uh C now?
00:06:43.519 --> 00:06:54.800
I recall looking at the program, and I definitely noted a couple talks that I wanted to see, and I know you were giving a talk that I have long wanted to see that was never recorded before, and that's right.
00:06:54.800 --> 00:06:58.560
It's not available online, but should be at some point in the future, correct?
00:06:58.959 --> 00:07:00.800
Yeah, it was recorded in Aspen.
00:07:00.800 --> 00:07:03.600
So to answer your first question, it was great.
00:07:03.600 --> 00:07:06.319
Really good conference, as always.
00:07:06.319 --> 00:07:29.920
It just feels like you know, it's it's like a holiday because you're going to Aspen, it's a beautiful place, and you're going to see friends who you've met there, many of whom now I've known for a decade, and have become friends, and you're getting to talk about like the the the sort of I don't know how to describe it, the high-level stuff of engineering.
00:07:29.920 --> 00:07:46.079
Like you're getting to talk about topics that you don't typically get to talk about with in in your day-to-day job with your coworkers, you get to talk in a different a different level with people who understand different things.
00:07:46.079 --> 00:07:48.000
And you get to learn a lot.
00:07:48.000 --> 00:07:49.600
You get to learn a lot.
00:07:49.920 --> 00:07:50.240
Yeah.
00:07:50.240 --> 00:07:55.920
Yeah, C Now was actually my first conference ever back in 2019.
00:07:55.920 --> 00:07:56.319
Right.
00:07:56.319 --> 00:07:58.639
Yeah, it was it was fantastic.
00:07:58.639 --> 00:08:08.879
You know, like you said, you're the type of person that goes to a conference in general, let alone C now, is you're with like-minded folks when you are there.
00:08:09.040 --> 00:08:13.120
That's Yeah, and it's not it's not that it's a different it's a different vibe.
00:08:13.120 --> 00:08:18.079
It's like just like it's not like you work with people who are who are not intelligent, right?
00:08:18.079 --> 00:08:30.639
But it's just like when you're in the day-to-day, you can't sort of stick your head up and and getting getting a break, getting a go to a conference and just step away from work, it's really important, I think, to be able to do that.
00:08:30.639 --> 00:08:33.919
And just just kind of broaden your perspective a bit.
00:08:34.240 --> 00:08:35.440
Yeah, yeah, absolutely.
00:08:35.440 --> 00:08:41.840
So what were the I mean I I brought the schedule up, but you know, it's would be very boring for me to scroll through and be like, oh, tell me about this.
00:08:41.840 --> 00:08:43.840
So what were the you remember?
00:08:43.840 --> 00:08:46.559
What were the highlights of the talks that you went to see?
00:08:46.559 --> 00:08:50.240
Obviously, you couldn't see all of them, and then also uh or I don't know what order you want to do.
00:08:50.320 --> 00:08:54.399
How how did your talk um Well let's see, let's I I've got the schedule here too.
00:08:54.399 --> 00:08:57.759
Let me just check the keynotes to begin with.
00:08:57.759 --> 00:09:03.039
Yeah, I mean uh so Barry Revzin gave the first keynote, and I think that was a really good one.
00:09:03.039 --> 00:09:04.240
It was about reflection.
00:09:04.240 --> 00:09:06.879
He's given several talks on reflection now.
00:09:06.879 --> 00:09:14.960
This was this was another I think basically, you know, he's a really good speaker.
00:09:14.960 --> 00:09:20.000
He knows he knows all about reflection, and it was a really good opening keynote.
00:09:20.000 --> 00:09:29.200
Aside from that, the talks which stood out to me there were sever there were some slots where I couldn't decide which talk to go to, which is always always the case.
00:09:29.200 --> 00:09:32.639
A little bit frustrating, but you just have to wait for the videos to come out.
00:09:32.639 --> 00:09:46.080
I really liked Rob Leahy's talk, or actually he gave a sort of double slot talk about about using senders at at sort of the lowest level.
00:09:46.080 --> 00:09:47.840
I forget the name of the talk, you have it up there?
00:09:47.840 --> 00:09:50.720
Towards async everything part one of the things.
00:09:50.720 --> 00:09:51.759
That's the one.
00:09:51.759 --> 00:09:52.559
Yeah.
00:09:52.559 --> 00:10:02.240
So he really presented a cut, like I say, back-to-back talks, which actually standalone, but one also leads into the other, right?
00:10:02.240 --> 00:10:12.639
And he was talking about using senders to drive the sort of lowest level, OS level mechanisms of asynchronous I.O.
00:10:12.639 --> 00:10:14.080
So IOU ring.
00:10:14.080 --> 00:10:15.200
That was that was really good.
00:10:15.200 --> 00:10:18.879
And I definitely want to see those talks again when they come out on video.
00:10:18.879 --> 00:10:21.120
There was a lot of information in there.
00:10:21.120 --> 00:10:23.519
Rob is an extremely polished speaker.
00:10:23.759 --> 00:10:30.559
Yeah, he has a background in theater or some kind of speaking, which came out.
00:10:30.559 --> 00:10:43.919
We interviewed him once while we were walking in Venice after having like a couple glasses of wine, and I could not get over how like you seemed like he had been preparing for this moment his entire life.
00:10:43.919 --> 00:10:48.480
And I was like, How are you more composed than like some other folks we have interviewed?
00:10:48.480 --> 00:10:53.759
And he I think you mentioned that yeah, he used to do some kind of theater or what do you call it?
00:10:53.759 --> 00:10:56.240
Not Toastmasters, but I have to have to look it up what he did.
00:10:56.240 --> 00:10:57.039
Something like that.
00:10:57.039 --> 00:10:59.440
He's a very, very polished uh presenter.
00:10:59.919 --> 00:11:02.000
So I thought his talks were great.
00:11:02.000 --> 00:11:08.320
I also thought Michael Case's talk was one that I'd been waiting for for a while.
00:11:08.320 --> 00:11:10.879
It's called Lasting Quality.
00:11:10.879 --> 00:11:17.360
And he talked about the idea of structural quality in code.
00:11:17.360 --> 00:11:27.840
So this is to be contrasted with so the kind of quality that we're used to is we might say one pillar is functional quality, right?
00:11:27.840 --> 00:11:31.440
So that's things like does the code meet the specification?
00:11:31.440 --> 00:11:35.200
Is it, you know, is it is it bug-free as far as we can make it?
00:11:35.200 --> 00:11:37.039
Does it does it perform well?
00:11:37.039 --> 00:11:40.480
These are functional, this is functional quality, right?
00:11:40.480 --> 00:11:44.320
And then another pillar of quality is process quality.
00:11:44.320 --> 00:11:47.039
And this is like, can we deliver on time?
00:11:47.039 --> 00:11:52.159
Can we repeatedly perform this for the organization without the team burning out?
00:11:52.159 --> 00:11:58.559
You know, this is a process quality is a kind of a a team thing and a and a and an execution thing, right?
00:11:58.559 --> 00:12:08.080
And then and both of those things, functional quality and process quality, they tend to be, you know, they're the things we can measure basically, and so they get measured, right?
00:12:08.080 --> 00:12:09.600
And so they get used.
00:12:09.600 --> 00:12:23.120
The third pillar, structural quality, is actually the most important and the one that is least measurable, and therefore the one that is least talked about or measured in organizations.
00:12:23.120 --> 00:12:28.559
But if you have structural quality, the other two f kind of naturally flow from it.
00:12:28.559 --> 00:12:30.080
There is a prerequisite for the other two.
00:12:30.080 --> 00:12:38.000
And structural quality is things like, you know, things that we when we say code is beautiful, we have we we know what we see, right?
00:12:38.000 --> 00:12:49.679
We we know we know when we see beautiful code, and that beautiful code is has good structural quality, and it's things like is it maintainable, is it testable, is it efficient, right?
00:12:49.679 --> 00:12:50.559
Is in there.
00:12:50.559 --> 00:12:57.279
But it's more of these intangible things or somewhat less tangible things than than the other measurable parts.
00:12:57.279 --> 00:13:04.720
How nice is the code to work in in the sense of, you know, does changing one part cause ripple effects through other parts?
00:13:04.720 --> 00:13:11.440
Is it is it compartmentalized, is it is it uh abstracted and composed, and things like that.
00:13:11.440 --> 00:13:16.159
These are things that is much harder to measure, right, in a quantitative way.
00:13:16.159 --> 00:13:22.480
But structural quality is, you know, if you don't have that, everything else is worse.
00:13:22.480 --> 00:13:24.960
And if you have that, everything else is better.
00:13:25.519 --> 00:13:27.279
Yeah, that sounds like a very interesting talk.
00:13:27.279 --> 00:13:34.480
And definitely Yeah, I don't know how I mean uh I was thinking if you tried to measure that stuff, like is it possible?
00:13:34.480 --> 00:13:54.799
I know that Clang tidy has a like complexity heuristic of like based on the nestedness of stuff, but that doesn't really capture like there there's definitely like like if you design something, I remember one time early in my career there was like a report system within the software that we had, and you could add these what were called category reports.
00:13:54.799 --> 00:13:59.120
Shout out to anybody that works on uh the Axis software system.
00:13:59.120 --> 00:14:04.080
And I remember at one point I had to add like a nested category report.
00:14:04.080 --> 00:14:21.679
I don't know if the code was good at the time, because I was so early in my career, but I remember I I knew I was gonna have to do this like multiple times with multiple reports, so I did it in such a way that like I did a ton of upfront work in order with the like not just to hack this one thing in, but like with keeping in mind I was gonna have to do this a bunch of times.
00:14:21.679 --> 00:14:25.360
So it was a ton of work the first time, but then subsequent times, right?
00:14:25.360 --> 00:14:31.200
It was very, very easy to just like make a couple surgical changes, bada bing, bada boom, everything worked.
00:14:31.200 --> 00:14:39.120
And yeah, like there's no good way of how do you how do you quantify the like ease of extending a system?
00:14:39.120 --> 00:14:47.759
Like there's there's no because every system's gonna be completely different, like extensibility of a system is completely defined by like what kind of system you're building.
00:14:47.759 --> 00:14:55.519
There's no right there's no like uh script you can write that's gonna like assess you have built a very a very good like right.
00:14:55.679 --> 00:14:57.919
It's not it's much less measurable, right?
00:14:57.919 --> 00:15:03.919
It's exactly but it does correlate with the idea of software design, right?
00:15:03.919 --> 00:15:10.960
So the design of systems being this kind of separable idea from the implementation, right?
00:15:10.960 --> 00:15:17.279
It correlates with the idea of like you know, a hallmark of good structural quality is having good APIs.
00:15:17.279 --> 00:15:19.440
Well, what do we mean by good APIs?
00:15:19.440 --> 00:15:31.519
It's it's a good design, it's one that can be composed and is appropriately abstracted, it's one that doesn't do unexpected things when you start putting different parts together, right?
00:15:31.519 --> 00:15:37.200
And it's not, you know, it's not really about the implementation at that level, you know.
00:15:37.200 --> 00:15:57.519
Implementation and and correctness and you know uh performance are things we can measure below that level, but at the level of the API, um it's much more now that there are some things like you know, performance arguably is a feature of an API, or at least it is possible to write APIs which preclude the best performance, right?
00:15:57.519 --> 00:16:01.919
Certainly, and it's possible to write other APIs which are more sympathetic to performance.
00:16:01.919 --> 00:16:08.399
But I think even there we're talking more about it's more like efficiency versus performance, right?
00:16:08.399 --> 00:16:16.639
If we can say efficiency is not doing extra work, and performance is doing the work you have to do as quickly as possible, right?
00:16:16.639 --> 00:16:19.120
So performance is more of an implementation concern.
00:16:19.120 --> 00:16:22.000
Efficiency is an API concern, perhaps.
00:16:22.320 --> 00:16:23.360
Yeah, absolutely.
00:16:23.360 --> 00:16:26.320
That sounds like a I mean, none of these talks are out, right?
00:16:26.639 --> 00:16:27.360
Not yet, no.
00:16:27.600 --> 00:16:28.320
Yeah, they're gonna.
00:16:28.320 --> 00:16:32.799
But anyways, as always, we always talk about these talks, and then I'm sure a few of the listeners go and check.
00:16:32.799 --> 00:16:36.399
We will have links that link to nothing while the talks are not available.
00:16:36.399 --> 00:16:46.080
And then either I check sporadically or sometimes someone will message me on their choice of social media platform saying, oh, the the talks are up, you can link them now.
00:16:46.080 --> 00:16:48.720
So we will be sure to link to these when they are out.
00:16:49.039 --> 00:16:49.279
Yeah.
00:16:49.279 --> 00:17:02.320
Well, there are a couple of papers I would like to point you to, Connor, that came across my feed and and I sent them to Michael while he was making his talk, and you know that they they are really important, I think.
00:17:02.320 --> 00:17:14.720
So I think back in February or March, so if it's a fairly recent paper, uh a researcher, I assume, her name is Margaret Ann Story, she's at the University of Victoria, Canada.
00:17:14.720 --> 00:17:19.920
She published a paper that's called From Technical Debt to Cognitive and Intent Debt.
00:17:19.920 --> 00:17:23.599
And the subtitle is Rethinking Software Health in the Age of AI.
00:17:23.599 --> 00:17:30.799
But the the the the uh sort of taxonomy here of debt is what's really interesting, right?
00:17:30.799 --> 00:17:34.480
So technical debt is a term we're familiar with.
00:17:34.480 --> 00:17:46.079
It tends to be we call it we call it debt, but it's not really debt in a finance sense, because you know, in the financial world, debt is a tool that that you know like you can use.
00:17:46.079 --> 00:17:50.000
That that is much less the case when we talk about technical debt.
00:17:50.000 --> 00:17:52.559
We think of it as just a bad thing.
00:17:52.559 --> 00:18:00.319
Now, occasionally if you have you know, occasionally if you're a startup and you want to ship really fast, you might make a you might make a definite decision to take on technical debt.
00:18:00.319 --> 00:18:05.599
But by and large, it's something we try to avoid as engineers, right?
00:18:05.599 --> 00:18:07.680
Anyway, so technical debt is well known.
00:18:07.680 --> 00:18:18.559
Technical debt is, you know, to to distill it to something very simple, we could say it's uh a software system that has technical debt is harder to change, right?
00:18:18.559 --> 00:18:29.200
So it's some kind of you know, just to say it very simply at a high level, we could say technical debt correlates with ability to or or lack of ability to change the software.
00:18:29.200 --> 00:18:34.000
Okay, so it's a it's a thing that exists in the software, in the code.
00:18:34.000 --> 00:18:43.200
Whereas cognitive debt, cognitive debt talks about the the team who built the software and their understanding of the code, right?
00:18:43.200 --> 00:18:50.960
The code can work, but also the team might be losing understanding of how it works.
00:18:50.960 --> 00:18:55.200
That's cognitive debt, and it lives inside people, right?
00:18:55.200 --> 00:19:06.400
And and we see that, you know, as people leave the team, they take with them the cognition and they increase and they might increase the cognitive debt, you know.
00:19:06.400 --> 00:19:17.119
In particular, if they had ownership over one piece and they leave, then the knowledge of about how that piece works is now leaving with them, or at least some of it is, right?
00:19:17.119 --> 00:19:20.319
And then the third kind of debt is intent debt.
00:19:20.319 --> 00:19:29.279
This is this is arguably the most important kind of debt of all, and this is the this is the knowledge about why we made those decisions in building the software, right?
00:19:29.279 --> 00:19:31.359
Why does the software work this way?
00:19:31.359 --> 00:19:44.559
Not not it's different from tech debt, obviously, it's different from cognitive debt in the sense that it is not really thinking about how the software works and how we understand it, but it's talking about why did we write it that way in the first place?
00:19:44.559 --> 00:19:49.680
What problem were we solving, and what are the problems today, and are they the same, right?
00:19:49.680 --> 00:19:55.279
And that is very difficult to fix if you lose.
00:19:55.279 --> 00:19:56.000
Right?
00:19:56.000 --> 00:20:04.720
That is typically on on many teams that is held by a couple of people who've been on the team a long time, and they're the people you go to to ask about things, right?
00:20:04.720 --> 00:20:06.319
Why are we doing it this way?
00:20:06.319 --> 00:20:09.119
You know, you this is tell me if this is ringing true.
00:20:09.119 --> 00:20:12.880
You've worked on teams like this where you know you've had questions like, why would why we do this?
00:20:12.880 --> 00:20:15.680
Oh, go ask Alice or go ask Bob, right?
00:20:15.680 --> 00:20:19.680
They've been here, they've because they've worked here for 10 years, they've they remember, they know.
00:20:19.680 --> 00:20:29.119
And the so the paper is really interesting because one of the observations is you can you you can fix technical debt, right?
00:20:29.119 --> 00:20:34.000
You can fix technical debt if you don't have cognitive debt, right?
00:20:34.000 --> 00:20:36.640
That or at least it's easier to, right?
00:20:36.640 --> 00:20:42.160
And also you can fix cognitive debt to some extent if you don't have intent debt, right?
00:20:42.160 --> 00:20:45.599
But it's very, very difficult to fix intent debt.
00:20:45.599 --> 00:20:51.839
And we see these kind of macro level ideas playing out in Teams, right?
00:20:51.839 --> 00:21:02.319
How many times, for instance, have you seen, or indeed, how in terms of yourself have you yourself rewritten something so you could understand it?
00:21:02.319 --> 00:21:10.319
You know, here's some subsystem, person who wrote it has left the company or moved on, I've taken it over.
00:21:10.319 --> 00:21:11.680
What am I gonna do?
00:21:11.680 --> 00:21:12.960
I'm gonna try and understand it.
00:21:12.960 --> 00:21:13.920
How am I gonna understand it?
00:21:13.920 --> 00:21:15.200
I'm gonna rewrite parts of it.
00:21:15.200 --> 00:21:17.599
You know, it happens like every day.
00:21:17.599 --> 00:21:26.799
We see it when when when when teams hand over projects that they built to other teams, right?
00:21:26.799 --> 00:21:27.839
This happens sometimes.
00:21:27.839 --> 00:21:29.759
This is in the paper as well, I think.
00:21:29.759 --> 00:21:34.640
Team A builds some library, some software.
00:21:34.640 --> 00:21:36.799
They know it intimately, right?
00:21:36.799 --> 00:21:40.720
They've been involved in building it, they spent a year, two years, whatever, building the software.
00:21:40.720 --> 00:21:55.519
They know about all the intent, all the cognition, but then you know, they move on to a different project, they move, they they hand the project to another team who wants to take it forward, maintain it, maybe add some things in the future.
00:21:55.519 --> 00:22:11.119
There is only one way that really works, which is if you have a long Period of overlap during which the new team can work hand in glove with the old team and ask whatever questions they need to until the knowledge is transferred.
00:22:11.119 --> 00:22:12.079
Right?
00:22:12.079 --> 00:22:15.200
That is the only way I've really seen that ever work.
00:22:15.200 --> 00:22:26.000
And so that those are the kind of macro level things that play out as a result of these ideas of tech debt versus cognitive debt versus intent debt.
00:22:26.000 --> 00:22:29.119
It's a very interesting kind of uh taxonomy.
00:22:29.119 --> 00:22:40.400
And and you know, the so the the subtitle of the paper is talking about AI in the age of AI, and it's making the point that, you know, these things are all still important, right?
00:22:40.400 --> 00:22:48.559
And AI actually runs the risk of increasing these debts, these debts in these three buckets.
00:22:48.559 --> 00:22:56.240
Maybe if we can control tech debt, that's one thing, and we can we can maybe do that a little more.
00:22:56.240 --> 00:23:03.680
But AI really can't touch cognitive debt or intent debt at the moment, apart from increasing them, of course.
00:23:03.680 --> 00:23:08.079
AI can't Connor is looking very thoughtful.
00:23:08.079 --> 00:23:08.960
Right.
00:23:08.960 --> 00:23:28.720
The way in which we use AI at the moment, overwhelmingly, cannot because cognition lives in the minds of humans, and intent that also lives somewhat in the minds of humans and lives in things like design documents and things that capture why decisions were made.
00:23:28.720 --> 00:23:43.440
And if we're using AI just to implement features, generate code as a glorified auto-complete, yeah, we can review the code it produces, we can make sure as far as we can that the technical debt stays low.
00:23:43.440 --> 00:23:47.519
But these other two kinds of debt, it's not really speaking to that.
00:23:47.519 --> 00:23:49.359
They require a different strategy.
00:23:50.319 --> 00:23:55.759
I mean Well, first I'll say that this is um it is very interesting.
00:23:55.759 --> 00:23:58.880
I've never thought about cognitive debt or intent debt.
00:23:58.880 --> 00:24:09.359
And my main thought was it kind of dovetails with the piece of advice from some technical book or something that I've read at one point that says, you know, comment should say why, not how.
00:24:09.359 --> 00:24:16.000
You know, the how should be in the code, but the comment should say this is the motivation or the reason for why we're doing it.
00:24:16.000 --> 00:24:18.799
And if the why is obvious, then you don't really need a comment.
00:24:18.799 --> 00:24:28.880
Your code should be written in a way that, you know, because some people consider comments like an anti-pattern if you've written a code in a way that, like, you know, the best code is self-describing, but a lot of the time.
00:24:29.279 --> 00:24:32.480
It's certainly uh an ideal, maybe to strive for.
00:24:32.480 --> 00:24:34.400
Everything is, of course, imperfect.
00:24:34.400 --> 00:24:38.799
So, you know, as much as we can strive for that, we never actually achieve that goal.
00:24:39.119 --> 00:24:39.920
Yeah, yeah, yeah.
00:24:39.920 --> 00:24:41.440
Anyway, so that was my thought.
00:24:41.440 --> 00:24:43.759
Your comment saying that AI can't touch.
00:24:43.759 --> 00:24:57.119
I mean, my first thought was that uh sometimes potentially the intent is there in like the git history of a code base, you know, it's it's there, it's just not at the top serviceable.
00:24:57.119 --> 00:25:15.759
And is I mean, you know, this is we should we should we should uh save part two of this conversation for updates on AI because I I have been dying to talk to you, but then I I you know I I feel I get the sense that you'd rather talk about other things, but now that now that AI's come up, the door is open for me to walk through.
00:25:15.759 --> 00:25:17.920
But well okay.
00:25:17.920 --> 00:25:19.920
But wait, we we'll we'll table that.
00:25:20.880 --> 00:25:22.720
Yeah, let's finish the thread.
00:25:22.720 --> 00:25:23.279
We're on.
00:25:23.279 --> 00:25:24.240
Yeah, yeah.
00:25:24.240 --> 00:25:36.000
I mean it dovetails with the idea, you know, that that was it Gerald Sussman who said code should be written for humans to understand and only incidentally for computers to execute.
00:25:36.000 --> 00:25:38.319
I'm paraphrasing, but it was something of that nature.
00:25:38.319 --> 00:25:40.720
Yes, yeah.
00:25:40.720 --> 00:25:47.119
And there is a paper behind the paper, which is in the references, which is Peter Nauer's paper.
00:25:47.119 --> 00:25:50.240
It's called Programming as Theory Building.
00:25:50.240 --> 00:25:58.079
And it's a really interesting So Peter Nauer of if you know the name, if you know Backers Nauer form, that's that's the same person.
00:25:58.079 --> 00:26:06.799
The idea his idea in this paper, which is really interesting, is that a program is not the code.
00:26:06.799 --> 00:26:15.279
The code is an approximation, the program is the theory built in the heads of the team who build the program, right?
00:26:15.279 --> 00:26:30.319
And and so this ties in with this idea of like if if one team or one person builds a program, it's very difficult for them to actually one of the chief problems in programming is communicating the theory, right?
00:26:30.319 --> 00:26:37.200
Because the code itself is a very imperfect communication of that of that theory, which is the actual program.
00:26:37.200 --> 00:26:46.559
Other ways we have to communicate the theory include documentation, diagrams, maybe formulae, things like that.
00:26:46.559 --> 00:26:48.960
But they're all imperfect, right?
00:26:48.960 --> 00:26:53.440
The the program is not any one of those things, it's not even the code.
00:26:53.440 --> 00:26:58.319
The program is the idea, the theory in the head of the people who wrote it.
00:26:59.920 --> 00:27:08.880
I have never heard that, and I mean my initial thought is that is surprising kind of.
00:27:08.880 --> 00:27:22.000
I mean Well, what's my my thought is that if you can express precisely the program you want, once it's codified, that is infinitely better than like a description.
00:27:22.000 --> 00:27:31.119
Or I guess you're saying that like what lives in someone's head is the program, not necessarily like English and communicating that is also imperfect potentially.
00:27:31.599 --> 00:27:36.000
So the code is an expression of the program, but it's not the program, right?
00:27:36.000 --> 00:27:44.160
Because if it were, then it wouldn't be possible to replace parts of it, like replace an implementation with an equivalent implementation.
00:27:44.160 --> 00:27:48.960
The fact that we can do that kind of tells us that the code is not the program.
00:27:50.319 --> 00:27:54.000
This is like mind-bending good.
00:27:54.000 --> 00:28:11.039
Philosophical The code is not the program, and because you can replace parts with other parts, different implementations, that by then definition Well, it lends weight to the idea, I think, right?
00:28:11.039 --> 00:28:13.039
It learns weights through the idea.
00:28:13.920 --> 00:28:14.720
It lends weight.
00:28:14.960 --> 00:28:17.039
Oh, lends weight to the idea, yeah.
00:28:17.039 --> 00:28:20.240
Well, I don't know.
00:28:20.240 --> 00:28:25.119
There's my I can tell you that my brain is like pushing back vociferously being like, what do you mean?
00:28:25.119 --> 00:28:32.720
The the thing that execute that is the sure, like are you my brain is like there's a little voice in my head right now that's saying, like, what are we talking about here?
00:28:32.720 --> 00:28:46.640
Like, sure, maybe it's uh you can say that the code is a representation, but it it is a better you know, well, is it a better representation if if coded correctly is is you know a thing that can deterministically execute.
00:28:46.640 --> 00:28:47.279
Sure.
00:28:47.599 --> 00:28:54.880
Is that is that not better than like a well let me ask you another question about your experience coding, right?
00:28:54.880 --> 00:28:56.880
You you currently work on a code base.
00:28:56.880 --> 00:29:03.680
I'm gonna guess, through no judgment, that some parts of it you consider to be better than others.
00:29:03.680 --> 00:29:04.400
Yes.
00:29:04.400 --> 00:29:13.200
I'm gonna guess that right now, the thing you're working on, you will have perhaps a better idea of it in a week, you know.
00:29:13.200 --> 00:29:18.400
Maybe a thing you're working on right now, you are struggling with parts of.
00:29:18.400 --> 00:29:21.759
You have some parts of it down, other parts of you're still discovering.
00:29:21.759 --> 00:29:27.680
If this isn't quite happening today, then certainly is probably something that has happened to you.
00:29:27.680 --> 00:29:40.240
And and it's a process of discovery of of what how it should be, and how it should be really is something that is fulfilling or solving a problem you have today, right?
00:29:40.240 --> 00:29:47.440
And you and and you might come to a point where you have sufficiently solved that problem, and then you say, That code's good, I'm gonna leave that for a while.
00:29:47.440 --> 00:30:04.559
But then equally you might wake up in a month, two months, and think, Oh, you know, I remember that thing I was working on, and now I see with this other context, now I see how that could be solved much more easily, or much differently, or much more in some way that this that seems nicer, right?
00:30:04.559 --> 00:30:13.759
And so the program, in a sense, is evolving inside your head, and the code that's in the machine is always an imperfect representation of it.
00:30:13.759 --> 00:30:15.839
I mean you are well.
00:30:16.640 --> 00:30:17.519
It depends.
00:30:17.519 --> 00:30:20.400
It depend um it depends on I think.
00:30:20.400 --> 00:30:22.799
I'm seeing the gears turn in Connor's head right now.
00:30:22.799 --> 00:30:33.119
Well, I mean, there's like there's like two different, there's many, what is it, the Walt Whitman, you know, multitudes with something something is that there within me there's an APL programmer.
00:30:33.119 --> 00:30:44.079
And to tell him that, you know, or her, in my case it's a him, that, you know, always the code is an imperfect representation of the program is just false.
00:30:44.079 --> 00:30:50.640
I mean, Kadane's algorithm in BQN is it's the most beautiful, it is perfect in my opinion.
00:30:50.640 --> 00:30:53.920
Well, I mean, could it be slightly improved on in a different language?
00:30:53.920 --> 00:30:59.440
Maybe, but it is uh the closest to like the epitome of beautiful, elegant.
00:30:59.440 --> 00:31:04.079
But that that programmer uh is juxtaposed with a different programmer.
00:31:04.079 --> 00:31:15.279
Like when I started my career, once again, shout out to Axis, you know, multi, multi-million dollar C code base, originally written in, I believe, BASIC and then ported at one point back in the 90s.
00:31:15.279 --> 00:31:37.279
And so, you know, a ton of legacy code and technical debt and absolutely everything that you said, you know, of I'm trying to implement some feature that corresponds to some regulatory document passed by either the Canadian government or the US federal or state government, because in America there's state-by-state insurance, you know, regulations.
00:31:37.279 --> 00:31:48.960
And so definitely like the the program exists, I guess you could say, in the regulatory document and needs to be, you know, you know, I don't know, visualized in your head, and then how you're gonna put that.
00:31:48.960 --> 00:31:52.720
And there's a tons of things like the limitation of my understanding of the system as it is.
00:31:52.720 --> 00:31:59.920
But and so, yeah, I guess when I think about the the person working in that large system who didn't even fully understand how the system worked, 100%.
00:31:59.920 --> 00:32:05.119
You know, I do think I do something, you know, at some point a year later I look back and I was like, what was I thinking?
00:32:05.119 --> 00:32:09.279
Like there's obviously a better way to do this than the way that I did it at the time.
00:32:09.279 --> 00:32:18.400
But then when I when I com juxtapose that with like the the code artist, if you will, that uh many people refer to me as.
00:32:18.400 --> 00:32:39.039
I think the notation that we have in mathematics is just like the beginning of, you know?
00:32:39.039 --> 00:32:44.480
Like what is it what is it, the guy that wrote the history of mathematical notation?
00:32:44.480 --> 00:32:46.319
Like we're we're only Kajori.
00:32:46.319 --> 00:32:50.079
We're only like we're only like a fraction of the way through history, you know?
00:32:50.079 --> 00:32:51.440
It's gonna it's gonna change.
00:32:51.440 --> 00:32:54.000
Ten years, a hundred years, a millennia?
00:32:54.000 --> 00:32:54.960
Will we be alive?
00:32:54.960 --> 00:32:56.000
Nobody knows, folks.
00:32:56.000 --> 00:32:57.839
Nobody knows if we're gonna make it till then.
00:32:57.839 --> 00:33:12.799
But the point being is that I think that there is some like truth in some symbolic notation, whether that's APL or some evolved form or some extension of mathematical notation, that is like the purest, truest representation of some kind of thing.
00:33:12.799 --> 00:33:13.599
But I don't I don't know.
00:33:13.599 --> 00:33:16.960
I'll I'll stop talking and let you respond to what I've said, yeah.
00:33:17.359 --> 00:33:23.839
Well, let me ask you I think one of the useful notions we can bring to bear here is the idea of self-similarity.
00:33:23.839 --> 00:33:45.599
So and I think what you said is to some extent true, but alongside the argument here, which is that programs so programs are not usually this kind of ideal thing that you were talking about, like the the the the mathematics.
00:33:45.599 --> 00:33:52.079
They they are they exist to solve some problem, they exist to do something, right?
00:33:52.240 --> 00:34:06.079
But the idea of self-similarity is one I want to talk about because you know so remind me what Cadan's algorithm is, is that the uh it's the mac it's it goes by a couple different names, maximum subarray sum, given uh negative positive integers.
00:34:06.079 --> 00:34:12.480
What's the contig what's the contiguous array subarray that equals the largest sum?
00:34:13.119 --> 00:34:16.079
So, okay, so what are some applications of that?
00:34:16.079 --> 00:34:19.920
In other words, that's an algorithm, what what problem does it solve?
00:34:19.920 --> 00:34:20.559
For example.
00:34:20.960 --> 00:34:29.440
Oh, I'm I'm sure it solves a bunch, but off the top of my head, I mean uh I'm not asking the question to be contrary, you understand?
00:34:29.519 --> 00:34:32.079
I'm like, I'm sure it has lots of applications.
00:34:32.079 --> 00:34:33.920
I'm just asking for examples.
00:34:34.320 --> 00:34:36.559
I don't know if the top of my head we can ask.
00:34:36.559 --> 00:34:51.679
What are some applications of Cadan's algorithm and computer vision used in 2D image processing to find the brightest or most intense rectangular region in a bitmap, financial analysis?
00:34:51.679 --> 00:34:53.440
Oh yeah, stock trading, you know.
00:34:53.440 --> 00:34:54.800
Okay, that's the classical.
00:34:55.119 --> 00:35:09.599
So the so the point here is my point that I want to make is that like Cadan's algorithm is one implementation, uh, and as you say, might be a very elegant one, but it's one implementation we found to solve these problems, right?
00:35:09.599 --> 00:35:13.119
But it's not necessarily the only implementation out there, right?
00:35:13.119 --> 00:35:21.039
And so the the the program is distinct from the algorithm that implements it, right?
00:35:21.039 --> 00:35:23.599
Man, this episode has some dead air.
00:35:24.800 --> 00:35:28.400
Don't worry, we we've got a single button, truncate silence.
00:35:29.039 --> 00:35:33.039
Oh, it's gonna make it look like Connor has all the answers all like just like that.
00:35:33.440 --> 00:35:40.559
Well, is it is that the goal, or is the goal just not to waste the listener's time of well, every once in a while in a podcast, there's like such a large gap.
00:35:40.559 --> 00:35:43.039
I'm like, did my podcast crash or something?
00:35:43.039 --> 00:35:45.679
And that's at like 2.3 times X.
00:35:45.679 --> 00:35:48.719
The program is separate from the implementation.
00:35:48.719 --> 00:36:03.519
So you're like so Cadane's algorithm is a solution to finding the maximum subarray sum, and you're saying that that implementation, because Cadane's algorithm is a specific implementation.
00:36:03.519 --> 00:36:04.320
Sure.
00:36:05.119 --> 00:36:08.320
And if your problem is maximum subarray sum, it's a great algorithm.
00:36:08.320 --> 00:36:11.760
If your problem and again, the idea of self-similarity, right?
00:36:11.760 --> 00:36:14.960
Yes, it's it's a good way to solve maximum subarray sum.
00:36:14.960 --> 00:36:18.960
Is maximum subarray sum a good way to solve the problem above it?
00:36:18.960 --> 00:36:24.159
In the case of vision or finances or the the the applications you mentioned, yes.
00:36:24.159 --> 00:36:24.719
Okay.
00:36:24.719 --> 00:36:30.000
But it's but it's not so the idea of self-similarity is like if I can draw another example, right?
00:36:30.000 --> 00:36:39.519
If we think about, you know, when when we were talking to Sean, the idea of in-place sort, in place in-place stable sort, right?
00:36:39.519 --> 00:36:46.400
That is that before, you know, 30 years ago, that was a research problem.
00:36:46.400 --> 00:36:48.880
About 30, maybe 35 years ago.
00:36:48.880 --> 00:36:53.039
But it was one of Stepanov's great contributions to the field of algorithms, right?
00:36:53.039 --> 00:36:57.840
And and the point is that like there is no level.
00:36:57.840 --> 00:37:09.280
One of the points that I made in my talk, or one of my talks recently, I forget which one now, there is no level below which abstraction fails, right?
00:37:09.280 --> 00:37:14.880
There is no distinction between application code versus library code.
00:37:14.880 --> 00:37:23.679
There should be no idea of like, here's a boundary at an API level below which we hide all of the difficulties and complexity, right?
00:37:23.679 --> 00:37:24.320
No.
00:37:24.320 --> 00:37:27.039
Everything is self-similar as we go down.
00:37:27.039 --> 00:37:36.400
We build one API in terms of the next, with the result that when we get to the very bottom, frequently things just don't only become less complex, they just disappear, right?
00:37:36.400 --> 00:37:45.280
And so stable salt is built on stable partition, is built on rotate, is built on reverse, is built on iter swap, right?
00:37:45.280 --> 00:37:46.400
Range swap.
00:37:46.400 --> 00:37:54.719
It's abstractions all the way down, and when you get to the bottom, the abstraction, you know, the the the complexity disappears.
00:37:57.360 --> 00:37:59.360
Isn't at the bottom like ones and zeros?
00:37:59.360 --> 00:38:01.840
Uh no.
00:38:01.840 --> 00:38:02.719
No?
00:38:02.719 --> 00:38:03.760
I'm gonna say no.
00:38:04.079 --> 00:38:05.440
What's at the bottom?
00:38:05.440 --> 00:38:07.199
I don't know.
00:38:07.199 --> 00:38:07.840
What?
00:38:07.840 --> 00:38:08.800
We don't know.
00:38:08.800 --> 00:38:15.360
Like like we arbitrarily choose to make the bottom where it is.
00:38:15.360 --> 00:38:21.360
Yeah, it's convenient for us to to make hardware that deals in binary, right?
00:38:21.360 --> 00:38:26.800
And so that in a sense is the practical bottom for us right now.
00:38:26.800 --> 00:38:30.719
But but that isn't the theoretical bottom, right?
00:38:30.719 --> 00:38:34.000
That doesn't mean that abstraction runs out at some level.
00:38:34.000 --> 00:38:36.400
Yeah, ultimately we live in the physical world.
00:38:36.400 --> 00:38:49.599
I mean, ultimately those ones and zeros you think are nice, good-looking ones and zeros, are really mushy waveforms down deep in the hardware somewhere, then they're not like they don't have straight-line edges.
00:38:49.599 --> 00:38:50.800
Oh man.
00:38:51.199 --> 00:38:54.719
Have you been writing reading some like deep philosophical books lately?
00:38:54.719 --> 00:38:58.800
Or this is like no, I've just been working in embedded.
00:38:58.800 --> 00:39:09.679
So let's take a step back here, because I I feel like I feel like I uh my ice cream sandwich for lunch was not substantial enough foods for my brain to operate at the level that yours is operating at right now.
00:39:09.679 --> 00:39:18.079
So, I mean we're talking about the paper, and then at some point we were talking about how the code is not the program.
00:39:18.079 --> 00:39:22.239
The program lives inside our head.
00:39:22.239 --> 00:39:23.119
Yeah.
00:39:23.119 --> 00:39:25.840
Um, programming as theory building.
00:39:25.840 --> 00:39:26.639
Yeah.
00:39:26.639 --> 00:39:29.199
And then abstraction and self-similarity.
00:39:29.199 --> 00:39:32.159
And what does all this mean?
00:39:32.159 --> 00:39:34.480
It means I don't know.
00:39:34.639 --> 00:39:37.920
I it means that uh Well, the meaning is what we give it, right?
00:39:37.920 --> 00:39:42.800
Ultimately we we we we build things, hopefully to make the world a better place.
00:39:42.800 --> 00:39:54.320
But if if if these kind of quality ideas are important to us, then then these ideas should come along for the right and should be the way we think about things, I think.
00:39:55.440 --> 00:40:23.119
And so I guess yeah, like taking a massive step back, it was that AI can't help with cognitive debt and intent debt, and I guess that's why we started talking about this, is because if the program lives in our head and we're doing some level of job, you know, to the extent that the best is a perfect job, you know, sometimes it's a good job, sometimes it's a bad job of encoding the program that lives in our head into your programming language of choice.
00:40:23.119 --> 00:40:36.000
But you know, there's a certain amount of cognitive debt that will exist and then intent debt that'll exist, and AI is never really gonna help peering into people's heads to get the actual essence of the program.
00:40:36.000 --> 00:40:36.639
Something like that.
00:40:38.000 --> 00:40:38.480
You're close.
00:40:38.480 --> 00:40:43.039
I mean, let's not say let's not talk in absolutes here.
00:40:43.039 --> 00:40:45.280
Let's not say flat that AI cannot help.
00:40:45.280 --> 00:41:02.960
Let's rather say that the way we are using AI right now tends towards increasing cognitive debt and increasing intent debt and increasing technical debt, although we have a better idea perhaps of how to keep a rein on that one.
00:41:02.960 --> 00:41:09.280
People aren't talking a lot about the cognitive debt and intent debt, but I think they are really important.
00:41:10.800 --> 00:41:16.159
Okay, I feel like I'm back on, you know, you might be on a very nice yacht, and I'm now back on my raft.
00:41:16.159 --> 00:41:35.119
I was in the ocean and uh I scrambled back on the raft, and so now uh I guess my my question that would I would ask is that if and because I I agree that the use of these AI tools is increasing cognitive and intent debt.
00:41:35.119 --> 00:41:40.639
But did people say the same thing back when like C was invented?
00:41:40.639 --> 00:41:58.239
And people stopped coding an assembly and then people stopped understanding assembly, because you could make the same arg I think you could make the same argument that there was more cognitive debt, I'm not sure about the intent debt, but that people didn't understand that lower level as well.
00:41:58.239 --> 00:42:00.559
But did it mat matter at the end of the day?
00:42:00.880 --> 00:42:04.239
Okay, so so so there are two different there are two different things here.
00:42:04.239 --> 00:42:14.639
One is I think that the the argument around or the the taxonomy of technical debt, cognitive debt, intent debt, I think stands apart from AI.
00:42:14.639 --> 00:42:14.880
Right?
00:42:14.880 --> 00:42:21.119
The subtitle of the paper is like AI might be worsening these things, but I think that idea really stands apart, right?
00:42:21.119 --> 00:42:27.440
Before we had LLNs, before we had AI, we could have talked about the same kind of things and identified the same issues, right?
00:42:27.440 --> 00:42:28.880
So there's that.
00:42:28.880 --> 00:42:31.760
So I think that stands alone as an idea.
00:42:31.760 --> 00:42:35.280
The other to your question, right?
00:42:35.280 --> 00:42:42.559
The eternal question of when a new technology comes along, it could it causes atrophy of skills, right?
00:42:42.559 --> 00:42:44.800
And and this is just basically true.
00:42:44.800 --> 00:42:53.760
So the question really is so like you know, if you if you doubt that's true, try and take a high school maths paper from 1890 or whatever.
00:42:53.760 --> 00:42:57.440
And you'll find it very difficult, I'm sure.
00:42:57.440 --> 00:43:03.199
So it's just in some sense true, but the question really is like, does it matter, as you said?
00:43:03.199 --> 00:43:12.400
Uh and that is a question that, you know, I think I don't think I think everyone needs to find their own answer to that question.
00:43:12.400 --> 00:43:15.519
Because there is still value in having those skills.
00:43:15.519 --> 00:43:21.519
And in a world where people tend not to have those skills, there is even more value as an individual in having them sometimes.
00:43:21.519 --> 00:43:23.679
Interesting.
00:43:24.079 --> 00:43:31.199
So in other words, you think the answer potentially is different for people on an individual basis?
00:43:31.599 --> 00:43:38.159
I yeah, I think people just need to decide, you know, what f what path they want their life to take in that sense.
00:43:39.119 --> 00:43:48.639
Be sure to check these show notes either in your podcast app or at adsphepodcast.com for links to anything we mentioned in today's episode, as well as a link to a GitHub discussion where you can leave thoughts, comments, and questions.
00:43:48.639 --> 00:43:49.519
Thanks for listening.
00:43:49.519 --> 00:43:51.039
We hope you enjoyed, and have a great day.
00:43:51.039 --> 00:43:53.199
I am the anti brace.
00:43:53.199 --> 00:43:53.920
Um
00:00:00.160 --> 00:00:06.639
Stable salt is built on stable partition, is built on rotate, is built on reverse, is built on iter swap, right?
00:00:06.639 --> 00:00:07.519
Range swap.
00:00:07.519 --> 00:00:13.839
It's abstractions all the way down, and when you get to the bottom, the abstraction, you know, the the the complexity disappears.
00:00:14.080 --> 00:00:22.320
So let's take a step back here, because I feel like my ice cream sandwich for lunch was not substantial enough food for my brain to operate at the level that yours is operating at right now.
00:00:22.640 --> 00:00:24.480
Well, the meaning is what we give it, right?
00:00:24.480 --> 00:00:28.960
Ultimately we we we we build things, hopefully to make the world a better place.
00:00:28.960 --> 00:00:39.679
But if if if these kind of quality ideas are important to us, then then these ideas should come along for the ride and should be the way we think about things, I think.
00:00:56.000 --> 00:01:06.000
My name is Connor, and today with my co-host Ben, we chat about the most recent C now, lasting software quality, programming as theory building, and more.
00:01:06.000 --> 00:01:09.280
We are back.
00:01:09.280 --> 00:01:12.159
Well, actually, should we talk about I was about to say we're back.
00:01:12.159 --> 00:01:13.680
Should we talk about what we're gonna talk about?
00:01:13.680 --> 00:01:14.799
Or is this the open?
00:01:14.799 --> 00:01:15.920
Maybe this is the open.
00:01:15.920 --> 00:01:17.200
Well, well, yeah.
00:01:17.200 --> 00:01:27.280
I mean, for the for the listener, we were just chatting for the last 20 plus minutes because uh Ben was eating his lunch and an ice cream sandwich, because I had no time to prepare lunch.
00:01:27.280 --> 00:01:29.840
And now we hit the record button.
00:01:29.840 --> 00:01:38.159
And we gotta figure out what we're gonna talk about because we don't have any necessarily pre-what do you call them, lined up topics.
00:01:38.159 --> 00:01:50.159
Anyways, listeners, you may leave comments on the GitHub discussion for episode 289 if you can hear the creaks of Ben's headphones, and we will address in future conversations.
00:01:50.159 --> 00:01:51.439
Is that what we are?
00:01:51.439 --> 00:01:52.400
So 289?
00:01:52.400 --> 00:01:53.840
Uh I think so.
00:01:53.840 --> 00:01:55.040
Maybe it's 288.
00:01:55.040 --> 00:01:57.040
I might have gotten I might have an off by one error.
00:01:57.040 --> 00:01:57.920
Let me check.
00:01:57.920 --> 00:02:00.000
It is episode 288.
00:02:00.000 --> 00:02:00.879
I was off by one.
00:02:00.879 --> 00:02:03.519
So we're closing in on 300 episodes.
00:02:03.519 --> 00:02:04.799
Five years straight.
00:02:04.799 --> 00:02:06.000
We haven't missed a week yet.
00:02:06.000 --> 00:02:09.759
I have been thinking when the baby comes, how that's gonna work.
00:02:09.759 --> 00:02:10.800
Uh yeah.
00:02:10.800 --> 00:02:12.400
We might just have to record a couple.
00:02:12.400 --> 00:02:16.960
I'm gonna have to queue up like at least a month, if not two months.
00:02:16.960 --> 00:02:22.159
I mean, it's sometimes already like a single conversation gets cut into four episodes, which is a month right there.
00:02:22.159 --> 00:02:26.719
So I I think like a two two months should give me enough wiggle room.
00:02:27.120 --> 00:02:29.599
I would say two months is a good thing to shoot for.
00:02:29.599 --> 00:02:35.199
Definitely the first month, expect expect to be very sleep deprived.
00:02:37.360 --> 00:02:45.039
not advice or feedback, but just the number one thing people people do tell me that that first month just the fact that the baby is waking up every couple hours.
00:02:45.039 --> 00:02:52.639
And admittedly, between Shima and I, I operate much better on less sleep, and I've done it before.
00:02:52.639 --> 00:02:54.800
She does not, so it's gonna be interesting.
00:02:54.800 --> 00:03:02.400
Like as as soon as she's like less than seven hours a night, she is pining for more sleep, so it shall be an adventure.
00:03:02.960 --> 00:03:05.840
Yeah, well, you j you go to sleep when the baby sleeps, I think.
00:03:05.840 --> 00:03:06.800
That's what people say.
00:03:06.800 --> 00:03:08.240
That's kind of what you have to do.
00:03:08.400 --> 00:03:08.719
Yeah.
00:03:08.960 --> 00:03:13.919
And the baby only sleeps two hours at a time, usually, sort of thing.
00:03:14.319 --> 00:03:26.639
Fingers crossed that we get one of those babies that just very quickly I've I have a number of friends and uh one sibling that have kids, and I guess extended family through Shima that have kids, and I've heard varying different stories.
00:03:26.639 --> 00:03:32.560
Some babies, you know, are much better sleepers much more soon, others are not.
00:03:32.560 --> 00:03:36.319
It's what do you call it, toss of the dice what you end up with.
00:03:36.800 --> 00:03:37.280
Yeah.
00:03:37.280 --> 00:03:42.000
Yeah, my youngest didn't sleep through the night until he was, I think, a year old.
00:03:42.000 --> 00:03:44.000
That's a long, that's a long time.
00:03:44.000 --> 00:03:48.639
So get used to uh get used to the small hours.
00:03:48.639 --> 00:04:04.080
I used to watch I used to my oldest, I used to have him on a a pillow and I used to be on the couch and I would do the feeding in the middle of the night, and I would watch reruns of Daltrek Next Generation because that was the only good thing that was on at like 2 a.m.
00:04:04.080 --> 00:04:04.879
or 3 a.m.
00:04:04.879 --> 00:04:06.000
or whenever it was.
00:04:06.000 --> 00:04:09.599
Oh yeah, this must have been pre like YouTube pre-streaming.
00:04:09.599 --> 00:04:14.479
YouTube was YouTube was around, but it was in the very early days between like 2006.
00:04:16.480 --> 00:04:19.199
Oh, that's like right when it didn't when did YouTube start?
00:04:19.199 --> 00:04:20.560
I think 2005 it launched.
00:04:20.560 --> 00:04:25.839
I was I was gonna say that's like right right when it there must have just been like a couple cat videos on on YouTube.
00:04:25.839 --> 00:04:29.279
Well the the elephant video and yeah, some cat videos.
00:04:29.279 --> 00:04:30.160
Wow.
00:04:30.160 --> 00:04:35.120
Yeah, I didn't actually I've actually been concerned, that's well, not that it I'm actually concerned about it.
00:04:35.120 --> 00:04:37.920
I guess we'll start talking about something tech related in a minute.
00:04:37.920 --> 00:04:49.120
But I've been thinking, because I consume so much podcast content and audiobooks in between, and uh the time to consume that is going to evaporate.
00:04:49.120 --> 00:05:00.240
But if you're telling me that while you're feeding the baby, I guess in the first few months, it's not like you're having a conversation with the kid while the kid's feeding, you have to entertain yourself.
00:05:00.240 --> 00:05:01.519
Maybe that is the opportune.
00:05:01.519 --> 00:05:04.160
Maybe I'll be chomping at the bit, you know, for the 3 a.m.
00:05:04.160 --> 00:05:07.199
feeding uh when my wife's trying to sleep.
00:05:07.199 --> 00:05:15.680
Maybe I'll be thinking, like, thank God, like I haven't been able to listen to the the most recent, I don't know, insert my favorite podcast, co-recursive.
00:05:15.680 --> 00:05:17.439
Well, what is my favorite podcast right now?
00:05:17.439 --> 00:05:18.399
I don't know.
00:05:18.879 --> 00:05:23.040
Anyways, enough baby talking about it you have that ahead of you.
00:05:23.279 --> 00:05:23.680
Yeah.
00:05:23.680 --> 00:05:26.560
Stay tuned, listener, for uh, I don't know, what do you call it?
00:05:26.560 --> 00:05:30.079
Parent corner coming to a podcast near you.
00:05:30.639 --> 00:05:31.439
Parent corner.
00:05:31.680 --> 00:05:33.199
Yeah, late 2027.
00:05:33.199 --> 00:05:35.199
But I promise I won't disappear.
00:05:35.199 --> 00:05:40.480
You know, there's a podcast I listen to called Tomorrow FM or something like that.
00:05:40.480 --> 00:05:45.120
It's hosted by two front-end web devs, Dax and some other guy.
00:05:45.120 --> 00:06:11.360
And I think one of them was having a kid, and then as soon as the kid showed up, they haven't posted a podcast for like months, which uh I keep waiting for like the come like the return to the podcast to hear, because he was saying leading up to it that everyone was telling him it was gonna be really difficult, and he said, I really hope that this is just like another thing that's like way easier for me than it is for other people, so that he could come back and be like, I knew it was not gonna be that hard, but we've never gotten the update on that.
00:06:11.360 --> 00:06:13.519
Anyways, what are our topics for today?
00:06:13.519 --> 00:06:15.920
Is there anything at the top of mind that you'd like to chat about?
00:06:16.319 --> 00:06:18.399
What have you been up to since we last spoke?
00:06:18.399 --> 00:06:23.120
Because I uh um of course I went to C now, so we could talk some about that.
00:06:23.519 --> 00:06:26.480
Oh yeah, I totally forgot that I also went to NPC.
00:06:26.480 --> 00:06:28.000
And you went to NDC Toronto.
00:06:28.000 --> 00:06:38.560
I went to NDC Toronto, the inaugural edition of that version of it, but technically the fifth edition of what was formerly CPP North.
00:06:38.560 --> 00:06:41.759
Sure, that's a great to topic for at least our first episode.
00:06:41.759 --> 00:06:43.519
How was uh C now?
00:06:43.519 --> 00:06:54.800
I recall looking at the program, and I definitely noted a couple talks that I wanted to see, and I know you were giving a talk that I have long wanted to see that was never recorded before, and that's right.
00:06:54.800 --> 00:06:58.560
It's not available online, but should be at some point in the future, correct?
00:06:58.959 --> 00:07:00.800
Yeah, it was recorded in Aspen.
00:07:00.800 --> 00:07:03.600
So to answer your first question, it was great.
00:07:03.600 --> 00:07:06.319
Really good conference, as always.
00:07:06.319 --> 00:07:29.920
It just feels like you know, it's it's like a holiday because you're going to Aspen, it's a beautiful place, and you're going to see friends who you've met there, many of whom now I've known for a decade, and have become friends, and you're getting to talk about like the the the sort of I don't know how to describe it, the high-level stuff of engineering.
00:07:29.920 --> 00:07:46.079
Like you're getting to talk about topics that you don't typically get to talk about with in in your day-to-day job with your coworkers, you get to talk in a different a different level with people who understand different things.
00:07:46.079 --> 00:07:48.000
And you get to learn a lot.
00:07:48.000 --> 00:07:49.600
You get to learn a lot.
00:07:49.920 --> 00:07:50.240
Yeah.
00:07:50.240 --> 00:07:55.920
Yeah, C Now was actually my first conference ever back in 2019.
00:07:55.920 --> 00:07:56.319
Right.
00:07:56.319 --> 00:07:58.639
Yeah, it was it was fantastic.
00:07:58.639 --> 00:08:08.879
You know, like you said, you're the type of person that goes to a conference in general, let alone C now, is you're with like-minded folks when you are there.
00:08:09.040 --> 00:08:13.120
That's Yeah, and it's not it's not that it's a different it's a different vibe.
00:08:13.120 --> 00:08:18.079
It's like just like it's not like you work with people who are who are not intelligent, right?
00:08:18.079 --> 00:08:30.639
But it's just like when you're in the day-to-day, you can't sort of stick your head up and and getting getting a break, getting a go to a conference and just step away from work, it's really important, I think, to be able to do that.
00:08:30.639 --> 00:08:33.919
And just just kind of broaden your perspective a bit.
00:08:34.240 --> 00:08:35.440
Yeah, yeah, absolutely.
00:08:35.440 --> 00:08:41.840
So what were the I mean I I brought the schedule up, but you know, it's would be very boring for me to scroll through and be like, oh, tell me about this.
00:08:41.840 --> 00:08:43.840
So what were the you remember?
00:08:43.840 --> 00:08:46.559
What were the highlights of the talks that you went to see?
00:08:46.559 --> 00:08:50.240
Obviously, you couldn't see all of them, and then also uh or I don't know what order you want to do.
00:08:50.320 --> 00:08:54.399
How how did your talk um Well let's see, let's I I've got the schedule here too.
00:08:54.399 --> 00:08:57.759
Let me just check the keynotes to begin with.
00:08:57.759 --> 00:09:03.039
Yeah, I mean uh so Barry Revzin gave the first keynote, and I think that was a really good one.
00:09:03.039 --> 00:09:04.240
It was about reflection.
00:09:04.240 --> 00:09:06.879
He's given several talks on reflection now.
00:09:06.879 --> 00:09:14.960
This was this was another I think basically, you know, he's a really good speaker.
00:09:14.960 --> 00:09:20.000
He knows he knows all about reflection, and it was a really good opening keynote.
00:09:20.000 --> 00:09:29.200
Aside from that, the talks which stood out to me there were sever there were some slots where I couldn't decide which talk to go to, which is always always the case.
00:09:29.200 --> 00:09:32.639
A little bit frustrating, but you just have to wait for the videos to come out.
00:09:32.639 --> 00:09:46.080
I really liked Rob Leahy's talk, or actually he gave a sort of double slot talk about about using senders at at sort of the lowest level.
00:09:46.080 --> 00:09:47.840
I forget the name of the talk, you have it up there?
00:09:47.840 --> 00:09:50.720
Towards async everything part one of the things.
00:09:50.720 --> 00:09:51.759
That's the one.
00:09:51.759 --> 00:09:52.559
Yeah.
00:09:52.559 --> 00:10:02.240
So he really presented a cut, like I say, back-to-back talks, which actually standalone, but one also leads into the other, right?
00:10:02.240 --> 00:10:12.639
And he was talking about using senders to drive the sort of lowest level, OS level mechanisms of asynchronous I.O.
00:10:12.639 --> 00:10:14.080
So IOU ring.
00:10:14.080 --> 00:10:15.200
That was that was really good.
00:10:15.200 --> 00:10:18.879
And I definitely want to see those talks again when they come out on video.
00:10:18.879 --> 00:10:21.120
There was a lot of information in there.
00:10:21.120 --> 00:10:23.519
Rob is an extremely polished speaker.
00:10:23.759 --> 00:10:30.559
Yeah, he has a background in theater or some kind of speaking, which came out.
00:10:30.559 --> 00:10:43.919
We interviewed him once while we were walking in Venice after having like a couple glasses of wine, and I could not get over how like you seemed like he had been preparing for this moment his entire life.
00:10:43.919 --> 00:10:48.480
And I was like, How are you more composed than like some other folks we have interviewed?
00:10:48.480 --> 00:10:53.759
And he I think you mentioned that yeah, he used to do some kind of theater or what do you call it?
00:10:53.759 --> 00:10:56.240
Not Toastmasters, but I have to have to look it up what he did.
00:10:56.240 --> 00:10:57.039
Something like that.
00:10:57.039 --> 00:10:59.440
He's a very, very polished uh presenter.
00:10:59.919 --> 00:11:02.000
So I thought his talks were great.
00:11:02.000 --> 00:11:08.320
I also thought Michael Case's talk was one that I'd been waiting for for a while.
00:11:08.320 --> 00:11:10.879
It's called Lasting Quality.
00:11:10.879 --> 00:11:17.360
And he talked about the idea of structural quality in code.
00:11:17.360 --> 00:11:27.840
So this is to be contrasted with so the kind of quality that we're used to is we might say one pillar is functional quality, right?
00:11:27.840 --> 00:11:31.440
So that's things like does the code meet the specification?
00:11:31.440 --> 00:11:35.200
Is it, you know, is it is it bug-free as far as we can make it?
00:11:35.200 --> 00:11:37.039
Does it does it perform well?
00:11:37.039 --> 00:11:40.480
These are functional, this is functional quality, right?
00:11:40.480 --> 00:11:44.320
And then another pillar of quality is process quality.
00:11:44.320 --> 00:11:47.039
And this is like, can we deliver on time?
00:11:47.039 --> 00:11:52.159
Can we repeatedly perform this for the organization without the team burning out?
00:11:52.159 --> 00:11:58.559
You know, this is a process quality is a kind of a a team thing and a and a and an execution thing, right?
00:11:58.559 --> 00:12:08.080
And then and both of those things, functional quality and process quality, they tend to be, you know, they're the things we can measure basically, and so they get measured, right?
00:12:08.080 --> 00:12:09.600
And so they get used.
00:12:09.600 --> 00:12:23.120
The third pillar, structural quality, is actually the most important and the one that is least measurable, and therefore the one that is least talked about or measured in organizations.
00:12:23.120 --> 00:12:28.559
But if you have structural quality, the other two f kind of naturally flow from it.
00:12:28.559 --> 00:12:30.080
There is a prerequisite for the other two.
00:12:30.080 --> 00:12:38.000
And structural quality is things like, you know, things that we when we say code is beautiful, we have we we know what we see, right?
00:12:38.000 --> 00:12:49.679
We we know we know when we see beautiful code, and that beautiful code is has good structural quality, and it's things like is it maintainable, is it testable, is it efficient, right?
00:12:49.679 --> 00:12:50.559
Is in there.
00:12:50.559 --> 00:12:57.279
But it's more of these intangible things or somewhat less tangible things than than the other measurable parts.
00:12:57.279 --> 00:13:04.720
How nice is the code to work in in the sense of, you know, does changing one part cause ripple effects through other parts?
00:13:04.720 --> 00:13:11.440
Is it is it compartmentalized, is it is it uh abstracted and composed, and things like that.
00:13:11.440 --> 00:13:16.159
These are things that is much harder to measure, right, in a quantitative way.
00:13:16.159 --> 00:13:22.480
But structural quality is, you know, if you don't have that, everything else is worse.
00:13:22.480 --> 00:13:24.960
And if you have that, everything else is better.
00:13:25.519 --> 00:13:27.279
Yeah, that sounds like a very interesting talk.
00:13:27.279 --> 00:13:34.480
And definitely Yeah, I don't know how I mean uh I was thinking if you tried to measure that stuff, like is it possible?
00:13:34.480 --> 00:13:54.799
I know that Clang tidy has a like complexity heuristic of like based on the nestedness of stuff, but that doesn't really capture like there there's definitely like like if you design something, I remember one time early in my career there was like a report system within the software that we had, and you could add these what were called category reports.
00:13:54.799 --> 00:13:59.120
Shout out to anybody that works on uh the Axis software system.
00:13:59.120 --> 00:14:04.080
And I remember at one point I had to add like a nested category report.
00:14:04.080 --> 00:14:21.679
I don't know if the code was good at the time, because I was so early in my career, but I remember I I knew I was gonna have to do this like multiple times with multiple reports, so I did it in such a way that like I did a ton of upfront work in order with the like not just to hack this one thing in, but like with keeping in mind I was gonna have to do this a bunch of times.
00:14:21.679 --> 00:14:25.360
So it was a ton of work the first time, but then subsequent times, right?
00:14:25.360 --> 00:14:31.200
It was very, very easy to just like make a couple surgical changes, bada bing, bada boom, everything worked.
00:14:31.200 --> 00:14:39.120
And yeah, like there's no good way of how do you how do you quantify the like ease of extending a system?
00:14:39.120 --> 00:14:47.759
Like there's there's no because every system's gonna be completely different, like extensibility of a system is completely defined by like what kind of system you're building.
00:14:47.759 --> 00:14:55.519
There's no right there's no like uh script you can write that's gonna like assess you have built a very a very good like right.
00:14:55.679 --> 00:14:57.919
It's not it's much less measurable, right?
00:14:57.919 --> 00:15:03.919
It's exactly but it does correlate with the idea of software design, right?
00:15:03.919 --> 00:15:10.960
So the design of systems being this kind of separable idea from the implementation, right?
00:15:10.960 --> 00:15:17.279
It correlates with the idea of like you know, a hallmark of good structural quality is having good APIs.
00:15:17.279 --> 00:15:19.440
Well, what do we mean by good APIs?
00:15:19.440 --> 00:15:31.519
It's it's a good design, it's one that can be composed and is appropriately abstracted, it's one that doesn't do unexpected things when you start putting different parts together, right?
00:15:31.519 --> 00:15:37.200
And it's not, you know, it's not really about the implementation at that level, you know.
00:15:37.200 --> 00:15:57.519
Implementation and and correctness and you know uh performance are things we can measure below that level, but at the level of the API, um it's much more now that there are some things like you know, performance arguably is a feature of an API, or at least it is possible to write APIs which preclude the best performance, right?
00:15:57.519 --> 00:16:01.919
Certainly, and it's possible to write other APIs which are more sympathetic to performance.
00:16:01.919 --> 00:16:08.399
But I think even there we're talking more about it's more like efficiency versus performance, right?
00:16:08.399 --> 00:16:16.639
If we can say efficiency is not doing extra work, and performance is doing the work you have to do as quickly as possible, right?
00:16:16.639 --> 00:16:19.120
So performance is more of an implementation concern.
00:16:19.120 --> 00:16:22.000
Efficiency is an API concern, perhaps.
00:16:22.320 --> 00:16:23.360
Yeah, absolutely.
00:16:23.360 --> 00:16:26.320
That sounds like a I mean, none of these talks are out, right?
00:16:26.639 --> 00:16:27.360
Not yet, no.
00:16:27.600 --> 00:16:28.320
Yeah, they're gonna.
00:16:28.320 --> 00:16:32.799
But anyways, as always, we always talk about these talks, and then I'm sure a few of the listeners go and check.
00:16:32.799 --> 00:16:36.399
We will have links that link to nothing while the talks are not available.
00:16:36.399 --> 00:16:46.080
And then either I check sporadically or sometimes someone will message me on their choice of social media platform saying, oh, the the talks are up, you can link them now.
00:16:46.080 --> 00:16:48.720
So we will be sure to link to these when they are out.
00:16:49.039 --> 00:16:49.279
Yeah.
00:16:49.279 --> 00:17:02.320
Well, there are a couple of papers I would like to point you to, Connor, that came across my feed and and I sent them to Michael while he was making his talk, and you know that they they are really important, I think.
00:17:02.320 --> 00:17:14.720
So I think back in February or March, so if it's a fairly recent paper, uh a researcher, I assume, her name is Margaret Ann Story, she's at the University of Victoria, Canada.
00:17:14.720 --> 00:17:19.920
She published a paper that's called From Technical Debt to Cognitive and Intent Debt.
00:17:19.920 --> 00:17:23.599
And the subtitle is Rethinking Software Health in the Age of AI.
00:17:23.599 --> 00:17:30.799
But the the the the uh sort of taxonomy here of debt is what's really interesting, right?
00:17:30.799 --> 00:17:34.480
So technical debt is a term we're familiar with.
00:17:34.480 --> 00:17:46.079
It tends to be we call it we call it debt, but it's not really debt in a finance sense, because you know, in the financial world, debt is a tool that that you know like you can use.
00:17:46.079 --> 00:17:50.000
That that is much less the case when we talk about technical debt.
00:17:50.000 --> 00:17:52.559
We think of it as just a bad thing.
00:17:52.559 --> 00:18:00.319
Now, occasionally if you have you know, occasionally if you're a startup and you want to ship really fast, you might make a you might make a definite decision to take on technical debt.
00:18:00.319 --> 00:18:05.599
But by and large, it's something we try to avoid as engineers, right?
00:18:05.599 --> 00:18:07.680
Anyway, so technical debt is well known.
00:18:07.680 --> 00:18:18.559
Technical debt is, you know, to to distill it to something very simple, we could say it's uh a software system that has technical debt is harder to change, right?
00:18:18.559 --> 00:18:29.200
So it's some kind of you know, just to say it very simply at a high level, we could say technical debt correlates with ability to or or lack of ability to change the software.
00:18:29.200 --> 00:18:34.000
Okay, so it's a it's a thing that exists in the software, in the code.
00:18:34.000 --> 00:18:43.200
Whereas cognitive debt, cognitive debt talks about the the team who built the software and their understanding of the code, right?
00:18:43.200 --> 00:18:50.960
The code can work, but also the team might be losing understanding of how it works.
00:18:50.960 --> 00:18:55.200
That's cognitive debt, and it lives inside people, right?
00:18:55.200 --> 00:19:06.400
And and we see that, you know, as people leave the team, they take with them the cognition and they increase and they might increase the cognitive debt, you know.
00:19:06.400 --> 00:19:17.119
In particular, if they had ownership over one piece and they leave, then the knowledge of about how that piece works is now leaving with them, or at least some of it is, right?
00:19:17.119 --> 00:19:20.319
And then the third kind of debt is intent debt.
00:19:20.319 --> 00:19:29.279
This is this is arguably the most important kind of debt of all, and this is the this is the knowledge about why we made those decisions in building the software, right?
00:19:29.279 --> 00:19:31.359
Why does the software work this way?
00:19:31.359 --> 00:19:44.559
Not not it's different from tech debt, obviously, it's different from cognitive debt in the sense that it is not really thinking about how the software works and how we understand it, but it's talking about why did we write it that way in the first place?
00:19:44.559 --> 00:19:49.680
What problem were we solving, and what are the problems today, and are they the same, right?
00:19:49.680 --> 00:19:55.279
And that is very difficult to fix if you lose.
00:19:55.279 --> 00:19:56.000
Right?
00:19:56.000 --> 00:20:04.720
That is typically on on many teams that is held by a couple of people who've been on the team a long time, and they're the people you go to to ask about things, right?
00:20:04.720 --> 00:20:06.319
Why are we doing it this way?
00:20:06.319 --> 00:20:09.119
You know, you this is tell me if this is ringing true.
00:20:09.119 --> 00:20:12.880
You've worked on teams like this where you know you've had questions like, why would why we do this?
00:20:12.880 --> 00:20:15.680
Oh, go ask Alice or go ask Bob, right?
00:20:15.680 --> 00:20:19.680
They've been here, they've because they've worked here for 10 years, they've they remember, they know.
00:20:19.680 --> 00:20:29.119
And the so the paper is really interesting because one of the observations is you can you you can fix technical debt, right?
00:20:29.119 --> 00:20:34.000
You can fix technical debt if you don't have cognitive debt, right?
00:20:34.000 --> 00:20:36.640
That or at least it's easier to, right?
00:20:36.640 --> 00:20:42.160
And also you can fix cognitive debt to some extent if you don't have intent debt, right?
00:20:42.160 --> 00:20:45.599
But it's very, very difficult to fix intent debt.
00:20:45.599 --> 00:20:51.839
And we see these kind of macro level ideas playing out in Teams, right?
00:20:51.839 --> 00:21:02.319
How many times, for instance, have you seen, or indeed, how in terms of yourself have you yourself rewritten something so you could understand it?
00:21:02.319 --> 00:21:10.319
You know, here's some subsystem, person who wrote it has left the company or moved on, I've taken it over.
00:21:10.319 --> 00:21:11.680
What am I gonna do?
00:21:11.680 --> 00:21:12.960
I'm gonna try and understand it.
00:21:12.960 --> 00:21:13.920
How am I gonna understand it?
00:21:13.920 --> 00:21:15.200
I'm gonna rewrite parts of it.
00:21:15.200 --> 00:21:17.599
You know, it happens like every day.
00:21:17.599 --> 00:21:26.799
We see it when when when when teams hand over projects that they built to other teams, right?
00:21:26.799 --> 00:21:27.839
This happens sometimes.
00:21:27.839 --> 00:21:29.759
This is in the paper as well, I think.
00:21:29.759 --> 00:21:34.640
Team A builds some library, some software.
00:21:34.640 --> 00:21:36.799
They know it intimately, right?
00:21:36.799 --> 00:21:40.720
They've been involved in building it, they spent a year, two years, whatever, building the software.
00:21:40.720 --> 00:21:55.519
They know about all the intent, all the cognition, but then you know, they move on to a different project, they move, they they hand the project to another team who wants to take it forward, maintain it, maybe add some things in the future.
00:21:55.519 --> 00:22:11.119
There is only one way that really works, which is if you have a long Period of overlap during which the new team can work hand in glove with the old team and ask whatever questions they need to until the knowledge is transferred.
00:22:11.119 --> 00:22:12.079
Right?
00:22:12.079 --> 00:22:15.200
That is the only way I've really seen that ever work.
00:22:15.200 --> 00:22:26.000
And so that those are the kind of macro level things that play out as a result of these ideas of tech debt versus cognitive debt versus intent debt.
00:22:26.000 --> 00:22:29.119
It's a very interesting kind of uh taxonomy.
00:22:29.119 --> 00:22:40.400
And and you know, the so the the subtitle of the paper is talking about AI in the age of AI, and it's making the point that, you know, these things are all still important, right?
00:22:40.400 --> 00:22:48.559
And AI actually runs the risk of increasing these debts, these debts in these three buckets.
00:22:48.559 --> 00:22:56.240
Maybe if we can control tech debt, that's one thing, and we can we can maybe do that a little more.
00:22:56.240 --> 00:23:03.680
But AI really can't touch cognitive debt or intent debt at the moment, apart from increasing them, of course.
00:23:03.680 --> 00:23:08.079
AI can't Connor is looking very thoughtful.
00:23:08.079 --> 00:23:08.960
Right.
00:23:08.960 --> 00:23:28.720
The way in which we use AI at the moment, overwhelmingly, cannot because cognition lives in the minds of humans, and intent that also lives somewhat in the minds of humans and lives in things like design documents and things that capture why decisions were made.
00:23:28.720 --> 00:23:43.440
And if we're using AI just to implement features, generate code as a glorified auto-complete, yeah, we can review the code it produces, we can make sure as far as we can that the technical debt stays low.
00:23:43.440 --> 00:23:47.519
But these other two kinds of debt, it's not really speaking to that.
00:23:47.519 --> 00:23:49.359
They require a different strategy.
00:23:50.319 --> 00:23:55.759
I mean Well, first I'll say that this is um it is very interesting.
00:23:55.759 --> 00:23:58.880
I've never thought about cognitive debt or intent debt.
00:23:58.880 --> 00:24:09.359
And my main thought was it kind of dovetails with the piece of advice from some technical book or something that I've read at one point that says, you know, comment should say why, not how.
00:24:09.359 --> 00:24:16.000
You know, the how should be in the code, but the comment should say this is the motivation or the reason for why we're doing it.
00:24:16.000 --> 00:24:18.799
And if the why is obvious, then you don't really need a comment.
00:24:18.799 --> 00:24:28.880
Your code should be written in a way that, you know, because some people consider comments like an anti-pattern if you've written a code in a way that, like, you know, the best code is self-describing, but a lot of the time.
00:24:29.279 --> 00:24:32.480
It's certainly uh an ideal, maybe to strive for.
00:24:32.480 --> 00:24:34.400
Everything is, of course, imperfect.
00:24:34.400 --> 00:24:38.799
So, you know, as much as we can strive for that, we never actually achieve that goal.
00:24:39.119 --> 00:24:39.920
Yeah, yeah, yeah.
00:24:39.920 --> 00:24:41.440
Anyway, so that was my thought.
00:24:41.440 --> 00:24:43.759
Your comment saying that AI can't touch.
00:24:43.759 --> 00:24:57.119
I mean, my first thought was that uh sometimes potentially the intent is there in like the git history of a code base, you know, it's it's there, it's just not at the top serviceable.
00:24:57.119 --> 00:25:15.759
And is I mean, you know, this is we should we should we should uh save part two of this conversation for updates on AI because I I have been dying to talk to you, but then I I you know I I feel I get the sense that you'd rather talk about other things, but now that now that AI's come up, the door is open for me to walk through.
00:25:15.759 --> 00:25:17.920
But well okay.
00:25:17.920 --> 00:25:19.920
But wait, we we'll we'll table that.
00:25:20.880 --> 00:25:22.720
Yeah, let's finish the thread.
00:25:22.720 --> 00:25:23.279
We're on.
00:25:23.279 --> 00:25:24.240
Yeah, yeah.
00:25:24.240 --> 00:25:36.000
I mean it dovetails with the idea, you know, that that was it Gerald Sussman who said code should be written for humans to understand and only incidentally for computers to execute.
00:25:36.000 --> 00:25:38.319
I'm paraphrasing, but it was something of that nature.
00:25:38.319 --> 00:25:40.720
Yes, yeah.
00:25:40.720 --> 00:25:47.119
And there is a paper behind the paper, which is in the references, which is Peter Nauer's paper.
00:25:47.119 --> 00:25:50.240
It's called Programming as Theory Building.
00:25:50.240 --> 00:25:58.079
And it's a really interesting So Peter Nauer of if you know the name, if you know Backers Nauer form, that's that's the same person.
00:25:58.079 --> 00:26:06.799
The idea his idea in this paper, which is really interesting, is that a program is not the code.
00:26:06.799 --> 00:26:15.279
The code is an approximation, the program is the theory built in the heads of the team who build the program, right?
00:26:15.279 --> 00:26:30.319
And and so this ties in with this idea of like if if one team or one person builds a program, it's very difficult for them to actually one of the chief problems in programming is communicating the theory, right?
00:26:30.319 --> 00:26:37.200
Because the code itself is a very imperfect communication of that of that theory, which is the actual program.
00:26:37.200 --> 00:26:46.559
Other ways we have to communicate the theory include documentation, diagrams, maybe formulae, things like that.
00:26:46.559 --> 00:26:48.960
But they're all imperfect, right?
00:26:48.960 --> 00:26:53.440
The the program is not any one of those things, it's not even the code.
00:26:53.440 --> 00:26:58.319
The program is the idea, the theory in the head of the people who wrote it.
00:26:59.920 --> 00:27:08.880
I have never heard that, and I mean my initial thought is that is surprising kind of.
00:27:08.880 --> 00:27:22.000
I mean Well, what's my my thought is that if you can express precisely the program you want, once it's codified, that is infinitely better than like a description.
00:27:22.000 --> 00:27:31.119
Or I guess you're saying that like what lives in someone's head is the program, not necessarily like English and communicating that is also imperfect potentially.
00:27:31.599 --> 00:27:36.000
So the code is an expression of the program, but it's not the program, right?
00:27:36.000 --> 00:27:44.160
Because if it were, then it wouldn't be possible to replace parts of it, like replace an implementation with an equivalent implementation.
00:27:44.160 --> 00:27:48.960
The fact that we can do that kind of tells us that the code is not the program.
00:27:50.319 --> 00:27:54.000
This is like mind-bending good.
00:27:54.000 --> 00:28:11.039
Philosophical The code is not the program, and because you can replace parts with other parts, different implementations, that by then definition Well, it lends weight to the idea, I think, right?
00:28:11.039 --> 00:28:13.039
It learns weights through the idea.
00:28:13.920 --> 00:28:14.720
It lends weight.
00:28:14.960 --> 00:28:17.039
Oh, lends weight to the idea, yeah.
00:28:17.039 --> 00:28:20.240
Well, I don't know.
00:28:20.240 --> 00:28:25.119
There's my I can tell you that my brain is like pushing back vociferously being like, what do you mean?
00:28:25.119 --> 00:28:32.720
The the thing that execute that is the sure, like are you my brain is like there's a little voice in my head right now that's saying, like, what are we talking about here?
00:28:32.720 --> 00:28:46.640
Like, sure, maybe it's uh you can say that the code is a representation, but it it is a better you know, well, is it a better representation if if coded correctly is is you know a thing that can deterministically execute.
00:28:46.640 --> 00:28:47.279
Sure.
00:28:47.599 --> 00:28:54.880
Is that is that not better than like a well let me ask you another question about your experience coding, right?
00:28:54.880 --> 00:28:56.880
You you currently work on a code base.
00:28:56.880 --> 00:29:03.680
I'm gonna guess, through no judgment, that some parts of it you consider to be better than others.
00:29:03.680 --> 00:29:04.400
Yes.
00:29:04.400 --> 00:29:13.200
I'm gonna guess that right now, the thing you're working on, you will have perhaps a better idea of it in a week, you know.
00:29:13.200 --> 00:29:18.400
Maybe a thing you're working on right now, you are struggling with parts of.
00:29:18.400 --> 00:29:21.759
You have some parts of it down, other parts of you're still discovering.
00:29:21.759 --> 00:29:27.680
If this isn't quite happening today, then certainly is probably something that has happened to you.
00:29:27.680 --> 00:29:40.240
And and it's a process of discovery of of what how it should be, and how it should be really is something that is fulfilling or solving a problem you have today, right?
00:29:40.240 --> 00:29:47.440
And you and and you might come to a point where you have sufficiently solved that problem, and then you say, That code's good, I'm gonna leave that for a while.
00:29:47.440 --> 00:30:04.559
But then equally you might wake up in a month, two months, and think, Oh, you know, I remember that thing I was working on, and now I see with this other context, now I see how that could be solved much more easily, or much differently, or much more in some way that this that seems nicer, right?
00:30:04.559 --> 00:30:13.759
And so the program, in a sense, is evolving inside your head, and the code that's in the machine is always an imperfect representation of it.
00:30:13.759 --> 00:30:15.839
I mean you are well.
00:30:16.640 --> 00:30:17.519
It depends.
00:30:17.519 --> 00:30:20.400
It depend um it depends on I think.
00:30:20.400 --> 00:30:22.799
I'm seeing the gears turn in Connor's head right now.
00:30:22.799 --> 00:30:33.119
Well, I mean, there's like there's like two different, there's many, what is it, the Walt Whitman, you know, multitudes with something something is that there within me there's an APL programmer.
00:30:33.119 --> 00:30:44.079
And to tell him that, you know, or her, in my case it's a him, that, you know, always the code is an imperfect representation of the program is just false.
00:30:44.079 --> 00:30:50.640
I mean, Kadane's algorithm in BQN is it's the most beautiful, it is perfect in my opinion.
00:30:50.640 --> 00:30:53.920
Well, I mean, could it be slightly improved on in a different language?
00:30:53.920 --> 00:30:59.440
Maybe, but it is uh the closest to like the epitome of beautiful, elegant.
00:30:59.440 --> 00:31:04.079
But that that programmer uh is juxtaposed with a different programmer.
00:31:04.079 --> 00:31:15.279
Like when I started my career, once again, shout out to Axis, you know, multi, multi-million dollar C code base, originally written in, I believe, BASIC and then ported at one point back in the 90s.
00:31:15.279 --> 00:31:37.279
And so, you know, a ton of legacy code and technical debt and absolutely everything that you said, you know, of I'm trying to implement some feature that corresponds to some regulatory document passed by either the Canadian government or the US federal or state government, because in America there's state-by-state insurance, you know, regulations.
00:31:37.279 --> 00:31:48.960
And so definitely like the the program exists, I guess you could say, in the regulatory document and needs to be, you know, you know, I don't know, visualized in your head, and then how you're gonna put that.
00:31:48.960 --> 00:31:52.720
And there's a tons of things like the limitation of my understanding of the system as it is.
00:31:52.720 --> 00:31:59.920
But and so, yeah, I guess when I think about the the person working in that large system who didn't even fully understand how the system worked, 100%.
00:31:59.920 --> 00:32:05.119
You know, I do think I do something, you know, at some point a year later I look back and I was like, what was I thinking?
00:32:05.119 --> 00:32:09.279
Like there's obviously a better way to do this than the way that I did it at the time.
00:32:09.279 --> 00:32:18.400
But then when I when I com juxtapose that with like the the code artist, if you will, that uh many people refer to me as.
00:32:18.400 --> 00:32:39.039
I think the notation that we have in mathematics is just like the beginning of, you know?
00:32:39.039 --> 00:32:44.480
Like what is it what is it, the guy that wrote the history of mathematical notation?
00:32:44.480 --> 00:32:46.319
Like we're we're only Kajori.
00:32:46.319 --> 00:32:50.079
We're only like we're only like a fraction of the way through history, you know?
00:32:50.079 --> 00:32:51.440
It's gonna it's gonna change.
00:32:51.440 --> 00:32:54.000
Ten years, a hundred years, a millennia?
00:32:54.000 --> 00:32:54.960
Will we be alive?
00:32:54.960 --> 00:32:56.000
Nobody knows, folks.
00:32:56.000 --> 00:32:57.839
Nobody knows if we're gonna make it till then.
00:32:57.839 --> 00:33:12.799
But the point being is that I think that there is some like truth in some symbolic notation, whether that's APL or some evolved form or some extension of mathematical notation, that is like the purest, truest representation of some kind of thing.
00:33:12.799 --> 00:33:13.599
But I don't I don't know.
00:33:13.599 --> 00:33:16.960
I'll I'll stop talking and let you respond to what I've said, yeah.
00:33:17.359 --> 00:33:23.839
Well, let me ask you I think one of the useful notions we can bring to bear here is the idea of self-similarity.
00:33:23.839 --> 00:33:45.599
So and I think what you said is to some extent true, but alongside the argument here, which is that programs so programs are not usually this kind of ideal thing that you were talking about, like the the the the mathematics.
00:33:45.599 --> 00:33:52.079
They they are they exist to solve some problem, they exist to do something, right?
00:33:52.240 --> 00:34:06.079
But the idea of self-similarity is one I want to talk about because you know so remind me what Cadan's algorithm is, is that the uh it's the mac it's it goes by a couple different names, maximum subarray sum, given uh negative positive integers.
00:34:06.079 --> 00:34:12.480
What's the contig what's the contiguous array subarray that equals the largest sum?
00:34:13.119 --> 00:34:16.079
So, okay, so what are some applications of that?
00:34:16.079 --> 00:34:19.920
In other words, that's an algorithm, what what problem does it solve?
00:34:19.920 --> 00:34:20.559
For example.
00:34:20.960 --> 00:34:29.440
Oh, I'm I'm sure it solves a bunch, but off the top of my head, I mean uh I'm not asking the question to be contrary, you understand?
00:34:29.519 --> 00:34:32.079
I'm like, I'm sure it has lots of applications.
00:34:32.079 --> 00:34:33.920
I'm just asking for examples.
00:34:34.320 --> 00:34:36.559
I don't know if the top of my head we can ask.
00:34:36.559 --> 00:34:51.679
What are some applications of Cadan's algorithm and computer vision used in 2D image processing to find the brightest or most intense rectangular region in a bitmap, financial analysis?
00:34:51.679 --> 00:34:53.440
Oh yeah, stock trading, you know.
00:34:53.440 --> 00:34:54.800
Okay, that's the classical.
00:34:55.119 --> 00:35:09.599
So the so the point here is my point that I want to make is that like Cadan's algorithm is one implementation, uh, and as you say, might be a very elegant one, but it's one implementation we found to solve these problems, right?
00:35:09.599 --> 00:35:13.119
But it's not necessarily the only implementation out there, right?
00:35:13.119 --> 00:35:21.039
And so the the the program is distinct from the algorithm that implements it, right?
00:35:21.039 --> 00:35:23.599
Man, this episode has some dead air.
00:35:24.800 --> 00:35:28.400
Don't worry, we we've got a single button, truncate silence.
00:35:29.039 --> 00:35:33.039
Oh, it's gonna make it look like Connor has all the answers all like just like that.
00:35:33.440 --> 00:35:40.559
Well, is it is that the goal, or is the goal just not to waste the listener's time of well, every once in a while in a podcast, there's like such a large gap.
00:35:40.559 --> 00:35:43.039
I'm like, did my podcast crash or something?
00:35:43.039 --> 00:35:45.679
And that's at like 2.3 times X.
00:35:45.679 --> 00:35:48.719
The program is separate from the implementation.
00:35:48.719 --> 00:36:03.519
So you're like so Cadane's algorithm is a solution to finding the maximum subarray sum, and you're saying that that implementation, because Cadane's algorithm is a specific implementation.
00:36:03.519 --> 00:36:04.320
Sure.
00:36:05.119 --> 00:36:08.320
And if your problem is maximum subarray sum, it's a great algorithm.
00:36:08.320 --> 00:36:11.760
If your problem and again, the idea of self-similarity, right?
00:36:11.760 --> 00:36:14.960
Yes, it's it's a good way to solve maximum subarray sum.
00:36:14.960 --> 00:36:18.960
Is maximum subarray sum a good way to solve the problem above it?
00:36:18.960 --> 00:36:24.159
In the case of vision or finances or the the the applications you mentioned, yes.
00:36:24.159 --> 00:36:24.719
Okay.
00:36:24.719 --> 00:36:30.000
But it's but it's not so the idea of self-similarity is like if I can draw another example, right?
00:36:30.000 --> 00:36:39.519
If we think about, you know, when when we were talking to Sean, the idea of in-place sort, in place in-place stable sort, right?
00:36:39.519 --> 00:36:46.400
That is that before, you know, 30 years ago, that was a research problem.
00:36:46.400 --> 00:36:48.880
About 30, maybe 35 years ago.
00:36:48.880 --> 00:36:53.039
But it was one of Stepanov's great contributions to the field of algorithms, right?
00:36:53.039 --> 00:36:57.840
And and the point is that like there is no level.
00:36:57.840 --> 00:37:09.280
One of the points that I made in my talk, or one of my talks recently, I forget which one now, there is no level below which abstraction fails, right?
00:37:09.280 --> 00:37:14.880
There is no distinction between application code versus library code.
00:37:14.880 --> 00:37:23.679
There should be no idea of like, here's a boundary at an API level below which we hide all of the difficulties and complexity, right?
00:37:23.679 --> 00:37:24.320
No.
00:37:24.320 --> 00:37:27.039
Everything is self-similar as we go down.
00:37:27.039 --> 00:37:36.400
We build one API in terms of the next, with the result that when we get to the very bottom, frequently things just don't only become less complex, they just disappear, right?
00:37:36.400 --> 00:37:45.280
And so stable salt is built on stable partition, is built on rotate, is built on reverse, is built on iter swap, right?
00:37:45.280 --> 00:37:46.400
Range swap.
00:37:46.400 --> 00:37:54.719
It's abstractions all the way down, and when you get to the bottom, the abstraction, you know, the the the complexity disappears.
00:37:57.360 --> 00:37:59.360
Isn't at the bottom like ones and zeros?
00:37:59.360 --> 00:38:01.840
Uh no.
00:38:01.840 --> 00:38:02.719
No?
00:38:02.719 --> 00:38:03.760
I'm gonna say no.
00:38:04.079 --> 00:38:05.440
What's at the bottom?
00:38:05.440 --> 00:38:07.199
I don't know.
00:38:07.199 --> 00:38:07.840
What?
00:38:07.840 --> 00:38:08.800
We don't know.
00:38:08.800 --> 00:38:15.360
Like like we arbitrarily choose to make the bottom where it is.
00:38:15.360 --> 00:38:21.360
Yeah, it's convenient for us to to make hardware that deals in binary, right?
00:38:21.360 --> 00:38:26.800
And so that in a sense is the practical bottom for us right now.
00:38:26.800 --> 00:38:30.719
But but that isn't the theoretical bottom, right?
00:38:30.719 --> 00:38:34.000
That doesn't mean that abstraction runs out at some level.
00:38:34.000 --> 00:38:36.400
Yeah, ultimately we live in the physical world.
00:38:36.400 --> 00:38:49.599
I mean, ultimately those ones and zeros you think are nice, good-looking ones and zeros, are really mushy waveforms down deep in the hardware somewhere, then they're not like they don't have straight-line edges.
00:38:49.599 --> 00:38:50.800
Oh man.
00:38:51.199 --> 00:38:54.719
Have you been writing reading some like deep philosophical books lately?
00:38:54.719 --> 00:38:58.800
Or this is like no, I've just been working in embedded.
00:38:58.800 --> 00:39:09.679
So let's take a step back here, because I I feel like I feel like I uh my ice cream sandwich for lunch was not substantial enough foods for my brain to operate at the level that yours is operating at right now.
00:39:09.679 --> 00:39:18.079
So, I mean we're talking about the paper, and then at some point we were talking about how the code is not the program.
00:39:18.079 --> 00:39:22.239
The program lives inside our head.
00:39:22.239 --> 00:39:23.119
Yeah.
00:39:23.119 --> 00:39:25.840
Um, programming as theory building.
00:39:25.840 --> 00:39:26.639
Yeah.
00:39:26.639 --> 00:39:29.199
And then abstraction and self-similarity.
00:39:29.199 --> 00:39:32.159
And what does all this mean?
00:39:32.159 --> 00:39:34.480
It means I don't know.
00:39:34.639 --> 00:39:37.920
I it means that uh Well, the meaning is what we give it, right?
00:39:37.920 --> 00:39:42.800
Ultimately we we we we build things, hopefully to make the world a better place.
00:39:42.800 --> 00:39:54.320
But if if if these kind of quality ideas are important to us, then then these ideas should come along for the right and should be the way we think about things, I think.
00:39:55.440 --> 00:40:23.119
And so I guess yeah, like taking a massive step back, it was that AI can't help with cognitive debt and intent debt, and I guess that's why we started talking about this, is because if the program lives in our head and we're doing some level of job, you know, to the extent that the best is a perfect job, you know, sometimes it's a good job, sometimes it's a bad job of encoding the program that lives in our head into your programming language of choice.
00:40:23.119 --> 00:40:36.000
But you know, there's a certain amount of cognitive debt that will exist and then intent debt that'll exist, and AI is never really gonna help peering into people's heads to get the actual essence of the program.
00:40:36.000 --> 00:40:36.639
Something like that.
00:40:38.000 --> 00:40:38.480
You're close.
00:40:38.480 --> 00:40:43.039
I mean, let's not say let's not talk in absolutes here.
00:40:43.039 --> 00:40:45.280
Let's not say flat that AI cannot help.
00:40:45.280 --> 00:41:02.960
Let's rather say that the way we are using AI right now tends towards increasing cognitive debt and increasing intent debt and increasing technical debt, although we have a better idea perhaps of how to keep a rein on that one.
00:41:02.960 --> 00:41:09.280
People aren't talking a lot about the cognitive debt and intent debt, but I think they are really important.
00:41:10.800 --> 00:41:16.159
Okay, I feel like I'm back on, you know, you might be on a very nice yacht, and I'm now back on my raft.
00:41:16.159 --> 00:41:35.119
I was in the ocean and uh I scrambled back on the raft, and so now uh I guess my my question that would I would ask is that if and because I I agree that the use of these AI tools is increasing cognitive and intent debt.
00:41:35.119 --> 00:41:40.639
But did people say the same thing back when like C was invented?
00:41:40.639 --> 00:41:58.239
And people stopped coding an assembly and then people stopped understanding assembly, because you could make the same arg I think you could make the same argument that there was more cognitive debt, I'm not sure about the intent debt, but that people didn't understand that lower level as well.
00:41:58.239 --> 00:42:00.559
But did it mat matter at the end of the day?
00:42:00.880 --> 00:42:04.239
Okay, so so so there are two different there are two different things here.
00:42:04.239 --> 00:42:14.639
One is I think that the the argument around or the the taxonomy of technical debt, cognitive debt, intent debt, I think stands apart from AI.
00:42:14.639 --> 00:42:14.880
Right?
00:42:14.880 --> 00:42:21.119
The subtitle of the paper is like AI might be worsening these things, but I think that idea really stands apart, right?
00:42:21.119 --> 00:42:27.440
Before we had LLNs, before we had AI, we could have talked about the same kind of things and identified the same issues, right?
00:42:27.440 --> 00:42:28.880
So there's that.
00:42:28.880 --> 00:42:31.760
So I think that stands alone as an idea.
00:42:31.760 --> 00:42:35.280
The other to your question, right?
00:42:35.280 --> 00:42:42.559
The eternal question of when a new technology comes along, it could it causes atrophy of skills, right?
00:42:42.559 --> 00:42:44.800
And and this is just basically true.
00:42:44.800 --> 00:42:53.760
So the question really is so like you know, if you if you doubt that's true, try and take a high school maths paper from 1890 or whatever.
00:42:53.760 --> 00:42:57.440
And you'll find it very difficult, I'm sure.
00:42:57.440 --> 00:43:03.199
So it's just in some sense true, but the question really is like, does it matter, as you said?
00:43:03.199 --> 00:43:12.400
Uh and that is a question that, you know, I think I don't think I think everyone needs to find their own answer to that question.
00:43:12.400 --> 00:43:15.519
Because there is still value in having those skills.
00:43:15.519 --> 00:43:21.519
And in a world where people tend not to have those skills, there is even more value as an individual in having them sometimes.
00:43:21.519 --> 00:43:23.679
Interesting.
00:43:24.079 --> 00:43:31.199
So in other words, you think the answer potentially is different for people on an individual basis?
00:43:31.599 --> 00:43:38.159
I yeah, I think people just need to decide, you know, what f what path they want their life to take in that sense.
00:43:39.119 --> 00:43:48.639
Be sure to check these show notes either in your podcast app or at adsphepodcast.com for links to anything we mentioned in today's episode, as well as a link to a GitHub discussion where you can leave thoughts, comments, and questions.
00:43:48.639 --> 00:43:49.519
Thanks for listening.
00:43:49.519 --> 00:43:51.039
We hope you enjoyed, and have a great day.
00:43:51.039 --> 00:43:53.199
I am the anti brace.
00:43:53.199 --> 00:43:53.920
Um