WEBVTT

1
00:00:04.759 --> 00:00:08.759
<v Speaker 1>Hey, Welcome back to another episode of the Ruby Rogues podcast.

2
00:00:09.119 --> 00:00:11.119
<v Speaker 1>This week, on our panel, we have Valentino Stole.

3
00:00:11.880 --> 00:00:12.080
<v Speaker 2>Hey.

4
00:00:12.080 --> 00:00:15.919
<v Speaker 1>Now, I'm Charles Maxwood from Top End Devs. I just

5
00:00:15.919 --> 00:00:18.000
<v Speaker 1>wanted to do a quick call out AIDEV boot camp

6
00:00:18.000 --> 00:00:22.079
<v Speaker 1>dot com. If you sign up within the next few weeks,

7
00:00:22.480 --> 00:00:24.679
<v Speaker 1>I'm doing a forty five percent discount because I turned

8
00:00:24.679 --> 00:00:32.280
<v Speaker 1>forty five on Saturday. And yeah, Bob's laughing. I'm going

9
00:00:32.359 --> 00:00:36.719
<v Speaker 1>to take a little personal license here. So there's a

10
00:00:36.759 --> 00:00:40.719
<v Speaker 1>political party I'm in county leadership, and we were talking

11
00:00:40.719 --> 00:00:44.000
<v Speaker 1>about youth outreach and our party secretary is probably pretty

12
00:00:44.000 --> 00:00:47.439
<v Speaker 1>close to Bob's age, and so we were chatting and

13
00:00:47.479 --> 00:00:49.280
<v Speaker 1>we had like this twenty two to twenty three year

14
00:00:49.359 --> 00:00:51.840
<v Speaker 1>old young woman who was talking to us about reaching

15
00:00:51.880 --> 00:00:56.159
<v Speaker 1>out to younger people. And somebody goes, so, when we're

16
00:00:56.200 --> 00:00:58.520
<v Speaker 1>talking about youth, who are we talking about? And he

17
00:00:58.600 --> 00:01:01.000
<v Speaker 1>chimes in, and he goes and buddy under forty five.

18
00:01:01.079 --> 00:01:04.000
<v Speaker 1>And so I felt young for like a week and

19
00:01:04.040 --> 00:01:08.359
<v Speaker 1>a half and then I turned forty five. So anyway, Bill,

20
00:01:08.439 --> 00:01:13.519
<v Speaker 1>now that's right, I'm old now. So anyway, we also

21
00:01:13.560 --> 00:01:16.560
<v Speaker 1>have Uncle Bob Martin or Robert C. Martin as people

22
00:01:16.599 --> 00:01:18.920
<v Speaker 1>know him. Bob, do you want to just say hello

23
00:01:19.000 --> 00:01:20.680
<v Speaker 1>and let people know what you're up to these days?

24
00:01:20.959 --> 00:01:25.519
<v Speaker 3>Hi? Yeah, what am I up to in these days? Well,

25
00:01:27.239 --> 00:01:29.719
<v Speaker 3>I'm in the midst of writing the second edition of

26
00:01:29.799 --> 00:01:32.799
<v Speaker 3>Clean Code. My publisher said, you know, you should do

27
00:01:32.840 --> 00:01:35.640
<v Speaker 3>a second edition, and I thought that's probably a good idea.

28
00:01:35.920 --> 00:01:40.239
<v Speaker 3>It's been about sixteen seventeen years. Yeah, So first draft

29
00:01:40.319 --> 00:01:42.000
<v Speaker 3>is off to the publisher. They're going to send it

30
00:01:42.040 --> 00:01:45.400
<v Speaker 3>out for review, then we'll do another scan through it,

31
00:01:45.599 --> 00:01:48.799
<v Speaker 3>and I imagine we'll see it out mid next year.

32
00:01:49.760 --> 00:01:53.840
<v Speaker 1>Good deal. You also released and this came up on

33
00:01:53.879 --> 00:01:56.519
<v Speaker 1>the JavaScript Jabber Show and I was excited for it,

34
00:01:56.840 --> 00:01:58.640
<v Speaker 1>and so we're definitely going to have you back on

35
00:01:58.680 --> 00:02:01.079
<v Speaker 1>this show and that show to talk about it. But

36
00:02:01.120 --> 00:02:04.599
<v Speaker 1>you released another book about historical programmers.

37
00:02:05.120 --> 00:02:10.879
<v Speaker 3>We Programmers is the title of it. The publisher taught

38
00:02:10.919 --> 00:02:14.520
<v Speaker 3>maybe we the Programmers was a little too much like

39
00:02:14.639 --> 00:02:19.479
<v Speaker 3>the Declaration of Independence or the Constitution or something. So

40
00:02:19.719 --> 00:02:22.360
<v Speaker 3>it's called We Programmers, which is a nice takeoff on

41
00:02:22.560 --> 00:02:27.639
<v Speaker 3>Asimov's I Robot. I suppose it is a history of

42
00:02:28.080 --> 00:02:35.039
<v Speaker 3>software programmers, starting with Babbage and then walking through the

43
00:02:35.120 --> 00:02:39.080
<v Speaker 3>early twentieth century, early to mid twentieth century. So we

44
00:02:39.159 --> 00:02:43.719
<v Speaker 3>get people like Dykestra and Hilbert and von Neuman and

45
00:02:43.919 --> 00:02:50.560
<v Speaker 3>Touring and Grace Hopper and John Bacchus and of course

46
00:02:50.680 --> 00:02:56.080
<v Speaker 3>the C Trio Dennis Ritchie and Ken Thompson and Brian Cernihan.

47
00:02:57.039 --> 00:03:02.800
<v Speaker 3>And I focus on the technology. This is a book

48
00:03:02.840 --> 00:03:07.039
<v Speaker 3>for programmers, So I talk about the machines themselves. You know,

49
00:03:07.080 --> 00:03:09.960
<v Speaker 3>how many bits they were, their cycle times, what did

50
00:03:09.960 --> 00:03:13.199
<v Speaker 3>the instructions look like, what kind of problems were they solving,

51
00:03:13.240 --> 00:03:16.159
<v Speaker 3>how much memory did they have, what kind of memory

52
00:03:16.159 --> 00:03:16.560
<v Speaker 3>it was.

53
00:03:17.479 --> 00:03:22.120
<v Speaker 4>And I also focus a lot on the the personalities

54
00:03:22.240 --> 00:03:26.919
<v Speaker 4>of the programmers, specifically their life struggles, because all of

55
00:03:26.960 --> 00:03:27.960
<v Speaker 4>these people.

56
00:03:27.599 --> 00:03:30.759
<v Speaker 3>Were human, and they were really interesting humans. They all

57
00:03:30.800 --> 00:03:36.159
<v Speaker 3>had in the midst of this really deep technological struggle,

58
00:03:36.599 --> 00:03:40.240
<v Speaker 3>they also had very human struggles. So it's a book

59
00:03:40.879 --> 00:03:46.919
<v Speaker 3>about the human side of programmers, but with enough technology

60
00:03:47.039 --> 00:03:52.159
<v Speaker 3>to attract the attention of programmers. So that's that's how

61
00:03:52.199 --> 00:03:52.840
<v Speaker 3>the book goes.

62
00:03:53.759 --> 00:03:56.159
<v Speaker 1>Yeah, well it's it's interesting to me just from the

63
00:03:56.199 --> 00:04:01.159
<v Speaker 1>standpoint of yeah, I mean, they they're essentially doing what

64
00:04:01.199 --> 00:04:04.680
<v Speaker 1>we do. The difference, I guess is that and this

65
00:04:04.759 --> 00:04:06.680
<v Speaker 1>is the thing I like about good narratives, you know,

66
00:04:06.719 --> 00:04:09.800
<v Speaker 1>a novel or whatever. Anyway is that you know, their

67
00:04:09.879 --> 00:04:12.800
<v Speaker 1>challenges were different. They were inventing new ways of doing things.

68
00:04:13.520 --> 00:04:15.400
<v Speaker 1>I guess the difference between some of the other books

69
00:04:15.400 --> 00:04:18.240
<v Speaker 1>that I read in this is that we're, you know,

70
00:04:18.319 --> 00:04:20.839
<v Speaker 1>unless it's a historical novel like this or you know,

71
00:04:21.480 --> 00:04:24.120
<v Speaker 1>has to do with the past, right, we're still dealing

72
00:04:24.120 --> 00:04:26.360
<v Speaker 1>with some of these things, or we benefit from the

73
00:04:26.399 --> 00:04:28.000
<v Speaker 1>way that they invented to solve them.

74
00:04:28.279 --> 00:04:33.439
<v Speaker 3>So it's easy to draw a line if you look

75
00:04:33.439 --> 00:04:36.680
<v Speaker 3>at the technologies, and if you really dig into the technologies,

76
00:04:37.319 --> 00:04:40.639
<v Speaker 3>it's easy to draw a line from there to hear right,

77
00:04:40.839 --> 00:04:44.279
<v Speaker 3>And that line is this exponential curve which we called

78
00:04:44.360 --> 00:04:49.439
<v Speaker 3>Moore's law back before Moore's law died. But it's very

79
00:04:49.480 --> 00:04:55.319
<v Speaker 3>interesting to you look at the earlier mechanical machines, and

80
00:04:55.360 --> 00:04:59.040
<v Speaker 3>then the electro mechanical machines, and then the vacuum tube machines,

81
00:04:59.120 --> 00:05:02.839
<v Speaker 3>and then the transition machines, then the integrated circuit machines,

82
00:05:02.879 --> 00:05:05.959
<v Speaker 3>and you can see this interesting curve. And the same

83
00:05:06.000 --> 00:05:09.160
<v Speaker 3>thing happens with memory. You know, originally memory was just

84
00:05:09.240 --> 00:05:12.600
<v Speaker 3>in gear positions, and then later on it was sound

85
00:05:12.680 --> 00:05:16.360
<v Speaker 3>waves through tubes of mercury, and then it was charged

86
00:05:16.480 --> 00:05:20.399
<v Speaker 3>dots on CRT screens, and then then finally it was

87
00:05:20.519 --> 00:05:24.959
<v Speaker 3>core memory, real core, magnetic core, and then finally you

88
00:05:25.000 --> 00:05:29.319
<v Speaker 3>know discs and solid state memory. So very very interesting

89
00:05:29.319 --> 00:05:33.000
<v Speaker 3>and if you if you follow the deeper technology, you

90
00:05:33.040 --> 00:05:36.000
<v Speaker 3>can see that thread really easy, and you can see

91
00:05:36.040 --> 00:05:41.199
<v Speaker 3>the struggles of the hardware architects. They had no idea

92
00:05:41.199 --> 00:05:44.160
<v Speaker 3>what programmers would needs. So the early machines had no

93
00:05:44.199 --> 00:05:46.680
<v Speaker 3>way to call a subroutine, no way to store a

94
00:05:46.759 --> 00:05:51.399
<v Speaker 3>return address, no way to uh anything on a stack. Right,

95
00:05:51.639 --> 00:05:55.720
<v Speaker 3>the earliest machines had no jump instructions. They were just linear,

96
00:05:56.079 --> 00:05:59.199
<v Speaker 3>linear steps and if you wanted to, if you want

97
00:05:59.240 --> 00:06:02.120
<v Speaker 3>to have a loop, you would take the paper tape

98
00:06:02.160 --> 00:06:04.959
<v Speaker 3>which drove the machine, and you would back it up

99
00:06:05.399 --> 00:06:07.399
<v Speaker 3>and then let it run forward, and then you'd back

100
00:06:07.439 --> 00:06:12.240
<v Speaker 3>it up again. Oh no way, yeah, yeah yeah, And

101
00:06:12.360 --> 00:06:15.040
<v Speaker 3>the operators would have to check the registers to see

102
00:06:15.199 --> 00:06:17.879
<v Speaker 3>whether or not the loop exit condition had been achieved.

103
00:06:19.439 --> 00:06:22.759
<v Speaker 3>But you know, when you're only executting ten instructions a second,

104
00:06:23.680 --> 00:06:25.720
<v Speaker 3>you can do that, and you know a good program

105
00:06:25.800 --> 00:06:32.279
<v Speaker 3>will run for eighty hours with constant operator intervention.

106
00:06:34.720 --> 00:06:39.439
<v Speaker 1>Well, I have to say, I'm living a charmed life.

107
00:06:40.160 --> 00:06:43.879
<v Speaker 3>Yeah. Here we are communicating over the ancestors of these machines,

108
00:06:44.439 --> 00:06:47.680
<v Speaker 3>you know, whipping bits around at a rather impressive rate.

109
00:06:50.680 --> 00:06:53.199
<v Speaker 1>Yeah, that's amazing.

110
00:06:53.399 --> 00:07:01.040
<v Speaker 3>Yes it is. Oh yes, exponential curves. Yeah, we have

111
00:07:01.079 --> 00:07:02.120
<v Speaker 3>an effect over time.

112
00:07:04.439 --> 00:07:09.319
<v Speaker 1>Yeah. Yeah, anyway, it's great stuff. I actually invited you

113
00:07:09.399 --> 00:07:12.920
<v Speaker 1>to come on and talk about and it's this snippet.

114
00:07:12.959 --> 00:07:23.079
<v Speaker 1>It's like, what three minutes, but it was it was interesting. Oh,

115
00:07:23.120 --> 00:07:28.319
<v Speaker 1>tarras on on X says, so that's where you rolling

116
00:07:28.360 --> 00:07:29.519
<v Speaker 1>your own loop comes from.

117
00:07:29.800 --> 00:07:33.720
<v Speaker 3>Yes, they actually didn't do that. They would put the

118
00:07:33.720 --> 00:07:36.160
<v Speaker 3>paper tape into a loop. They'd scotch tape it together.

119
00:07:37.319 --> 00:07:37.800
<v Speaker 1>Yeah.

120
00:07:38.040 --> 00:07:40.319
<v Speaker 3>Yeah, except one time they twisted it and then it

121
00:07:40.360 --> 00:07:42.160
<v Speaker 3>was a mebias strip didn't execute.

122
00:07:42.199 --> 00:07:49.639
<v Speaker 1>Well m m, all right, well let's dive in you.

123
00:07:49.680 --> 00:07:51.480
<v Speaker 1>So this is this video. I don't know if you

124
00:07:51.600 --> 00:07:53.480
<v Speaker 1>posted it or if somebody clipped it from a talk

125
00:07:53.560 --> 00:07:54.800
<v Speaker 1>you gave, but.

126
00:07:54.920 --> 00:07:56.680
<v Speaker 3>It's essentially from a talk. Yeah.

127
00:07:56.879 --> 00:08:02.959
<v Speaker 1>Yeah, so music in the images that show up, and

128
00:08:03.000 --> 00:08:06.240
<v Speaker 1>there's a guy that's massaging his temples.

129
00:08:06.399 --> 00:08:06.600
<v Speaker 4>Right.

130
00:08:08.240 --> 00:08:15.639
<v Speaker 1>Anyway, it's the problem with frameworks and what's interesting, you know,

131
00:08:15.800 --> 00:08:19.480
<v Speaker 1>because we had a similar Ish conversation on Ruby or

132
00:08:19.519 --> 00:08:22.399
<v Speaker 1>on JavaScript Jabber and so it'll come out probably around

133
00:08:22.399 --> 00:08:24.720
<v Speaker 1>the same time as this one. What's interesting to me though,

134
00:08:24.800 --> 00:08:28.160
<v Speaker 1>is that, like we you brought up Rails when we

135
00:08:28.199 --> 00:08:31.800
<v Speaker 1>asked you about it, and then we like totally sidebarred

136
00:08:31.839 --> 00:08:35.399
<v Speaker 1>into react and view and you know, and all the

137
00:08:35.440 --> 00:08:38.320
<v Speaker 1>stuff there and trade offs with maybe he's Veldt or

138
00:08:38.360 --> 00:08:43.080
<v Speaker 1>something like that, and the concerns that we're talking about.

139
00:08:43.440 --> 00:08:45.320
<v Speaker 1>You know, the things our frameworks do for us in

140
00:08:45.399 --> 00:08:50.000
<v Speaker 1>Ruby are I guess some ways similar, but in a

141
00:08:50.000 --> 00:08:53.919
<v Speaker 1>lot of ways it's solving different concerns and different problems.

142
00:08:53.919 --> 00:08:56.480
<v Speaker 1>And so I was kind of curious to see if

143
00:08:56.519 --> 00:08:59.120
<v Speaker 1>we would have the same conversation here or if it

144
00:08:59.279 --> 00:09:03.960
<v Speaker 1>be a bit different just from the standpoint. But uh,

145
00:09:04.039 --> 00:09:07.200
<v Speaker 1>you know, you know, you know, just given the different technologies.

146
00:09:07.200 --> 00:09:10.399
<v Speaker 1>So I keeping that in mind, I just kind of

147
00:09:10.440 --> 00:09:13.960
<v Speaker 1>want to kind of let let you let it rip.

148
00:09:14.080 --> 00:09:17.159
<v Speaker 1>You know what, what are the problems with frameworks, right?

149
00:09:17.399 --> 00:09:18.200
<v Speaker 1>We all love ours.

150
00:09:18.600 --> 00:09:22.440
<v Speaker 3>It was Rails that actually put me on this track, Okay,

151
00:09:22.440 --> 00:09:27.600
<v Speaker 3>because I had been a tepid Rails programmer for a

152
00:09:27.639 --> 00:09:31.000
<v Speaker 3>few years, you know, back when Rails was the big thing.

153
00:09:31.679 --> 00:09:33.759
<v Speaker 3>I don't know what year, that was probably six or

154
00:09:33.840 --> 00:09:34.360
<v Speaker 3>something like that.

155
00:09:34.440 --> 00:09:36.440
<v Speaker 1>Yeah, about then that's when I got into it.

156
00:09:36.639 --> 00:09:38.919
<v Speaker 3>Yeah, okay, So and I was diddling around with it,

157
00:09:38.960 --> 00:09:41.759
<v Speaker 3>and I wrote a couple of applications for this or that,

158
00:09:42.960 --> 00:09:45.600
<v Speaker 3>and then my son showed me an application that he

159
00:09:45.639 --> 00:09:48.440
<v Speaker 3>had written, and I was just reading through it, and

160
00:09:48.519 --> 00:09:52.679
<v Speaker 3>I noticed that the just the directory structure of his

161
00:09:52.799 --> 00:09:56.879
<v Speaker 3>application yelled at me. It just said, ryls rails. I'm

162
00:09:56.960 --> 00:10:00.720
<v Speaker 3>using Rails. And I thought, well, that's odd. Why is

163
00:10:00.840 --> 00:10:05.799
<v Speaker 3>his directory structure so damned opinionated? And well, I mean

164
00:10:05.840 --> 00:10:09.000
<v Speaker 3>that's because Rails is an opinionated frame, right, And that

165
00:10:09.039 --> 00:10:14.240
<v Speaker 3>made me think, well, okay, should it be, or rather,

166
00:10:14.519 --> 00:10:21.200
<v Speaker 3>should I allow Rails's opinionation to influence the structure of

167
00:10:21.240 --> 00:10:25.840
<v Speaker 3>my application? Or should I make sure that I keep

168
00:10:25.919 --> 00:10:30.559
<v Speaker 3>the opinionated structure of Rails at arm's length while I

169
00:10:30.679 --> 00:10:34.240
<v Speaker 3>go ahead and use it. Can I keep all those

170
00:10:34.279 --> 00:10:38.840
<v Speaker 3>opinions from leaking into my application and warping my application?

171
00:10:39.000 --> 00:10:43.519
<v Speaker 3>And that's really what got me onto the thread of frameworks.

172
00:10:43.679 --> 00:10:46.480
<v Speaker 3>And as I was thinking about that, I thought, well, okay,

