WEBVTT
1
00:00:22.260 --> 00:00:23.200
Hey, Ben.
2
00:00:23.200 --> 00:00:24.240
Hey, Matt.
3
00:00:24.240 --> 00:00:34.620
We are reaching new levels of complacency when it comes to recording an episode here because we haven't got a clue at all about what we're doing today.
4
00:00:34.620 --> 00:00:34.960
No. No.
5
00:00:34.960 --> 00:00:38.020
But that's never really stopped us before.
6
00:00:38.020 --> 00:00:38.740
No, it hasn't.
7
00:00:38.740 --> 00:00:46.680
And it's not stopping us today. I'm going to ask, how are you doing, my friend? It's been a little while.
8
00:00:46.680 --> 00:00:56.280
It's been, it's been a busy few weeks. It's been a busy few years.
9
00:00:56.280 --> 00:01:05.820
Last week was a busy year. Uh, the, uh, just, just lots of new things happening, new stuff happening, new things being built.
10
00:01:05.820 --> 00:01:09.540
Hopefully exciting and interesting new things.
11
00:01:09.540 --> 00:01:10.180
Yeah.
12
00:01:10.180 --> 00:01:26.500
Yeah. It, it, um, you know, I have the privileged position of working in new projects, which most programmers will tell you is a much better alternative than many other things.
13
00:01:26.500 --> 00:01:26.800
Right.
14
00:01:26.800 --> 00:01:38.020
And as the listeners of this podcast are well aware, I have many strong opinions on the right way to do things. And, uh, being, ah working in a new project allows me to...
15
00:01:38.020 --> 00:02:06.180
..work in the manner and to which I am accustomed, which means i am being very productive, right? Like I'm able to get a lot of things done because, I don't have to relitigate all of the development practices and tools and things. It's just like, Nope, we're just gonna do the stuff and we're going to do it right. And we know how it all works and it's all pretty straightforward and simple. And and the whole point here is just to do it as fast as you responsibly can.
16
00:02:06.180 --> 00:02:12.540
And so that ah is fun and rewarding, but it's also a bit tiring.
17
00:02:12.540 --> 00:02:22.070
Right. Right. But that's, as you say, having the ability to set a project up the way that you would like it to be is powerful.
18
00:02:22.070 --> 00:02:23.160
huh
19
00:02:23.160 --> 00:02:31.850
And potentially as you say, potentially gets you to go very fast, lets you go fast. You're not limited by...
20
00:02:31.850 --> 00:02:33.000
Yeah.
21
00:02:33.000 --> 00:02:45.140
..I mean, I guess other people, other people and their choices that maybe you disagree with, or what do you think is it? Is it, is it, I mean, obviously I don't think you are so big headed to say that your way is perfect and everyone should do your way.
22
00:02:45.140 --> 00:02:51.780
Although, you know, I agree with most of the things that you say, so maybe it is, but what, what is the, is it monoculture?
23
00:02:51.780 --> 00:02:52.030
Yeah.
24
00:02:52.030 --> 00:02:52.270
Yeah.
25
00:02:52.270 --> 00:02:53.760
Is that the...
26
00:02:53.760 --> 00:03:01.060
You know, i I really like the exploration versus exploitation and dichotomy that some people talk about.
27
00:03:01.060 --> 00:03:01.260
Yeah. Yeah.
28
00:03:01.260 --> 00:03:11.280
you know It's like, should we continue evaluating options or should we move forward with the option, the best option of the set of options that we've considered so far? right
29
00:03:11.280 --> 00:03:12.100
Right.
30
00:03:12.100 --> 00:03:24.320
And you know I think one of the advantages of experience is that you have made a lot of mistakes and you have evaluated a lot of options and you have determined which ones tend to pan out and which ones don't.
31
00:03:24.320 --> 00:03:42.680
And therefore, ah you you wind up with ah some thing. There's sort of like the old bit of like, if an old engineer tells you that something can't be done, you can look at them with a little bit of skepticism, right?
32
00:03:42.680 --> 00:03:49.640
They probably know some things, but you can look at them with a little bit of skepticism and kind of ask the question like, are you sure?
33
00:03:49.640 --> 00:03:50.160
Yep.
34
00:03:50.160 --> 00:03:58.560
But if an old engineer tells you something *can* be done, because they've done it before. Well, that's a very different claim, right?
35
00:03:58.560 --> 00:04:06.180
Yeah. that's That's a really interesting difference, actually. Yeah, I see that..
36
00:04:06.180 --> 00:04:06.920
Yeah.
37
00:04:06.920 --> 00:04:07.040
yeah
38
00:04:07.040 --> 00:04:07.160
Yeah.
39
00:04:07.160 --> 00:04:21.590
But yeah, so you're you're sort of sort of drawing from experience and saying that these things have worked for me. I have explored the space because I've been doing this for 30 years and I have a pretty good idea. Doesn't mean to say that it's a perfect idea or there aren't better ideas, but these ones have been shown to work.
40
00:04:21.590 --> 00:04:21.620
Right.
41
00:04:21.620 --> 00:04:32.940
And now I am choosing in the sort of 80-20 theory of ah ah explore 20% of the time and 80% of time take advantage of the things that have proven to be well.
42
00:04:32.940 --> 00:04:35.420
You're in that 80% section at the moment.
43
00:04:35.420 --> 00:04:36.160
Yeah.
44
00:04:36.160 --> 00:04:39.890
Which, yeah, the restaurant ordering dilemma is how I think of this, right?
45
00:04:39.890 --> 00:04:39.920
Yeah.
46
00:04:39.920 --> 00:04:45.140
I go to my favorite restaurant and I look down the menu and there's that thing I like.
47
00:04:45.140 --> 00:04:51.050
And I'm like, I really like this thing on the menu and I will enjoy it every time I come here.
48
00:04:51.050 --> 00:04:51.350
huh Yeah.
49
00:04:51.350 --> 00:04:51.500
Yep.
50
00:04:51.500 --> 00:04:58.660
But there are some other things on this menu too. Should I take the risk that it's not as good as the thing I know I like?
51
00:04:58.660 --> 00:05:16.820
Yeah, yeah, yeah. And think another interesting dimension to this problem is that, um you know, I'm being paid to do this and I'm being paid to deliver results. And what I'm not being paid to do necessarily is learn a bunch of cool stuff, right?
52
00:05:16.820 --> 00:05:24.200
Like, you know, it's fun to learn a bunch of cool stuff and it is sometimes very productive and useful to your employers to learn a bunch of cool stuff. And then yeah, right.
53
00:05:24.200 --> 00:05:30.350
Indirectly through you and through your proselytization and sharing of experiences and setting the... Yeah, right.
54
00:05:30.350 --> 00:05:30.740
Yeah, yeah.
55
00:05:30.740 --> 00:05:40.200
But ultimately, it's an investment in your yourself, independent of your employer. And sometimes that can be purely for yourself. Like, you know, we've all we've all seen this.
56
00:05:40.200 --> 00:05:40.260
Right.
57
00:05:40.260 --> 00:05:52.300
I think we've talked about it before. It's like, hey, some cool new programming language has come out and some programmer goes off in a corner and says, I'm just going to write this new little tool that we needed. And we're going to write it in Haskell because I've just read a book on Haskell.
58
00:05:52.300 --> 00:05:52.500
Right.
59
00:05:52.500 --> 00:05:56.760
And you're like, that's, I don't know that this is in the best interest of the business.
60
00:05:56.760 --> 00:05:57.840
Right. Mm-hmm.
61
00:05:57.840 --> 00:06:13.840
Uh, there's a, I guess, you know, you roll your D20 and if it's a 20, somehow now Haskell is the best thing in the world and everyone moves to Haskell and the whole company levels up, right? That's a possibility. But very often what happens is that that piece of code gets orphaned and becomes the haunted graveyard of "we don't use that tool anymore."
62
00:06:13.840 --> 00:06:14.040
Yeah.
63
00:06:14.040 --> 00:06:15.170
Right.
64
00:06:15.170 --> 00:06:19.060
But you know, your friend has been and learned Haskell and has gone off to do something else or whatever.
65
00:06:19.060 --> 00:06:19.340
right Right.
66
00:06:19.340 --> 00:06:21.940
Right. They got that job in Haskell that they wanted to get, right?
67
00:06:21.940 --> 00:06:31.670
But, you know, you have to have an understanding employer to let you do those kinds of things or, you know, or be in-between jobs.
68
00:06:31.670 --> 00:06:32.420
that
69
00:06:32.420 --> 00:06:34.800
And then you get the choice of doing it any way you like.
70
00:06:34.800 --> 00:06:36.700
I was just going to say, this is like your every day right now, isn't it?
71
00:06:36.700 --> 00:06:43.860
At the moment, I get to choose pretty much what I want to do. Yeah. And yeah, that that's a whole different story. That's perhaps one for later.
72
00:06:43.860 --> 00:06:43.880
Yeah.
73
00:06:43.880 --> 00:06:48.960
But yeah, so where were we? We were talking, you were you were saying, yeah, I've distracted myself.
74
00:06:48.960 --> 00:07:01.180
Oh, yeah. No, I mean, I just sort of like, I really like the model of sort of exploration versus exploitation and being, ah you know, or exploration versus execution.
75
00:07:01.180 --> 00:07:03.680
I don't know what the better way is to describe that, but
76
00:07:03.680 --> 00:07:03.780
Yeah.
77
00:07:03.780 --> 00:07:20.900
But it's either like, you know, are we are we evaluating different ways to do things or are we doing things, right? And I think being responsible with that gives you, um you know, sort of like the freedom that comes with authority, right?
78
00:07:20.900 --> 00:07:31.840
Like, I'm going to be responsible for making this decision and doing it in the best interest of the company and ah because of that, I'm going to expect people to trust me to make the right decisions.
79
00:07:31.840 --> 00:07:49.040
And then that means when I decide like, yep, we're doing this in Java and with tests and we're going to do continuous deployment and we're going to do all these things. Like, it so long as the result of that is that I deliver working software that benefits the people who are paying me, then no one's gonna ask any questions. They're gonna like, great, thanks for doing that.
80
00:07:49.040 --> 00:08:04.360
And if it's like, you know, why is this taking so long? Or why do you continue to have problems? And my answer is, well, our continuous deployment system has some bugs and I haven't quite worked out all the ways in which this integrates with Google Cloud yet. And like, they're gonna be like, okay, but why?
81
00:08:04.360 --> 00:08:05.740
Why are we doing this, right?
82
00:08:05.740 --> 00:08:10.450
Why didn't we just do this in Python like everything else is or whatever the equivalent is?
83
00:08:10.450 --> 00:08:10.730
Yes, exactly. Right.
84
00:08:10.730 --> 00:08:11.000
Right. Yeah.
85
00:08:11.000 --> 00:08:12.000
Or whatever it is, right?
86
00:08:12.000 --> 00:08:27.040
So this is absolutely the kind of thing where, yeah, you have chosen to sort of stake and spend some of your "reputation points", ah your goodwill budget with the rest of the organization say, "I believe this strongly is the right way to do something."
87
00:08:27.040 --> 00:08:28.960
And you know you've got your evidence to back it up.
88
00:08:28.960 --> 00:08:39.720
Yeah, but I'm doing that I'm doing that anyway, though. it Just by embarking on this ah this ah responsibility to build this thing, I am staking my reputation. And the only question is, what outcome am I going to get, right?
89
00:08:39.720 --> 00:08:48.220
So like you know if I say equally, if I say... There's not really a nobody got fired for buying IBM effect.
90
00:08:48.220 --> 00:08:48.800
Right.
91
00:08:48.800 --> 00:09:13.450
Really? Right. It's like, ultimately, ah in some ways it's worse. It's sort of like, okay, well, if you're going to do, if you're not going to have any strong opinions about how to do things and you're just going to do things the way that, you know, the more senior people around you maybe say to do, or sort of like the, you know, the, the, the sort of default path of the, of the company, like, you know, people going to also still...
92
00:09:13.450 --> 00:09:19.180
...correctly expect you to get things done. And if you aren't effective at getting things done that way, it doesn't really matter.
93
00:09:19.180 --> 00:09:19.300
true
94
00:09:19.300 --> 00:09:34.900
Right? So like the thing that really matters is like actual running, working software and production and how you get there can be a matter of opinion and can be, you know, a matter of even experience, but the, the proof is in the pudding.
95
00:09:34.900 --> 00:09:41.540
So like just doing it this the standard way does not absolve you of the responsibility of doing it. Right?
96
00:09:41.540 --> 00:10:01.540
Right, but it does meaningfully change the way that it's perceived, I think. Like if you were just to do it the "obvious" way that everything else is being done, then as you say, it's like the IBM, no one that got fired for it, right? You could, there's a defense in not delivering that it was just like, okay, this was just a difficult thing to do.
97
00:10:01.540 --> 00:10:29.020
And there's not like an approach that I pulled out of left field that might be scapegoated, perhaps, as to why it wasn't, the software wasn't achieved, right? I could imagine, for example, you know, like the Haskell thing here is like, you know, if you succeed and you did it in Haskell, maybe you get the free pass and then everything's better. But if you if you screw up because it wasn't possible to achieve it, people will latch onto the fact that you wrote it all in Haskell rather than you did it the same way that everyone everyone else is doing. Is that...
98
00:10:29.020 --> 00:10:29.800
Yeah, I mean, I can.
99
00:10:29.800 --> 00:10:40.660
Am I too pessimistic? I suppose I am seeing here, and I'll be honest with you, some parallels with decisions that I made a few years back in in the way that I chose to develop some software.
100
00:10:40.660 --> 00:10:54.570
And they that did come back to sort of sort of haunt me in terms of like I staked quite a lot on something. And that was ultimately not the right way to go forward. And I agree with that. But it did I did have to bear those consequences, as you do when you take responsibility.
101
00:10:54.570 --> 00:10:54.690
Right.
102
00:10:54.690 --> 00:10:56.370
That's that's just what happens, right?
103
00:10:56.370 --> 00:10:56.440
Yeah.
104
00:10:56.440 --> 00:10:59.020
So I suppose I'm a little bit like, "ooh".
105
00:10:59.020 --> 00:11:16.820
Yeah. I mean, if if things don't work out for the best, there's you're definitely going to be able to find a reason why. Right. and that And that reason why can easily be because you decided to do things your own way and not the standard way. I'm not saying that's not possible.
106
00:11:16.820 --> 00:11:17.740
Of course, yeah.
107
00:11:17.740 --> 00:11:26.040
But the i feel you know i've I've used the metaphor many times of running across a lake. And, you know, software development is like...
108
00:11:26.040 --> 00:11:30.740
but Like the Jesus lizard, yeah? Have you seen this that lizard?
109
00:11:30.740 --> 00:11:33.820
i I don't know that I've seen that particular lizard, but I know that there are lizards that run across...
110
00:11:33.820 --> 00:11:35.880
It's called the Jesus lizard. (Editor's note: it's really called the "Common basilisk" https://en.wikipedia.org/wiki/Common_basilisk)
111
00:11:35.880 --> 00:11:35.980
Really?
112
00:11:35.980 --> 00:11:46.420
It's amazing. It runs across water. And I just... I love that someone was so blasphemously naming things that they were like, this is... this is I mean, it's like, as soon as I said it, you knew what it was.
113
00:11:46.420 --> 00:11:49.260
Yeah, right. That paints a picture, I'll tell you. um
114
00:11:49.260 --> 00:11:54.960
But anyway, yeah, so you're a software engineer, you're running fast and you're not falling into the lake because you're just keeping going.
115
00:11:54.960 --> 00:12:13.650
yeah Right. Right. And, and there's, I think, I think there's a lot of value in kind of, um, and this was a ah lesson that I, I learned, uh, relatively like halfway through my career when I was, we have an episode about, you know, bad business models and starting a ah company.
116
00:12:13.650 --> 00:12:14.020
Yeah.
117
00:12:14.020 --> 00:12:26.580
And you, you may, I may be told the story in that podcast, but for, forgive me, listener, if you've heard this before, But I remember having a conversation. We had formed a small company within the consulting organization I was working at.
118
00:12:26.580 --> 00:12:44.360
And i um we had all these plans for taking this open source project that we have and closing it and then selling it. And I had come to like the first or maybe the second board meeting with a long list of things to do if it doesn't all work out. And it's like, OK, well, we can reopen the software and then we can do this and we can you know release this thing. We do this.
119
00:12:44.360 --> 00:12:56.950
And the a person that that was the CEO of the consulting firm and was on the board of this little internal company was like, Ben, stop. Whoa, whoa, whoa. If you figure out all the ways in which this is going to fail, you're never going to have time to succeed, right?
120
00:12:56.950 --> 00:12:57.680
Ha ha ha ha ha!
121
00:12:57.680 --> 00:13:01.680
Like you you have to focus on how you're going to make this work, right?
122
00:13:01.680 --> 00:13:13.440
And so the kind of analogy that I have in software development is like – Like planning for like as engineers, we think about failure all the time. and We think about failure modes all the time.
123
00:13:13.440 --> 00:13:33.160
But I don't think that that type of mentality works as well when you sort of go up a level and you're like, OK, how am I going to organize this effort? Right. um You have to think about like, how are we going to succeed? And so, like, you know, the analogy of running across a lake is the way you run across a lake is you go real fast.
124
00:13:33.160 --> 00:13:33.560
That's how you do it.
125
00:13:33.560 --> 00:13:34.820
And you don't stop for anyone.
126
00:13:34.820 --> 00:13:46.260
You don't stop for doing it. So you don't want the life preserver and the signal flare and the tool belt. Like all you really need is shoes - maybe - right?
127
00:13:46.260 --> 00:13:48.900
Like just go real fast.
128
00:13:48.900 --> 00:13:49.100
Right.
129
00:13:49.100 --> 00:13:57.660
And so I grant you that in those situations where you fall in the lake and things have not gone well, if you should, you're right.
130
00:13:57.660 --> 00:14:05.480
Everyone says, well, you should have had ah life preserver. You should have been where, why the hell did you not have your tool belt with you?
131
00:14:05.480 --> 00:14:06.530
Exactly, exactly.
132
00:14:06.530 --> 00:14:06.900
And your, yeah, yeah, yeah, yeah.
133
00:14:06.900 --> 00:14:16.740
It's like this didn't work because you used Haskell. It's like, no, this didn't work because we didn't go fast enough because apparently I didn't understand this as well as I thought I did. Right.
134
00:14:16.740 --> 00:14:16.740
Right.
135
00:14:16.740 --> 00:14:24.020
So I don't know. And that I grant that that is a very that in itself is kind of like an opinionated view on how to do these things.
136
00:14:24.020 --> 00:14:24.480
It, it certainly is.
137
00:14:24.480 --> 00:14:53.960
Right. Like and and there are lots of situations in which even I would not apply those principles. But those are sort of my default principles. Right. So, you know, i I don't know. I, I can, I can see a world in which, uh, I don't want to call playing it safe. Cause I really don't think that it's playing it safe, but sort of like playing it safe and just doing what everyone else is doing around you is not a wrong strategy.
138
00:14:53.960 --> 00:15:09.820
Um, but I think, you know, at the end of the day, so long as you build things that, that people want and you build them at a reasonable pace and you like, think a lot of this also is just not, uh, putting yourself in a situation where you're just slowing yourself down.
139
00:15:09.820 --> 00:15:22.640
Right? Like creating a lot of mess and cruft and cruft actually literally cruft that, that is borrowing from your future productivity in the name of, of doing something today.
140
00:15:22.640 --> 00:15:22.760
Literally.
141
00:15:22.760 --> 00:15:28.500
I think a lot of it is also, also that and knowing when you need to fight for that. So I don't know, i'm kind of off on a tangent here, but.
142
00:15:28.500 --> 00:15:42.100
No, that's good. No, I mean, certainly, Cruft is top of mind for me as I've been spending the last few weeks you know doing Compiler Explorer things and spending a lot of time regretting decisions that were made 10 years ago that were made...
143
00:15:42.100 --> 00:15:52.240
...And some of those decisions, are it was it seemed like the best idea at the time, and they're fine. It's just you know they need to be updated. That's cool. but many, many of them are like, I didn't really, it wasn't thought through.
144
00:15:52.240 --> 00:16:03.860
And, you know, you regret them. But then some of the other things are like, well, if this had never scaled to four terabytes of compilers, then we wouldn't have this.
145
00:16:03.860 --> 00:16:10.740
This is a new problem, right? No one would have thought this, you know, who yeah who I mean, when I speak to people about some of the issues we face,
146
00:16:10.740 --> 00:16:10.740
Right. right
147
00:16:10.740 --> 00:16:17.720
Oftentimes they're like, oh gosh, I'd never even considered that would be a problem. And you're like, yeah, no, neither did we.
148
00:16:17.720 --> 00:16:27.860
And now it's a big focal point for us. It's like, how do you deploy this? Oh, well, you just copy the bits around. Well, there's four terabytes of it and nothing in Amazon works like that. Oh, yeah.
149
00:16:27.860 --> 00:16:28.220
Yeah.
150
00:16:28.220 --> 00:16:28.710
Yeah. Yeah. yeah
151
00:16:28.710 --> 00:16:28.870
Yeah.
152
00:16:28.870 --> 00:16:40.360
I don't know that I would argue that those decisions that you made 10 years ago were wrong. I think, I think the cruft comes in when you are, you don't feel ah safe changing them.
153
00:16:40.360 --> 00:16:41.020
Right. Like,
154
00:16:41.020 --> 00:16:45.390
Yeah. And that that is also true. You know, a lot of this stuff is specifically for Compiler Explorer.
155
00:16:45.390 --> 00:16:45.480
Yeah.
156
00:16:45.480 --> 00:16:47.180
you know, we're a shoestring budget thing.
157
00:16:47.180 --> 00:16:47.400
yeah
158
00:16:47.400 --> 00:16:58.110
We don't have a copy. We don't have a second deploy that I can play around with, with the sort of big infrastructural changes, especially stuff like, you know, let's just copy all the compilers somewhere else and then poke around with them.
159
00:16:58.110 --> 00:16:58.660
Right. Right.
160
00:16:58.660 --> 00:17:14.760
I don't, even if I did have, I mean, we have some staging and stuff, but if, even if I did have like a full copy, I could run somewhere else... My confidence in being able to say this categorically still works, now I've you know moved everything around. I've changed the file systems. I've done whatever I choose to do.
161
00:17:14.760 --> 00:17:18.620
My confidence is not very high. You know I can curl a few things.
162
00:17:18.620 --> 00:17:18.900
right
163
00:17:18.900 --> 00:17:31.720
I can look at... Yeah, it's it's not straightforward. You know to and some extent, my own personal usage pattern of the site does not comprehensively enough...
164
00:17:31.720 --> 00:17:43.680
cover all the things it *can* do. And because we don't have the tests for most of the user interface or even most many of the compiler type things that we do, I'm not confident in making changes.
165
00:17:43.680 --> 00:17:46.820
We just kind of have to wing it and hope, which is not good, right?
166
00:17:46.820 --> 00:17:46.980
Yeah.
167
00:17:46.980 --> 00:17:51.260
you know I'm talking to Ben Rady here.
168
00:17:51.260 --> 00:17:52.960
Yeah.
169
00:17:52.960 --> 00:18:06.820
And it doesn't feel good. And so some of the things that I'm doing right now, you know like a lot the this with with this is going off on a tangent to your tangent now, but like the things that I'm trying to do now are set myself up for further success by...
170
00:18:06.820 --> 00:18:06.820
Yeah.
171
00:18:06.820 --> 00:18:21.680
Going back and adding types to a lot of the things that were untyped and have horrible casts in the TypeScript. You know, we moved from JavaScript to TypeScript and there was a ton of stuff along the way that just has, you know, `as any` or `as unknown` because we didn't know what type things were.
172
00:18:21.680 --> 00:18:29.710
And now I'm actually spending the time to go back and put the types in and uncovering all sorts of weird cases where it's like, hey, sometimes we return an object. Sometimes we return false.
173
00:18:29.710 --> 00:18:30.220
Right.
174
00:18:30.220 --> 00:18:33.320
That doesn't seem like anyone would choose to do that, but that's what happened.
175
00:18:33.320 --> 00:18:33.440
Yeah. yeah
176
00:18:33.440 --> 00:18:55.740
And then you go and, you know, you pull on the threads. And so I feel like that helps to make it easier to make changes. And while I'm doing it, I'm adding tests and even adding test frameworks. I made a big change recently to move a whole bunch of stuff out of the front end into a place where I can run the test for it, independent of a browser being involved, because most of the code is like, doesn't care about the DOM.
177
00:18:55.740 --> 00:19:11.960
So, you know, you want to test whether this string is a valid descriptor or an identifier, well, then that can be tested outside... stuff like that. All of these things, like well ah hopefully, en masse will make it faster for us to go forward in the future.
178
00:19:11.960 --> 00:19:13.780
Oh, yeah.
179
00:19:13.780 --> 00:19:16.210
Yeah, so that is a very tangent to your tangent.
180
00:19:16.210 --> 00:19:16.340
Yeah, yeah.
181
00:19:16.340 --> 00:19:35.060
But yeah, that's top of mind for me is how do I make myself more productive? How do I get myself into the world where the the the environment gives me the protections I want? And I think to circle all the way back to the beginning, the thing that you said at the beginning of this was like you're in a greenfield environment where you set it up the way that you think it should be done.
182
00:19:35.060 --> 00:19:42.830
And I think you and I both like that. You know, I have a C++ template project, which is like, this is all my rules or my Lint rules are set up or my pre-commit hooks are done this way.
183
00:19:42.830 --> 00:19:42.900
Mm-hmm.
184
00:19:42.900 --> 00:19:52.920
You can't, if you make a change to my project and you get it past CI and you get it past the PR, then it should be a good change, right? There should be no way that you can get it past.
185
00:19:52.920 --> 00:19:52.980
Yeah.
186
00:19:52.980 --> 00:19:59.800
And if it's not, that's on on me. That's a bug in the infrastructure that let you put a bad code into my project.
187
00:19:59.800 --> 00:20:00.640
Yeah.
188
00:20:00.640 --> 00:20:03.150
Compile Explorer is not there yet, but it will be, I hope,
189
00:20:03.150 --> 00:20:04.080
Right. Yeah. Yeah.
190
00:20:04.080 --> 00:20:08.580
And it's sort of getting there. Yeah. Yeah.
191
00:20:08.580 --> 00:20:31.980
Yeah, no... cars have brakes you can drive faster. Those kinds of things that reduce fear, reduce risk, and let you you know take a run across the lake because you know you're a good swimmer will absolutely speed you up, right? And I feel like the unfortunate truth is that a lot of those things kind of have to be built in from the beginning.
192
00:20:31.980 --> 00:20:35.740
I actually remembered the thing that I was thinking about earlier with the topic that I wanted to talk about
193
00:20:35.740 --> 00:20:39.380
Oh, good. I was able to talk long enough for your brain to recover.
194
00:20:39.380 --> 00:20:43.640
Yes. All that actually, no, you're, but you actually reminded me of it with all the automation stuff.
195
00:20:43.640 --> 00:20:43.640
Oh, good.
196
00:20:43.640 --> 00:21:05.040
So just this week working with a new intern on my team, I figured out how we figured out how to completely automate in user mode or in user space Docker building and running.
197
00:21:05.040 --> 00:21:26.970
So for the longest time, one of the big, bugaboos for me has been, if I want to build a Docker container, I can't use my, you know, `make download` the the tools that I want and stick them into the tools folder approach because you have to have some `sudo` installed or some, yeah, all of these terrible, terrible, terrible things.
198
00:21:26.970 --> 00:21:28.360
setuid root thing, yeah..
199
00:21:28.360 --> 00:21:40.760
I using a combination of the standard Docker client, which is cool and and actually pretty easy to install that way, a library called Colima.
200
00:21:40.760 --> 00:21:55.580
And another thing that it depends on called Lima, which also can be installed this way. I was able to build a Docker container and run it and have all of the tools entirely installed just in the home directory of the user with no special permissions.
201
00:21:55.580 --> 00:22:15.520
So some, yeah, just magical, I could `git clone` your repo and type `make`, and as long as I'm on ah ah but an a supported operating system, should we say, which should be, you know, ah it will get the tools that it needs to do this and build this stuff without some deus ex machina kind of like process that you're like, ah, first you must `sudo apt install` all this stuff, the stuff that you and I dislike.
202
00:22:15.520 --> 00:22:16.120
A supported operating system, yes, exactly.
203
00:22:16.120 --> 00:22:20.500
Yes, you have to download this DMG file and double click on it and do all these other terrible things.
204
00:22:20.500 --> 00:22:22.040
Oh, that's awesome.
205
00:22:22.040 --> 00:22:36.340
Yes, yes. and and And that kind of automation, I think, to an outside person would seem like, why are you spending all of this time to do this? Because I think it took us about a day to do it.
206
00:22:36.340 --> 00:22:49.740
Why are you spending all of this time to do it? And it is so that, and this is especially true of this particular type of project that we're working on because it sort of gets worked on in fits and starts, right? Like you work on it for a while and then you come back to it and then you just think.
207
00:22:49.740 --> 00:23:08.020
So it's like, it is so that six months from now when something is broken and I need to fix it right now, the way that I set up that development environment is I `git clone`, `make`, done, figure out what's going on, push it and not like `git clone`...oh...
208
00:23:08.020 --> 00:23:09.180
Right.
209
00:23:09.180 --> 00:23:22.700
None of this works and, and it will take me six hours to make it work because these versions are no longer up to date and this package doesn't exist anymore. And I can't find the download link for that. And these docs are wrong.
210
00:23:22.700 --> 00:23:36.120
And that is, that is like a classic example of like the kind of thing where I feel like you get very opinionated about it. You have strong...
211
00:23:36.120 --> 00:23:51.500
Well-reasoned arguments for for why you do it. And so long as you can successfully achieve the outcomes that you think you're supposed to be able to achieve while using these approaches, no one's going to care because it just works.
212
00:23:51.500 --> 00:24:02.000
If it doesn't work, then all the blame comes out. And then all of the second guessing and the Monday morning quarterbacking comes out and says like, okay, why did you do it like this?
213
00:24:02.000 --> 00:24:14.500
Yeah. Yeah. But, but also to your point, you know, like the whole, you know, we, you and I have, have talked about this before. We, we both love this idea of like a sort of more hermetic build or whatever you need environment.
214
00:24:14.500 --> 00:24:14.600
Yeah.
215
00:24:14.600 --> 00:24:23.620
And I think that, you know, there are stuff more modern things along have come along since then, you know, dev containers and some stuff that uses Docker trickery to actually like make that. I don't, you know,
216
00:24:23.620 --> 00:24:24.100
Mm-hmm.
217
00:24:24.100 --> 00:24:36.620
I have opinions about that. But the reason that *I* went for this from my previous point of view was that some people at Google had set up their development environment like this, and I saw that it was possible.
218
00:24:36.620 --> 00:24:38.800
So that does dovetail back into your original thing.
219
00:24:38.800 --> 00:24:38.820
yeah
220
00:24:38.820 --> 00:24:45.740
This is like a senior developer telling you, oh, yeah, you can do this. It is possible to make it so that you can just have a directory...
221
00:24:45.740 --> 00:25:01.580
There's nothing magic about compilers. They aren't system software. they they They like to masquerade and pretend they are. But if you need GCC 1.2.3 to run your code, you can download and install it, or you can build it so that it can be downloaded and installed, or you can do all this stuff. You can spend a bunch of time.
222
00:25:01.580 --> 00:25:23.010
You now learn how to do that, and now you can take that on to the next thing. And then, you know... The frustration specifically in this case was like ah the very first company you and I both worked at together, where we were stuck for a very long time on the version of GCC that came with the operating system that our production machines had, which was also you know an ancient version of Red Hat.
223
00:25:23.010 --> 00:25:23.080
Yeah.
224
00:25:23.080 --> 00:25:27.920
You're like, why are we using a 10-year-old GCC 10 years ago?
225
00:25:27.920 --> 00:25:28.480
Right. Yeah.
226
00:25:28.480 --> 00:25:34.680
oh because of this. Oh, it's hard do. No, no. We can make it. We can solve this problem.
227
00:25:34.680 --> 00:25:34.880
Yeah.
228
00:25:34.880 --> 00:25:45.280
We can build our own compilers. We can make them work. And then we can make it so that that is an easy thing to do. And it's part of, was it "Fig"? I think was the name of the funny little thing that we started installing stuff in.
229
00:25:45.280 --> 00:25:45.410
Oh, yeah.
230
00:25:45.410 --> 00:25:45.660
And i you know.
231
00:25:45.660 --> 00:25:46.220
I think that sounds about right.
232
00:25:46.220 --> 00:25:50.860
There was a package management system, whatever. Anyway, and it was a lot of effort and lot of work, but we got it working.
233
00:25:50.860 --> 00:25:50.860
Yes.
234
00:25:50.860 --> 00:26:01.980
And it was so beneficial because then we could upgrade our compiler, upgrade everything. And it just worked. And it was. Anyway, we didn't do it because of that. That just is side effect.
235
00:26:01.980 --> 00:26:13.220
Yeah. You know, the funny thing about these practices is I feel like they spread like viruses, but that is they only spread through contact. Right. It's like it's it's like because there's a lot of things.
236
00:26:13.220 --> 00:26:13.220
Ha ha ha.
237
00:26:13.220 --> 00:26:30.880
There's a lot of things that I've seen like this where it's like I have explained these things till I'm blue in the face. And I made the arguments that I'm making on this podcast right now about why they're beneficial. Right. do And I get a lot of people with like blank stares and it's like, okay, sure, fine, whatever, and nodding heads and whatever. And they just walk away and they ignore it.
238
00:26:30.880 --> 00:26:47.000
But the second that I work with somebody for like, you know, it's not a second, but when I work with somebody for like a reasonable period of time and they actually see how this stuff works, it would becomes impossible for me to convince them *not* to do it.
239
00:26:47.000 --> 00:26:47.920
Right, right.
240
00:26:47.920 --> 00:26:57.200
Right? Like they see the value of it firsthand and they sort of experience it like viscerally. And it just like, now they can't imagine doing it any other way. Right?
241
00:26:57.200 --> 00:26:58.440
Why would you do it any other way?
242
00:26:58.440 --> 00:26:58.800
Right.
243
00:26:58.800 --> 00:27:00.700
Yeah, just it's like, yeah, you have to get over the hump there.
244
00:27:00.700 --> 00:27:00.860
Right.
245
00:27:00.860 --> 00:27:06.600
There's some kind of... ah function where the, you know, you got to get over the hump or quantum tunnel through the hump.
246
00:27:06.600 --> 00:27:07.150
Yeah. Right. I was going to say like,
247
00:27:07.150 --> 00:27:16.590
I guess, you know, you, you either, you go up the, up the, ah you know, you spend the 30 years climbing the hill, you know, and then falling down into a, into a better place, the other side of the hill.
248
00:27:16.590 --> 00:27:16.720
yeah
249
00:27:16.720 --> 00:27:29.860
And you go Hey, this is better than than it was the other side of the hill or through contact with someone, you allow them to quantum tunnel through experience hill and come to the better place without actually having to make all the mistakes along the way.
250
00:27:29.860 --> 00:27:30.000
Yeah.
251
00:27:30.000 --> 00:27:33.640
Right, right. Yes. Wow, that's ah I love that.
252
00:27:33.640 --> 00:27:33.740
There's an image.
253
00:27:33.740 --> 00:27:38.480
That is a great analogy. I love that, quantum tunneling through the hill.
254
00:27:38.480 --> 00:27:38.480
There's an image.
255
00:27:38.480 --> 00:27:51.090
Experience. Yeah. ah that's what That's what mentorship is, is letting other people quantum tunnel to a better place without having to go through as much of the pain that you did.
256
00:27:51.090 --> 00:27:51.300
Yeah.
257
00:27:51.300 --> 00:27:55.160
Right. Let me show you the secret passage through the mountain. Yeah.
258
00:27:55.160 --> 00:27:58.540
Yeah.
259
00:27:58.540 --> 00:27:59.680
I don't know.
260
00:27:59.680 --> 00:28:04.460
Well, that was, that was a surprising amount of talking for no idea at all.
261
00:28:04.460 --> 00:28:11.140
No idea. i mean, I guess I did eventually remember the thing that I was talking about before, but, and maybe that would have led us to this topic anyway, but yeah.
262
00:28:11.140 --> 00:28:12.940
um suppose I suppose so.
263
00:28:12.940 --> 00:28:13.900
Yeah.
264
00:28:13.900 --> 00:28:26.230
Yeah, but no, I think your your your starting point of like having ah a good project and a nice setup and whatever is certainly top of mind for me now as I'm sort of retrofitting it into Compiler Explorer at some level.
265
00:28:26.230 --> 00:28:26.280
Yeah.
266
00:28:26.280 --> 00:28:30.160
I mean, we've always had some level of this, but it's improving it and shoring it up.
267
00:28:30.160 --> 00:28:31.300
Yeah.
268
00:28:31.300 --> 00:28:54.990
And then, you know, you and I have been discussing, ah this seems like a complete left tack and late on in the podcast, but it's worth mentioning, I think, is that like um the things that make it easy to dip in and dip out of projects like this, or be it because it's easy to set up, be it because there's clear documentation, there's no surprises, be it because the lint rules make it obvious when you're doing something the way that you're not supposed to be doing it or whatever.
269
00:28:54.990 --> 00:28:55.140
Mm-hmm.
270
00:28:55.140 --> 00:29:02.670
So you kind of put people on the on the good path. Yeah. be it like decent documentation that says this is how we do stuff here.
271
00:29:02.670 --> 00:29:02.920
Yeah.
272
00:29:02.920 --> 00:29:11.340
All of this is useful for an intern coming onto to a project coming off. And that intern could be an LLM in today's climate.
273
00:29:11.340 --> 00:29:11.520
Right.
274
00:29:11.520 --> 00:29:15.050
And that seems to work fairly well too.
275
00:29:15.050 --> 00:29:16.320
Yeah, yeah.
276
00:29:16.320 --> 00:29:37.300
And so I'm sort of mindful that that is out there and, and it's certainly, um, a decent subset, like a good 80% of the things that are useful to make life easier for this amnesiac junior programmer to come in and try and make a small change so on ADD meds to come in and, uh, make a change.
277
00:29:37.300 --> 00:29:38.120
Yeah.
278
00:29:38.120 --> 00:29:51.300
to ah my project, but that also helps the actual intern that's going to come on and hopefully will mature into ah full featured junior developer and then a senior developer and go on to do great things, right?
279
00:29:51.300 --> 00:29:51.330
Yeah.
280
00:29:51.330 --> 00:29:51.400
Yeah. Yeah.
281
00:29:51.400 --> 00:29:53.070
But that's it's an on-ramp for everybody.
282
00:29:53.070 --> 00:29:53.900
yeah
283
00:29:53.900 --> 00:30:04.900
And so that's sort of like top of mind. And yeah, I don't think we have time to talk about the full ins and outs of that. But it's it was an interesting thought that like that this this nice setup is also conducive to that.
284
00:30:04.900 --> 00:30:31.160
Oh, it totally is. And then you know there's there's this some like industrial design and like tool design thing of like trying to design for the edges, right? like And and like a lot of um things that people started to discover when they started building um both like devices and also like buildings and sidewalks and things like that for disabled people is that it actually winds up helping everyone a lot more than they wouldn't have expected
285
00:30:31.160 --> 00:30:32.300
able bodied folk. Yeah.
286
00:30:32.300 --> 00:30:44.860
Because when you kind of design for those extremes of like, well, what happens when somebody is like 75 pounds and can't lift this? Or what happens when somebody is, you know, seven feet tall? Or what happens when somebody is in a wheelchair? What happens when somebody can't see?
287
00:30:44.860 --> 00:30:49.220
You wind up creating these things that are just easier for everyone, right?
288
00:30:49.220 --> 00:30:49.460
Right.
289
00:30:49.460 --> 00:31:01.740
And I think that there's a lot of that when it comes to both designing for, ah you know, junior developers and LLMs and me six months from now after I've slept a bunch of times and don't remember how this all works.
290
00:31:01.740 --> 00:31:10.530
Like all of those people kind of have the same problem. Right. Which is they don't understand what's going on and they need some guardrails to make sure that they don't make any stupid mistakes.
291
00:31:10.530 --> 00:31:10.920
Yeah.
292
00:31:10.920 --> 00:31:38.520
So like designing for this stuff has tons of value. And I think just like with some of the, you know, ADA accessible things, it's like you don't really discover that and maybe this is why I'm tying it back to the whole like it spreads like a virus and I can't seem to convince people maybe this is the problem it's like until you walked on the sidewalk that is like gently sloping up to the thing instead of like the stairs where you're huffing and puffing ah you're like yeah this is better like I didn't think about it but it really is better right
293
00:31:38.520 --> 00:31:48.820
Yeah, that is it. Yeah. No, I think so. Well, that seems like a decent place to park the conversation, because otherwise I think we're going to start off with the whole other thing.
294
00:31:48.820 --> 00:31:50.700
We're going to do a whole other second podcast on top of this podcast.
295
00:31:50.700 --> 00:31:52.700
Yeah, which we don't have time for today.
296
00:31:52.700 --> 00:31:53.620
Yes. Yeah, now that's true.
297
00:31:53.620 --> 00:31:55.730
But yeah, I mean...
298
00:31:55.730 --> 00:31:56.460
Yeah.
299
00:31:56.460 --> 00:32:10.630
I think that's a great analogy. Yeah. The, whole idea of helping one set of people helps everybody ah in the, in the context, both in the real world in, and you know, like screen readers and things like that, that's helps, you know, and and yeah, yeah but better documentation.
300
00:32:10.630 --> 00:32:10.760
Yeah.
301
00:32:10.760 --> 00:32:16.580
You're like, well why do you need documentation? It's like, well, helps new people, but it also helps you, you know, down the line.
302
00:32:16.580 --> 00:32:17.620
Yeah. Yes, it does.
303
00:32:17.620 --> 00:32:17.980
Yeah. Yeah.
304
00:32:17.980 --> 00:32:18.240
Yes, it does.
305
00:32:18.240 --> 00:32:22.660
Well, friend, I think we should probably leave it there for this week.
306
00:32:22.660 --> 00:32:23.440
Wonderful as always.
307
00:32:23.440 --> 00:32:24.350
This month, I suppose. Yeah.
308
00:32:24.350 --> 00:32:24.820
Yeah, true.
309
00:32:24.820 --> 00:32:35.170
As you know, you and I talk about this, but we, yeah, the timing these things come out on is different from the time we record them, which confuses both you and me and now the listeners as well. So nevermind.
310
00:32:35.170 --> 00:32:35.400
Right.
311
00:32:35.400 --> 00:32:43.630
But yeah, um have yourself a great summer. If I don't, so if we don't talk before then, as I think that will, will be the case.
312
00:32:43.630 --> 00:32:44.460
Mm-hmm.
313
00:32:44.460 --> 00:32:51.640
And until next time.
314
00:32:51.640 --> 00:32:54.640
Until next time.
1
00:00:22.260 --> 00:00:23.200
Hey, Ben.
2
00:00:23.200 --> 00:00:24.240
Hey, Matt.
3
00:00:24.240 --> 00:00:34.620
We are reaching new levels of complacency when it comes to recording an episode here because we haven't got a clue at all about what we're doing today.
4
00:00:34.620 --> 00:00:34.960
No. No.
5
00:00:34.960 --> 00:00:38.020
But that's never really stopped us before.
6
00:00:38.020 --> 00:00:38.740
No, it hasn't.
7
00:00:38.740 --> 00:00:46.680
And it's not stopping us today. I'm going to ask, how are you doing, my friend? It's been a little while.
8
00:00:46.680 --> 00:00:56.280
It's been, it's been a busy few weeks. It's been a busy few years.
9
00:00:56.280 --> 00:01:05.820
Last week was a busy year. Uh, the, uh, just, just lots of new things happening, new stuff happening, new things being built.
10
00:01:05.820 --> 00:01:09.540
Hopefully exciting and interesting new things.
11
00:01:09.540 --> 00:01:10.180
Yeah.
12
00:01:10.180 --> 00:01:26.500
Yeah. It, it, um, you know, I have the privileged position of working in new projects, which most programmers will tell you is a much better alternative than many other things.
13
00:01:26.500 --> 00:01:26.800
Right.
14
00:01:26.800 --> 00:01:38.020
And as the listeners of this podcast are well aware, I have many strong opinions on the right way to do things. And, uh, being, ah working in a new project allows me to...
15
00:01:38.020 --> 00:02:06.180
..work in the manner and to which I am accustomed, which means i am being very productive, right? Like I'm able to get a lot of things done because, I don't have to relitigate all of the development practices and tools and things. It's just like, Nope, we're just gonna do the stuff and we're going to do it right. And we know how it all works and it's all pretty straightforward and simple. And and the whole point here is just to do it as fast as you responsibly can.
16
00:02:06.180 --> 00:02:12.540
And so that ah is fun and rewarding, but it's also a bit tiring.
17
00:02:12.540 --> 00:02:22.070
Right. Right. But that's, as you say, having the ability to set a project up the way that you would like it to be is powerful.
18
00:02:22.070 --> 00:02:23.160
huh
19
00:02:23.160 --> 00:02:31.850
And potentially as you say, potentially gets you to go very fast, lets you go fast. You're not limited by...
20
00:02:31.850 --> 00:02:33.000
Yeah.
21
00:02:33.000 --> 00:02:45.140
..I mean, I guess other people, other people and their choices that maybe you disagree with, or what do you think is it? Is it, is it, I mean, obviously I don't think you are so big headed to say that your way is perfect and everyone should do your way.
22
00:02:45.140 --> 00:02:51.780
Although, you know, I agree with most of the things that you say, so maybe it is, but what, what is the, is it monoculture?
23
00:02:51.780 --> 00:02:52.030
Yeah.
24
00:02:52.030 --> 00:02:52.270
Yeah.
25
00:02:52.270 --> 00:02:53.760
Is that the...
26
00:02:53.760 --> 00:03:01.060
You know, i I really like the exploration versus exploitation and dichotomy that some people talk about.
27
00:03:01.060 --> 00:03:01.260
Yeah. Yeah.
28
00:03:01.260 --> 00:03:11.280
you know It's like, should we continue evaluating options or should we move forward with the option, the best option of the set of options that we've considered so far? right
29
00:03:11.280 --> 00:03:12.100
Right.
30
00:03:12.100 --> 00:03:24.320
And you know I think one of the advantages of experience is that you have made a lot of mistakes and you have evaluated a lot of options and you have determined which ones tend to pan out and which ones don't.
31
00:03:24.320 --> 00:03:42.680
And therefore, ah you you wind up with ah some thing. There's sort of like the old bit of like, if an old engineer tells you that something can't be done, you can look at them with a little bit of skepticism, right?
32
00:03:42.680 --> 00:03:49.640
They probably know some things, but you can look at them with a little bit of skepticism and kind of ask the question like, are you sure?
33
00:03:49.640 --> 00:03:50.160
Yep.
34
00:03:50.160 --> 00:03:58.560
But if an old engineer tells you something *can* be done, because they've done it before. Well, that's a very different claim, right?
35
00:03:58.560 --> 00:04:06.180
Yeah. that's That's a really interesting difference, actually. Yeah, I see that..
36
00:04:06.180 --> 00:04:06.920
Yeah.
37
00:04:06.920 --> 00:04:07.040
yeah
38
00:04:07.040 --> 00:04:07.160
Yeah.
39
00:04:07.160 --> 00:04:21.590
But yeah, so you're you're sort of sort of drawing from experience and saying that these things have worked for me. I have explored the space because I've been doing this for 30 years and I have a pretty good idea. Doesn't mean to say that it's a perfect idea or there aren't better ideas, but these ones have been shown to work.
40
00:04:21.590 --> 00:04:21.620
Right.
41
00:04:21.620 --> 00:04:32.940
And now I am choosing in the sort of 80-20 theory of ah ah explore 20% of the time and 80% of time take advantage of the things that have proven to be well.
42
00:04:32.940 --> 00:04:35.420
You're in that 80% section at the moment.
43
00:04:35.420 --> 00:04:36.160
Yeah.
44
00:04:36.160 --> 00:04:39.890
Which, yeah, the restaurant ordering dilemma is how I think of this, right?
45
00:04:39.890 --> 00:04:39.920
Yeah.
46
00:04:39.920 --> 00:04:45.140
I go to my favorite restaurant and I look down the menu and there's that thing I like.
47
00:04:45.140 --> 00:04:51.050
And I'm like, I really like this thing on the menu and I will enjoy it every time I come here.
48
00:04:51.050 --> 00:04:51.350
huh Yeah.
49
00:04:51.350 --> 00:04:51.500
Yep.
50
00:04:51.500 --> 00:04:58.660
But there are some other things on this menu too. Should I take the risk that it's not as good as the thing I know I like?
51
00:04:58.660 --> 00:05:16.820
Yeah, yeah, yeah. And think another interesting dimension to this problem is that, um you know, I'm being paid to do this and I'm being paid to deliver results. And what I'm not being paid to do necessarily is learn a bunch of cool stuff, right?
52
00:05:16.820 --> 00:05:24.200
Like, you know, it's fun to learn a bunch of cool stuff and it is sometimes very productive and useful to your employers to learn a bunch of cool stuff. And then yeah, right.
53
00:05:24.200 --> 00:05:30.350
Indirectly through you and through your proselytization and sharing of experiences and setting the... Yeah, right.
54
00:05:30.350 --> 00:05:30.740
Yeah, yeah.
55
00:05:30.740 --> 00:05:40.200
But ultimately, it's an investment in your yourself, independent of your employer. And sometimes that can be purely for yourself. Like, you know, we've all we've all seen this.
56
00:05:40.200 --> 00:05:40.260
Right.
57
00:05:40.260 --> 00:05:52.300
I think we've talked about it before. It's like, hey, some cool new programming language has come out and some programmer goes off in a corner and says, I'm just going to write this new little tool that we needed. And we're going to write it in Haskell because I've just read a book on Haskell.
58
00:05:52.300 --> 00:05:52.500
Right.
59
00:05:52.500 --> 00:05:56.760
And you're like, that's, I don't know that this is in the best interest of the business.
60
00:05:56.760 --> 00:05:57.840
Right. Mm-hmm.
61
00:05:57.840 --> 00:06:13.840
Uh, there's a, I guess, you know, you roll your D20 and if it's a 20, somehow now Haskell is the best thing in the world and everyone moves to Haskell and the whole company levels up, right? That's a possibility. But very often what happens is that that piece of code gets orphaned and becomes the haunted graveyard of "we don't use that tool anymore."
62
00:06:13.840 --> 00:06:14.040
Yeah.
63
00:06:14.040 --> 00:06:15.170
Right.
64
00:06:15.170 --> 00:06:19.060
But you know, your friend has been and learned Haskell and has gone off to do something else or whatever.
65
00:06:19.060 --> 00:06:19.340
right Right.
66
00:06:19.340 --> 00:06:21.940
Right. They got that job in Haskell that they wanted to get, right?
67
00:06:21.940 --> 00:06:31.670
But, you know, you have to have an understanding employer to let you do those kinds of things or, you know, or be in-between jobs.
68
00:06:31.670 --> 00:06:32.420
that
69
00:06:32.420 --> 00:06:34.800
And then you get the choice of doing it any way you like.
70
00:06:34.800 --> 00:06:36.700
I was just going to say, this is like your every day right now, isn't it?
71
00:06:36.700 --> 00:06:43.860
At the moment, I get to choose pretty much what I want to do. Yeah. And yeah, that that's a whole different story. That's perhaps one for later.
72
00:06:43.860 --> 00:06:43.880
Yeah.
73
00:06:43.880 --> 00:06:48.960
But yeah, so where were we? We were talking, you were you were saying, yeah, I've distracted myself.
74
00:06:48.960 --> 00:07:01.180
Oh, yeah. No, I mean, I just sort of like, I really like the model of sort of exploration versus exploitation and being, ah you know, or exploration versus execution.
75
00:07:01.180 --> 00:07:03.680
I don't know what the better way is to describe that, but
76
00:07:03.680 --> 00:07:03.780
Yeah.
77
00:07:03.780 --> 00:07:20.900
But it's either like, you know, are we are we evaluating different ways to do things or are we doing things, right? And I think being responsible with that gives you, um you know, sort of like the freedom that comes with authority, right?
78
00:07:20.900 --> 00:07:31.840
Like, I'm going to be responsible for making this decision and doing it in the best interest of the company and ah because of that, I'm going to expect people to trust me to make the right decisions.
79
00:07:31.840 --> 00:07:49.040
And then that means when I decide like, yep, we're doing this in Java and with tests and we're going to do continuous deployment and we're going to do all these things. Like, it so long as the result of that is that I deliver working software that benefits the people who are paying me, then no one's gonna ask any questions. They're gonna like, great, thanks for doing that.
80
00:07:49.040 --> 00:08:04.360
And if it's like, you know, why is this taking so long? Or why do you continue to have problems? And my answer is, well, our continuous deployment system has some bugs and I haven't quite worked out all the ways in which this integrates with Google Cloud yet. And like, they're gonna be like, okay, but why?
81
00:08:04.360 --> 00:08:05.740
Why are we doing this, right?
82
00:08:05.740 --> 00:08:10.450
Why didn't we just do this in Python like everything else is or whatever the equivalent is?
83
00:08:10.450 --> 00:08:10.730
Yes, exactly. Right.
84
00:08:10.730 --> 00:08:11.000
Right. Yeah.
85
00:08:11.000 --> 00:08:12.000
Or whatever it is, right?
86
00:08:12.000 --> 00:08:27.040
So this is absolutely the kind of thing where, yeah, you have chosen to sort of stake and spend some of your "reputation points", ah your goodwill budget with the rest of the organization say, "I believe this strongly is the right way to do something."
87
00:08:27.040 --> 00:08:28.960
And you know you've got your evidence to back it up.
88
00:08:28.960 --> 00:08:39.720
Yeah, but I'm doing that I'm doing that anyway, though. it Just by embarking on this ah this ah responsibility to build this thing, I am staking my reputation. And the only question is, what outcome am I going to get, right?
89
00:08:39.720 --> 00:08:48.220
So like you know if I say equally, if I say... There's not really a nobody got fired for buying IBM effect.
90
00:08:48.220 --> 00:08:48.800
Right.
91
00:08:48.800 --> 00:09:13.450
Really? Right. It's like, ultimately, ah in some ways it's worse. It's sort of like, okay, well, if you're going to do, if you're not going to have any strong opinions about how to do things and you're just going to do things the way that, you know, the more senior people around you maybe say to do, or sort of like the, you know, the, the, the sort of default path of the, of the company, like, you know, people going to also still...
92
00:09:13.450 --> 00:09:19.180
...correctly expect you to get things done. And if you aren't effective at getting things done that way, it doesn't really matter.
93
00:09:19.180 --> 00:09:19.300
true
94
00:09:19.300 --> 00:09:34.900
Right? So like the thing that really matters is like actual running, working software and production and how you get there can be a matter of opinion and can be, you know, a matter of even experience, but the, the proof is in the pudding.
95
00:09:34.900 --> 00:09:41.540
So like just doing it this the standard way does not absolve you of the responsibility of doing it. Right?
96
00:09:41.540 --> 00:10:01.540
Right, but it does meaningfully change the way that it's perceived, I think. Like if you were just to do it the "obvious" way that everything else is being done, then as you say, it's like the IBM, no one that got fired for it, right? You could, there's a defense in not delivering that it was just like, okay, this was just a difficult thing to do.
97
00:10:01.540 --> 00:10:29.020
And there's not like an approach that I pulled out of left field that might be scapegoated, perhaps, as to why it wasn't, the software wasn't achieved, right? I could imagine, for example, you know, like the Haskell thing here is like, you know, if you succeed and you did it in Haskell, maybe you get the free pass and then everything's better. But if you if you screw up because it wasn't possible to achieve it, people will latch onto the fact that you wrote it all in Haskell rather than you did it the same way that everyone everyone else is doing. Is that...
98
00:10:29.020 --> 00:10:29.800
Yeah, I mean, I can.
99
00:10:29.800 --> 00:10:40.660
Am I too pessimistic? I suppose I am seeing here, and I'll be honest with you, some parallels with decisions that I made a few years back in in the way that I chose to develop some software.
100
00:10:40.660 --> 00:10:54.570
And they that did come back to sort of sort of haunt me in terms of like I staked quite a lot on something. And that was ultimately not the right way to go forward. And I agree with that. But it did I did have to bear those consequences, as you do when you take responsibility.
101
00:10:54.570 --> 00:10:54.690
Right.
102
00:10:54.690 --> 00:10:56.370
That's that's just what happens, right?
103
00:10:56.370 --> 00:10:56.440
Yeah.
104
00:10:56.440 --> 00:10:59.020
So I suppose I'm a little bit like, "ooh".
105
00:10:59.020 --> 00:11:16.820
Yeah. I mean, if if things don't work out for the best, there's you're definitely going to be able to find a reason why. Right. and that And that reason why can easily be because you decided to do things your own way and not the standard way. I'm not saying that's not possible.
106
00:11:16.820 --> 00:11:17.740
Of course, yeah.
107
00:11:17.740 --> 00:11:26.040
But the i feel you know i've I've used the metaphor many times of running across a lake. And, you know, software development is like...
108
00:11:26.040 --> 00:11:30.740
but Like the Jesus lizard, yeah? Have you seen this that lizard?
109
00:11:30.740 --> 00:11:33.820
i I don't know that I've seen that particular lizard, but I know that there are lizards that run across...
110
00:11:33.820 --> 00:11:35.880
It's called the Jesus lizard. (Editor's note: it's really called the "Common basilisk" https://en.wikipedia.org/wiki/Common_basilisk)
111
00:11:35.880 --> 00:11:35.980
Really?
112
00:11:35.980 --> 00:11:46.420
It's amazing. It runs across water. And I just... I love that someone was so blasphemously naming things that they were like, this is... this is I mean, it's like, as soon as I said it, you knew what it was.
113
00:11:46.420 --> 00:11:49.260
Yeah, right. That paints a picture, I'll tell you. um
114
00:11:49.260 --> 00:11:54.960
But anyway, yeah, so you're a software engineer, you're running fast and you're not falling into the lake because you're just keeping going.
115
00:11:54.960 --> 00:12:13.650
yeah Right. Right. And, and there's, I think, I think there's a lot of value in kind of, um, and this was a ah lesson that I, I learned, uh, relatively like halfway through my career when I was, we have an episode about, you know, bad business models and starting a ah company.
116
00:12:13.650 --> 00:12:14.020
Yeah.
117
00:12:14.020 --> 00:12:26.580
And you, you may, I may be told the story in that podcast, but for, forgive me, listener, if you've heard this before, But I remember having a conversation. We had formed a small company within the consulting organization I was working at.
118
00:12:26.580 --> 00:12:44.360
And i um we had all these plans for taking this open source project that we have and closing it and then selling it. And I had come to like the first or maybe the second board meeting with a long list of things to do if it doesn't all work out. And it's like, OK, well, we can reopen the software and then we can do this and we can you know release this thing. We do this.
119
00:12:44.360 --> 00:12:56.950
And the a person that that was the CEO of the consulting firm and was on the board of this little internal company was like, Ben, stop. Whoa, whoa, whoa. If you figure out all the ways in which this is going to fail, you're never going to have time to succeed, right?
120
00:12:56.950 --> 00:12:57.680
Ha ha ha ha ha!
121
00:12:57.680 --> 00:13:01.680
Like you you have to focus on how you're going to make this work, right?
122
00:13:01.680 --> 00:13:13.440
And so the kind of analogy that I have in software development is like – Like planning for like as engineers, we think about failure all the time. and We think about failure modes all the time.
123
00:13:13.440 --> 00:13:33.160
But I don't think that that type of mentality works as well when you sort of go up a level and you're like, OK, how am I going to organize this effort? Right. um You have to think about like, how are we going to succeed? And so, like, you know, the analogy of running across a lake is the way you run across a lake is you go real fast.
124
00:13:33.160 --> 00:13:33.560
That's how you do it.
125
00:13:33.560 --> 00:13:34.820
And you don't stop for anyone.
126
00:13:34.820 --> 00:13:46.260
You don't stop for doing it. So you don't want the life preserver and the signal flare and the tool belt. Like all you really need is shoes - maybe - right?
127
00:13:46.260 --> 00:13:48.900
Like just go real fast.
128
00:13:48.900 --> 00:13:49.100
Right.
129
00:13:49.100 --> 00:13:57.660
And so I grant you that in those situations where you fall in the lake and things have not gone well, if you should, you're right.
130
00:13:57.660 --> 00:14:05.480
Everyone says, well, you should have had ah life preserver. You should have been where, why the hell did you not have your tool belt with you?
131
00:14:05.480 --> 00:14:06.530
Exactly, exactly.
132
00:14:06.530 --> 00:14:06.900
And your, yeah, yeah, yeah, yeah.
133
00:14:06.900 --> 00:14:16.740
It's like this didn't work because you used Haskell. It's like, no, this didn't work because we didn't go fast enough because apparently I didn't understand this as well as I thought I did. Right.
134
00:14:16.740 --> 00:14:16.740
Right.
135
00:14:16.740 --> 00:14:24.020
So I don't know. And that I grant that that is a very that in itself is kind of like an opinionated view on how to do these things.
136
00:14:24.020 --> 00:14:24.480
It, it certainly is.
137
00:14:24.480 --> 00:14:53.960
Right. Like and and there are lots of situations in which even I would not apply those principles. But those are sort of my default principles. Right. So, you know, i I don't know. I, I can, I can see a world in which, uh, I don't want to call playing it safe. Cause I really don't think that it's playing it safe, but sort of like playing it safe and just doing what everyone else is doing around you is not a wrong strategy.
138
00:14:53.960 --> 00:15:09.820
Um, but I think, you know, at the end of the day, so long as you build things that, that people want and you build them at a reasonable pace and you like, think a lot of this also is just not, uh, putting yourself in a situation where you're just slowing yourself down.
139
00:15:09.820 --> 00:15:22.640
Right? Like creating a lot of mess and cruft and cruft actually literally cruft that, that is borrowing from your future productivity in the name of, of doing something today.
140
00:15:22.640 --> 00:15:22.760
Literally.
141
00:15:22.760 --> 00:15:28.500
I think a lot of it is also, also that and knowing when you need to fight for that. So I don't know, i'm kind of off on a tangent here, but.
142
00:15:28.500 --> 00:15:42.100
No, that's good. No, I mean, certainly, Cruft is top of mind for me as I've been spending the last few weeks you know doing Compiler Explorer things and spending a lot of time regretting decisions that were made 10 years ago that were made...
143
00:15:42.100 --> 00:15:52.240
...And some of those decisions, are it was it seemed like the best idea at the time, and they're fine. It's just you know they need to be updated. That's cool. but many, many of them are like, I didn't really, it wasn't thought through.
144
00:15:52.240 --> 00:16:03.860
And, you know, you regret them. But then some of the other things are like, well, if this had never scaled to four terabytes of compilers, then we wouldn't have this.
145
00:16:03.860 --> 00:16:10.740
This is a new problem, right? No one would have thought this, you know, who yeah who I mean, when I speak to people about some of the issues we face,
146
00:16:10.740 --> 00:16:10.740
Right. right
147
00:16:10.740 --> 00:16:17.720
Oftentimes they're like, oh gosh, I'd never even considered that would be a problem. And you're like, yeah, no, neither did we.
148
00:16:17.720 --> 00:16:27.860
And now it's a big focal point for us. It's like, how do you deploy this? Oh, well, you just copy the bits around. Well, there's four terabytes of it and nothing in Amazon works like that. Oh, yeah.
149
00:16:27.860 --> 00:16:28.220
Yeah.
150
00:16:28.220 --> 00:16:28.710
Yeah. Yeah. yeah
151
00:16:28.710 --> 00:16:28.870
Yeah.
152
00:16:28.870 --> 00:16:40.360
I don't know that I would argue that those decisions that you made 10 years ago were wrong. I think, I think the cruft comes in when you are, you don't feel ah safe changing them.
153
00:16:40.360 --> 00:16:41.020
Right. Like,
154
00:16:41.020 --> 00:16:45.390
Yeah. And that that is also true. You know, a lot of this stuff is specifically for Compiler Explorer.
155
00:16:45.390 --> 00:16:45.480
Yeah.
156
00:16:45.480 --> 00:16:47.180
you know, we're a shoestring budget thing.
157
00:16:47.180 --> 00:16:47.400
yeah
158
00:16:47.400 --> 00:16:58.110
We don't have a copy. We don't have a second deploy that I can play around with, with the sort of big infrastructural changes, especially stuff like, you know, let's just copy all the compilers somewhere else and then poke around with them.
159
00:16:58.110 --> 00:16:58.660
Right. Right.
160
00:16:58.660 --> 00:17:14.760
I don't, even if I did have, I mean, we have some staging and stuff, but if, even if I did have like a full copy, I could run somewhere else... My confidence in being able to say this categorically still works, now I've you know moved everything around. I've changed the file systems. I've done whatever I choose to do.
161
00:17:14.760 --> 00:17:18.620
My confidence is not very high. You know I can curl a few things.
162
00:17:18.620 --> 00:17:18.900
right
163
00:17:18.900 --> 00:17:31.720
I can look at... Yeah, it's it's not straightforward. You know to and some extent, my own personal usage pattern of the site does not comprehensively enough...
164
00:17:31.720 --> 00:17:43.680
cover all the things it *can* do. And because we don't have the tests for most of the user interface or even most many of the compiler type things that we do, I'm not confident in making changes.
165
00:17:43.680 --> 00:17:46.820
We just kind of have to wing it and hope, which is not good, right?
166
00:17:46.820 --> 00:17:46.980
Yeah.
167
00:17:46.980 --> 00:17:51.260
you know I'm talking to Ben Rady here.
168
00:17:51.260 --> 00:17:52.960
Yeah.
169
00:17:52.960 --> 00:18:06.820
And it doesn't feel good. And so some of the things that I'm doing right now, you know like a lot the this with with this is going off on a tangent to your tangent now, but like the things that I'm trying to do now are set myself up for further success by...
170
00:18:06.820 --> 00:18:06.820
Yeah.
171
00:18:06.820 --> 00:18:21.680
Going back and adding types to a lot of the things that were untyped and have horrible casts in the TypeScript. You know, we moved from JavaScript to TypeScript and there was a ton of stuff along the way that just has, you know, `as any` or `as unknown` because we didn't know what type things were.
172
00:18:21.680 --> 00:18:29.710
And now I'm actually spending the time to go back and put the types in and uncovering all sorts of weird cases where it's like, hey, sometimes we return an object. Sometimes we return false.
173
00:18:29.710 --> 00:18:30.220
Right.
174
00:18:30.220 --> 00:18:33.320
That doesn't seem like anyone would choose to do that, but that's what happened.
175
00:18:33.320 --> 00:18:33.440
Yeah. yeah
176
00:18:33.440 --> 00:18:55.740
And then you go and, you know, you pull on the threads. And so I feel like that helps to make it easier to make changes. And while I'm doing it, I'm adding tests and even adding test frameworks. I made a big change recently to move a whole bunch of stuff out of the front end into a place where I can run the test for it, independent of a browser being involved, because most of the code is like, doesn't care about the DOM.
177
00:18:55.740 --> 00:19:11.960
So, you know, you want to test whether this string is a valid descriptor or an identifier, well, then that can be tested outside... stuff like that. All of these things, like well ah hopefully, en masse will make it faster for us to go forward in the future.
178
00:19:11.960 --> 00:19:13.780
Oh, yeah.
179
00:19:13.780 --> 00:19:16.210
Yeah, so that is a very tangent to your tangent.
180
00:19:16.210 --> 00:19:16.340
Yeah, yeah.
181
00:19:16.340 --> 00:19:35.060
But yeah, that's top of mind for me is how do I make myself more productive? How do I get myself into the world where the the the environment gives me the protections I want? And I think to circle all the way back to the beginning, the thing that you said at the beginning of this was like you're in a greenfield environment where you set it up the way that you think it should be done.
182
00:19:35.060 --> 00:19:42.830
And I think you and I both like that. You know, I have a C++ template project, which is like, this is all my rules or my Lint rules are set up or my pre-commit hooks are done this way.
183
00:19:42.830 --> 00:19:42.900
Mm-hmm.
184
00:19:42.900 --> 00:19:52.920
You can't, if you make a change to my project and you get it past CI and you get it past the PR, then it should be a good change, right? There should be no way that you can get it past.
185
00:19:52.920 --> 00:19:52.980
Yeah.
186
00:19:52.980 --> 00:19:59.800
And if it's not, that's on on me. That's a bug in the infrastructure that let you put a bad code into my project.
187
00:19:59.800 --> 00:20:00.640
Yeah.
188
00:20:00.640 --> 00:20:03.150
Compile Explorer is not there yet, but it will be, I hope,
189
00:20:03.150 --> 00:20:04.080
Right. Yeah. Yeah.
190
00:20:04.080 --> 00:20:08.580
And it's sort of getting there. Yeah. Yeah.
191
00:20:08.580 --> 00:20:31.980
Yeah, no... cars have brakes you can drive faster. Those kinds of things that reduce fear, reduce risk, and let you you know take a run across the lake because you know you're a good swimmer will absolutely speed you up, right? And I feel like the unfortunate truth is that a lot of those things kind of have to be built in from the beginning.
192
00:20:31.980 --> 00:20:35.740
I actually remembered the thing that I was thinking about earlier with the topic that I wanted to talk about
193
00:20:35.740 --> 00:20:39.380
Oh, good. I was able to talk long enough for your brain to recover.
194
00:20:39.380 --> 00:20:43.640
Yes. All that actually, no, you're, but you actually reminded me of it with all the automation stuff.
195
00:20:43.640 --> 00:20:43.640
Oh, good.
196
00:20:43.640 --> 00:21:05.040
So just this week working with a new intern on my team, I figured out how we figured out how to completely automate in user mode or in user space Docker building and running.
197
00:21:05.040 --> 00:21:26.970
So for the longest time, one of the big, bugaboos for me has been, if I want to build a Docker container, I can't use my, you know, `make download` the the tools that I want and stick them into the tools folder approach because you have to have some `sudo` installed or some, yeah, all of these terrible, terrible, terrible things.
198
00:21:26.970 --> 00:21:28.360
setuid root thing, yeah..
199
00:21:28.360 --> 00:21:40.760
I using a combination of the standard Docker client, which is cool and and actually pretty easy to install that way, a library called Colima.
200
00:21:40.760 --> 00:21:55.580
And another thing that it depends on called Lima, which also can be installed this way. I was able to build a Docker container and run it and have all of the tools entirely installed just in the home directory of the user with no special permissions.
201
00:21:55.580 --> 00:22:15.520
So some, yeah, just magical, I could `git clone` your repo and type `make`, and as long as I'm on ah ah but an a supported operating system, should we say, which should be, you know, ah it will get the tools that it needs to do this and build this stuff without some deus ex machina kind of like process that you're like, ah, first you must `sudo apt install` all this stuff, the stuff that you and I dislike.
202
00:22:15.520 --> 00:22:16.120
A supported operating system, yes, exactly.
203
00:22:16.120 --> 00:22:20.500
Yes, you have to download this DMG file and double click on it and do all these other terrible things.
204
00:22:20.500 --> 00:22:22.040
Oh, that's awesome.
205
00:22:22.040 --> 00:22:36.340
Yes, yes. and and And that kind of automation, I think, to an outside person would seem like, why are you spending all of this time to do this? Because I think it took us about a day to do it.
206
00:22:36.340 --> 00:22:49.740
Why are you spending all of this time to do it? And it is so that, and this is especially true of this particular type of project that we're working on because it sort of gets worked on in fits and starts, right? Like you work on it for a while and then you come back to it and then you just think.
207
00:22:49.740 --> 00:23:08.020
So it's like, it is so that six months from now when something is broken and I need to fix it right now, the way that I set up that development environment is I `git clone`, `make`, done, figure out what's going on, push it and not like `git clone`...oh...
208
00:23:08.020 --> 00:23:09.180
Right.
209
00:23:09.180 --> 00:23:22.700
None of this works and, and it will take me six hours to make it work because these versions are no longer up to date and this package doesn't exist anymore. And I can't find the download link for that. And these docs are wrong.
210
00:23:22.700 --> 00:23:36.120
And that is, that is like a classic example of like the kind of thing where I feel like you get very opinionated about it. You have strong...
211
00:23:36.120 --> 00:23:51.500
Well-reasoned arguments for for why you do it. And so long as you can successfully achieve the outcomes that you think you're supposed to be able to achieve while using these approaches, no one's going to care because it just works.
212
00:23:51.500 --> 00:24:02.000
If it doesn't work, then all the blame comes out. And then all of the second guessing and the Monday morning quarterbacking comes out and says like, okay, why did you do it like this?
213
00:24:02.000 --> 00:24:14.500
Yeah. Yeah. But, but also to your point, you know, like the whole, you know, we, you and I have, have talked about this before. We, we both love this idea of like a sort of more hermetic build or whatever you need environment.
214
00:24:14.500 --> 00:24:14.600
Yeah.
215
00:24:14.600 --> 00:24:23.620
And I think that, you know, there are stuff more modern things along have come along since then, you know, dev containers and some stuff that uses Docker trickery to actually like make that. I don't, you know,
216
00:24:23.620 --> 00:24:24.100
Mm-hmm.
217
00:24:24.100 --> 00:24:36.620
I have opinions about that. But the reason that *I* went for this from my previous point of view was that some people at Google had set up their development environment like this, and I saw that it was possible.
218
00:24:36.620 --> 00:24:38.800
So that does dovetail back into your original thing.
219
00:24:38.800 --> 00:24:38.820
yeah
220
00:24:38.820 --> 00:24:45.740
This is like a senior developer telling you, oh, yeah, you can do this. It is possible to make it so that you can just have a directory...
221
00:24:45.740 --> 00:25:01.580
There's nothing magic about compilers. They aren't system software. they they They like to masquerade and pretend they are. But if you need GCC 1.2.3 to run your code, you can download and install it, or you can build it so that it can be downloaded and installed, or you can do all this stuff. You can spend a bunch of time.
222
00:25:01.580 --> 00:25:23.010
You now learn how to do that, and now you can take that on to the next thing. And then, you know... The frustration specifically in this case was like ah the very first company you and I both worked at together, where we were stuck for a very long time on the version of GCC that came with the operating system that our production machines had, which was also you know an ancient version of Red Hat.
223
00:25:23.010 --> 00:25:23.080
Yeah.
224
00:25:23.080 --> 00:25:27.920
You're like, why are we using a 10-year-old GCC 10 years ago?
225
00:25:27.920 --> 00:25:28.480
Right. Yeah.
226
00:25:28.480 --> 00:25:34.680
oh because of this. Oh, it's hard do. No, no. We can make it. We can solve this problem.
227
00:25:34.680 --> 00:25:34.880
Yeah.
228
00:25:34.880 --> 00:25:45.280
We can build our own compilers. We can make them work. And then we can make it so that that is an easy thing to do. And it's part of, was it "Fig"? I think was the name of the funny little thing that we started installing stuff in.
229
00:25:45.280 --> 00:25:45.410
Oh, yeah.
230
00:25:45.410 --> 00:25:45.660
And i you know.
231
00:25:45.660 --> 00:25:46.220
I think that sounds about right.
232
00:25:46.220 --> 00:25:50.860
There was a package management system, whatever. Anyway, and it was a lot of effort and lot of work, but we got it working.
233
00:25:50.860 --> 00:25:50.860
Yes.
234
00:25:50.860 --> 00:26:01.980
And it was so beneficial because then we could upgrade our compiler, upgrade everything. And it just worked. And it was. Anyway, we didn't do it because of that. That just is side effect.
235
00:26:01.980 --> 00:26:13.220
Yeah. You know, the funny thing about these practices is I feel like they spread like viruses, but that is they only spread through contact. Right. It's like it's it's like because there's a lot of things.
236
00:26:13.220 --> 00:26:13.220
Ha ha ha.
237
00:26:13.220 --> 00:26:30.880
There's a lot of things that I've seen like this where it's like I have explained these things till I'm blue in the face. And I made the arguments that I'm making on this podcast right now about why they're beneficial. Right. do And I get a lot of people with like blank stares and it's like, okay, sure, fine, whatever, and nodding heads and whatever. And they just walk away and they ignore it.
238
00:26:30.880 --> 00:26:47.000
But the second that I work with somebody for like, you know, it's not a second, but when I work with somebody for like a reasonable period of time and they actually see how this stuff works, it would becomes impossible for me to convince them *not* to do it.
239
00:26:47.000 --> 00:26:47.920
Right, right.
240
00:26:47.920 --> 00:26:57.200
Right? Like they see the value of it firsthand and they sort of experience it like viscerally. And it just like, now they can't imagine doing it any other way. Right?
241
00:26:57.200 --> 00:26:58.440
Why would you do it any other way?
242
00:26:58.440 --> 00:26:58.800
Right.
243
00:26:58.800 --> 00:27:00.700
Yeah, just it's like, yeah, you have to get over the hump there.
244
00:27:00.700 --> 00:27:00.860
Right.
245
00:27:00.860 --> 00:27:06.600
There's some kind of... ah function where the, you know, you got to get over the hump or quantum tunnel through the hump.
246
00:27:06.600 --> 00:27:07.150
Yeah. Right. I was going to say like,
247
00:27:07.150 --> 00:27:16.590
I guess, you know, you, you either, you go up the, up the, ah you know, you spend the 30 years climbing the hill, you know, and then falling down into a, into a better place, the other side of the hill.
248
00:27:16.590 --> 00:27:16.720
yeah
249
00:27:16.720 --> 00:27:29.860
And you go Hey, this is better than than it was the other side of the hill or through contact with someone, you allow them to quantum tunnel through experience hill and come to the better place without actually having to make all the mistakes along the way.
250
00:27:29.860 --> 00:27:30.000
Yeah.
251
00:27:30.000 --> 00:27:33.640
Right, right. Yes. Wow, that's ah I love that.
252
00:27:33.640 --> 00:27:33.740
There's an image.
253
00:27:33.740 --> 00:27:38.480
That is a great analogy. I love that, quantum tunneling through the hill.
254
00:27:38.480 --> 00:27:38.480
There's an image.
255
00:27:38.480 --> 00:27:51.090
Experience. Yeah. ah that's what That's what mentorship is, is letting other people quantum tunnel to a better place without having to go through as much of the pain that you did.
256
00:27:51.090 --> 00:27:51.300
Yeah.
257
00:27:51.300 --> 00:27:55.160
Right. Let me show you the secret passage through the mountain. Yeah.
258
00:27:55.160 --> 00:27:58.540
Yeah.
259
00:27:58.540 --> 00:27:59.680
I don't know.
260
00:27:59.680 --> 00:28:04.460
Well, that was, that was a surprising amount of talking for no idea at all.
261
00:28:04.460 --> 00:28:11.140
No idea. i mean, I guess I did eventually remember the thing that I was talking about before, but, and maybe that would have led us to this topic anyway, but yeah.
262
00:28:11.140 --> 00:28:12.940
um suppose I suppose so.
263
00:28:12.940 --> 00:28:13.900
Yeah.
264
00:28:13.900 --> 00:28:26.230
Yeah, but no, I think your your your starting point of like having ah a good project and a nice setup and whatever is certainly top of mind for me now as I'm sort of retrofitting it into Compiler Explorer at some level.
265
00:28:26.230 --> 00:28:26.280
Yeah.
266
00:28:26.280 --> 00:28:30.160
I mean, we've always had some level of this, but it's improving it and shoring it up.
267
00:28:30.160 --> 00:28:31.300
Yeah.
268
00:28:31.300 --> 00:28:54.990
And then, you know, you and I have been discussing, ah this seems like a complete left tack and late on in the podcast, but it's worth mentioning, I think, is that like um the things that make it easy to dip in and dip out of projects like this, or be it because it's easy to set up, be it because there's clear documentation, there's no surprises, be it because the lint rules make it obvious when you're doing something the way that you're not supposed to be doing it or whatever.
269
00:28:54.990 --> 00:28:55.140
Mm-hmm.
270
00:28:55.140 --> 00:29:02.670
So you kind of put people on the on the good path. Yeah. be it like decent documentation that says this is how we do stuff here.
271
00:29:02.670 --> 00:29:02.920
Yeah.
272
00:29:02.920 --> 00:29:11.340
All of this is useful for an intern coming onto to a project coming off. And that intern could be an LLM in today's climate.
273
00:29:11.340 --> 00:29:11.520
Right.
274
00:29:11.520 --> 00:29:15.050
And that seems to work fairly well too.
275
00:29:15.050 --> 00:29:16.320
Yeah, yeah.
276
00:29:16.320 --> 00:29:37.300
And so I'm sort of mindful that that is out there and, and it's certainly, um, a decent subset, like a good 80% of the things that are useful to make life easier for this amnesiac junior programmer to come in and try and make a small change so on ADD meds to come in and, uh, make a change.
277
00:29:37.300 --> 00:29:38.120
Yeah.
278
00:29:38.120 --> 00:29:51.300
to ah my project, but that also helps the actual intern that's going to come on and hopefully will mature into ah full featured junior developer and then a senior developer and go on to do great things, right?
279
00:29:51.300 --> 00:29:51.330
Yeah.
280
00:29:51.330 --> 00:29:51.400
Yeah. Yeah.
281
00:29:51.400 --> 00:29:53.070
But that's it's an on-ramp for everybody.
282
00:29:53.070 --> 00:29:53.900
yeah
283
00:29:53.900 --> 00:30:04.900
And so that's sort of like top of mind. And yeah, I don't think we have time to talk about the full ins and outs of that. But it's it was an interesting thought that like that this this nice setup is also conducive to that.
284
00:30:04.900 --> 00:30:31.160
Oh, it totally is. And then you know there's there's this some like industrial design and like tool design thing of like trying to design for the edges, right? like And and like a lot of um things that people started to discover when they started building um both like devices and also like buildings and sidewalks and things like that for disabled people is that it actually winds up helping everyone a lot more than they wouldn't have expected
285
00:30:31.160 --> 00:30:32.300
able bodied folk. Yeah.
286
00:30:32.300 --> 00:30:44.860
Because when you kind of design for those extremes of like, well, what happens when somebody is like 75 pounds and can't lift this? Or what happens when somebody is, you know, seven feet tall? Or what happens when somebody is in a wheelchair? What happens when somebody can't see?
287
00:30:44.860 --> 00:30:49.220
You wind up creating these things that are just easier for everyone, right?
288
00:30:49.220 --> 00:30:49.460
Right.
289
00:30:49.460 --> 00:31:01.740
And I think that there's a lot of that when it comes to both designing for, ah you know, junior developers and LLMs and me six months from now after I've slept a bunch of times and don't remember how this all works.
290
00:31:01.740 --> 00:31:10.530
Like all of those people kind of have the same problem. Right. Which is they don't understand what's going on and they need some guardrails to make sure that they don't make any stupid mistakes.
291
00:31:10.530 --> 00:31:10.920
Yeah.
292
00:31:10.920 --> 00:31:38.520
So like designing for this stuff has tons of value. And I think just like with some of the, you know, ADA accessible things, it's like you don't really discover that and maybe this is why I'm tying it back to the whole like it spreads like a virus and I can't seem to convince people maybe this is the problem it's like until you walked on the sidewalk that is like gently sloping up to the thing instead of like the stairs where you're huffing and puffing ah you're like yeah this is better like I didn't think about it but it really is better right
293
00:31:38.520 --> 00:31:48.820
Yeah, that is it. Yeah. No, I think so. Well, that seems like a decent place to park the conversation, because otherwise I think we're going to start off with the whole other thing.
294
00:31:48.820 --> 00:31:50.700
We're going to do a whole other second podcast on top of this podcast.
295
00:31:50.700 --> 00:31:52.700
Yeah, which we don't have time for today.
296
00:31:52.700 --> 00:31:53.620
Yes. Yeah, now that's true.
297
00:31:53.620 --> 00:31:55.730
But yeah, I mean...
298
00:31:55.730 --> 00:31:56.460
Yeah.
299
00:31:56.460 --> 00:32:10.630
I think that's a great analogy. Yeah. The, whole idea of helping one set of people helps everybody ah in the, in the context, both in the real world in, and you know, like screen readers and things like that, that's helps, you know, and and yeah, yeah but better documentation.
300
00:32:10.630 --> 00:32:10.760
Yeah.
301
00:32:10.760 --> 00:32:16.580
You're like, well why do you need documentation? It's like, well, helps new people, but it also helps you, you know, down the line.
302
00:32:16.580 --> 00:32:17.620
Yeah. Yes, it does.
303
00:32:17.620 --> 00:32:17.980
Yeah. Yeah.
304
00:32:17.980 --> 00:32:18.240
Yes, it does.
305
00:32:18.240 --> 00:32:22.660
Well, friend, I think we should probably leave it there for this week.
306
00:32:22.660 --> 00:32:23.440
Wonderful as always.
307
00:32:23.440 --> 00:32:24.350
This month, I suppose. Yeah.
308
00:32:24.350 --> 00:32:24.820
Yeah, true.
309
00:32:24.820 --> 00:32:35.170
As you know, you and I talk about this, but we, yeah, the timing these things come out on is different from the time we record them, which confuses both you and me and now the listeners as well. So nevermind.
310
00:32:35.170 --> 00:32:35.400
Right.
311
00:32:35.400 --> 00:32:43.630
But yeah, um have yourself a great summer. If I don't, so if we don't talk before then, as I think that will, will be the case.
312
00:32:43.630 --> 00:32:44.460
Mm-hmm.
313
00:32:44.460 --> 00:32:51.640
And until next time.
314
00:32:51.640 --> 00:32:54.640
Until next time.