173
00:10:46.559 --> 00:10:50.120
<v Speaker 3>David is the author of Rails. David Hademeier Hansen, and

174
00:10:50.840 --> 00:10:53.159
<v Speaker 3>he did it for his company. He did it for

175
00:10:53.200 --> 00:10:56.679
<v Speaker 3>thirty seven signals, right, he did all that for him.

176
00:10:57.000 --> 00:10:59.440
<v Speaker 3>He didn't do it for me. And the more I

177
00:10:59.480 --> 00:11:03.360
<v Speaker 3>thought about it, the more I thought, you know, the

178
00:11:03.399 --> 00:11:09.600
<v Speaker 3>more I commit to Rails, the more asymmetric this relationship becomes,

179
00:11:09.960 --> 00:11:12.840
<v Speaker 3>because David is not making any commitment to me at all.

180
00:11:13.320 --> 00:11:16.279
<v Speaker 3>He's not promising to maintain Rails in the direction I

181
00:11:16.399 --> 00:11:19.600
<v Speaker 3>wanted to go. He's not promising to give me any

182
00:11:19.639 --> 00:11:22.679
<v Speaker 3>features that I want. He's going to put in features

183
00:11:22.679 --> 00:11:25.759
<v Speaker 3>that he wants, and if I like them, fine, If

184
00:11:25.759 --> 00:11:29.000
<v Speaker 3>I don't, I can get lost. And he actually put

185
00:11:29.679 --> 00:11:31.679
<v Speaker 3>you know, he went to a conference at one point,

186
00:11:31.720 --> 00:11:34.440
<v Speaker 3>and he bunch of people at that conference, and up

187
00:11:34.480 --> 00:11:37.600
<v Speaker 3>on the screen as he's standing there, right behind him

188
00:11:37.720 --> 00:11:40.440
<v Speaker 3>were two words. The first one started with f androm.

189
00:11:40.440 --> 00:11:43.799
<v Speaker 3>The second one started with why. And so I thought, yeah,

190
00:11:44.200 --> 00:11:48.559
<v Speaker 3>I probably don't want to make a big commitment to

191
00:11:48.679 --> 00:11:52.480
<v Speaker 3>an author who has no commitment to me. I don't

192
00:11:52.519 --> 00:11:56.039
<v Speaker 3>mind using the stuff as long as I can kind

193
00:11:56.080 --> 00:11:58.720
<v Speaker 3>of keep it at at some kind of a distance,

194
00:11:58.759 --> 00:12:02.679
<v Speaker 3>build a little isolation layer, and prevent myself from being

195
00:12:02.720 --> 00:12:08.519
<v Speaker 3>polluted and trapped in the uh In the opinionated structure

196
00:12:09.240 --> 00:12:12.320
<v Speaker 3>that he is properly creating for himself.

197
00:12:13.320 --> 00:12:15.919
<v Speaker 1>Yeah, it's it's interesting too. I'm just gonna kind of

198
00:12:15.960 --> 00:12:18.919
<v Speaker 1>pile onto this idea a bit like if you go

199
00:12:19.039 --> 00:12:25.480
<v Speaker 1>watch the last keynotes that that David gave at when

200
00:12:25.480 --> 00:12:28.159
<v Speaker 1>we say David is DHH folks for the people that

201
00:12:28.200 --> 00:12:29.720
<v Speaker 1>aren't following along.

202
00:12:30.519 --> 00:12:32.480
<v Speaker 3>A guy, I hold him very high regard, by.

203
00:12:32.399 --> 00:12:35.919
<v Speaker 1>The way, right, Yeah, I mean I've known David now

204
00:12:35.960 --> 00:12:38.679
<v Speaker 1>for several years, and so I call him David, and

205
00:12:38.720 --> 00:12:43.759
<v Speaker 1>I don't anyway, but he like, if you go watch

206
00:12:43.799 --> 00:12:47.279
<v Speaker 1>the talks, right, he's talking about stuff that's terrific stuff, right,

207
00:12:47.639 --> 00:12:50.279
<v Speaker 1>and it's like, oh I want that, Oh I love that.

208
00:12:50.639 --> 00:12:53.120
<v Speaker 1>Oh I really But if you if you're paying attention

209
00:12:53.200 --> 00:12:55.919
<v Speaker 1>to his talk, what he says is is, Hey, we're

210
00:12:55.960 --> 00:13:00.000
<v Speaker 1>introducing this new thing and here's the problem. It's solved

211
00:13:00.159 --> 00:13:04.000
<v Speaker 1>for us at base Camp, right, I mean, all every

212
00:13:04.039 --> 00:13:07.559
<v Speaker 1>single thing it's and we had this problem at base

213
00:13:07.559 --> 00:13:09.759
<v Speaker 1>camp and we solved it with this, and now you

214
00:13:09.799 --> 00:13:12.200
<v Speaker 1>can use it too, right. And granted a lot of

215
00:13:12.240 --> 00:13:14.240
<v Speaker 1>those are things that I want solved to and so

216
00:13:14.440 --> 00:13:17.440
<v Speaker 1>I'm perfectly happy to pick them up. But but yeah,

217
00:13:17.519 --> 00:13:20.080
<v Speaker 1>I mean the truth is is a lot of the

218
00:13:20.080 --> 00:13:23.440
<v Speaker 1>stuff that ends up in Rails is stuff that they need.

219
00:13:23.519 --> 00:13:26.000
<v Speaker 1>And then yeah, they do get contributions from other companies

220
00:13:26.919 --> 00:13:29.960
<v Speaker 1>that have other concerns, and they'll they'll accept those, right,

221
00:13:30.559 --> 00:13:34.000
<v Speaker 1>but you know, then it's solving some other person's problem

222
00:13:34.000 --> 00:13:36.879
<v Speaker 1>that's can contributing to the framework. But the vast majority

223
00:13:36.879 --> 00:13:39.919
<v Speaker 1>of the stuff that he goes up and announces, he

224
00:13:40.399 --> 00:13:44.159
<v Speaker 1>basically says it, this solved this problem for us at

225
00:13:44.159 --> 00:13:44.679
<v Speaker 1>base Camp.

226
00:13:45.000 --> 00:13:51.360
<v Speaker 3>Yeah, and that's great. It's just maybe I can use

227
00:13:51.399 --> 00:13:54.200
<v Speaker 3>that to solve my problem, and maybe there's a way

228
00:13:54.279 --> 00:13:56.840
<v Speaker 3>that I can use it to solve my problem without

229
00:13:56.919 --> 00:14:01.480
<v Speaker 3>making a gigantic commitment to it, without heerding from some

230
00:14:01.799 --> 00:14:05.480
<v Speaker 3>base class that they wrote, or without you know, forcing

231
00:14:05.559 --> 00:14:09.879
<v Speaker 3>my application to adopt the structure that they want.

232
00:14:10.879 --> 00:14:14.159
<v Speaker 1>Yeah, Rails Magic, what do you think of Valentino.

233
00:14:17.159 --> 00:14:22.759
<v Speaker 5>It's so it's hard because the structure of the application,

234
00:14:23.840 --> 00:14:28.519
<v Speaker 5>if you're a contractor, as an example, a consultant, having

235
00:14:28.600 --> 00:14:31.279
<v Speaker 5>that be the same for all of the applications that

236
00:14:31.320 --> 00:14:34.679
<v Speaker 5>you have to look at is such a huge benefit, right,

237
00:14:35.279 --> 00:14:38.000
<v Speaker 5>And having a lot of the things normalized, maybe not

238
00:14:38.120 --> 00:14:43.279
<v Speaker 5>everything that reels normalized, but like the normality across like

239
00:14:44.120 --> 00:14:47.200
<v Speaker 5>just like if you're looking at hundreds of applications right

240
00:14:47.360 --> 00:14:51.120
<v Speaker 5>throughout a year, like you just save incredible amount of

241
00:14:51.159 --> 00:14:55.360
<v Speaker 5>time and context, right, Like you don't have to rethink. Okay, well,

242
00:14:55.559 --> 00:14:59.039
<v Speaker 5>uncle Bob today decided to use a different you know

243
00:14:59.200 --> 00:15:02.679
<v Speaker 5>structure because you know maybe that it was a more

244
00:15:02.679 --> 00:15:06.200
<v Speaker 5>appropriate design decision, right, But it's different than maybe some

245
00:15:06.279 --> 00:15:08.440
<v Speaker 5>of the other ones that you know you more typically

246
00:15:09.039 --> 00:15:11.679
<v Speaker 5>will take on. And so you have to like then

247
00:15:11.759 --> 00:15:14.840
<v Speaker 5>have to reframe your thinking and gain regain context. And

248
00:15:14.879 --> 00:15:18.440
<v Speaker 5>there is kind of developer loss across that. Uh even,

249
00:15:18.600 --> 00:15:21.360
<v Speaker 5>but that's the trade off, right, Like you make that

250
00:15:21.559 --> 00:15:26.159
<v Speaker 5>choice upfront, and it's your choice, right, So, but I

251
00:15:26.200 --> 00:15:30.120
<v Speaker 5>mean thinking about bigger teams, like it becomes like really

252
00:15:30.200 --> 00:15:33.240
<v Speaker 5>hard to like start like where do where do you

253
00:15:33.320 --> 00:15:37.399
<v Speaker 5>see like in a larger team structure, like the value

254
00:15:37.799 --> 00:15:43.039
<v Speaker 5>in like creating like the barrier to the framework, right,

255
00:15:43.120 --> 00:15:46.159
<v Speaker 5>Like where where do you start to see Okay, like, uh,

256
00:15:46.639 --> 00:15:49.799
<v Speaker 5>we have started to design our pieces of the application

257
00:15:49.919 --> 00:15:52.559
<v Speaker 5>separate from the framework, Like when does that start to

258
00:15:52.600 --> 00:15:53.039
<v Speaker 5>take off?

259
00:15:53.120 --> 00:15:53.240
<v Speaker 4>Right?

260
00:15:53.240 --> 00:15:55.279
<v Speaker 5>And where does where does that like really start to

261
00:15:55.320 --> 00:15:57.720
<v Speaker 5>fit in the most obvious Well.

262
00:15:57.600 --> 00:16:00.799
<v Speaker 3>I think that the first question that it would face

263
00:16:01.919 --> 00:16:06.320
<v Speaker 3>is you know which framework should I use? Should I

264
00:16:06.639 --> 00:16:09.679
<v Speaker 3>should I start with rails because a lot of people do, right,

265
00:16:09.720 --> 00:16:13.440
<v Speaker 3>they just say, okay, we're just doing rails or whatever framework.

266
00:16:13.480 --> 00:16:15.440
<v Speaker 3>It doesn't matter. I don't want to pick on rails

267
00:16:15.919 --> 00:16:20.519
<v Speaker 3>too much here, Just you know, whatever the framework dujuur is.

268
00:16:20.639 --> 00:16:22.919
<v Speaker 3>They'll say, Okay, let's try that because it's beautiful and

269
00:16:22.960 --> 00:16:25.519
<v Speaker 3>it's gorgeous and we can go really fast. And is

270
00:16:25.559 --> 00:16:29.919
<v Speaker 3>that the right decision to make up front? Or should

271
00:16:29.960 --> 00:16:32.720
<v Speaker 3>you be thinking about? All right, we've got this application,

272
00:16:32.799 --> 00:16:35.639
<v Speaker 3>and this application has a bunch of requirements, and we're

273
00:16:35.639 --> 00:16:37.559
<v Speaker 3>going to need this kind of data storage, and we're

274
00:16:37.559 --> 00:16:42.000
<v Speaker 3>gonna need this kind of computational structure, and what framework

275
00:16:42.039 --> 00:16:45.600
<v Speaker 3>out there would help us with this? And is there

276
00:16:45.600 --> 00:16:47.840
<v Speaker 3>a framework out there that would help us with this?

277
00:16:49.080 --> 00:16:52.320
<v Speaker 3>Or maybe what we should do is write a little

278
00:16:52.360 --> 00:16:54.960
<v Speaker 3>bit of it, get get a little bit of it going,

279
00:16:55.559 --> 00:16:58.200
<v Speaker 3>and then see if there's a framework that fits into this.

280
00:16:59.200 --> 00:17:01.799
<v Speaker 3>It would also be nice if the framework would be

281
00:17:04.440 --> 00:17:14.119
<v Speaker 3>less demanding of commitment, like I'd like to use it

282
00:17:14.160 --> 00:17:16.200
<v Speaker 3>off on the side, I'd like call it a little

283
00:17:16.200 --> 00:17:17.680
<v Speaker 3>bit and I'd like it to be more of a

284
00:17:17.720 --> 00:17:22.640
<v Speaker 3>library than you know, forcing forcing me to hand execution

285
00:17:22.839 --> 00:17:25.200
<v Speaker 3>control over to it, and then it deigns to call

286
00:17:25.279 --> 00:17:28.160
<v Speaker 3>me back when it needs to. I might want to

287
00:17:28.279 --> 00:17:32.000
<v Speaker 3>maintain control of execution. I might, you know, or I

288
00:17:32.079 --> 00:17:34.119
<v Speaker 3>might I might let it go. But I'd like to

289
00:17:34.119 --> 00:17:38.680
<v Speaker 3>be able to make those decisions with enough information that

290
00:17:38.720 --> 00:17:40.839
<v Speaker 3>I can do so in an informed way.

291
00:17:42.079 --> 00:17:45.039
<v Speaker 1>So yeah, and this is this is kind of where

292
00:17:45.640 --> 00:17:49.920
<v Speaker 1>you begin to lose me a little bit because I

293
00:17:50.480 --> 00:17:52.359
<v Speaker 1>just I don't know, I don't know how you do this.

294
00:17:52.440 --> 00:17:54.960
<v Speaker 1>I mean, do you pick up something simple like Sinatra

295
00:17:55.160 --> 00:17:59.519
<v Speaker 1>or Rhoda or or or do you just start building

296
00:17:59.559 --> 00:18:01.960
<v Speaker 1>the other pieces of your you know, maybe you build

297
00:18:02.039 --> 00:18:07.039
<v Speaker 1>business logic, But I don't know, like, what's the approach

298
00:18:07.079 --> 00:18:11.839
<v Speaker 1>here then to putting it off? Because yeah, rails gives me,

299
00:18:12.119 --> 00:18:15.279
<v Speaker 1>like Valentino said, it kind of gives me a bookshelf

300
00:18:15.319 --> 00:18:18.440
<v Speaker 1>and tells me where to put my stuff. Yeah, and

301
00:18:18.799 --> 00:18:21.640
<v Speaker 1>it solves a bunch of stuff out of the gate.

302
00:18:21.759 --> 00:18:26.759
<v Speaker 1>And so yeah, but at the same time, I really,

303
00:18:28.240 --> 00:18:31.480
<v Speaker 1>you know, it sounds right, you know, especially you know,

304
00:18:31.519 --> 00:18:34.640
<v Speaker 1>I kind of grew up programming under agile development stuff, right,

305
00:18:34.640 --> 00:18:37.480
<v Speaker 1>And you'll never know as little now or as little

306
00:18:37.519 --> 00:18:39.920
<v Speaker 1>as you do now. Kind of thing, And so if

307
00:18:39.960 --> 00:18:42.680
<v Speaker 1>I can put it off and then realize, oh, you know,

308
00:18:42.759 --> 00:18:47.200
<v Speaker 1>maybe Hanami or something else offers, you know, a different

309
00:18:47.200 --> 00:18:49.119
<v Speaker 1>way to think about this that's more in line with

310
00:18:49.200 --> 00:18:52.240
<v Speaker 1>what I want. But how do you do that? How

311
00:18:52.240 --> 00:18:55.960
<v Speaker 1>do you start putting the pieces together without the framework? Then?

312
00:18:56.640 --> 00:19:00.920
<v Speaker 3>Well, so frameworks solve a particular problem. They help you

313
00:19:00.920 --> 00:19:03.079
<v Speaker 3>get things on the screen, they help they help you

314
00:19:03.119 --> 00:19:06.440
<v Speaker 3>get things onto a disk, into a database of some kind,

315
00:19:06.519 --> 00:19:09.160
<v Speaker 3>they help you talk through sockets. There's a whole bunch

316
00:19:09.240 --> 00:19:12.319
<v Speaker 3>of things that frameworks allow you to do. But then

317
00:19:12.359 --> 00:19:15.920
<v Speaker 3>you've got your application, and your application has other things

318
00:19:15.960 --> 00:19:18.880
<v Speaker 3>that it needs to do. There's a reason that your

319
00:19:18.920 --> 00:19:23.079
<v Speaker 3>application exists. There are business rules that don't have anything

320
00:19:23.079 --> 00:19:25.200
<v Speaker 3>to do with the framework. They don't have anything to

321
00:19:25.240 --> 00:19:27.440
<v Speaker 3>do with what's on the screen or what's in the database.

322
00:19:27.759 --> 00:19:31.039
<v Speaker 3>None of that technology matters to the reason that the

323
00:19:31.079 --> 00:19:38.160
<v Speaker 3>application exists. So you can create the core of an application.

324
00:19:38.279 --> 00:19:40.920
<v Speaker 3>You can start with some business rules and you can

325
00:19:41.000 --> 00:19:43.680
<v Speaker 3>just put those together. It's not hard to do. There's

326
00:19:43.680 --> 00:19:46.440
<v Speaker 3>some calculations you've got to do, there's some perhaps some

327
00:19:46.559 --> 00:19:49.400
<v Speaker 3>data storage you have to do, and don't you don't

328
00:19:49.440 --> 00:19:54.160
<v Speaker 3>need to make a commitment to the screen or the database.

329
00:19:54.200 --> 00:19:57.799
<v Speaker 3>You can build a little isolation layer that allows you

330
00:19:57.880 --> 00:20:02.039
<v Speaker 3>to put things on a database, but without knowing what database.

331
00:20:02.079 --> 00:20:05.200
<v Speaker 3>It is just a bunch of interfaces that you implement later.

332
00:20:06.039 --> 00:20:08.240
<v Speaker 3>And there's some way to get things on the screen.

333
00:20:08.279 --> 00:20:10.039
<v Speaker 3>You don't know exactly how you're going to get it

334
00:20:10.079 --> 00:20:12.119
<v Speaker 3>on the screen, but you can at least arrange the

335
00:20:12.279 --> 00:20:15.279
<v Speaker 3>data in a way that you know would eventually get

336
00:20:15.319 --> 00:20:18.440
<v Speaker 3>on the screen. And you can do all of that

337
00:20:19.119 --> 00:20:22.319
<v Speaker 3>without the framework without You can do it without a database.

338
00:20:22.400 --> 00:20:25.279
<v Speaker 3>You can do it without any of the normal kinds

339
00:20:25.319 --> 00:20:28.599
<v Speaker 3>of trappings that you would expect in an application. And

340
00:20:28.640 --> 00:20:31.519
<v Speaker 3>then when you've got enough of it done, and it

341
00:20:31.519 --> 00:20:34.000
<v Speaker 3>doesn't have to be the whole thing, obviously, but when

342
00:20:34.000 --> 00:20:35.559
<v Speaker 3>you've got enough of it done, you look at it

343
00:20:35.599 --> 00:20:38.519
<v Speaker 3>and think, Okay, what framework out there is really going

344
00:20:38.559 --> 00:20:41.480
<v Speaker 3>to help me with this? I really need to get

345
00:20:41.480 --> 00:20:44.000
<v Speaker 3>this on a web page. Maybe you haven't even thought

346
00:20:44.039 --> 00:20:46.359
<v Speaker 3>about a web page yet, right, I really need to

347
00:20:46.400 --> 00:20:48.720
<v Speaker 3>get this on a web page, and Rails is great

348
00:20:48.759 --> 00:20:51.240
<v Speaker 3>at doing that. Maybe I should use Rails. But if

349
00:20:51.279 --> 00:20:54.839
<v Speaker 3>I do use Rails, it would be really nice if

350
00:20:54.880 --> 00:20:59.839
<v Speaker 3>I didn't have to pull all of that rails ecode

351
00:21:00.119 --> 00:21:03.640
<v Speaker 3>to my application. Maybe I can put it all behind

352
00:21:03.640 --> 00:21:07.240
<v Speaker 3>my isolation layer, and then I can call rails happily

353
00:21:07.319 --> 00:21:10.799
<v Speaker 3>through my isolation layer and my application is not necessarily

354
00:21:10.839 --> 00:21:13.839
<v Speaker 3>affected by rails. This is the way I like to

355
00:21:13.880 --> 00:21:16.400
<v Speaker 3>start all applications. I like to start with the business

356
00:21:16.480 --> 00:21:21.039
<v Speaker 3>rules first and then start feeling outwards and see how

357
00:21:21.119 --> 00:21:24.400
<v Speaker 3>much how much of a framework I need. And in

358
00:21:24.440 --> 00:21:27.960
<v Speaker 3>the last one, I told the story of Fitness, And

359
00:21:28.039 --> 00:21:30.759
<v Speaker 3>in Fitness, you know, that was a web application. It's

360
00:21:30.759 --> 00:21:33.680
<v Speaker 3>a wiki, and it's got a database, or at least

361
00:21:33.680 --> 00:21:36.319
<v Speaker 3>we thought it would have a database. And we as

362
00:21:36.359 --> 00:21:38.480
<v Speaker 3>we planned the whole thing out, we thought, well, we're

363
00:21:38.480 --> 00:21:40.599
<v Speaker 3>going to need a web server, and there's a couple

364
00:21:40.680 --> 00:21:43.920
<v Speaker 3>of open source web servers you could get. And didn't

365
00:21:43.920 --> 00:21:46.039
<v Speaker 3>have a big framework in those days, but you know,

366
00:21:46.240 --> 00:21:49.400
<v Speaker 3>the CANU project had a bunch of I think Apache

367
00:21:49.440 --> 00:21:51.799
<v Speaker 3>had some web servers back in two thousand when we

368
00:21:51.839 --> 00:21:54.519
<v Speaker 3>started this, and we thought, you know, maybe we'll get

369
00:21:54.559 --> 00:21:58.680
<v Speaker 3>a database, and we had we thought we'd get my sequel,

370
00:21:58.720 --> 00:22:02.079
<v Speaker 3>because you know, why wouldn't you, And then and then

371
00:22:02.160 --> 00:22:04.640
<v Speaker 3>we just started building, but without any of that stuff.

372
00:22:04.759 --> 00:22:07.279
<v Speaker 3>We just started building just and and what do you

373
00:22:07.319 --> 00:22:08.839
<v Speaker 3>do with the wiki? The first thing you do is

374
00:22:08.880 --> 00:22:13.559
<v Speaker 3>translate wiki text into HTML. Well, okay, that's pretty simple.

375
00:22:14.119 --> 00:22:16.119
<v Speaker 3>Don't need you don't even need a web page for that.

376
00:22:16.400 --> 00:22:18.160
<v Speaker 3>If you don't need a web server for that, all

377
00:22:18.160 --> 00:22:21.000
<v Speaker 3>you need to do is look at the HTML. Uh.

378
00:22:21.039 --> 00:22:22.359
<v Speaker 3>And if you want to get it up on a

379
00:22:22.400 --> 00:22:25.279
<v Speaker 3>web page, it's awfully simple to get a browser and

380
00:22:25.319 --> 00:22:28.279
<v Speaker 3>have it, you know, pull up from HTML from a

381
00:22:28.319 --> 00:22:32.279
<v Speaker 3>flat file or something. So that was very simple. And

382
00:22:32.480 --> 00:22:34.480
<v Speaker 3>at some point we thought, well, we've got to get

383
00:22:34.519 --> 00:22:36.759
<v Speaker 3>it up. We got to talk to a browser, We've

384
00:22:36.759 --> 00:22:38.920
<v Speaker 3>got to be able to talk to a browser. Something's

385
00:22:38.960 --> 00:22:43.440
<v Speaker 3>got to serve these web pages that we're building. And

386
00:22:43.480 --> 00:22:46.400
<v Speaker 3>we thought, well, let's let's go look at let's go

387
00:22:46.440 --> 00:22:49.440
<v Speaker 3>look at the Apache thing. And then and then we thought, well,

388
00:22:50.480 --> 00:22:54.319
<v Speaker 3>how hard is it to build a web server. Well,

389
00:22:54.319 --> 00:22:56.319
<v Speaker 3>it turns out that's about three hundred lines of code.

390
00:22:56.319 --> 00:23:00.000
<v Speaker 3>It's not very hard to serve a web page. Just really,

391
00:23:00.039 --> 00:23:02.720
<v Speaker 3>all you're doing is opening up a socket and throwing

392
00:23:02.759 --> 00:23:05.200
<v Speaker 3>stuff out of the socket. And we thought, well, why

393
00:23:05.240 --> 00:23:07.240
<v Speaker 3>don't we just do that for the time being. You know,

394
00:23:07.400 --> 00:23:09.960
<v Speaker 3>maybe we'll get Apache in there later, but for the

395
00:23:10.000 --> 00:23:11.960
<v Speaker 3>time being We've got three hundred lines of code and

396
00:23:12.000 --> 00:23:14.519
<v Speaker 3>it puts up web babes. It's just fine. And we

397
00:23:14.640 --> 00:23:18.839
<v Speaker 3>kept on working on translating the markup. Eventually we needed

398
00:23:18.880 --> 00:23:21.119
<v Speaker 3>a database, and we thought, well, we could get my

399
00:23:21.319 --> 00:23:25.200
<v Speaker 3>sequel going, but be awfully simple to just store all

400
00:23:25.240 --> 00:23:28.079
<v Speaker 3>these pages in a hash table, you know, and that

401
00:23:28.160 --> 00:23:30.759
<v Speaker 3>kind of looks like a database from the outside looking in.

402
00:23:30.839 --> 00:23:33.720
<v Speaker 3>You you can make calls against the hash table that

403
00:23:33.799 --> 00:23:36.559
<v Speaker 3>looked like a database query. So we build a little

404
00:23:36.640 --> 00:23:39.119
<v Speaker 3>interface that looked like a database query and put a

405
00:23:39.119 --> 00:23:42.119
<v Speaker 3>hash table behind it, and kept on working and working,

406
00:23:42.200 --> 00:23:44.319
<v Speaker 3>and we got the whole dog On program up and

407
00:23:44.400 --> 00:23:47.119
<v Speaker 3>running old wiki and all of the stuff that it

408
00:23:47.240 --> 00:23:50.160
<v Speaker 3>was doing, with lots of extra stuff that we were

409
00:23:50.160 --> 00:23:54.599
<v Speaker 3>doing in fitness, and we didn't have a database, and

410
00:23:54.640 --> 00:23:57.319
<v Speaker 3>we had our own little tiny web server. And then

411
00:23:58.000 --> 00:23:59.720
<v Speaker 3>we thought, well, I mean, we got to get this

412
00:23:59.720 --> 00:24:01.960
<v Speaker 3>stuff on discs somehow, because we can't just keep it

413
00:24:02.000 --> 00:24:04.720
<v Speaker 3>in a hash table. And Michael Feathers was there at

414
00:24:04.759 --> 00:24:06.599
<v Speaker 3>the time, and he just wrote a little thing that

415
00:24:06.960 --> 00:24:10.359
<v Speaker 3>dumped it all out to a flat file, and now

416
00:24:10.400 --> 00:24:13.839
<v Speaker 3>we had persistence. We didn't use my sequel for the persistence,

417
00:24:13.880 --> 00:24:16.880
<v Speaker 3>and we didn't use apatche for the web server, and

418
00:24:16.920 --> 00:24:18.799
<v Speaker 3>we put the whole dog On thing together. It's it's

419
00:24:18.799 --> 00:24:23.079
<v Speaker 3>in one jar file and just turned it loose, and

420
00:24:23.160 --> 00:24:24.799
<v Speaker 3>you know, people were using it and using it. I

421
00:24:24.799 --> 00:24:27.759
<v Speaker 3>think it's still got a fairly significant user base today

422
00:24:27.799 --> 00:24:32.839
<v Speaker 3>after twenty five years. So that that's a story of

423
00:24:33.279 --> 00:24:36.519
<v Speaker 3>how I like to build from the inside out and

424
00:24:36.599 --> 00:24:40.000
<v Speaker 3>feel my way towards the outside world.

425
00:24:42.599 --> 00:24:45.400
<v Speaker 5>It's funny you mentioned it like that because I feel

426
00:24:45.400 --> 00:24:49.880
<v Speaker 5>like from a real developer standpoint is like backwards where

427
00:24:51.519 --> 00:24:53.640
<v Speaker 5>for sure, like you think about even just like the

428
00:24:53.680 --> 00:24:56.160
<v Speaker 5>small design decisions where people you know, you'll create a

429
00:24:56.200 --> 00:24:59.480
<v Speaker 5>service object which is just a class that like does

430
00:24:59.599 --> 00:25:03.880
<v Speaker 5>one responsibility. But it's really like you have this design

431
00:25:04.680 --> 00:25:07.640
<v Speaker 5>as a thing because like you have to do something

432
00:25:07.680 --> 00:25:10.759
<v Speaker 5>separate from the framework, and there's form objects and all

433
00:25:10.799 --> 00:25:12.640
<v Speaker 5>these different kind of objects that people have come up

434
00:25:12.680 --> 00:25:16.480
<v Speaker 5>with to augment what they you know, to make their

435
00:25:16.519 --> 00:25:19.759
<v Speaker 5>own thing kind of like to make a pattern out

436
00:25:19.759 --> 00:25:23.079
<v Speaker 5>of like, you know something because almost like the framework

437
00:25:23.119 --> 00:25:26.079
<v Speaker 5>is so like, uh, you know, opinionated, you want to

438
00:25:26.119 --> 00:25:29.480
<v Speaker 5>make opinionated patterns, and so it does have like kind

439
00:25:29.519 --> 00:25:32.519
<v Speaker 5>of that translating effect. But I like you're you're thinking

440
00:25:32.559 --> 00:25:36.559
<v Speaker 5>of like boundaries for sure. I think like creating boundaries

441
00:25:36.640 --> 00:25:39.440
<v Speaker 5>is like super important from like an applicant, like focusing

442
00:25:39.480 --> 00:25:44.880
<v Speaker 5>on what like you're actually delivering for your users. That's unique, right,

443
00:25:45.759 --> 00:25:48.640
<v Speaker 5>And like it's funny because like there's there's a Ruby

444
00:25:48.720 --> 00:25:53.039
<v Speaker 5>gem called Packwork, you know, designed by Shopify, and if

445
00:25:53.039 --> 00:25:55.160
<v Speaker 5>you haven't heard, it's like, uh, you know, a way

446
00:25:55.200 --> 00:25:58.720
<v Speaker 5>of just like creating those boundaries in isolation within a

447
00:25:58.799 --> 00:26:02.240
<v Speaker 5>real system, right, So it's like something that was created

448
00:26:02.319 --> 00:26:05.640
<v Speaker 5>to snap into a Reels thing to isolate it from Reels,

449
00:26:06.119 --> 00:26:08.039
<v Speaker 5>which is just a little bit funny because we're doing

450
00:26:08.079 --> 00:26:11.359
<v Speaker 5>again working backwards and it's and it's super funny to

451
00:26:11.400 --> 00:26:14.279
<v Speaker 5>me because like you know, this all comes from like

452
00:26:14.720 --> 00:26:17.519
<v Speaker 5>every everything in Reels is built on Rack, which is

453
00:26:17.559 --> 00:26:21.359
<v Speaker 5>like honestly a really great design framework because it has

454
00:26:21.400 --> 00:26:24.920
<v Speaker 5>like at this bare minimum, it's just like you know,

455
00:26:25.240 --> 00:26:28.599
<v Speaker 5>individual modules that you can drop or not write, and

456
00:26:28.640 --> 00:26:30.759
<v Speaker 5>you can add and stack on however many you want,

457
00:26:31.039 --> 00:26:34.720
<v Speaker 5>and all those individual pieces like uh you know, mutator

458
00:26:34.799 --> 00:26:39.480
<v Speaker 5>or adjust the stack that it's in individually and in isolation.

459
00:26:39.599 --> 00:26:42.079
<v Speaker 5>It's so it's easy to test, easy to swap in

460
00:26:42.079 --> 00:26:45.720
<v Speaker 5>and out and I really like the design of RACK

461
00:26:45.839 --> 00:26:50.359
<v Speaker 5>personally as a framework because it is like, you know,

462
00:26:50.599 --> 00:26:54.759
<v Speaker 5>super modular, which is funny because reels is terms supposed

463
00:26:54.759 --> 00:26:57.720
<v Speaker 5>to be modular, and a lot of ways it is

464
00:26:58.279 --> 00:27:00.480
<v Speaker 5>you can start removing, you know, if you don't want

465
00:27:00.519 --> 00:27:02.720
<v Speaker 5>active record for database, you don't have to use it.

466
00:27:03.480 --> 00:27:05.440
<v Speaker 5>You don't have to just like use all the standards.

467
00:27:06.519 --> 00:27:08.799
<v Speaker 5>And it's funny because like that was a common practice

468
00:27:09.160 --> 00:27:11.799
<v Speaker 5>you know, in the early days of like even group

469
00:27:11.880 --> 00:27:14.440
<v Speaker 5>on right, Like you would just like, oh, you have

470
00:27:14.559 --> 00:27:18.400
<v Speaker 5>your your rails stack like explicitly defined in your setup

471
00:27:18.799 --> 00:27:20.319
<v Speaker 5>and say, oh, yeah, I'm gonna use all of these

472
00:27:20.319 --> 00:27:22.519
<v Speaker 5>things all the time. And now it's just like, well,

473
00:27:22.519 --> 00:27:25.119
<v Speaker 5>we were just going to require reels and be done

474
00:27:25.119 --> 00:27:27.640
<v Speaker 5>with it, and so it has kind of moved away

475
00:27:27.640 --> 00:27:31.440
<v Speaker 5>from that. But I'm curious, like it when you're thinking

476
00:27:31.440 --> 00:27:36.000
<v Speaker 5>about like, yeah, I just want to write something to

477
00:27:36.119 --> 00:27:40.240
<v Speaker 5>disk and that works and that's fine. Like as like

478
00:27:40.480 --> 00:27:44.119
<v Speaker 5>let's say like something became super popular and you started

479
00:27:44.160 --> 00:27:46.519
<v Speaker 5>to have like a lot of people working on it

480
00:27:46.599 --> 00:27:48.759
<v Speaker 5>and having to like get up to speed with all

481
00:27:48.799 --> 00:27:53.000
<v Speaker 5>these individual like customizations, Like at what point where's the

482
00:27:53.039 --> 00:27:54.079
<v Speaker 5>diminishing return there?

483
00:27:54.160 --> 00:27:54.319
<v Speaker 4>Right?

484
00:27:54.359 --> 00:27:56.559
<v Speaker 5>Like where is it, Like, Okay, we built all these

485
00:27:56.559 --> 00:27:59.440
<v Speaker 5>custom things that people have to manage over time and

486
00:27:59.480 --> 00:28:02.240
<v Speaker 5>make sure our secure and and things like that, Like

487
00:28:02.720 --> 00:28:05.599
<v Speaker 5>where where do you stop? Like do you go down

488
00:28:05.640 --> 00:28:12.119
<v Speaker 5>and like build compiler code? Like you know, like, uh,

489
00:28:12.359 --> 00:28:15.200
<v Speaker 5>what is your reasoning on? Like you know, what is

490
00:28:15.319 --> 00:28:19.400
<v Speaker 5>something worth like implementing custom versus like just adopted in

491
00:28:19.440 --> 00:28:20.000
<v Speaker 5>the framework.

492
00:28:20.160 --> 00:28:22.279
<v Speaker 3>Well, A lot of it for me, A lot of

493
00:28:22.319 --> 00:28:26.519
<v Speaker 3>it is control. How much control do I have over

494
00:28:26.559 --> 00:28:29.599
<v Speaker 3>the parts of my system? And if I if I

495
00:28:29.680 --> 00:28:32.640
<v Speaker 3>surrender to a database plug in of some kind, like

496
00:28:32.720 --> 00:28:35.680
<v Speaker 3>my sequel or something else, I lose control over that

497
00:28:36.279 --> 00:28:39.640
<v Speaker 3>and that's now under somebody else's control. And I'm I

498
00:28:39.680 --> 00:28:42.720
<v Speaker 3>am a I don't want to say I'm a slave,

499
00:28:42.880 --> 00:28:47.640
<v Speaker 3>but I'm I am a subject to the whims of

500
00:28:47.680 --> 00:28:51.400
<v Speaker 3>whatever they do. And that bothers me. So I want

501
00:28:51.400 --> 00:28:54.200
<v Speaker 3>to I want to put a little isolation in there now.

502
00:28:54.640 --> 00:28:56.880
<v Speaker 3>I'm not going to rewrite a compiler. I don't need

503
00:28:56.920 --> 00:28:59.680
<v Speaker 3>a new language. I trust that the language is not

504
00:28:59.680 --> 00:29:02.079
<v Speaker 3>going to do stupid things. And that's not always a

505
00:29:02.119 --> 00:29:07.759
<v Speaker 3>good trust. I mean I left C plus plus, you know,

506
00:29:09.119 --> 00:29:12.480
<v Speaker 3>and I left Java eventually too, because they you know,

507
00:29:12.599 --> 00:29:16.279
<v Speaker 3>standards committees. As soon as the language gets into a

508
00:29:16.319 --> 00:29:21.200
<v Speaker 3>standards committee, I think the end is in sight because

509
00:29:21.240 --> 00:29:23.559
<v Speaker 3>they're just going to keep on going and going and

510
00:29:23.599 --> 00:29:27.759
<v Speaker 3>going and adding more and more deluged crap into the language,

511
00:29:27.799 --> 00:29:30.480
<v Speaker 3>and at some point you have to get a simple language.

512
00:29:31.799 --> 00:29:36.200
<v Speaker 3>But for the like for fitness example, going back to

513
00:29:36.240 --> 00:29:38.920
<v Speaker 3>the fitness example, we chose Java as the language because

514
00:29:38.960 --> 00:29:41.160
<v Speaker 3>it was kind of the obvious choice in the day.

515
00:29:41.920 --> 00:29:44.839
<v Speaker 3>And it's still all written in Java, and it's fine,

516
00:29:44.880 --> 00:29:48.000
<v Speaker 3>everybody's happy with it. Okay, great, I'm not going to

517
00:29:48.079 --> 00:29:52.440
<v Speaker 3>do another big project in Java because you know, it's

518
00:29:52.519 --> 00:29:56.839
<v Speaker 3>it's way out of control at this point. So I

519
00:29:57.359 --> 00:29:59.880
<v Speaker 3>look at that and think, I want to keep control

520
00:30:00.240 --> 00:30:03.400
<v Speaker 3>over as much of this system as I can and

521
00:30:03.480 --> 00:30:07.599
<v Speaker 3>relinquish as little control as possible. And I can do

522
00:30:07.640 --> 00:30:12.279
<v Speaker 3>that by trusting the vendors that I get, like the

523
00:30:12.400 --> 00:30:15.720
<v Speaker 3>Java language, and then building isolation barriers to all of

524
00:30:15.759 --> 00:30:19.000
<v Speaker 3>the things I don't trust. Interesting, I don't know if

525
00:30:19.000 --> 00:30:19.960
<v Speaker 3>that answered your question.

526
00:30:22.759 --> 00:30:26.640
<v Speaker 5>I guess, so, I guess I'm My concern with like

527
00:30:26.759 --> 00:30:30.720
<v Speaker 5>anything custom is maintenance costs, right, Like yeah, and so

528
00:30:30.880 --> 00:30:32.799
<v Speaker 5>like that's the first thing I think about any time

529
00:30:32.880 --> 00:30:36.079
<v Speaker 5>I create something new, that isn't like just some standard

530
00:30:37.039 --> 00:30:42.359
<v Speaker 5>thing that most people know, it's all like what.

531
00:30:42.440 --> 00:30:47.240
<v Speaker 3>Yeah. I think that happened to us with Fitness was

532
00:30:47.279 --> 00:30:51.000
<v Speaker 3>that the amount of code that we had to invest

533
00:30:52.039 --> 00:30:54.240
<v Speaker 3>in these things that you would normally do with a

534
00:30:54.319 --> 00:30:58.920
<v Speaker 3>framework was minimal. I mean, the maintenance costs were almost

535
00:30:59.000 --> 00:31:02.240
<v Speaker 3>non existence. We didn't need and in the end, we

536
00:31:02.279 --> 00:31:05.480
<v Speaker 3>didn't need a relational database. We didn't know that upfront.

537
00:31:05.559 --> 00:31:07.759
<v Speaker 3>Upfront we thought we would need one. In the end

538
00:31:07.759 --> 00:31:10.039
<v Speaker 3>we didn't need one. And what does it take to

539
00:31:10.039 --> 00:31:12.440
<v Speaker 3>take a hashtable and dump it out to flat files. It's,

540
00:31:12.559 --> 00:31:15.119
<v Speaker 3>you know, not a lot of code. We didn't need

541
00:31:15.119 --> 00:31:17.480
<v Speaker 3>a web server because we put one together. Three hundred

542
00:31:17.519 --> 00:31:20.359
<v Speaker 3>lines of code, a lot of lot to maintain there.

543
00:31:20.759 --> 00:31:24.319
<v Speaker 3>So one of the things that I've found is that

544
00:31:25.079 --> 00:31:29.319
<v Speaker 3>if I'm careful about making these these framework like decisions,

545
00:31:30.119 --> 00:31:33.279
<v Speaker 3>I may be able to replace the bulk of a

546
00:31:33.319 --> 00:31:37.880
<v Speaker 3>framework with something much simpler that's easier to maintain than

547
00:31:37.880 --> 00:31:38.680
<v Speaker 3>the framework is.

548
00:31:41.880 --> 00:31:47.839
<v Speaker 1>So I'm just trying to think here then, because you know,

549
00:31:48.079 --> 00:31:51.240
<v Speaker 1>somebody could listen to this and be forgiven for thinking,

550
00:31:51.319 --> 00:31:55.359
<v Speaker 1>Oh so Bob's advocating that maybe we don't use frameworks.

551
00:31:55.720 --> 00:31:57.839
<v Speaker 3>Yeah, no, that's not what I'm advocating.

552
00:31:57.400 --> 00:32:03.759
<v Speaker 1>Right, So my question then is, okay, so what point

553
00:32:04.119 --> 00:32:07.880
<v Speaker 1>do you consider adopting a framework, Because, as you said before,

554
00:32:07.960 --> 00:32:10.519
<v Speaker 1>a lot of times people go in and it's like,

555
00:32:10.799 --> 00:32:15.279
<v Speaker 1>I need a new web thingy that does whatever it

556
00:32:15.359 --> 00:32:18.759
<v Speaker 1>is that I need done, and we use rails for

557
00:32:18.799 --> 00:32:21.559
<v Speaker 1>everything else here, So we're just gonna stamp rails on

558
00:32:21.599 --> 00:32:25.480
<v Speaker 1>it and go, and you're advocating for maybe a more

559
00:32:25.519 --> 00:32:29.079
<v Speaker 1>measured approach where you solve some of the other problems. First, yeah,

560
00:32:29.160 --> 00:32:34.200
<v Speaker 1>so what point in this life cycle do I go, oh, well,

561
00:32:34.359 --> 00:32:36.920
<v Speaker 1>maybe you know, maybe I do need a framework, or

562
00:32:36.960 --> 00:32:38.359
<v Speaker 1>maybe I don't need a framework.

563
00:32:39.680 --> 00:32:43.000
<v Speaker 3>There's several several decision points there, right, First, so number

564
00:32:43.039 --> 00:32:45.000
<v Speaker 3>one is you've maybe you've got a little bit of

565
00:32:45.039 --> 00:32:47.799
<v Speaker 3>an application going, you haven't invested in a framework yet,

566
00:32:47.839 --> 00:32:50.680
<v Speaker 3>You've got a few business rules cooking, and then you think,

567
00:32:50.759 --> 00:32:53.960
<v Speaker 3>all right, you know, I need something to help me

568
00:32:54.119 --> 00:32:58.319
<v Speaker 3>with X. Whatever XES might be putting things in the database,

569
00:32:58.400 --> 00:33:01.000
<v Speaker 3>might be getting things on the screen, might be pushing

570
00:33:01.000 --> 00:33:03.279
<v Speaker 3>things out to a service, whatever X is. I need

571
00:33:03.519 --> 00:33:07.400
<v Speaker 3>help with this X thing. And if the first thing

572
00:33:07.440 --> 00:33:09.759
<v Speaker 3>I would do is look at, well, how hard is

573
00:33:09.799 --> 00:33:13.519
<v Speaker 3>this X? Thing to do myself. And if it's easy

574
00:33:13.599 --> 00:33:16.039
<v Speaker 3>enough to do myself, you know, like writing a hash

575
00:33:16.079 --> 00:33:19.160
<v Speaker 3>table out to a flat file, Well, I'm gonna do

576
00:33:19.200 --> 00:33:24.319
<v Speaker 3>that first. Now, my my, my supposition there is that

577
00:33:24.319 --> 00:33:27.000
<v Speaker 3>that won't last. And that, by the way, that's the

578
00:33:27.000 --> 00:33:29.759
<v Speaker 3>way we felt about the fitness decision. We thought that

579
00:33:29.839 --> 00:33:32.240
<v Speaker 3>the writing it out to a flat file is a stopgap.

580
00:33:32.759 --> 00:33:35.839
<v Speaker 3>We thought we would still go to a relational database.

581
00:33:36.200 --> 00:33:39.319
<v Speaker 3>We just never did. So that's the first thing is

582
00:33:39.319 --> 00:33:41.359
<v Speaker 3>I would I would say, Okay, is there some way

583
00:33:41.480 --> 00:33:44.119
<v Speaker 3>I can get close to this X thing that I

584
00:33:44.200 --> 00:33:48.599
<v Speaker 3>need by doing something myself, something simple, something really stupidly simple,

585
00:33:49.039 --> 00:33:52.480
<v Speaker 3>and that'll that'll give me more time, and I might

586
00:33:52.519 --> 00:33:55.799
<v Speaker 3>have to go to a framework to solve X or

587
00:33:55.839 --> 00:33:59.720
<v Speaker 3>maybe not. Now at some point you think, okay, I

588
00:34:00.319 --> 00:34:02.640
<v Speaker 3>gotta get to the framework. I did this recently with

589
00:34:02.680 --> 00:34:05.559
<v Speaker 3>another application I was working on. I was trying to

590
00:34:05.599 --> 00:34:10.199
<v Speaker 3>stay away from a gooey framework and I didn't want

591
00:34:10.239 --> 00:34:11.599
<v Speaker 3>to do it. I didn't want it. And then in

592
00:34:11.639 --> 00:34:14.519
<v Speaker 3>the end I thought, okay, I just can't deal with

593
00:34:15.079 --> 00:34:18.239
<v Speaker 3>all the little editing fields and the double clicking and

594
00:34:18.239 --> 00:34:20.840
<v Speaker 3>the cursor blinking and all that stuff. I don't want

595
00:34:20.840 --> 00:34:22.760
<v Speaker 3>to have to write all that code myself. I'm just

596
00:34:22.800 --> 00:34:26.280
<v Speaker 3>gonna have to use a guy framework, and unfortunately I

597
00:34:26.320 --> 00:34:29.719
<v Speaker 3>picked the wrong one. I picked Swing, and so now

598
00:34:29.760 --> 00:34:33.320
<v Speaker 3>I'm gonna pickle. I don't have to get rid of Swing,

599
00:34:33.800 --> 00:34:36.360
<v Speaker 3>tear it out of there and replace it with something else.

600
00:34:36.519 --> 00:34:39.119
<v Speaker 3>But you do eventually you face that, right that there's

601
00:34:39.159 --> 00:34:43.800
<v Speaker 3>this point where X you can't do X yourself. So

602
00:34:43.920 --> 00:34:46.840
<v Speaker 3>now you've got two options. You know you're gonna have

603
00:34:46.880 --> 00:34:50.760
<v Speaker 3>to use a framework. Do you commit to the framework

604
00:34:50.800 --> 00:34:54.199
<v Speaker 3>and live with it forever, or do you isolate yourself

605
00:34:54.199 --> 00:34:57.119
<v Speaker 3>from the framework. The mistake I made with Swing is

606
00:34:57.119 --> 00:35:00.440
<v Speaker 3>that I did not properly isolate myself from Swing, because

607
00:35:00.519 --> 00:35:04.920
<v Speaker 3>Swing is not an isolatable framework. If you use Swing,

608
00:35:05.360 --> 00:35:08.360
<v Speaker 3>you have to commit to it, and so I committed

609
00:35:08.400 --> 00:35:10.199
<v Speaker 3>to it, and now now I'm in a pickle. I've

610
00:35:10.199 --> 00:35:14.199
<v Speaker 3>got to dump it and throw it away. But sometimes

611
00:35:15.320 --> 00:35:19.639
<v Speaker 3>you can take a step into a framework but keep

612
00:35:19.639 --> 00:35:22.880
<v Speaker 3>it isolated enough so that you can feel it out

613
00:35:24.199 --> 00:35:29.000
<v Speaker 3>and defer the defer the commitment. Use it, but defer

614
00:35:29.039 --> 00:35:31.400
<v Speaker 3>the commitment for a while, and you may find it

615
00:35:31.440 --> 00:35:33.800
<v Speaker 3>that's sufficient, or you may in the end just say

616
00:35:33.840 --> 00:35:36.559
<v Speaker 3>now there's no way I can do this without making

617
00:35:36.599 --> 00:35:40.320
<v Speaker 3>a commitment. And I understand the cost and the risk

618
00:35:40.400 --> 00:35:44.960
<v Speaker 3>of making the commitment, but it's worth it. And that's

619
00:35:45.239 --> 00:35:48.320
<v Speaker 3>that's the chain of decision making that I wish people

620
00:35:48.400 --> 00:35:53.599
<v Speaker 3>would make. What I see people do is say, Man,

621
00:35:53.639 --> 00:36:00.519
<v Speaker 3>we got this new application to do, let's fire up rails. Guilty, Okay,

622
00:36:00.679 --> 00:36:04.880
<v Speaker 3>I do that. Maybe maybe that's not the first decision

623
00:36:04.920 --> 00:36:05.280
<v Speaker 3>to make.

624
00:36:09.639 --> 00:36:14.920
<v Speaker 5>Yeah, I mean speaking to this though, like it's hard.

625
00:36:15.280 --> 00:36:19.239
<v Speaker 5>So the whole like premise of like DAHG and the

626
00:36:19.239 --> 00:36:22.480
<v Speaker 5>one person framework and rails is like the core principle

627
00:36:22.519 --> 00:36:26.440
<v Speaker 5>is you know, as he states, conceptual compression, right like

628
00:36:27.039 --> 00:36:30.400
<v Speaker 5>basically hiding away all the details that most people won't

629
00:36:30.400 --> 00:36:32.239
<v Speaker 5>have to know so they don't have to know it

630
00:36:33.280 --> 00:36:36.480
<v Speaker 5>and so like, because I know, like, especially as you're

631
00:36:36.519 --> 00:36:41.480
<v Speaker 5>early on coding, even middle right like, it's hard to

632
00:36:41.719 --> 00:36:45.360
<v Speaker 5>create abstractions, right Like, it's hard to choose the right naming,

633
00:36:45.760 --> 00:36:49.360
<v Speaker 5>choose the right communication layers, right and so like these

634
00:36:49.360 --> 00:36:53.840
<v Speaker 5>are very hard like design problems and challenges that most

635
00:36:53.840 --> 00:36:56.880
<v Speaker 5>people will face. And it's easy to make mess right

636
00:36:57.000 --> 00:36:59.800
<v Speaker 5>like if you start, especially if you start from nothing,

637
00:37:00.239 --> 00:37:02.320
<v Speaker 5>like you can very easily Okay, And I'm just gonna

638
00:37:02.320 --> 00:37:03.840
<v Speaker 5>make like I'm gonna start with just like a command

639
00:37:03.840 --> 00:37:06.719
<v Speaker 5>line application and it's one script and it has five lines,

640
00:37:07.039 --> 00:37:10.400
<v Speaker 5>and it's just gonna like I'll put standard out right

641
00:37:10.480 --> 00:37:13.519
<v Speaker 5>and like that's the application, and like next thing, you know,

642
00:37:13.639 --> 00:37:16.599
<v Speaker 5>you have, like you know, a thousand lines of code

643
00:37:16.639 --> 00:37:19.559
<v Speaker 5>that's all like you know, entangled, and like you know,

644
00:37:19.599 --> 00:37:22.519
<v Speaker 5>it's very easy to blow things up, and so like

645
00:37:22.559 --> 00:37:27.760
<v Speaker 5>where like at what point do you like where where

646
00:37:27.760 --> 00:37:30.960
<v Speaker 5>do you like recommend people like to look for like

647
00:37:31.320 --> 00:37:35.400
<v Speaker 5>building better abstractions and like how to like make these

648
00:37:35.400 --> 00:37:40.719
<v Speaker 5>design choices Like it's you know, you don't want to

649
00:37:40.800 --> 00:37:45.360
<v Speaker 5>end up basically like designing up front too much, too right,

650
00:37:45.639 --> 00:37:48.159
<v Speaker 5>Like how how do you find that balance?

651
00:37:49.519 --> 00:37:51.960
<v Speaker 3>Well, I've been writing code for you know, well over

652
00:37:52.039 --> 00:37:55.880
<v Speaker 3>fifty years. So for me, the creation of abstractions, I

653
00:37:55.880 --> 00:37:56.159
<v Speaker 3>think he.

654
00:37:56.239 --> 00:37:59.559
<v Speaker 1>Just said he's been coding longer than we've been breathing, Valentino,

655
00:38:03.840 --> 00:38:06.239
<v Speaker 1>not collectively. I told you I'm forty five.

656
00:38:06.360 --> 00:38:13.199
<v Speaker 3>But yeah, well so you know, make creating abstractions for

657
00:38:13.320 --> 00:38:15.840
<v Speaker 3>me is a relatively simple thing. I can envision the

658
00:38:15.880 --> 00:38:18.840
<v Speaker 3>system in my mind and see where all the pieces

659
00:38:18.880 --> 00:38:21.639
<v Speaker 3>are and figure out the abstraction. It's not very difficult

660
00:38:21.679 --> 00:38:25.280
<v Speaker 3>for me. I can imagine, however, that people who are

661
00:38:25.360 --> 00:38:27.679
<v Speaker 3>much newer to programming find that to be something of

662
00:38:27.679 --> 00:38:30.920
<v Speaker 3>a challenge. I remember that I certainly did when I

663
00:38:31.000 --> 00:38:33.119
<v Speaker 3>was in my twenties, right that you know, made a

664
00:38:33.159 --> 00:38:35.880
<v Speaker 3>lot of mistakes. And how do you deal with that?

665
00:38:36.239 --> 00:38:38.000
<v Speaker 3>You get some old people on your team, is what

666
00:38:38.039 --> 00:38:42.079
<v Speaker 3>you do. You get some guys who know what they're doing,

667
00:38:42.679 --> 00:38:46.199
<v Speaker 3>and you have them be the team leaders, and you

668
00:38:46.199 --> 00:38:48.800
<v Speaker 3>you know, you know they can be the fore man

669
00:38:48.880 --> 00:38:51.119
<v Speaker 3>and they can say, okay, guys, you know we don't

670
00:38:51.159 --> 00:38:54.119
<v Speaker 3>need to ruge. Yes, the framework is fancy and it's

671
00:38:54.199 --> 00:38:57.519
<v Speaker 3>very nice, but let's try this one little thing first.

672
00:38:58.960 --> 00:39:01.199
<v Speaker 3>See if we can. Can you see if we can.

673
00:39:02.599 --> 00:39:05.880
<v Speaker 6>Slowly and any wisdom you can impart here on like

674
00:39:05.960 --> 00:39:09.320
<v Speaker 6>maybe like what you're thinking is when you're like trying

675
00:39:09.320 --> 00:39:12.000
<v Speaker 6>to like, let's say, like you have a task at

676
00:39:12.079 --> 00:39:14.239
<v Speaker 6>hand that you know, you have this problem you're trying

677
00:39:14.239 --> 00:39:16.320
<v Speaker 6>to solve, Like what's the first.

678
00:39:16.039 --> 00:39:18.599
<v Speaker 5>Thing you start to do to maybe tease out what

679
00:39:18.679 --> 00:39:21.519
<v Speaker 5>the abstractions are and how to model things.

680
00:39:21.760 --> 00:39:27.360
<v Speaker 3>So there's a frame of mind that I like to

681
00:39:27.400 --> 00:39:33.239
<v Speaker 3>put myself into, which is to find the underlying abstraction,

682
00:39:33.440 --> 00:39:37.599
<v Speaker 3>and to find the underlying abstraction, you have to divorce

683
00:39:38.000 --> 00:39:42.159
<v Speaker 3>the whole problem from detail. So you have to enumerate

684
00:39:42.199 --> 00:39:45.599
<v Speaker 3>all the details. Now, the details are all enumerated in

685
00:39:45.639 --> 00:39:48.440
<v Speaker 3>the requirements. When you get a bunch of requirements, what

686
00:39:48.519 --> 00:39:51.719
<v Speaker 3>you are getting is a load of details, because that's

687
00:39:51.760 --> 00:39:54.440
<v Speaker 3>what all the marketing people and all the business people,

688
00:39:54.440 --> 00:39:57.280
<v Speaker 3>they're all writing down the details. And you have to

689
00:39:57.360 --> 00:40:00.480
<v Speaker 3>look at this and you have to go, Okay, all

690
00:40:00.519 --> 00:40:07.880
<v Speaker 3>these details are driving at something else, something core, and

691
00:40:07.920 --> 00:40:11.159
<v Speaker 3>so one by one you subtract out the details and

692
00:40:11.199 --> 00:40:14.199
<v Speaker 3>you envision where this thing is actually trying to go.

693
00:40:14.599 --> 00:40:17.960
<v Speaker 3>So they you know, they'll give you a whole bunch

694
00:40:18.000 --> 00:40:21.920
<v Speaker 3>of wireframes and the supposition, of course, is that this

695
00:40:21.960 --> 00:40:23.880
<v Speaker 3>is going to be on a screen, and it's probably

696
00:40:23.880 --> 00:40:26.639
<v Speaker 3>on the web, and they've got you know, Webby like buttons,

697
00:40:26.679 --> 00:40:30.480
<v Speaker 3>and they've got Webby like scroll bars and dialogue boxes

698
00:40:30.519 --> 00:40:32.920
<v Speaker 3>that would come up on a web and the requirements

699
00:40:33.039 --> 00:40:36.320
<v Speaker 3>just look like it's web And then you say, okay,

700
00:40:36.360 --> 00:40:39.599
<v Speaker 3>get rid of all these details. What is really going

701
00:40:39.880 --> 00:40:43.639
<v Speaker 3>on in here? Bit by bit, you rip away the

702
00:40:43.719 --> 00:40:46.880
<v Speaker 3>details one by one, and then you stare at what's

703
00:40:46.960 --> 00:40:51.039
<v Speaker 3>left over and if you can, if you can describe

704
00:40:51.559 --> 00:40:57.320
<v Speaker 3>the purpose of the application without using any of the detailed.

705
00:40:56.920 --> 00:41:02.000
<v Speaker 2>Words the web page or the dialogue box, or the

706
00:41:02.000 --> 00:41:06.000
<v Speaker 2>button or clicking or dragging, if you can, if you

707
00:41:06.079 --> 00:41:10.719
<v Speaker 2>can say what this application does without mentioning any of

708
00:41:10.719 --> 00:41:14.480
<v Speaker 2>those details, then you are close to the underlying abstraction.

709
00:41:15.280 --> 00:41:18.480
<v Speaker 3>And then at that point you can start building back up. So, okay,

710
00:41:18.679 --> 00:41:22.320
<v Speaker 3>now I get it. Now I know what this application

711
00:41:22.559 --> 00:41:26.599
<v Speaker 3>is actually doing. I know the core loop, I know

712
00:41:27.599 --> 00:41:31.880
<v Speaker 3>what the steps are inside, and now I can start

713
00:41:31.880 --> 00:41:35.599
<v Speaker 3>to build it. And you know, maybe it shouldn't go

714
00:41:35.639 --> 00:41:38.320
<v Speaker 3>on a web page, maybe it should go on something else.

715
00:41:38.360 --> 00:41:44.599
<v Speaker 3>And maybe maybe we shouldn't store the data in Oracle.

716
00:41:45.440 --> 00:41:48.840
<v Speaker 3>Maybe maybe it should go somewhere else. You know, maybe

717
00:41:49.360 --> 00:41:55.400
<v Speaker 3>maybe this core idea is better implemented with a different

718
00:41:55.519 --> 00:42:00.679
<v Speaker 3>set of details. But you can't get there until until

719
00:42:00.719 --> 00:42:03.360
<v Speaker 3>you've gotten rid of all those details. And that that

720
00:42:03.360 --> 00:42:08.480
<v Speaker 3>that just takes will and effort right to just stare

721
00:42:08.559 --> 00:42:12.239
<v Speaker 3>at the problem and reduce it down to the barest

722
00:42:12.320 --> 00:42:18.400
<v Speaker 3>bones and then then then re reinflated, but reinflated in

723
00:42:18.679 --> 00:42:22.000
<v Speaker 3>a direction that is better for everybody.

724
00:42:22.400 --> 00:42:25.920
<v Speaker 1>Yeah, well, it's it's interesting too, because I think you

725
00:42:26.039 --> 00:42:29.239
<v Speaker 1>also one thing, well you you kind of said it

726
00:42:29.280 --> 00:42:34.000
<v Speaker 1>when you started, But it's like when I'm helping my

727
00:42:34.079 --> 00:42:36.960
<v Speaker 1>kids with their math homework. You know, Valentino asked, well,

728
00:42:37.000 --> 00:42:38.880
<v Speaker 1>how do you how do you tease out those abstractions?

729
00:42:39.239 --> 00:42:41.440
<v Speaker 1>And you said, well, I've been programming for fifty years,

730
00:42:41.960 --> 00:42:45.760
<v Speaker 1>and you know, I help my kids with their math problems. Right,

731
00:42:46.159 --> 00:42:48.440
<v Speaker 1>I'll look at it and I'll say that's wrong, right,

732
00:42:48.480 --> 00:42:49.840
<v Speaker 1>and they're like, well, how did you how did you

733
00:42:49.840 --> 00:42:52.320
<v Speaker 1>figure that out so fast? Well, I've been doing math

734
00:42:52.360 --> 00:42:54.039
<v Speaker 1>for a really long time, and I've done it lots

735
00:42:54.039 --> 00:42:57.079
<v Speaker 1>and lots of times, and so I think I think

736
00:42:57.159 --> 00:43:00.639
<v Speaker 1>a lot of this is also just getting in solving

737
00:43:00.679 --> 00:43:03.400
<v Speaker 1>these kinds of problems and doing a whole bunch of

738
00:43:03.440 --> 00:43:06.960
<v Speaker 1>this dirty work and figuring out, oh, okay, when I

739
00:43:07.039 --> 00:43:11.639
<v Speaker 1>see this, it means this, you know, you know, you

740
00:43:11.719 --> 00:43:14.519
<v Speaker 1>start doing some of that mental pattern matching because you've

741
00:43:14.599 --> 00:43:18.519
<v Speaker 1>you've done it so many times, right, and and so

742
00:43:18.599 --> 00:43:20.559
<v Speaker 1>I think there's a lot there. But yeah, I love

743
00:43:20.599 --> 00:43:24.519
<v Speaker 1>the approach that you outline, because yeah, a lot of

744
00:43:24.559 --> 00:43:27.760
<v Speaker 1>times it is it's just down to grit and you know,

745
00:43:27.880 --> 00:43:30.440
<v Speaker 1>moving away from those abstractions. Now I have to say

746
00:43:30.960 --> 00:43:33.239
<v Speaker 1>that a lot of so the you know that you

747
00:43:33.280 --> 00:43:36.800
<v Speaker 1>get the wireframe and all that stuff. See, I need

748
00:43:36.880 --> 00:43:39.559
<v Speaker 1>you to come and explain to the clients that I

749
00:43:39.599 --> 00:43:43.719
<v Speaker 1>often work with that the application is not the wireframe,

750
00:43:45.199 --> 00:43:48.079
<v Speaker 1>because I'll tell you when I show up to a

751
00:43:48.119 --> 00:43:50.599
<v Speaker 1>stand up meeting or a demo meeting, they want to

752
00:43:50.639 --> 00:43:54.920
<v Speaker 1>see all of the stuff that you told me to ignore. Yeah,

753
00:43:55.199 --> 00:43:58.559
<v Speaker 1>and so how do you balance this, right? How do

754
00:43:58.599 --> 00:44:01.800
<v Speaker 1>you balance out the Okay, this is an app that

755
00:44:01.880 --> 00:44:04.199
<v Speaker 1>does X, Y and z, right, Like, right now, I'm

756
00:44:04.199 --> 00:44:07.760
<v Speaker 1>working on an app that tracks transactions and does a

757
00:44:07.760 --> 00:44:12.079
<v Speaker 1>whole bunch of math for hedge funds right at its core. Right,

758
00:44:12.840 --> 00:44:16.800
<v Speaker 1>But if they don't see the stuff on the screen,

759
00:44:17.559 --> 00:44:20.360
<v Speaker 1>then they aren't happy people. And so how do you

760
00:44:20.400 --> 00:44:21.079
<v Speaker 1>balance that out?

761
00:44:23.440 --> 00:44:23.719
<v Speaker 3>Well?

762
00:44:26.960 --> 00:44:29.760
<v Speaker 1>Right, because they want the rails stuff that, right, all

763
00:44:29.800 --> 00:44:32.400
<v Speaker 1>that stuff that I got from my framework they want

764
00:44:32.480 --> 00:44:33.559
<v Speaker 1>it now.

765
00:44:34.440 --> 00:44:36.199
<v Speaker 3>Well, yeah, they think they want it because that's how

766
00:44:36.239 --> 00:44:39.400
<v Speaker 3>they envision it, right, right. They have a vision of

767
00:44:39.400 --> 00:44:41.559
<v Speaker 3>it and they're envisioning it that way, which is fine.

768
00:44:42.639 --> 00:44:44.440
<v Speaker 3>And one of the ways you can One of the

769
00:44:44.440 --> 00:44:52.039
<v Speaker 3>ways you can do that is to give them glimpses. So,

770
00:44:52.199 --> 00:44:54.159
<v Speaker 3>for example, one of the things that we did long

771
00:44:54.199 --> 00:44:58.480
<v Speaker 3>long ago, is we used Fitness. Fitness is a an

772
00:44:58.519 --> 00:45:03.159
<v Speaker 3>acceptance testing frame. So you enter data into tables and

773
00:45:03.639 --> 00:45:07.559
<v Speaker 3>it'll send that data into your application, and then it

774
00:45:07.599 --> 00:45:10.159
<v Speaker 3>will compare that with the results that are in the

775
00:45:10.159 --> 00:45:12.920
<v Speaker 3>table as well and see if you pass or fail.

776
00:45:13.119 --> 00:45:16.639
<v Speaker 3>So you pose a test as a set of table data.

777
00:45:17.320 --> 00:45:20.119
<v Speaker 3>And what's interesting about that is that since it's a wiki,

778
00:45:20.760 --> 00:45:24.280
<v Speaker 3>you can change the data in the table. So a

779
00:45:24.440 --> 00:45:28.679
<v Speaker 3>very nice thing to do for marketing people and users

780
00:45:29.159 --> 00:45:31.679
<v Speaker 3>is to give them an interface like that where all

781
00:45:31.679 --> 00:45:34.760
<v Speaker 3>the calculations are being done, and then you give them

782
00:45:34.800 --> 00:45:38.000
<v Speaker 3>a simple interface something like Fitness or something else doesn't

783
00:45:38.000 --> 00:45:41.719
<v Speaker 3>really matter, and let them fiddle. And they could see

784
00:45:41.760 --> 00:45:46.199
<v Speaker 3>they can see the actual business rules executing, which is

785
00:45:46.239 --> 00:45:48.719
<v Speaker 3>really what they want to see. They want to see

786
00:45:48.719 --> 00:45:52.559
<v Speaker 3>the business rules executing, right. They understand that if the

787
00:45:52.679 --> 00:45:55.480
<v Speaker 3>form is a little different, it doesn't matter. They want

788
00:45:55.519 --> 00:45:58.559
<v Speaker 3>to see the business rules executing. They gave you wireframes

789
00:45:58.559 --> 00:46:01.199
<v Speaker 3>because they thought that was the best way. They also

790
00:46:01.480 --> 00:46:05.519
<v Speaker 3>have another viewpoint, which is the customer outward looking viewpoint.

791
00:46:05.719 --> 00:46:07.960
<v Speaker 3>They think that these wireframes are the best way to

792
00:46:08.000 --> 00:46:12.039
<v Speaker 3>communicate with the customer. Yes, fine, fine, but let's make

793
00:46:12.079 --> 00:46:15.679
<v Speaker 3>sure that we're doing the calculations correctly first, and oh, look,

794
00:46:15.719 --> 00:46:17.559
<v Speaker 3>we'll just put it up on some dumb little thing.

795
00:46:17.880 --> 00:46:19.800
<v Speaker 3>We don't have to invest in a horrible framework. We

796
00:46:19.840 --> 00:46:21.760
<v Speaker 3>can just toss it up and look at it, and

797
00:46:21.800 --> 00:46:23.599
<v Speaker 3>you can fiddle with it and play with it and

798
00:46:23.599 --> 00:46:26.840
<v Speaker 3>see if we're doing that part right, because let's get

799
00:46:26.880 --> 00:46:29.320
<v Speaker 3>that part right first, and then we can figure out

800
00:46:29.559 --> 00:46:31.199
<v Speaker 3>how to get it upon the screen with all the

801
00:46:31.239 --> 00:46:34.360
<v Speaker 3>dragon drop booy stuff, and maybe, you know, maybe by

802
00:46:34.400 --> 00:46:36.840
<v Speaker 3>then your ideas will change about how that ought. Just

803
00:46:37.239 --> 00:46:41.360
<v Speaker 3>look to the customer. One of the things about details

804
00:46:42.280 --> 00:46:45.440
<v Speaker 3>is the details are the things that change the core.

805
00:46:45.519 --> 00:46:48.840
<v Speaker 3>Business rules don't, but they don't very much. But all

806
00:46:48.880 --> 00:46:51.079
<v Speaker 3>those core deats, all those details, all those things that

807
00:46:51.119 --> 00:46:53.079
<v Speaker 3>are on the wireframes, all those things that are in

808
00:46:53.079 --> 00:46:56.440
<v Speaker 3>the requirements, they are the things that change the most frequently.

809
00:46:57.440 --> 00:47:00.199
<v Speaker 3>So you want to kind of get them outside of

810
00:47:00.400 --> 00:47:04.440
<v Speaker 3>the of the core so the core can remain safe

811
00:47:05.360 --> 00:47:07.039
<v Speaker 3>from the volatility out here.

812
00:47:08.519 --> 00:47:12.400
<v Speaker 1>Right. This kind of reminds me of the talk. I'll

813
00:47:12.440 --> 00:47:13.840
<v Speaker 1>have to go find it, booz. I think it was

814
00:47:13.880 --> 00:47:18.280
<v Speaker 1>Gary Bernhardt that talked about having the He talked about

815
00:47:18.280 --> 00:47:19.760
<v Speaker 1>having the core of his app and then he had

816
00:47:19.800 --> 00:47:23.440
<v Speaker 1>all the yep, and I think somebody else talked about

817
00:47:23.599 --> 00:47:26.159
<v Speaker 1>some of the similar ideas with like hexagonal architecture and

818
00:47:26.239 --> 00:47:26.679
<v Speaker 1>things like that.

819
00:47:26.960 --> 00:47:30.400
<v Speaker 3>Yeah, it's all part of it. Yeah, all these architectures,

820
00:47:30.760 --> 00:47:34.880
<v Speaker 3>we all have the same general idea. Hexagonal architecture, clean architecture,

821
00:47:36.159 --> 00:47:39.480
<v Speaker 3>ports and adapters, all of them have the same basic idea. Right,

822
00:47:39.679 --> 00:47:42.599
<v Speaker 3>get the details out here because they're vulnerable, Get the

823
00:47:42.599 --> 00:47:46.000
<v Speaker 3>business rules in here because they're not vulnerable. And these

824
00:47:46.039 --> 00:47:49.519
<v Speaker 3>are the family jewels here, you want those, right, everything

825
00:47:49.519 --> 00:47:51.159
<v Speaker 3>else out here, well, you can fiddle it that.

826
00:47:52.000 --> 00:47:53.880
<v Speaker 1>Yeah.

827
00:47:53.920 --> 00:47:58.320
<v Speaker 5>So I want to quickly talk about framework speed, right,

828
00:47:58.440 --> 00:48:02.079
<v Speaker 5>Like one of the biggest points of using a framework

829
00:48:02.239 --> 00:48:04.920
<v Speaker 5>is just like speed of development, right, because you have

830
00:48:04.960 --> 00:48:07.360
<v Speaker 5>all these normalizations. Everybody's familiar with all the things, and

831
00:48:07.840 --> 00:48:10.679
<v Speaker 5>you can tie into all the framework things that they

832
00:48:10.960 --> 00:48:13.960
<v Speaker 5>you know, are their opinionated. Just go with the opinions

833
00:48:14.079 --> 00:48:15.679
<v Speaker 5>and you can skip a lot of steps.

834
00:48:16.119 --> 00:48:16.360
<v Speaker 3>Yep.

835
00:48:16.800 --> 00:48:21.519
<v Speaker 5>So, like how can we start to like simultaneously create

836
00:48:21.559 --> 00:48:25.639
<v Speaker 5>the barriers without reducing that speed, or like how can

837
00:48:25.679 --> 00:48:28.440
<v Speaker 5>we keep up the speed at the same time? Like

838
00:48:28.519 --> 00:48:31.400
<v Speaker 5>at what point do you say, I mean obviously for

839
00:48:31.599 --> 00:48:34.159
<v Speaker 5>like the business rules, it makes sense to slow down

840
00:48:34.440 --> 00:48:37.039
<v Speaker 5>because those are the most important. But I mean next

841
00:48:37.039 --> 00:48:41.119
<v Speaker 5>to that, like, once you have those like isolated and resolved, Like,

842
00:48:41.599 --> 00:48:43.400
<v Speaker 5>at what points do you make those trade offs to

843
00:48:43.440 --> 00:48:44.000
<v Speaker 5>slow down?

844
00:48:45.559 --> 00:48:48.280
<v Speaker 3>Well, okay, you're saying you're saying something that I'm not

845
00:48:48.400 --> 00:48:51.719
<v Speaker 3>quite sure is the premise is correct, Like you like

846
00:48:51.880 --> 00:48:55.239
<v Speaker 3>slowing down. So I don't think there's a problem with

847
00:48:55.360 --> 00:48:59.320
<v Speaker 3>using a framework as long as you can touch it lightly. Right.

848
00:48:59.400 --> 00:49:02.719
<v Speaker 3>So let's say that you've got some business rules and

849
00:49:02.760 --> 00:49:05.599
<v Speaker 3>you think they're pretty good, and you want to get

850
00:49:05.639 --> 00:49:07.880
<v Speaker 3>those up on a screen, and you don't want to

851
00:49:07.920 --> 00:49:11.480
<v Speaker 3>invest in writing your own screen stuff. So you think, okay,

852
00:49:11.679 --> 00:49:13.639
<v Speaker 3>I'll use this framework, but I'm going to use the

853
00:49:13.679 --> 00:49:16.000
<v Speaker 3>framework lightly. I'm not going to dive in and do

854
00:49:16.159 --> 00:49:20.679
<v Speaker 3>every fancy thing that the framework is allowing me to do.

855
00:49:20.760 --> 00:49:23.400
<v Speaker 3>I'm going to just get some dumb stuff on the

856
00:49:23.440 --> 00:49:29.920
<v Speaker 3>screen without a lot of nonsense for the moment. Now,

857
00:49:29.920 --> 00:49:31.360
<v Speaker 3>that doesn't take you a lot of time. It's not

858
00:49:31.400 --> 00:49:34.119
<v Speaker 3>going to stop you. It's not going to slow you down. Right,

859
00:49:34.360 --> 00:49:37.880
<v Speaker 3>It's going to give you and your customers information that

860
00:49:37.920 --> 00:49:41.119
<v Speaker 3>they can then use to take the next step. And

861
00:49:41.159 --> 00:49:43.840
<v Speaker 3>at the next step, you think, well, that next step

862
00:49:43.880 --> 00:49:46.599
<v Speaker 3>is probably going to make me do a bigger commitment

863
00:49:46.639 --> 00:49:49.760
<v Speaker 3>to the framework. Is there some way I can isolate

864
00:49:49.840 --> 00:49:52.800
<v Speaker 3>myself or do I just have to decide to make

865
00:49:52.840 --> 00:49:55.440
<v Speaker 3>the commitment to the framework and live with that commitment.

866
00:49:56.440 --> 00:49:59.760
<v Speaker 5>Let me let me sure you're an example of like

867
00:49:59.800 --> 00:50:04.440
<v Speaker 5>the of a slowdown from isolation. Right, Like, so, let's

868
00:50:04.480 --> 00:50:07.119
<v Speaker 5>say somebody has a task and they wanted to create

869
00:50:07.159 --> 00:50:08.880
<v Speaker 5>a quick store. They didn't want to use active record,

870
00:50:08.920 --> 00:50:11.760
<v Speaker 5>they didn't want to store in a database completely understandable,

871
00:50:12.639 --> 00:50:16.480
<v Speaker 5>and basically what they've built starts to evolve into a

872
00:50:16.519 --> 00:50:21.280
<v Speaker 5>more complex storage solution where it starts to be more

873
00:50:21.320 --> 00:50:23.960
<v Speaker 5>complicated to understand. As an example, right like, let's say

874
00:50:23.960 --> 00:50:27.760
<v Speaker 5>they're storing everything as a hash and you know you

875
00:50:27.880 --> 00:50:30.960
<v Speaker 5>have to like have multidimensions in the hash to make

876
00:50:31.000 --> 00:50:33.679
<v Speaker 5>sense of the data that's relational, and it starts to

877
00:50:33.679 --> 00:50:36.079
<v Speaker 5>become more complex for other people to come in and

878
00:50:36.239 --> 00:50:39.239
<v Speaker 5>understand it rather than just like a single person. So

879
00:50:39.239 --> 00:50:41.840
<v Speaker 5>that's just like one small example of like a slowdown.

880
00:50:41.920 --> 00:50:45.760
<v Speaker 5>Right It's like creating some unfamiliar territory in an abstraction

881
00:50:45.840 --> 00:50:47.800
<v Speaker 5>that at the time was maybe a good choice, but

882
00:50:47.880 --> 00:50:51.719
<v Speaker 5>has evolved to something that now is more complicated. Like,

883
00:50:52.360 --> 00:50:54.760
<v Speaker 5>I know for you, it's probably easy to see that, oh,

884
00:50:54.880 --> 00:50:57.920
<v Speaker 5>like this is becoming this is taking on too much

885
00:50:57.960 --> 00:51:01.400
<v Speaker 5>at a certain point in your abstraction. Right, how do

886
00:51:01.440 --> 00:51:04.280
<v Speaker 5>you like, how do you surface these things across your team?

887
00:51:04.480 --> 00:51:04.679
<v Speaker 3>Right?

888
00:51:04.760 --> 00:51:09.000
<v Speaker 5>Like, is it just like peer review is enough or

889
00:51:09.960 --> 00:51:14.119
<v Speaker 5>are there like planning steps that you take to prevent it?

890
00:51:15.519 --> 00:51:18.519
<v Speaker 3>Well, peer review would be a good thing to do,

891
00:51:18.760 --> 00:51:21.159
<v Speaker 3>especially if you've got some experienced people on the team.

892
00:51:21.239 --> 00:51:24.400
<v Speaker 3>Better than peer review would be pair programming. Right, So

893
00:51:24.880 --> 00:51:27.239
<v Speaker 3>if you've got an experienced guy and he sits down

894
00:51:27.280 --> 00:51:29.599
<v Speaker 3>with a younger guy, and the younger guy has been

895
00:51:29.639 --> 00:51:33.480
<v Speaker 3>doing this this clever little data thing, you know. Look, look,

896
00:51:33.519 --> 00:51:36.239
<v Speaker 3>I didn't use the database. I did this instead. I'm

897
00:51:36.320 --> 00:51:38.800
<v Speaker 3>using name value pairs everywhere, and it's just so cool.

898
00:51:39.400 --> 00:51:41.519
<v Speaker 3>And the experienced guy sits down with that and says, yeah,

899
00:51:41.559 --> 00:51:43.000
<v Speaker 3>that is pretty cool. And now let me tell you

900
00:51:43.039 --> 00:51:44.719
<v Speaker 3>what bad thing is going to happen to you because

901
00:51:44.760 --> 00:51:47.800
<v Speaker 3>you're doing that. And let's see if we can construct

902
00:51:47.800 --> 00:51:52.599
<v Speaker 3>an interface between what you've done and what the application

903
00:51:52.800 --> 00:51:55.280
<v Speaker 3>is so that in the event that we need to

904
00:51:55.280 --> 00:51:57.639
<v Speaker 3>get away from your clever little name value pairs, we

905
00:51:57.719 --> 00:52:03.159
<v Speaker 3>can actually use a different structure. This is architect level stuff, right.

906
00:52:03.199 --> 00:52:07.840
<v Speaker 3>Somebody who is they've got ten years of experience, fifteen

907
00:52:07.880 --> 00:52:11.480
<v Speaker 3>years of experience, and they can look at what is

908
00:52:11.519 --> 00:52:14.800
<v Speaker 3>going on and say, hmm, yeah, we need to protect

909
00:52:14.800 --> 00:52:20.840
<v Speaker 3>ourselves and rearrange this a little bit. Most of the

910
00:52:20.920 --> 00:52:24.760
<v Speaker 3>questions you've fired at me are I could rephrase as

911
00:52:26.679 --> 00:52:28.320
<v Speaker 3>how do I deal with the fact that everybody here

912
00:52:28.360 --> 00:52:34.000
<v Speaker 3>is under twenty five? Okay? And you know there's just

913
00:52:34.159 --> 00:52:38.599
<v Speaker 3>no good way to do that. It's important to have

914
00:52:38.679 --> 00:52:42.159
<v Speaker 3>people on the team that are experienced enough to prevent

915
00:52:42.360 --> 00:52:48.440
<v Speaker 3>the prevent the problems. Now. One of the problems with

916
00:52:48.559 --> 00:52:52.199
<v Speaker 3>making the commitment because at some point you may have

917
00:52:52.239 --> 00:52:55.000
<v Speaker 3>to decide I'm going to commit to this framework. I'm

918
00:52:55.000 --> 00:52:57.000
<v Speaker 3>going to live with that. But one of the things

919
00:52:57.039 --> 00:52:59.559
<v Speaker 3>you need to be able to foresee when you make

920
00:52:59.559 --> 00:53:04.000
<v Speaker 3>that commit is just what kind of an impediment the

921
00:53:04.039 --> 00:53:07.559
<v Speaker 3>framework is going to be? What things now that you've

922
00:53:07.559 --> 00:53:11.079
<v Speaker 3>made the commitment, what things is it going to work

923
00:53:11.199 --> 00:53:14.639
<v Speaker 3>against me? At? What things will it prevent me from doing?

924
00:53:15.239 --> 00:53:22.400
<v Speaker 3>And that's a significant issue because as applications grow and

925
00:53:22.440 --> 00:53:26.719
<v Speaker 3>as they get more complicated, the initial help that the

926
00:53:26.760 --> 00:53:32.159
<v Speaker 3>framework gives you will often turn into a drag, something

927
00:53:32.159 --> 00:53:35.360
<v Speaker 3>that slows you down. Then now you've made the commitment,

928
00:53:35.440 --> 00:53:38.079
<v Speaker 3>you're going to be slow, and the more you want

929
00:53:38.119 --> 00:53:40.119
<v Speaker 3>to do with it, the slower you're going to get

930
00:53:40.599 --> 00:53:44.440
<v Speaker 3>because it's fighting you at every turn. The opinions of

931
00:53:44.440 --> 00:53:47.719
<v Speaker 3>the framework are no longer the opinions of the application,

932
00:53:48.320 --> 00:53:52.400
<v Speaker 3>but you're stuck with the opinions of the framework. So

933
00:53:52.760 --> 00:53:57.519
<v Speaker 3>when you make that decision to commit, make sure you're

934
00:53:57.559 --> 00:54:00.800
<v Speaker 3>looking ahead far enough so that it's like, Okay, this

935
00:54:00.920 --> 00:54:04.440
<v Speaker 3>application really is going to go in the direction of

936
00:54:04.480 --> 00:54:07.679
<v Speaker 3>the framework for the next five years. Uh, and we're

937
00:54:07.679 --> 00:54:11.559
<v Speaker 3>not going to run into any of these impediments. That's

938
00:54:11.559 --> 00:54:13.679
<v Speaker 3>a tough decision to make. Again, that takes somebody with

939
00:54:13.719 --> 00:54:14.800
<v Speaker 3>a few years experience.

940
00:54:17.519 --> 00:54:20.679
<v Speaker 1>Yeah. One thing that's interesting because you're you're talking about

941
00:54:20.679 --> 00:54:23.360
<v Speaker 1>this and this kind of came to mind. I don't

942
00:54:23.400 --> 00:54:25.960
<v Speaker 1>know if it makes the point perfectly, but it illustrates

943
00:54:26.000 --> 00:54:30.320
<v Speaker 1>it to a certain degree. So, like I said, I'm

944
00:54:30.320 --> 00:54:34.280
<v Speaker 1>working on this application that you know, manages a hedge fund,

945
00:54:34.920 --> 00:54:40.400
<v Speaker 1>and so when you import transactions into it from another system,

946
00:54:40.599 --> 00:54:42.719
<v Speaker 1>you know, through a CSV or you know, some third

947
00:54:42.719 --> 00:54:47.440
<v Speaker 1>party API, it has to recalculate the you know, the

948
00:54:47.599 --> 00:54:56.119
<v Speaker 1>basically the balance sheet for the hedge fund. And at

949
00:54:56.159 --> 00:54:58.719
<v Speaker 1>a certain point they were using all the railisms in

950
00:54:58.760 --> 00:55:01.800
<v Speaker 1>the app and it was super slow. It took forever

951
00:55:02.880 --> 00:55:06.920
<v Speaker 1>to calculate all those calculations right to work through all

952
00:55:06.960 --> 00:55:09.800
<v Speaker 1>the transactions, and you know, because it had to tally

953
00:55:09.840 --> 00:55:13.840
<v Speaker 1>stuff at each transaction. And so I started looking at

954
00:55:13.880 --> 00:55:17.719
<v Speaker 1>it and started working with it, and realized that I

955
00:55:17.760 --> 00:55:21.079
<v Speaker 1>could do a lot of the work in the database, right,

956
00:55:21.199 --> 00:55:24.239
<v Speaker 1>so I was moving out of the framework. The problem

957
00:55:24.280 --> 00:55:26.920
<v Speaker 1>that I ran into was that rails it does give

958
00:55:26.960 --> 00:55:31.199
<v Speaker 1>you this nice interface to say, here's a sequel string,

959
00:55:31.519 --> 00:55:36.679
<v Speaker 1>do stuff, But then I was in this world of

960
00:55:37.000 --> 00:55:40.679
<v Speaker 1>I've got this really complicated sequel string that I've got

961
00:55:40.719 --> 00:55:43.679
<v Speaker 1>to manage, and the framework didn't really help me with

962
00:55:43.719 --> 00:55:46.639
<v Speaker 1>it at all. And then also figured out that a

963
00:55:46.639 --> 00:55:48.280
<v Speaker 1>lot of the stuff I wanted to do was with

964
00:55:48.400 --> 00:55:51.519
<v Speaker 1>just common table expressions, which is a feature in postgris cool,

965
00:55:52.920 --> 00:55:55.679
<v Speaker 1>and that it had been brought into later versions of

966
00:55:55.719 --> 00:55:57.679
<v Speaker 1>the framework. So now all of a sudden, if I

967
00:55:57.719 --> 00:56:00.719
<v Speaker 1>want to use this version, I've got to I've got

968
00:56:00.719 --> 00:56:02.639
<v Speaker 1>to update, and I've got to adopt all the other

969
00:56:02.719 --> 00:56:06.280
<v Speaker 1>things to get to the newer version. And so that's

970
00:56:06.320 --> 00:56:10.039
<v Speaker 1>where some of this stuff came to light for me, right,

971
00:56:10.320 --> 00:56:12.159
<v Speaker 1>And so there's all kinds of other stuff that I

972
00:56:12.159 --> 00:56:15.519
<v Speaker 1>am doing super fast because I'm so familiar with rails, right,

973
00:56:15.920 --> 00:56:18.920
<v Speaker 1>And I think, you know, just to point it out,

974
00:56:19.119 --> 00:56:21.519
<v Speaker 1>we're not bagging on frameworks. We're just saying there are

975
00:56:21.519 --> 00:56:22.960
<v Speaker 1>trade offs you have to make if you're going to

976
00:56:23.079 --> 00:56:26.920
<v Speaker 1>use them. And so in this case, now, yeah, I'm

977
00:56:27.039 --> 00:56:31.360
<v Speaker 1>making another commitment to another version, and I have to

978
00:56:31.440 --> 00:56:33.800
<v Speaker 1>take on everything else that comes with the new version

979
00:56:33.800 --> 00:56:35.840
<v Speaker 1>of the framework. You guys are real quiet, like I

980
00:56:35.880 --> 00:56:37.320
<v Speaker 1>either said something brilliant or dumb.

981
00:56:37.599 --> 00:56:43.079
<v Speaker 3>So you stated in an undeniable truth that does happen.

982
00:56:43.719 --> 00:56:45.840
<v Speaker 3>And I've seen that kind of thing happen more than

983
00:56:45.880 --> 00:56:49.000
<v Speaker 3>one time, where you get involved with the framework and

984
00:56:49.039 --> 00:56:51.760
<v Speaker 3>it's great for the first three months, and then the

985
00:56:51.760 --> 00:56:55.199
<v Speaker 3>next three months it's like and then the three months

986
00:56:55.239 --> 00:56:56.199
<v Speaker 3>after that is like help.

987
00:56:56.960 --> 00:56:59.280
<v Speaker 1>Yeah, but in this case, it's not in my way.

988
00:56:59.400 --> 00:57:02.360
<v Speaker 1>It just doesn't offer what I need. And in order

989
00:57:02.400 --> 00:57:04.719
<v Speaker 1>to get what I think I need, I've got to

990
00:57:04.719 --> 00:57:06.519
<v Speaker 1>make another commitment.

991
00:57:06.400 --> 00:57:09.559
<v Speaker 3>Yes, yeah, and rearrange a bunch of stuff. So then

992
00:57:09.599 --> 00:57:10.679
<v Speaker 3>you've got to solve.

993
00:57:12.079 --> 00:57:12.920
<v Speaker 1>What I'm trying to get.

994
00:57:13.719 --> 00:57:17.679
<v Speaker 5>Yeah, this brings up a great point about dependency management, right,

995
00:57:17.719 --> 00:57:20.960
<v Speaker 5>and like taking on new dependencies in general, like obviously

996
00:57:21.000 --> 00:57:25.519
<v Speaker 5>has to be weighed. But like, I guess my biggest

997
00:57:27.440 --> 00:57:30.159
<v Speaker 5>thing that I still struggle with is how do you

998
00:57:30.840 --> 00:57:35.559
<v Speaker 5>say something that you're trying to integrate and use just

999
00:57:35.559 --> 00:57:37.840
<v Speaker 5>because you don't understand how it all works and it's

1000
00:57:37.920 --> 00:57:41.119
<v Speaker 5>going to take too much time to tease that apart, right,

1001
00:57:41.199 --> 00:57:43.719
<v Speaker 5>Like I don't build rockets. I'm not going to buy

1002
00:57:43.760 --> 00:57:47.159
<v Speaker 5>a rocket engine and take it apart and like replace something, right,

1003
00:57:47.599 --> 00:57:49.760
<v Speaker 5>because it's gonna take too much time to learn all

1004
00:57:49.760 --> 00:57:53.400
<v Speaker 5>that stuff, right yeh. So and sometimes using a dependency

1005
00:57:53.679 --> 00:57:57.119
<v Speaker 5>gives it affords you that ability, right, and it's a great,

1006
00:57:57.199 --> 00:57:58.039
<v Speaker 5>great tool to use.

1007
00:57:58.039 --> 00:58:01.360
<v Speaker 3>So I guess what I'm getting on is like how do.

1008
00:58:01.320 --> 00:58:05.480
<v Speaker 5>You weigh those things when you're trying to reason about

1009
00:58:05.480 --> 00:58:09.360
<v Speaker 5>the framework? And that this framework is great to use

1010
00:58:09.480 --> 00:58:12.960
<v Speaker 5>because it solves these things that I don't have time

1011
00:58:13.079 --> 00:58:16.400
<v Speaker 5>to reason about, Like do you weigh that as part

1012
00:58:16.559 --> 00:58:20.119
<v Speaker 5>of your design choices or do you try and just

1013
00:58:20.159 --> 00:58:25.000
<v Speaker 5>focus on where your limits are first and then circle

1014
00:58:25.079 --> 00:58:29.239
<v Speaker 5>back to the framework, like you know, where's the cutoff.

1015
00:58:31.159 --> 00:58:34.519
<v Speaker 3>Where's the cutoff? Well, obviously this is a judgment call,

1016
00:58:34.559 --> 00:58:37.239
<v Speaker 3>and the judgment requires some experience. But you know, if

1017
00:58:37.280 --> 00:58:40.920
<v Speaker 3>I'm going to embark upon a real simple app and

1018
00:58:41.000 --> 00:58:43.159
<v Speaker 3>I know it's simple, and I know it's not going

1019
00:58:43.239 --> 00:58:45.559
<v Speaker 3>to be and it's not going to grow over the years,

1020
00:58:45.599 --> 00:58:47.559
<v Speaker 3>it's just going to be a nice, simple little thing,

1021
00:58:48.039 --> 00:58:50.400
<v Speaker 3>and there's a framework out there that just does that.

1022
00:58:50.480 --> 00:58:52.159
<v Speaker 3>I'm going to use that framework. I'm going to make

1023
00:58:52.159 --> 00:58:56.159
<v Speaker 3>a commitment to the framework. I'm gonna use it. And Okay,

1024
00:58:56.239 --> 00:58:59.519
<v Speaker 3>I'm pretty sure that application is not going to grow.

1025
00:59:00.239 --> 00:59:02.599
<v Speaker 3>I could get burned by that decision, but it's not

1026
00:59:02.599 --> 00:59:05.400
<v Speaker 3>going to grow. It's fine, and you know, nine times

1027
00:59:05.440 --> 00:59:08.159
<v Speaker 3>out of ten that'll be the right choice. Then then

1028
00:59:08.199 --> 00:59:11.719
<v Speaker 3>you come up with another application. This application. The guys

1029
00:59:11.760 --> 00:59:15.559
<v Speaker 3>asking for this are serious. They're they're looking ten years

1030
00:59:15.559 --> 00:59:18.800
<v Speaker 3>down the line and they want they want some significant

1031
00:59:18.800 --> 00:59:23.280
<v Speaker 3>stuff done. And so then you think, okay, I could

1032
00:59:23.280 --> 00:59:27.880
<v Speaker 3>get the first year going and really easy with the framework,

1033
00:59:28.679 --> 00:59:31.039
<v Speaker 3>and then after that they'd probably be hell to pay.

1034
00:59:32.639 --> 00:59:36.400
<v Speaker 3>That might be the right decision, might be the right

1035
00:59:36.440 --> 00:59:39.760
<v Speaker 3>decision because you've got time to market issues and startup

1036
00:59:39.800 --> 00:59:42.639
<v Speaker 3>issues and stuff like that, but it might not be

1037
00:59:42.679 --> 00:59:45.760
<v Speaker 3>the right decision. It's worth thinking about that one. It's

1038
00:59:45.760 --> 00:59:50.320
<v Speaker 3>worth saying, Okay, you know, maybe there's a shorter path

1039
00:59:51.400 --> 00:59:55.880
<v Speaker 3>to get to a high value, high value first release

1040
00:59:56.639 --> 01:00:00.679
<v Speaker 3>without making a commitment to something that is going to

1041
01:00:00.840 --> 01:00:05.639
<v Speaker 3>really hurt me a year or two down the line. Now, again,

1042
01:00:05.719 --> 01:00:10.599
<v Speaker 3>all that's just all judgment call. But the first thing

1043
01:00:10.639 --> 01:00:14.719
<v Speaker 3>you want to do is make that judgment call. Put

1044
01:00:14.760 --> 01:00:17.000
<v Speaker 3>it in your head that you're going to make the

1045
01:00:17.079 --> 01:00:19.960
<v Speaker 3>judgment call, and then you're gonna have to live with it.

1046
01:00:20.719 --> 01:00:23.480
<v Speaker 3>The thing you don't want to do is just say, Yep,

1047
01:00:23.519 --> 01:00:28.239
<v Speaker 3>we're going to the framework. No thought, just framework. That's

1048
01:00:28.239 --> 01:00:28.960
<v Speaker 3>what you don't want.

1049
01:00:30.719 --> 01:00:35.360
<v Speaker 5>Yeah, make the decision to follow that up. Like, you know,

1050
01:00:35.760 --> 01:00:39.119
<v Speaker 5>are there things in frameworks that lead you there?

1051
01:00:39.199 --> 01:00:39.360
<v Speaker 4>Right?

1052
01:00:39.440 --> 01:00:42.400
<v Speaker 5>Like are you looking at problems and being like, yeah,

1053
01:00:42.400 --> 01:00:45.840
<v Speaker 5>this framework would be perfect for this thing because of X, Right, Like,

1054
01:00:46.800 --> 01:00:49.840
<v Speaker 5>are there obvious draws to you for you know, some

1055
01:00:49.920 --> 01:00:51.800
<v Speaker 5>frameworks for some purposes?

1056
01:00:52.960 --> 01:00:57.519
<v Speaker 3>Well sure, I mean the demo applications are often very evocative.

1057
01:00:58.159 --> 01:01:01.679
<v Speaker 3>So you look at the demos and and you think, oh, yeah,

1058
01:01:01.719 --> 01:01:05.119
<v Speaker 3>it's exactly what I want to do. And I don't

1059
01:01:05.119 --> 01:01:06.800
<v Speaker 3>think I'm ever gonna want to do more than that.

1060
01:01:07.119 --> 01:01:08.880
<v Speaker 3>You know, why wouldn't I use the framework? Of course,

1061
01:01:08.880 --> 01:01:12.079
<v Speaker 3>I'm going to use the framework at that point, once

1062
01:01:12.159 --> 01:01:14.400
<v Speaker 3>I've made you know, once I've been a little bit

1063
01:01:14.400 --> 01:01:19.159
<v Speaker 3>careful about it. Exactly a good thing to do with frameworks,

1064
01:01:19.199 --> 01:01:21.719
<v Speaker 3>you guys. This doesn't apply to you, guys, but a

1065
01:01:21.760 --> 01:01:24.199
<v Speaker 3>good thing to do with frameworks is just to get

1066
01:01:24.199 --> 01:01:26.960
<v Speaker 3>a framework and write a dumb app, just so that

1067
01:01:27.039 --> 01:01:32.000
<v Speaker 3>you know, you know how how easier hard it is

1068
01:01:32.039 --> 01:01:35.599
<v Speaker 3>for that first puncture, and then then you can help

1069
01:01:35.679 --> 01:01:37.559
<v Speaker 3>that will help you make some decisions as well. You

1070
01:01:37.599 --> 01:01:41.599
<v Speaker 3>guys are long past that. But some people who are

1071
01:01:41.599 --> 01:01:44.039
<v Speaker 3>new and thinking, oh, let's just get you know, whipped

1072
01:01:44.079 --> 01:01:46.199
<v Speaker 3>you do framework out here, and it'll just be perfect.

1073
01:01:47.000 --> 01:01:50.159
<v Speaker 3>Write a couple of apps, little things, just throw away apps,

1074
01:01:50.199 --> 01:01:50.880
<v Speaker 3>just so that you know.

1075
01:01:53.000 --> 01:01:55.400
<v Speaker 1>Yeah, I was going to say, you know, essentially, the

1076
01:01:55.440 --> 01:01:57.400
<v Speaker 1>point that I think both of you are making is

1077
01:01:59.559 --> 01:02:01.599
<v Speaker 1>knowing that you're going to have to make this judgment

1078
01:02:01.719 --> 01:02:04.400
<v Speaker 1>call at some point, right whether or not to pick

1079
01:02:04.519 --> 01:02:09.639
<v Speaker 1>up a framework or a particular framework. Yeah, you can

1080
01:02:09.679 --> 01:02:11.599
<v Speaker 1>take steps to say what do I need to know

1081
01:02:11.639 --> 01:02:15.159
<v Speaker 1>in order to make the right decision, and so then

1082
01:02:15.239 --> 01:02:17.320
<v Speaker 1>it gets into yeah, what do I need to know

1083
01:02:17.360 --> 01:02:19.719
<v Speaker 1>about the framework? What do I need to understand about

1084
01:02:19.719 --> 01:02:22.360
<v Speaker 1>my application and the problems I'm trying to solve, and

1085
01:02:22.400 --> 01:02:26.519
<v Speaker 1>then you can kind of get them to you know, Okay,

1086
01:02:26.559 --> 01:02:29.519
<v Speaker 1>I got this point information and this point of information,

1087
01:02:29.719 --> 01:02:31.880
<v Speaker 1>and I still need a little bit more information here

1088
01:02:32.079 --> 01:02:35.039
<v Speaker 1>and right. So then you start getting closer to being

1089
01:02:35.079 --> 01:02:36.719
<v Speaker 1>able to make a decision one way or the other,

1090
01:02:36.960 --> 01:02:39.320
<v Speaker 1>and the decision may be not yet.

1091
01:02:40.039 --> 01:02:45.559
<v Speaker 5>Yeah, so yeah, yeah, I was semi hopeful with all

1092
01:02:45.639 --> 01:02:50.039
<v Speaker 5>these new AI generator things. As an example, Bolt dot

1093
01:02:50.119 --> 01:02:52.920
<v Speaker 5>new right, like you just say, you give them all

1094
01:02:52.920 --> 01:02:56.000
<v Speaker 5>your the requirements and then they're just like, you know,

1095
01:02:56.000 --> 01:03:01.519
<v Speaker 5>it can help get your demo app ready. Obviously there

1096
01:03:01.519 --> 01:03:04.960
<v Speaker 5>are some dangers there long term vision mind. Yeah, as

1097
01:03:05.000 --> 01:03:09.119
<v Speaker 5>we've outlined here, you know, are there any like is

1098
01:03:09.159 --> 01:03:12.920
<v Speaker 5>there any path to like something in the middle there

1099
01:03:13.039 --> 01:03:16.320
<v Speaker 5>that can help you get and gather the requirements to

1100
01:03:16.440 --> 01:03:19.679
<v Speaker 5>the more modular steps that you need to take rather

1101
01:03:19.760 --> 01:03:21.480
<v Speaker 5>than all at once kind of thing.

1102
01:03:25.079 --> 01:03:27.400
<v Speaker 3>So the application that I've been working on for the

1103
01:03:27.480 --> 01:03:33.239
<v Speaker 3>last couple of years is a it's a a browser

1104
01:03:33.360 --> 01:03:37.440
<v Speaker 3>for a social network. And I started on this and

1105
01:03:37.480 --> 01:03:41.239
<v Speaker 3>I thought, okay, I really don't want to get a

1106
01:03:41.239 --> 01:03:47.039
<v Speaker 3>gooe framework in here. So I found some dumb little

1107
01:03:47.079 --> 01:03:50.800
<v Speaker 3>thing helps me do graphics on the screen. It's really

1108
01:03:50.840 --> 01:03:52.960
<v Speaker 3>low level, you know, like I can put a dot here,

1109
01:03:53.039 --> 01:03:55.400
<v Speaker 3>I can put a character there. It doesn't have any

1110
01:03:55.440 --> 01:03:58.239
<v Speaker 3>dialogue boxes or editing or anything like. This is really

1111
01:03:58.320 --> 01:04:02.960
<v Speaker 3>bare bones. And I I started using that, and you know,

1112
01:04:03.039 --> 01:04:04.920
<v Speaker 3>I was able to get some stuff on the screen.

1113
01:04:05.119 --> 01:04:08.000
<v Speaker 3>But the problems that I needed to solve, we're not

1114
01:04:08.039 --> 01:04:09.920
<v Speaker 3>getting things on the screen. The problems I needed to

1115
01:04:09.960 --> 01:04:13.199
<v Speaker 3>solve were all these web socket things. I had dozens

1116
01:04:13.239 --> 01:04:14.599
<v Speaker 3>of web sockets and I had to be able to

1117
01:04:14.599 --> 01:04:16.599
<v Speaker 3>turn them on and turn them off. And I needed

1118
01:04:16.599 --> 01:04:18.800
<v Speaker 3>to be able to unpack and pack these packets, and

1119
01:04:18.840 --> 01:04:21.840
<v Speaker 3>there was all kinds of cryptography gunk going on. So

1120
01:04:21.960 --> 01:04:24.519
<v Speaker 3>I spent a lot of time on that, and then

1121
01:04:24.519 --> 01:04:26.079
<v Speaker 3>I could get, you know, a couple of words on

1122
01:04:26.119 --> 01:04:28.039
<v Speaker 3>the screen, and I thought, oh, it's really cool. You know,

1123
01:04:28.320 --> 01:04:31.199
<v Speaker 3>I'm actually receiving messages and I can send messages and

1124
01:04:31.239 --> 01:04:34.440
<v Speaker 3>now look at that. And then then I needed to

1125
01:04:34.559 --> 01:04:38.599
<v Speaker 3>edit them, and you know, editing stuff on the screen.

1126
01:04:39.519 --> 01:04:43.280
<v Speaker 3>That's a nightmare. I did not want to write, you know,

1127
01:04:43.480 --> 01:04:46.519
<v Speaker 3>inside Macintosh again, I did not want to write the

1128
01:04:46.559 --> 01:04:50.320
<v Speaker 3>whole gooey framework. And that's when I chose Swing. I

1129
01:04:50.440 --> 01:04:53.239
<v Speaker 3>made this. I made this decision, and it was the

1130
01:04:53.360 --> 01:04:56.639
<v Speaker 3>decision to commit, and I made it based on the

1131
01:04:56.679 --> 01:05:01.800
<v Speaker 3>fact that a lot of other apps had committed to Swing. Okay, probably, okay,

1132
01:05:01.960 --> 01:05:04.679
<v Speaker 3>I can commit to Swing. I already had the guts

1133
01:05:04.679 --> 01:05:06.599
<v Speaker 3>of it, right, I had all the web socket stuff,

1134
01:05:06.599 --> 01:05:09.079
<v Speaker 3>and I had all the fancy decryption and all that

1135
01:05:09.119 --> 01:05:12.559
<v Speaker 3>stuff was going on. I just needed to bolt Swing

1136
01:05:12.639 --> 01:05:16.519
<v Speaker 3>on and I had a nice isolation barrier and the Okay,

1137
01:05:16.599 --> 01:05:19.800
<v Speaker 3>I can probably slip this in. No, there's just no way.

1138
01:05:19.920 --> 01:05:24.559
<v Speaker 3>Swing is just so horribly opinionated, and I've fought through

1139
01:05:24.559 --> 01:05:26.880
<v Speaker 3>that for a year. Just made the wrong choice, wrong

1140
01:05:26.960 --> 01:05:31.639
<v Speaker 3>judgment call. I just can't go on with this application.

1141
01:05:31.920 --> 01:05:33.800
<v Speaker 3>I'm going to have to rip Swing out and replace

1142
01:05:33.840 --> 01:05:37.480
<v Speaker 3>it with something better. And that's going to happen to

1143
01:05:37.519 --> 01:05:40.119
<v Speaker 3>all of us. You know, we are all going to

1144
01:05:40.199 --> 01:05:43.000
<v Speaker 3>make the wrong judgment call and find out about it

1145
01:05:43.039 --> 01:05:48.320
<v Speaker 3>a year later. That's just the way software is. And Okay,

1146
01:05:48.360 --> 01:05:50.239
<v Speaker 3>you've got to kind of look look at that with

1147
01:05:51.039 --> 01:05:55.320
<v Speaker 3>clear eyes and realize, Okay, I'm going to make this

1148
01:05:55.400 --> 01:05:58.079
<v Speaker 3>call and I hope it works out. It might not,

1149
01:05:58.840 --> 01:06:04.599
<v Speaker 3>but don't make call frivolously, right, right, So just use

1150
01:06:04.679 --> 01:06:07.280
<v Speaker 3>the amount of information you got solved. There's an old

1151
01:06:07.320 --> 01:06:12.119
<v Speaker 3>saying it and it comes out of God, where was it?

1152
01:06:13.400 --> 01:06:15.719
<v Speaker 3>I think it was the moon is a harsh mistress.

1153
01:06:16.320 --> 01:06:17.480
<v Speaker 3>Do you ever read that book?

1154
01:06:18.039 --> 01:06:20.440
<v Speaker 5>That's a great book.

1155
01:06:22.920 --> 01:06:24.920
<v Speaker 3>Let me tell you a little story about that one before.

1156
01:06:25.000 --> 01:06:29.000
<v Speaker 3>But in that book there is a quote, and the

1157
01:06:29.079 --> 01:06:35.000
<v Speaker 3>quote is, when faced with something you don't understand, do

1158
01:06:35.199 --> 01:06:38.480
<v Speaker 3>any part of it you do understand, and then look

1159
01:06:38.519 --> 01:06:44.920
<v Speaker 3>at the overall problem again, which is just the basic incrementalism.

1160
01:06:44.960 --> 01:06:50.840
<v Speaker 3>Step right, break it into increments. Don't leap into the

1161
01:06:50.880 --> 01:06:54.559
<v Speaker 3>whole thing. Break it into increments, Solve little bits that

1162
01:06:54.599 --> 01:06:57.400
<v Speaker 3>you do understand or or that you have a chance

1163
01:06:57.440 --> 01:07:00.320
<v Speaker 3>of understanding, and then you can look out order a

1164
01:07:00.360 --> 01:07:02.639
<v Speaker 3>little bit and it'll look different.

1165
01:07:06.360 --> 01:07:06.599
<v Speaker 1>Yeah.

1166
01:07:06.639 --> 01:07:07.320
<v Speaker 3>Great advice.

1167
01:07:07.719 --> 01:07:13.519
<v Speaker 1>Yep. All right, Well I'm gonna push us the pics. Okay,

1168
01:07:13.719 --> 01:07:20.199
<v Speaker 1>this has been so good, Yeah, Valentino, do you want

1169
01:07:20.199 --> 01:07:20.840
<v Speaker 1>to start us off?

1170
01:07:23.199 --> 01:07:23.480
<v Speaker 3>Sure?

1171
01:07:24.440 --> 01:07:27.320
<v Speaker 5>Yeah, all my pics today. I have some awesome coworkers

1172
01:07:27.360 --> 01:07:29.719
<v Speaker 5>and they've been releasing some open source stuff, so I

1173
01:07:29.760 --> 01:07:31.760
<v Speaker 5>wanted to share what they've been working on because it's

1174
01:07:31.800 --> 01:07:37.280
<v Speaker 5>pretty pretty fun stuff. The first one comes from my

1175
01:07:37.400 --> 01:07:41.920
<v Speaker 5>coworker Jordan. He created this gem called Reprise and actually

1176
01:07:42.039 --> 01:07:50.760
<v Speaker 5>uses Rust to make a performance like schedules. So like

1177
01:07:51.039 --> 01:07:53.679
<v Speaker 5>if you use a gem called ice Cube or something

1178
01:07:53.760 --> 01:07:56.920
<v Speaker 5>like this, lets you like define ranges and and have

1179
01:07:56.960 --> 01:08:00.719
<v Speaker 5>like a schedule object that can iterate over things really quickly.

1180
01:08:01.400 --> 01:08:01.679
<v Speaker 3>Uh.

1181
01:08:01.719 --> 01:08:05.920
<v Speaker 5>And he he built it uh using like a Rust

1182
01:08:06.079 --> 01:08:11.960
<v Speaker 5>toolkit that snaps in to the Ruby subsystem called Magnets,

1183
01:08:12.000 --> 01:08:16.199
<v Speaker 5>which is pretty sweet, uh to solve the specific problem.

1184
01:08:16.720 --> 01:08:21.039
<v Speaker 5>Really cool jem. The other one is uh I co

1185
01:08:21.199 --> 01:08:24.199
<v Speaker 5>worker David. He created this uh, this reapol a long

1186
01:08:24.239 --> 01:08:25.840
<v Speaker 5>time ago called Octo.

1187
01:08:26.119 --> 01:08:26.479
<v Speaker 4>UH.

1188
01:08:26.640 --> 01:08:29.720
<v Speaker 5>That's like a knowledge management app that you run locally

1189
01:08:29.760 --> 01:08:34.640
<v Speaker 5>on your system and it's just like really fully featured,

1190
01:08:34.760 --> 01:08:39.000
<v Speaker 5>has and then encryption encryption support, and it's cross platform

1191
01:08:39.079 --> 01:08:42.800
<v Speaker 5>and has all kinds of crazy support in there, and

1192
01:08:42.840 --> 01:08:44.640
<v Speaker 5>you can think of it kind of like Obsidian or

1193
01:08:44.640 --> 01:08:47.960
<v Speaker 5>something like that, but fully open source.

1194
01:08:48.399 --> 01:08:48.520
<v Speaker 3>Uh.

1195
01:08:49.359 --> 01:08:52.279
<v Speaker 5>And the last one is something I haven't gotten to

1196
01:08:52.279 --> 01:08:52.880
<v Speaker 5>play with yet.

1197
01:08:53.159 --> 01:08:55.199
<v Speaker 3>Uh, but.

1198
01:08:58.119 --> 01:09:01.119
<v Speaker 5>My coworker Rob he created this thing called Cambian and

1199
01:09:01.199 --> 01:09:06.680
<v Speaker 5>it's basically a way to configure come all and set

1200
01:09:06.720 --> 01:09:12.079
<v Speaker 5>it up really easily on a Buntu and Debian systems,

1201
01:09:12.520 --> 01:09:14.720
<v Speaker 5>So it's like a configuration tool for comal to just

1202
01:09:14.760 --> 01:09:18.479
<v Speaker 5>make it easy. So that's that's really neat as well.

1203
01:09:20.439 --> 01:09:25.279
<v Speaker 1>Awesome, all right, I'm gonna jump into mine at some

1204
01:09:25.319 --> 01:09:26.800
<v Speaker 1>of those. Am gonna go try out? By the way,

1205
01:09:27.840 --> 01:09:32.520
<v Speaker 1>that's like, oh, I'm working on that. So the first

1206
01:09:32.560 --> 01:09:34.079
<v Speaker 1>one I'm gonna pick. I always do a board game.

1207
01:09:34.920 --> 01:09:36.800
<v Speaker 1>The one that I've been playing with my friends lately

1208
01:09:36.920 --> 01:09:43.199
<v Speaker 1>is Heat and it's a racing game. So your marker

1209
01:09:43.279 --> 01:09:46.239
<v Speaker 1>on the board is race car. The cargoes around the

1210
01:09:46.279 --> 01:09:55.479
<v Speaker 1>track at different points, you get to a curve, and

1211
01:09:55.560 --> 01:09:58.960
<v Speaker 1>if you take the curve too fast, right, so if

1212
01:09:59.000 --> 01:10:02.640
<v Speaker 1>it's like a two curve, and the way you move

1213
01:10:02.800 --> 01:10:05.960
<v Speaker 1>is you you put down cards face down. Everybody does

1214
01:10:06.000 --> 01:10:07.920
<v Speaker 1>this at the same time, and then you just go

1215
01:10:08.000 --> 01:10:10.920
<v Speaker 1>from the front of the pack to the back, and

1216
01:10:11.119 --> 01:10:14.359
<v Speaker 1>everybody flips their cards over and then moves however many

1217
01:10:15.319 --> 01:10:17.680
<v Speaker 1>they put down, and there's some factors in it that'll

1218
01:10:17.720 --> 01:10:19.600
<v Speaker 1>make you go faster or slower. Right, you can put

1219
01:10:19.600 --> 01:10:22.760
<v Speaker 1>one down that you flip cards until you get, you know,

1220
01:10:22.800 --> 01:10:24.560
<v Speaker 1>a card with a mark on it, and then you

1221
01:10:24.600 --> 01:10:28.359
<v Speaker 1>go that many. So if you go around the curve

1222
01:10:28.399 --> 01:10:30.840
<v Speaker 1>too fast, then you take on that much heat. So

1223
01:10:30.880 --> 01:10:32.920
<v Speaker 1>if it's a two curve and you go six, you

1224
01:10:33.000 --> 01:10:36.199
<v Speaker 1>take on four heat. If you run out of heat

1225
01:10:36.239 --> 01:10:40.039
<v Speaker 1>in your engine, then you spin out and you basically

1226
01:10:40.039 --> 01:10:42.239
<v Speaker 1>have to go back to the curve and take the

1227
01:10:42.279 --> 01:10:46.159
<v Speaker 1>curve at a decent speed, and at that point you

1228
01:10:46.199 --> 01:10:49.520
<v Speaker 1>can't go over because you're out of heat in your engine.

1229
01:10:50.279 --> 01:10:53.039
<v Speaker 1>There are ways to cool off, a lot of catch

1230
01:10:53.119 --> 01:10:58.720
<v Speaker 1>up mechanisms that made it a lot of fun. But yeah,

1231
01:10:58.760 --> 01:11:02.520
<v Speaker 1>I mean, that's essential the the crux of the game, right,

1232
01:11:02.560 --> 01:11:05.920
<v Speaker 1>and you can you can draft and then pass other cars.

1233
01:11:06.000 --> 01:11:09.760
<v Speaker 1>You can. I mean, there there are other rules, and

1234
01:11:09.920 --> 01:11:13.159
<v Speaker 1>there are like four or five racetracks. There are game

1235
01:11:13.159 --> 01:11:16.960
<v Speaker 1>boards that come in the in the game. It's really

1236
01:11:16.960 --> 01:11:20.239
<v Speaker 1>really fun. Board game Geek waits it at two point

1237
01:11:20.279 --> 01:11:25.079
<v Speaker 1>one nine, which is, you know it it has enough

1238
01:11:25.119 --> 01:11:29.159
<v Speaker 1>going on to be interesting, but a casual gamer wouldn't

1239
01:11:29.319 --> 01:11:31.039
<v Speaker 1>you know, play it and then say this is way

1240
01:11:31.039 --> 01:11:35.399
<v Speaker 1>too complicated. So I'm gonna pick that. I'm gonna put

1241
01:11:35.399 --> 01:11:37.880
<v Speaker 1>the links to it the board game Geek and then

1242
01:11:38.199 --> 01:11:42.159
<v Speaker 1>Amazon links into the the chat here, and then I've

1243
01:11:42.159 --> 01:11:45.000
<v Speaker 1>got a couple of books that I read. I actually

1244
01:11:45.000 --> 01:11:47.920
<v Speaker 1>listened to them on audible. One of them is Hit

1245
01:11:48.000 --> 01:11:53.359
<v Speaker 1>Refresh by Satia Nadella. Satia is the CEO of Microsoft,

1246
01:11:56.479 --> 01:12:01.760
<v Speaker 1>and he basically so the book is a little bit

1247
01:12:02.720 --> 01:12:04.760
<v Speaker 1>I don't want to say it's like dated, but it

1248
01:12:05.199 --> 01:12:07.359
<v Speaker 1>you know, it's not up to like twenty twenty four,

1249
01:12:07.920 --> 01:12:12.359
<v Speaker 1>and so it ends, you know, in the late twenty teens,

1250
01:12:12.840 --> 01:12:16.319
<v Speaker 1>you know, maybe around twenty twenty. And so he talks

1251
01:12:16.359 --> 01:12:21.199
<v Speaker 1>about basically him taking over Microsoft and then kind of

1252
01:12:21.279 --> 01:12:24.640
<v Speaker 1>leading it into this new age with cloud and stuff

1253
01:12:24.680 --> 01:12:28.039
<v Speaker 1>like that, and talks about his background and stuff like that.

1254
01:12:28.359 --> 01:12:31.119
<v Speaker 1>Is it is really really good. I really enjoyed it.

1255
01:12:32.159 --> 01:12:34.199
<v Speaker 1>The other one that I listened to, and this is

1256
01:12:34.359 --> 01:12:39.039
<v Speaker 1>also a company kind of takeover turnaround book is American

1257
01:12:39.279 --> 01:12:44.439
<v Speaker 1>Icon by Bryce Hoffman. And this one is the turnaround

1258
01:12:44.520 --> 01:12:51.359
<v Speaker 1>of Ford Motor Company and Bryce Hoffman. So Hit Refresh

1259
01:12:51.439 --> 01:12:57.800
<v Speaker 1>is an autobiography. Ish Satia is the primary author American Icon.

1260
01:12:58.039 --> 01:13:03.119
<v Speaker 1>He's an industry what journalist, I guess, and so he

1261
01:13:03.199 --> 01:13:05.000
<v Speaker 1>got a lot of the inside track from a lot

1262
01:13:05.000 --> 01:13:08.079
<v Speaker 1>of the people in forward and then wrote the book.

1263
01:13:08.760 --> 01:13:13.399
<v Speaker 1>And anyway, it was it was really fascinating just to

1264
01:13:13.439 --> 01:13:15.359
<v Speaker 1>listen through. Oh, this is how we solved this, This

1265
01:13:15.399 --> 01:13:18.359
<v Speaker 1>is how we solved that. And you know, it goes

1266
01:13:18.439 --> 01:13:22.239
<v Speaker 1>through the recession in two thousand and eight, and you

1267
01:13:22.279 --> 01:13:24.039
<v Speaker 1>know some of the deals they were trying to work

1268
01:13:24.039 --> 01:13:26.920
<v Speaker 1>out with the government, which I'll admit I don't love

1269
01:13:27.720 --> 01:13:31.199
<v Speaker 1>corporate welfare from the government, but it was interesting to

1270
01:13:31.199 --> 01:13:33.600
<v Speaker 1>see the approaches and how they dealt with people and

1271
01:13:33.600 --> 01:13:36.119
<v Speaker 1>how they did all this stuff. So I'm going to

1272
01:13:36.199 --> 01:13:39.159
<v Speaker 1>pick that. And then lastly, I think I might have

1273
01:13:39.239 --> 01:13:40.880
<v Speaker 1>mentioned a few times that I am running on a

1274
01:13:40.880 --> 01:13:45.760
<v Speaker 1>boon tou Now. I bought a desktop. The place I

1275
01:13:45.800 --> 01:13:48.319
<v Speaker 1>got to from my laptop. When I'd run Docker and

1276
01:13:48.439 --> 01:13:52.079
<v Speaker 1>run the stuff for any of my clients, my laptop

1277
01:13:52.119 --> 01:13:54.520
<v Speaker 1>would just slow way down. And I was starting to

1278
01:13:54.520 --> 01:13:56.840
<v Speaker 1>get into AI and that would slow way down too,

1279
01:13:57.560 --> 01:14:01.560
<v Speaker 1>And so I decided I need a newer machine, and

1280
01:14:01.600 --> 01:14:05.600
<v Speaker 1>so I started looking within the Mac ecosystem. Decided pretty

1281
01:14:05.680 --> 01:14:09.119
<v Speaker 1>quickly that what I needed was not a laptop, and

1282
01:14:09.199 --> 01:14:11.680
<v Speaker 1>so I looked at the MacPro and it was like

1283
01:14:11.760 --> 01:14:14.279
<v Speaker 1>twelve grand for the one that I was thinking I wanted,

1284
01:14:14.880 --> 01:14:19.079
<v Speaker 1>and I was like, that was a tough pill to swallow,

1285
01:14:19.159 --> 01:14:22.840
<v Speaker 1>especially since my income's kind of been up and down

1286
01:14:23.000 --> 01:14:28.479
<v Speaker 1>this year, but I was slow getting my client work

1287
01:14:28.520 --> 01:14:30.560
<v Speaker 1>done because I'd have to wait for it to run

1288
01:14:30.560 --> 01:14:33.640
<v Speaker 1>all the tests and stuff and take forever. So I

1289
01:14:33.680 --> 01:14:39.680
<v Speaker 1>looked around and DHH was recommending the framework laptop, and

1290
01:14:40.000 --> 01:14:41.880
<v Speaker 1>I thought, oh, that looks nice. But again, I had

1291
01:14:41.920 --> 01:14:44.279
<v Speaker 1>decided that the laptop was probably not going to give

1292
01:14:44.279 --> 01:14:47.479
<v Speaker 1>me the horsepower I wanted. And so they the folks

1293
01:14:47.520 --> 01:14:49.399
<v Speaker 1>on there, and I don't know if he recommended it

1294
01:14:49.479 --> 01:14:53.880
<v Speaker 1>or somebody else did, but they were all talking about

1295
01:14:53.920 --> 01:14:57.560
<v Speaker 1>a computer company called System seventy six, and so I

1296
01:14:57.680 --> 01:15:00.000
<v Speaker 1>ordered from them. It did take a bit of time

1297
01:15:00.039 --> 01:15:03.319
<v Speaker 1>because they custom build the desktop and then send it

1298
01:15:03.319 --> 01:15:06.439
<v Speaker 1>to you, but this this one cost me like thirty

1299
01:15:06.439 --> 01:15:10.560
<v Speaker 1>three hundred dollars instead of twelve thousand dollars. And so

1300
01:15:11.039 --> 01:15:13.479
<v Speaker 1>that's what I am running on right now, and it's

1301
01:15:13.479 --> 01:15:18.920
<v Speaker 1>been terrific. I've had to adjust to running on Linux

1302
01:15:19.279 --> 01:15:25.039
<v Speaker 1>instead of on Mac, but I've been pretty happy with it.

1303
01:15:25.399 --> 01:15:27.560
<v Speaker 1>I know other people do work on Windows.

1304
01:15:28.039 --> 01:15:28.439
<v Speaker 3>I just.

1305
01:15:30.319 --> 01:15:34.439
<v Speaker 1>I don't know. I've kind of gotten let me put

1306
01:15:34.439 --> 01:15:38.039
<v Speaker 1>it this way. So my wife, my mother in law,

1307
01:15:38.199 --> 01:15:41.159
<v Speaker 1>and everybody else right that's not a tech person that

1308
01:15:41.239 --> 01:15:46.760
<v Speaker 1>I know runs on Windows and it I just get

1309
01:15:46.840 --> 01:15:49.880
<v Speaker 1>tired of the maintenance hassle that I run into on Windows.

1310
01:15:50.439 --> 01:15:52.840
<v Speaker 1>And the other thing is is that you have to

1311
01:15:52.880 --> 01:15:55.039
<v Speaker 1>run it through, you know, all the stuff that I do.

1312
01:15:55.079 --> 01:15:59.119
<v Speaker 1>I typically wind up running through the Linux emulator system

1313
01:15:59.199 --> 01:16:02.600
<v Speaker 1>that they have. It's into Windows, which works okay, right,

1314
01:16:03.119 --> 01:16:05.439
<v Speaker 1>I don't hate it, but it was just like, oh,

1315
01:16:05.640 --> 01:16:08.239
<v Speaker 1>I could just run everything on Linux, because That's how

1316
01:16:08.319 --> 01:16:11.039
<v Speaker 1>I'm running my life anyway, right, I mean, all my

1317
01:16:11.079 --> 01:16:15.560
<v Speaker 1>code deployees to Linux. And so yeah, I've been I've

1318
01:16:15.560 --> 01:16:19.399
<v Speaker 1>been very very happy with it. It does essentially everything

1319
01:16:19.399 --> 01:16:22.319
<v Speaker 1>that I want it to. The only things I've run

1320
01:16:22.359 --> 01:16:24.840
<v Speaker 1>into that it can't do is you'll notice that I

1321
01:16:24.880 --> 01:16:27.159
<v Speaker 1>have the green screen set up behind me. If I

1322
01:16:27.199 --> 01:16:31.560
<v Speaker 1>want to run the green screen. I kind of have

1323
01:16:31.760 --> 01:16:34.680
<v Speaker 1>finagled things so that I can run the management software

1324
01:16:34.720 --> 01:16:41.159
<v Speaker 1>for the video mixer on Wine, but it still doesn't

1325
01:16:41.239 --> 01:16:43.239
<v Speaker 1>quite work the same as it does on the Mac.

1326
01:16:43.359 --> 01:16:45.800
<v Speaker 1>So I may just wind up doing all my streaming

1327
01:16:45.840 --> 01:16:49.800
<v Speaker 1>and recording on my Mac. And then because I still

1328
01:16:49.840 --> 01:16:52.720
<v Speaker 1>have my MacBook Pro, but I just I won't run

1329
01:16:53.039 --> 01:16:56.840
<v Speaker 1>all the other heavy duty stuff. And then if I

1330
01:16:56.960 --> 01:16:59.840
<v Speaker 1>get in a pinch, gimp and stuff work fine for

1331
01:17:00.199 --> 01:17:04.640
<v Speaker 1>the image editing and stuff. But you know, I have

1332
01:17:04.880 --> 01:17:07.680
<v Speaker 1>the Adobe tools on my mac Book Pro and so

1333
01:17:07.760 --> 01:17:11.520
<v Speaker 1>I'll run that there too, But I mean everything else,

1334
01:17:11.840 --> 01:17:15.880
<v Speaker 1>it's just been and it's such a terrific dev environment.

1335
01:17:15.920 --> 01:17:18.199
<v Speaker 1>I just I can't say enough good things. So System

1336
01:17:18.239 --> 01:17:21.680
<v Speaker 1>seventy six is my last pick, Bob, do you have

1337
01:17:21.680 --> 01:17:22.439
<v Speaker 1>some picks for us?

1338
01:17:22.840 --> 01:17:26.439
<v Speaker 3>Well, I thought i'd i'd jump into some science fiction

1339
01:17:26.600 --> 01:17:31.920
<v Speaker 3>books since that's my genre, and we had talked about

1340
01:17:31.960 --> 01:17:34.479
<v Speaker 3>the Moon as a harsh mistress. There is an alternate

1341
01:17:34.560 --> 01:17:39.640
<v Speaker 3>reality version of that story, and then and the the

1342
01:17:39.760 --> 01:17:43.520
<v Speaker 3>name of the book is The Powers of the Earth

1343
01:17:44.720 --> 01:17:49.640
<v Speaker 3>and it's written by Travis Corkran, if I remember correctly,

1344
01:17:50.640 --> 01:17:55.159
<v Speaker 3>and it's absolutely hysterical and and dead serious at the

1345
01:17:55.199 --> 01:17:59.640
<v Speaker 3>same time. It's it is, it is the story of

1346
01:18:00.039 --> 01:18:03.600
<v Speaker 3>the Moon is a harsh mistress, but told in a

1347
01:18:04.800 --> 01:18:12.800
<v Speaker 3>very modern meaning, current day political environment. So very funny

1348
01:18:12.880 --> 01:18:16.159
<v Speaker 3>in a number of ways and very serious in another

1349
01:18:16.560 --> 01:18:20.199
<v Speaker 3>a bunch of ways. So that's one book worth the read.

1350
01:18:20.439 --> 01:18:23.079
<v Speaker 3>There's a there's actually two books in the serious plus

1351
01:18:23.079 --> 01:18:26.199
<v Speaker 3>plus a bunch of short stories, all of them worth reading.

1352
01:18:27.680 --> 01:18:31.119
<v Speaker 3>Travis is software developer, so there's tons of easter eggs,

1353
01:18:31.760 --> 01:18:35.000
<v Speaker 3>you know, if you're a programmer, tons of easter eggs

1354
01:18:35.000 --> 01:18:38.199
<v Speaker 3>in there. And I think he's off in the northeast somewhere,

1355
01:18:38.319 --> 01:18:41.399
<v Speaker 3>living on a on a farm or something. Now some

1356
01:18:42.520 --> 01:18:48.359
<v Speaker 3>programmers do that. Another book that's book series that I

1357
01:18:48.479 --> 01:18:51.239
<v Speaker 3>found great, this goes back about five six years, is

1358
01:18:51.279 --> 01:18:55.000
<v Speaker 3>the whole Bob of Verse series by Dennessee Taylor. I

1359
01:18:55.039 --> 01:18:57.760
<v Speaker 3>think it is. And this is again it's the story

1360
01:18:57.760 --> 01:18:59.840
<v Speaker 3>of a software developer, and I think I think that

1361
01:19:00.119 --> 01:19:03.319
<v Speaker 3>Taylor is a software developer too, And it's the story

1362
01:19:03.319 --> 01:19:09.439
<v Speaker 3>of a software developer named Bob who sells his company,

1363
01:19:09.520 --> 01:19:11.840
<v Speaker 3>makes a fortune, and the first thing he decides to

1364
01:19:11.880 --> 01:19:15.920
<v Speaker 3>do is sign a contract so that his head will

1365
01:19:15.960 --> 01:19:19.279
<v Speaker 3>be frozen in the case he dies and he'll be

1366
01:19:19.520 --> 01:19:23.199
<v Speaker 3>reawakened in some future time. And he walks out of

1367
01:19:23.239 --> 01:19:25.399
<v Speaker 3>that after signing the contract. He walks out of the

1368
01:19:25.399 --> 01:19:27.680
<v Speaker 3>door and gets hit by a car and he wakes

1369
01:19:27.760 --> 01:19:30.920
<v Speaker 3>up as the brain of a spaceship. After that, everything

1370
01:19:30.960 --> 01:19:34.000
<v Speaker 3>gets very interesting. It's a great story, and it goes

1371
01:19:34.039 --> 01:19:39.800
<v Speaker 3>on for several several books, some of which are just hysterical,

1372
01:19:39.840 --> 01:19:44.720
<v Speaker 3>and they're all very funny and ironic and marginally plausible.

1373
01:19:44.800 --> 01:19:50.119
<v Speaker 3>So that's a cool book, marginally plausible. Yeah, okay, And

1374
01:19:50.159 --> 01:19:55.640
<v Speaker 3>then the last one is a new one and the

1375
01:19:55.680 --> 01:20:00.000
<v Speaker 3>author's name is I can't remember the name of the book,

1376
01:20:00.000 --> 01:20:05.920
<v Speaker 3>bok is Theft of Fire. Uh. And this this book

1377
01:20:07.039 --> 01:20:11.680
<v Speaker 3>I have been Oh, Devin Ericson. Devin Erickson is the author.

1378
01:20:12.479 --> 01:20:14.680
<v Speaker 3>I've been a hard sci fi guy for a long time,

1379
01:20:14.720 --> 01:20:19.279
<v Speaker 3>and I've been very disappointed with the late genre of

1380
01:20:19.359 --> 01:20:22.079
<v Speaker 3>sci fi because there's not a lot of good hard

1381
01:20:22.159 --> 01:20:26.279
<v Speaker 3>sci fi. If you you know, you know, Mars was

1382
01:20:26.279 --> 01:20:31.680
<v Speaker 3>a great story. Okay, yeah, we're yeah, the Martian that

1383
01:20:31.800 --> 01:20:35.000
<v Speaker 3>Weir writes good stuff. But uh, there's been a lot

1384
01:20:35.039 --> 01:20:39.199
<v Speaker 3>of kind of fluffy sci fi. This one is great.

1385
01:20:39.359 --> 01:20:44.680
<v Speaker 3>It's just great, good, good hard sci fi, a great premise,

1386
01:20:45.119 --> 01:20:49.600
<v Speaker 3>great characters. So I'm very very excited about this book.

1387
01:20:49.960 --> 01:20:53.039
<v Speaker 3>I read the first and he's supposedly in the midst

1388
01:20:53.039 --> 01:20:55.000
<v Speaker 3>of writing the second one. So I'm dying to get

1389
01:20:55.039 --> 01:20:58.479
<v Speaker 3>my hand on that Theft of Fire by Devin Ericson.

1390
01:20:58.640 --> 01:21:01.560
<v Speaker 3>So my hope is that there's a rebirth in the

1391
01:21:01.640 --> 01:21:03.159
<v Speaker 3>hard sci fi genre.

1392
01:21:05.479 --> 01:21:10.680
<v Speaker 1>Nice, all right, Well, I am also just gonna plug

1393
01:21:10.720 --> 01:21:13.680
<v Speaker 1>your book, We Programmers. It's on Amazon. You go buy it.

1394
01:21:13.760 --> 01:21:19.239
<v Speaker 1>Right now, and yeah, I'll look forward to Clean Coders

1395
01:21:19.279 --> 01:21:21.800
<v Speaker 1>second Edition, all right, well, thanks Bob,
