WEBVTT

1
00:00:05.200 --> 00:00:08.640
<v Speaker 1>Hey, folks, welcome back to another episode of JavaScript Jebber.

2
00:00:08.720 --> 00:00:11.919
<v Speaker 2>This week, on our panel we have Dan Shapier, Hello

3
00:00:12.119 --> 00:00:12.839
<v Speaker 2>from Israel.

4
00:00:13.839 --> 00:00:16.120
<v Speaker 1>I'm Charles Maxwood from Top End Devs and we have

5
00:00:16.160 --> 00:00:19.839
<v Speaker 1>a special guest this week, and that is tomar Gable.

6
00:00:19.960 --> 00:00:23.399
<v Speaker 1>I am sorry, I don't do the Hebrew pronunciation.

7
00:00:22.960 --> 00:00:26.039
<v Speaker 3>So that was actually fairly accurate.

8
00:00:27.559 --> 00:00:30.359
<v Speaker 2>Awesome. Now you and Dan are friends.

9
00:00:31.320 --> 00:00:34.320
<v Speaker 1>You do JavaScript, mostly not on the front end, which

10
00:00:34.320 --> 00:00:37.320
<v Speaker 1>is kind of interesting. But yeah, do you want to

11
00:00:37.359 --> 00:00:39.079
<v Speaker 1>kind of give us a little bit more of your background.

12
00:00:39.840 --> 00:00:42.200
<v Speaker 2>Sure, we are where you're coming from with this stuff.

13
00:00:43.320 --> 00:00:43.679
<v Speaker 4>Sure.

14
00:00:44.640 --> 00:00:47.280
<v Speaker 3>So, as you mentioned, Dunn and I have been friends

15
00:00:47.320 --> 00:00:50.479
<v Speaker 3>for a while. We used to work together at Twigs

16
00:00:50.520 --> 00:00:53.240
<v Speaker 3>for a few years and then we kind of split

17
00:00:53.320 --> 00:00:58.560
<v Speaker 3>ways professionally but remain friends. As you might have mentioned,

18
00:00:58.799 --> 00:01:03.159
<v Speaker 3>I am not very heavily into front end development. I

19
00:01:03.240 --> 00:01:07.439
<v Speaker 3>will reiterate the usual disclosure, which is I have nothing

20
00:01:07.560 --> 00:01:10.000
<v Speaker 3>against it. I'm just not very good at it and

21
00:01:10.040 --> 00:01:13.319
<v Speaker 3>therefore leave it to people who are good at it

22
00:01:13.400 --> 00:01:16.840
<v Speaker 3>and are passionate about it. On the other hand, I

23
00:01:16.879 --> 00:01:20.159
<v Speaker 3>do see myself as kind of a general purpose engineer,

24
00:01:20.239 --> 00:01:24.000
<v Speaker 3>so I don't really see the distinction between front end

25
00:01:24.079 --> 00:01:29.159
<v Speaker 3>back end. In the general sense, engineering is engineering is engineering.

26
00:01:29.680 --> 00:01:34.159
<v Speaker 3>Some of these disciplines require skill sets that slightly differ

27
00:01:35.439 --> 00:01:41.840
<v Speaker 3>mind doesn't lead towards well users really and people. So

28
00:01:42.519 --> 00:01:46.120
<v Speaker 3>that's why I'm in back end. You might say I'm

29
00:01:46.120 --> 00:01:51.519
<v Speaker 3>a back engineers. It's the marketect, DevOps guy, whatever whatever

30
00:01:51.599 --> 00:01:54.599
<v Speaker 3>is needed at the time. I've been in the industry

31
00:01:54.799 --> 00:01:58.640
<v Speaker 3>for over twenty years now and for the last three

32
00:01:58.719 --> 00:02:03.799
<v Speaker 3>and change have been independent, so consulting companies and basically

33
00:02:03.840 --> 00:02:07.640
<v Speaker 3>everything they need, everything except front end. Yeah, and I

34
00:02:07.719 --> 00:02:11.319
<v Speaker 3>kind of see myself as an engineer that solves problems,

35
00:02:11.400 --> 00:02:17.240
<v Speaker 3>whether they be educational, functional performance, or anything else really

36
00:02:17.360 --> 00:02:20.000
<v Speaker 3>or organizational at times.

37
00:02:20.639 --> 00:02:24.639
<v Speaker 4>I'll I'll just add to that that you know, Toma

38
00:02:24.680 --> 00:02:28.280
<v Speaker 4>and I we we meet, we hang out when we can,

39
00:02:29.039 --> 00:02:33.919
<v Speaker 4>and when we do, we almost inevitably also get into

40
00:02:34.560 --> 00:02:39.719
<v Speaker 4>technical debates. Like we both hold strong opinions, and interestingly

41
00:02:39.840 --> 00:02:45.360
<v Speaker 4>enough they sometimes conflict. And that's the best, and that's

42
00:02:45.400 --> 00:02:54.759
<v Speaker 4>the best. And I'm usually pretty that's stubborn and I

43
00:02:54.800 --> 00:02:59.240
<v Speaker 4>hope also convincing. But Toma is somehow very often able

44
00:02:59.319 --> 00:03:02.520
<v Speaker 4>to kind of force my hand to kind of change

45
00:03:02.520 --> 00:03:07.120
<v Speaker 4>my opinions on stuff. So I really am looking forward

46
00:03:07.159 --> 00:03:08.520
<v Speaker 4>to our discussion today.

47
00:03:09.680 --> 00:03:15.280
<v Speaker 1>Yeah, those kinds of debates, in my opinion, are important because, yeah,

48
00:03:15.400 --> 00:03:18.719
<v Speaker 1>they force you to really solidify where you're at, or

49
00:03:19.120 --> 00:03:20.840
<v Speaker 1>change your mind.

50
00:03:21.800 --> 00:03:24.039
<v Speaker 3>Or just starting to express your opinions.

51
00:03:24.159 --> 00:03:28.639
<v Speaker 1>Right, Yeah, I was gonna say. So, we're in the

52
00:03:28.639 --> 00:03:30.919
<v Speaker 1>middle of the political season here in the United States.

53
00:03:31.960 --> 00:03:34.360
<v Speaker 1>I'm fairly involved in one of the major political parties.

54
00:03:34.360 --> 00:03:37.400
<v Speaker 1>I'm the vice chair of the local the county party,

55
00:03:38.199 --> 00:03:41.319
<v Speaker 1>and right, so we have discussions and often we have

56
00:03:41.360 --> 00:03:43.639
<v Speaker 1>discussions with people that don't agree with us, both within

57
00:03:43.680 --> 00:03:47.879
<v Speaker 1>the party and outside the party. And yeah, it's terrific

58
00:03:47.960 --> 00:03:51.319
<v Speaker 1>because you get to have the back and forth and yeah,

59
00:03:51.360 --> 00:03:53.439
<v Speaker 1>sometimes it's you know, you make a really good argument

60
00:03:53.439 --> 00:03:55.680
<v Speaker 1>and I have to go think about that. And sometimes

61
00:03:55.680 --> 00:03:59.879
<v Speaker 1>it's you've made excellent arguments and you've convinced me. And

62
00:04:00.159 --> 00:04:04.120
<v Speaker 1>sometimes it's you know, we agree, but some of the

63
00:04:04.240 --> 00:04:07.879
<v Speaker 1>nuance kind of gets threaded out during the conversation. So

64
00:04:07.960 --> 00:04:08.879
<v Speaker 1>it's I love it.

65
00:04:08.960 --> 00:04:12.400
<v Speaker 4>I love it as long as it's done in good faith. Yes,

66
00:04:13.599 --> 00:04:16.720
<v Speaker 4>that's really what I care about. And of course, when

67
00:04:16.759 --> 00:04:23.079
<v Speaker 4>it's tech, it should be based on actual you know,

68
00:04:23.160 --> 00:04:27.480
<v Speaker 4>information or data as much as possible, rather than just

69
00:04:27.680 --> 00:04:30.800
<v Speaker 4>you know, this is my opinion, and I'll die on

70
00:04:30.839 --> 00:04:36.399
<v Speaker 4>this hill because it is yep, yep cool.

71
00:04:36.519 --> 00:04:39.759
<v Speaker 3>Maybe I mean may challenge that a little bit. That

72
00:04:39.800 --> 00:04:44.199
<v Speaker 3>can be one of the topics for discussion if you honestly,

73
00:04:44.399 --> 00:04:47.000
<v Speaker 3>I think it's not so much that data is overrated,

74
00:04:47.040 --> 00:04:53.279
<v Speaker 3>because it's not. It's that many fewer discussions, especially around

75
00:04:54.879 --> 00:04:58.519
<v Speaker 3>issues of how to engineer what good engineering is a

76
00:04:58.519 --> 00:05:04.000
<v Speaker 3>lot of these discussions are qualitative almost by definition, and

77
00:05:04.040 --> 00:05:07.360
<v Speaker 3>trying to inject data into those arguments tends to like

78
00:05:07.439 --> 00:05:10.720
<v Speaker 3>at this point they view it as in many cases

79
00:05:10.800 --> 00:05:14.040
<v Speaker 3>more of a logical fallacy than an actual argument. But

80
00:05:14.360 --> 00:05:15.360
<v Speaker 3>we can circle back.

81
00:05:15.279 --> 00:05:18.519
<v Speaker 4>To that it's like lies, damn lies and statistics.

82
00:05:19.480 --> 00:05:23.759
<v Speaker 3>It's more like, if you're measuring what's easy, because that's

83
00:05:23.800 --> 00:05:26.040
<v Speaker 3>all you can measure, then don't expect me to take

84
00:05:26.079 --> 00:05:27.000
<v Speaker 3>it very seriously.

85
00:05:28.839 --> 00:05:30.240
<v Speaker 4>Yeah, that that is fair.

86
00:05:31.360 --> 00:05:35.040
<v Speaker 1>So I got this list of things that are I

87
00:05:35.079 --> 00:05:41.120
<v Speaker 1>guess ideas you guys said slaughtering sacred cows and mentioned

88
00:05:41.120 --> 00:05:43.439
<v Speaker 1>that this is a Hebrew term, but it's it's a

89
00:05:43.519 --> 00:05:46.720
<v Speaker 1>term that's used in English in America too, So I'm

90
00:05:46.759 --> 00:05:50.759
<v Speaker 1>just gonna hang with it here. But yeah, so what

91
00:05:50.759 --> 00:05:53.279
<v Speaker 1>what sacred cows are we slaughtering? Where are we going with?

92
00:05:53.639 --> 00:05:56.120
<v Speaker 4>By the way, if we're just before we start, you know,

93
00:05:56.360 --> 00:06:01.160
<v Speaker 4>if if you've got you know, some listeners and they

94
00:06:01.199 --> 00:06:05.480
<v Speaker 4>have ideas for additional you know, sacred cows they might

95
00:06:06.240 --> 00:06:10.040
<v Speaker 4>like us to to discuss or roast or eat or whatever,

96
00:06:11.120 --> 00:06:14.079
<v Speaker 4>then they should know they can feel free to just

97
00:06:14.199 --> 00:06:16.800
<v Speaker 4>post them in the very relevant chats.

98
00:06:17.399 --> 00:06:22.079
<v Speaker 3>Yeah, absolutely, Yeah, the more the better. There's always always

99
00:06:22.079 --> 00:06:26.040
<v Speaker 3>something to argue about, I'm sorry, debate and good faith.

100
00:06:25.839 --> 00:06:30.439
<v Speaker 4>About don't do that when I'm drinking.

101
00:06:31.759 --> 00:06:34.279
<v Speaker 3>Of course, the fun in not doing that when you're drinking.

102
00:06:35.040 --> 00:06:39.000
<v Speaker 2>Yeah. So, so where where do you guys want to start?

103
00:06:39.600 --> 00:06:41.600
<v Speaker 4>Well, the first one, I guess, right.

104
00:06:42.279 --> 00:06:45.319
<v Speaker 3>So we kind of put together a list and sort

105
00:06:45.319 --> 00:06:51.160
<v Speaker 3>of prioritize it by nothing so well defined as our

106
00:06:51.279 --> 00:06:55.480
<v Speaker 3>hunch at what would be engaging for the audience, which

107
00:06:55.519 --> 00:06:58.279
<v Speaker 3>is to say that if the audience actually wants to

108
00:06:58.319 --> 00:07:01.079
<v Speaker 3>participate and indicate to us whether we're on the right

109
00:07:01.160 --> 00:07:05.240
<v Speaker 3>track or they have some other ideas for what to

110
00:07:05.319 --> 00:07:09.839
<v Speaker 3>talk about, then that would be terrific. But Daniel want

111
00:07:09.839 --> 00:07:11.800
<v Speaker 3>to introduce the first hypothetical.

112
00:07:13.000 --> 00:07:17.839
<v Speaker 4>Yeah, so everybody, you know, we all of us here

113
00:07:17.839 --> 00:07:22.639
<v Speaker 4>are programmers, and probably the number one tool for programming

114
00:07:23.279 --> 00:07:26.000
<v Speaker 4>is the programming language, because at the end of the day,

115
00:07:26.079 --> 00:07:30.800
<v Speaker 4>that's how you convey your intentions to the computer that

116
00:07:30.920 --> 00:07:34.560
<v Speaker 4>actually hopefully executes something similar to what you wanted it

117
00:07:34.600 --> 00:07:42.000
<v Speaker 4>to do. And consequently, people or developers are really hung

118
00:07:42.120 --> 00:07:45.399
<v Speaker 4>up on their choice of a programming language, to the

119
00:07:45.519 --> 00:07:49.639
<v Speaker 4>extent that I still remember when I interviewed somebody for

120
00:07:49.720 --> 00:07:53.439
<v Speaker 4>a position way back in the nineties, I think they

121
00:07:53.519 --> 00:07:56.600
<v Speaker 4>told me, if you're not working in Java, I'm not

122
00:07:56.800 --> 00:08:03.680
<v Speaker 4>interested in working here. And so it seems that the

123
00:08:03.839 --> 00:08:09.720
<v Speaker 4>choice of programming language should be like the number one priority.

124
00:08:10.279 --> 00:08:13.839
<v Speaker 4>It's like the number one most important tool in your toolbox.

125
00:08:14.399 --> 00:08:18.000
<v Speaker 4>So it's the number one priority of making the right choice.

126
00:08:18.560 --> 00:08:22.639
<v Speaker 4>And yet it seems that Tomar doesn't think that that's

127
00:08:22.680 --> 00:08:25.720
<v Speaker 4>the case. So Tooma take it away.

128
00:08:25.680 --> 00:08:27.959
<v Speaker 1>Well, I want to pile on here, because it goes

129
00:08:28.000 --> 00:08:30.519
<v Speaker 1>the other way too, Right. It's not just programmers saying,

130
00:08:31.399 --> 00:08:33.519
<v Speaker 1>you know, I want to work in dot Net or

131
00:08:33.600 --> 00:08:37.480
<v Speaker 1>Java or Ruby or JavaScript or whatever node, but the

132
00:08:37.519 --> 00:08:40.639
<v Speaker 1>employers list the jobs that way, right. This is a

133
00:08:40.679 --> 00:08:44.279
<v Speaker 1>React job, this is a PHP job, right, And so

134
00:08:44.559 --> 00:08:45.960
<v Speaker 1>it kind of cuts both ways.

135
00:08:46.000 --> 00:08:47.200
<v Speaker 2>Anyway, go ahead Tomar.

136
00:08:48.159 --> 00:08:53.120
<v Speaker 3>So there's there's a few angles with which we could

137
00:08:53.240 --> 00:08:57.440
<v Speaker 3>sort of tackle this, But I'll start by saying this,

138
00:08:58.840 --> 00:09:02.639
<v Speaker 3>I don't actually think there's any any argument to be

139
00:09:02.720 --> 00:09:08.720
<v Speaker 3>made about companies listening uh those requirements, because functionally speaking,

140
00:09:08.720 --> 00:09:11.279
<v Speaker 3>when you are an engineer, you may or may not

141
00:09:11.399 --> 00:09:16.720
<v Speaker 3>need someone with immediately applicable experience, or you might not

142
00:09:16.840 --> 00:09:19.759
<v Speaker 3>be able to afford along onboarding or whatever it is.

143
00:09:19.879 --> 00:09:23.679
<v Speaker 3>It's a it's a much more kind of tactical decision.

144
00:09:23.960 --> 00:09:28.600
<v Speaker 3>I think there's nothing I've yet to encounter a company

145
00:09:28.639 --> 00:09:32.840
<v Speaker 3>that is about the you know, we only hire for

146
00:09:32.919 --> 00:09:37.440
<v Speaker 3>these languages because we think everyone else is garbage, right,

147
00:09:37.759 --> 00:09:40.440
<v Speaker 3>or whatever way you want to put it. So it's

148
00:09:40.480 --> 00:09:43.720
<v Speaker 3>a much more functional decision. On the other hand, I

149
00:09:43.720 --> 00:09:46.960
<v Speaker 3>would say that to to Doune's earlier point, which is,

150
00:09:47.799 --> 00:09:50.200
<v Speaker 3>you know, it's it should be priority one of the

151
00:09:50.279 --> 00:09:53.559
<v Speaker 3>decisions you make, presumably in that in this context it's

152
00:09:53.679 --> 00:09:56.480
<v Speaker 3>on a new project or a new company, a new organization,

153
00:09:56.559 --> 00:09:59.399
<v Speaker 3>whatever it is. I would agree with you it is

154
00:09:59.440 --> 00:10:03.639
<v Speaker 3>the first place, but I would disagree on why that is.

155
00:10:03.720 --> 00:10:07.879
<v Speaker 3>I don't think it's because the choice matters as much

156
00:10:07.919 --> 00:10:13.240
<v Speaker 3>as people think. I think it's because it is the

157
00:10:12.679 --> 00:10:16.759
<v Speaker 3>first choice you have to make before you actually start

158
00:10:16.840 --> 00:10:21.440
<v Speaker 3>doing anything beyond brainstorming on what it is you're building. Right,

159
00:10:21.480 --> 00:10:23.279
<v Speaker 3>the first line of code you write has to be

160
00:10:23.320 --> 00:10:27.799
<v Speaker 3>in some language, which means making that decision, and that

161
00:10:27.960 --> 00:10:31.279
<v Speaker 3>is a very strategic, far reaching decision. It applies to

162
00:10:31.279 --> 00:10:33.879
<v Speaker 3>everything else you do moving forward from that point. But

163
00:10:35.480 --> 00:10:38.919
<v Speaker 3>oftentimes the way you make that decision is not a

164
00:10:39.200 --> 00:10:42.919
<v Speaker 3>didactic thought process. You don't go which is the language

165
00:10:42.960 --> 00:10:47.480
<v Speaker 3>that best suits my domain percent of the time, and

166
00:10:47.519 --> 00:10:49.879
<v Speaker 3>of course there are exceptions to that, but for the

167
00:10:49.919 --> 00:10:52.399
<v Speaker 3>most part, what you do is you look at the

168
00:10:52.440 --> 00:10:56.600
<v Speaker 3>people you have, You look at the ecosystem chunks that

169
00:10:56.639 --> 00:10:59.879
<v Speaker 3>you know best, that match the domain you're you're working in,

170
00:11:00.000 --> 00:11:03.759
<v Speaker 3>and then you just reach for the language that most

171
00:11:03.799 --> 00:11:06.519
<v Speaker 3>of them know best, or at least most of them

172
00:11:06.559 --> 00:11:09.519
<v Speaker 3>are most eager to learn, because that is how you

173
00:11:09.559 --> 00:11:12.679
<v Speaker 3>get them productive as soon as humanly possible, and them

174
00:11:12.799 --> 00:11:16.039
<v Speaker 3>might just be you. Right, if you're on a startup,

175
00:11:16.080 --> 00:11:18.120
<v Speaker 3>you're going to reach out to the language you're most

176
00:11:18.159 --> 00:11:23.120
<v Speaker 3>comfortable in. So it is the priority one decision because

177
00:11:23.360 --> 00:11:26.720
<v Speaker 3>it is the most urgent decision, or one of the

178
00:11:26.759 --> 00:11:30.120
<v Speaker 3>most urgent decisions you need to make it is not

179
00:11:30.559 --> 00:11:36.840
<v Speaker 3>the first priority because it's so important. As for why

180
00:11:36.879 --> 00:11:39.000
<v Speaker 3>I think it doesn't matter as much as people think,

181
00:11:39.080 --> 00:11:42.480
<v Speaker 3>there's two ways to make that argument. One is the

182
00:11:42.559 --> 00:11:46.639
<v Speaker 3>sort of high falutin philosophical allegory, which is to say

183
00:11:47.559 --> 00:11:51.480
<v Speaker 3>a language is a communication mechanism. Programming languages are unusual

184
00:11:51.679 --> 00:11:56.399
<v Speaker 3>in that they provide a medium for communication both between

185
00:11:56.799 --> 00:12:00.600
<v Speaker 3>humans and between humans and machines. In doctor expect there

186
00:12:01.039 --> 00:12:03.919
<v Speaker 3>they look different and act different than the languages we

187
00:12:04.000 --> 00:12:08.840
<v Speaker 3>speak in. But fundamentally speaking, you can get anything done

188
00:12:09.120 --> 00:12:13.080
<v Speaker 3>in any language as a human being, irrespective of computers. Right,

189
00:12:13.120 --> 00:12:15.679
<v Speaker 3>you want to build an airplane, turns out you can

190
00:12:15.720 --> 00:12:19.399
<v Speaker 3>engineer an airplane in French, you know, or in German

191
00:12:19.559 --> 00:12:22.919
<v Speaker 3>or in English. And I'm not going to extend that

192
00:12:23.039 --> 00:12:28.240
<v Speaker 3>joke in the obvious direction. But more importantly, though, the

193
00:12:28.279 --> 00:12:31.039
<v Speaker 3>point I'm making here is you can end up with

194
00:12:31.120 --> 00:12:34.320
<v Speaker 3>a functional system in ninety percent of the domains. There

195
00:12:34.320 --> 00:12:37.240
<v Speaker 3>are always exceptions to this, There are always domains where

196
00:12:37.279 --> 00:12:43.600
<v Speaker 3>one language would have a clear benefit over another. But

197
00:12:44.159 --> 00:12:48.080
<v Speaker 3>for the vast majority of sort of general purpose business software,

198
00:12:48.240 --> 00:12:52.039
<v Speaker 3>whether web or not, that everyone writes you can start off,

199
00:12:52.399 --> 00:12:54.080
<v Speaker 3>you know, I'll use the example of a back end,

200
00:12:54.120 --> 00:12:56.600
<v Speaker 3>because that just happens to be what I know best.

201
00:12:57.080 --> 00:13:03.279
<v Speaker 3>You have massive, massive functional systems built in Java, in Python,

202
00:13:03.759 --> 00:13:08.399
<v Speaker 3>in o Camel, in PHP, in variants of Php, because

203
00:13:08.440 --> 00:13:10.559
<v Speaker 3>you have you know, Wikipedia on the one hand, and

204
00:13:10.600 --> 00:13:14.440
<v Speaker 3>you have Facebook and the other virtually anything you'd care

205
00:13:14.519 --> 00:13:17.080
<v Speaker 3>to mention. And I'm not even going in the direction

206
00:13:17.240 --> 00:13:20.559
<v Speaker 3>of the obvious. You know, people are still writing inkbol

207
00:13:20.639 --> 00:13:26.720
<v Speaker 3>I'm talking about mainstream, purpose built, relevant software that's been

208
00:13:26.759 --> 00:13:29.080
<v Speaker 3>developed in the last twenty years, not in the last

209
00:13:29.399 --> 00:13:36.759
<v Speaker 3>you know, sixty, So we're talking Internet facing software. What

210
00:13:36.960 --> 00:13:41.320
<v Speaker 3>I feel matters when you're not in a domain where

211
00:13:41.480 --> 00:13:45.679
<v Speaker 3>which lends itself really really well to the advantages or

212
00:13:45.799 --> 00:13:50.320
<v Speaker 3>disadvantages of any particular language, it ends up being mostly

213
00:13:50.360 --> 00:13:56.080
<v Speaker 3>an aesthetic choice, like which language do I personally love better?

214
00:13:56.759 --> 00:14:00.960
<v Speaker 3>Because if I can, and you know, over a long

215
00:14:01.080 --> 00:14:04.799
<v Speaker 3>enough stretch of time, all systems can. If I can

216
00:14:04.879 --> 00:14:09.320
<v Speaker 3>build my system in you know, PHB or JavaScript or

217
00:14:09.399 --> 00:14:12.840
<v Speaker 3>typescript or Java or Continent or scholar any of those

218
00:14:12.919 --> 00:14:18.919
<v Speaker 3>languages or Python, if you must, then which one I

219
00:14:19.039 --> 00:14:22.039
<v Speaker 3>choose becomes either a functional decision, which is usually the case,

220
00:14:22.080 --> 00:14:23.960
<v Speaker 3>it's just the one I happen to know best when

221
00:14:24.000 --> 00:14:28.120
<v Speaker 3>I started on this system, and for the vast majorities

222
00:14:28.159 --> 00:14:30.799
<v Speaker 3>of businesses, this will end up being the stack for

223
00:14:30.919 --> 00:14:33.799
<v Speaker 3>the life cycle of the company, you know, barring a

224
00:14:33.960 --> 00:14:39.480
<v Speaker 3>fundamental rewrite or in you know, the kind of growth

225
00:14:39.559 --> 00:14:42.440
<v Speaker 3>that could not have happened twenty years ago, where you

226
00:14:42.519 --> 00:14:45.440
<v Speaker 3>go multi lingual, if you have a lot of services

227
00:14:45.480 --> 00:14:48.559
<v Speaker 3>in your company or whatever it is, if you remain

228
00:14:49.679 --> 00:14:52.799
<v Speaker 3>a domain specific business for any length of time, you're

229
00:14:53.000 --> 00:14:56.159
<v Speaker 3>very likely to be not only on the same stack

230
00:14:56.200 --> 00:14:58.960
<v Speaker 3>you started off with as a matter of convenience, but

231
00:14:59.080 --> 00:15:02.759
<v Speaker 3>also potentially running code you wrote when you started with

232
00:15:02.799 --> 00:15:06.879
<v Speaker 3>that staff as a matter of convenience. And yet you

233
00:15:06.919 --> 00:15:11.200
<v Speaker 3>can find working production systems in any of these languages,

234
00:15:13.039 --> 00:15:18.639
<v Speaker 3>which to me says it is a matter of aesthetics

235
00:15:18.679 --> 00:15:22.200
<v Speaker 3>more than anything else. Some people coming, yeah, sorry, go

236
00:15:22.279 --> 00:15:22.600
<v Speaker 3>for it.

237
00:15:22.639 --> 00:15:27.200
<v Speaker 4>So I get what you're saying, and it's obviously true.

238
00:15:28.360 --> 00:15:33.759
<v Speaker 4>Like like I remember talking with various companies, there was

239
00:15:33.799 --> 00:15:35.919
<v Speaker 4>a period of time where I was kind of interested

240
00:15:36.000 --> 00:15:38.879
<v Speaker 4>what people was using in the industry. So you know,

241
00:15:38.919 --> 00:15:41.200
<v Speaker 4>when you asked about the front end, and I was

242
00:15:41.240 --> 00:15:44.919
<v Speaker 4>asking programming languages, not frameworks. You know, everybody was obviously

243
00:15:45.080 --> 00:15:48.159
<v Speaker 4>JavaScript or typescript. But on the back end it was

244
00:15:48.320 --> 00:15:50.960
<v Speaker 4>like this huge variety of things. It might be Ja,

245
00:15:51.000 --> 00:15:53.720
<v Speaker 4>like you said, it might be Java, it might be Go,

246
00:15:54.120 --> 00:15:59.639
<v Speaker 4>it might be dot Net, it might be php it

247
00:16:00.000 --> 00:16:04.519
<v Speaker 4>and so on and so forth. Now, obviously all these

248
00:16:04.600 --> 00:16:09.840
<v Speaker 4>languages are turingcomplete, and if they've got the appropriate libraries

249
00:16:09.919 --> 00:16:13.279
<v Speaker 4>that you need you happen to need, then you know

250
00:16:13.759 --> 00:16:15.679
<v Speaker 4>you can definitely go for it. And if you're doing

251
00:16:15.679 --> 00:16:18.559
<v Speaker 4>web development then mostly what you need is like basically

252
00:16:18.679 --> 00:16:21.399
<v Speaker 4>h GTP supportant to be able to connect to a database,

253
00:16:21.879 --> 00:16:29.120
<v Speaker 4>and everybody's got that. But where I'm kind of pushing back,

254
00:16:29.840 --> 00:16:34.279
<v Speaker 4>it's about the fact that you know, like you're kind

255
00:16:34.320 --> 00:16:36.720
<v Speaker 4>of looking at them as they're kind of all equal,

256
00:16:37.399 --> 00:16:42.240
<v Speaker 4>when you you know, different programming languages kind of represent

257
00:16:42.960 --> 00:16:47.360
<v Speaker 4>at least in some cases, different philosophies or different approaches

258
00:16:48.000 --> 00:16:53.039
<v Speaker 4>to programming. Like for example, Go, you might say, the

259
00:16:53.080 --> 00:16:57.960
<v Speaker 4>philosophy is, you know, there should be only one way

260
00:16:58.000 --> 00:17:02.039
<v Speaker 4>to do something, and that way should be obvious. Uh.

261
00:17:02.120 --> 00:17:08.480
<v Speaker 4>If it's maybe, if it's Rust, then it's a system

262
00:17:08.599 --> 00:17:16.799
<v Speaker 4>language that prioritizes uh resource uh lifetime over everything over

263
00:17:16.880 --> 00:17:20.279
<v Speaker 4>everything else, resource ownership.

264
00:17:20.359 --> 00:17:23.200
<v Speaker 3>I guess I would say, it's safety over everything.

265
00:17:23.279 --> 00:17:28.200
<v Speaker 4>Resource safety over everything else. And and you know, obviously

266
00:17:28.200 --> 00:17:31.359
<v Speaker 4>if you're looking at and like I don't know, another

267
00:17:31.440 --> 00:17:34.680
<v Speaker 4>example might be uh uh.

268
00:17:36.519 --> 00:17:39.359
<v Speaker 3>Like you know, like.

269
00:17:41.440 --> 00:17:44.240
<v Speaker 4>C plus plus might be everything but the kitchen sink

270
00:17:45.119 --> 00:17:49.559
<v Speaker 4>uh type of a philosophy uh. And and and then

271
00:17:49.799 --> 00:17:52.880
<v Speaker 4>and in JavaScript, well you know was designed in ten

272
00:17:52.960 --> 00:18:00.200
<v Speaker 4>days and and so so they do all represent two

273
00:18:00.240 --> 00:18:07.839
<v Speaker 4>different approaches. It's like, you know, poetry sounds different when

274
00:18:07.880 --> 00:18:11.079
<v Speaker 4>you say it in French or in German, or in

275
00:18:11.200 --> 00:18:15.880
<v Speaker 4>Japanese or in Russia, even though all of them have poetry.

276
00:18:16.480 --> 00:18:22.960
<v Speaker 4>So the question is don't these aesthetical or philosophical consideration

277
00:18:24.440 --> 00:18:26.640
<v Speaker 4>make a significant difference in your opinion?

278
00:18:29.039 --> 00:18:31.960
<v Speaker 3>No, they don't, because the reality of it is, if

279
00:18:32.000 --> 00:18:36.480
<v Speaker 3>you look at every modern programming language ecosystem that's in

280
00:18:36.519 --> 00:18:39.200
<v Speaker 3>the mainstream, the sort you would use as a general

281
00:18:39.200 --> 00:18:42.200
<v Speaker 3>purpose language on the one hand, which admittedly is getting

282
00:18:42.640 --> 00:18:45.680
<v Speaker 3>less and less kind of prevalent in the industry, or

283
00:18:45.839 --> 00:18:52.200
<v Speaker 3>as shall we say, a language that's appropriate for whatever

284
00:18:52.559 --> 00:18:55.920
<v Speaker 3>the type of web servers that we all build, or

285
00:18:55.960 --> 00:19:01.680
<v Speaker 3>the type of front end applications that your listeners probably

286
00:19:01.720 --> 00:19:03.599
<v Speaker 3>tend to build, or at least more so than I

287
00:19:03.680 --> 00:19:08.079
<v Speaker 3>do you look at all these ecosystems and what they

288
00:19:08.119 --> 00:19:14.880
<v Speaker 3>have is in common is while they all have different nuances,

289
00:19:15.160 --> 00:19:17.920
<v Speaker 3>and a lot of these nuances are definitely the result

290
00:19:17.960 --> 00:19:20.759
<v Speaker 3>of this sort of start philosophical difference in how they

291
00:19:20.799 --> 00:19:25.160
<v Speaker 3>start it off, they all end up converging on the

292
00:19:25.200 --> 00:19:27.680
<v Speaker 3>same set of tools, or at least tools that look

293
00:19:27.799 --> 00:19:31.119
<v Speaker 3>very very similar. So I think at this point it

294
00:19:31.200 --> 00:19:35.160
<v Speaker 3>would be fair to say that as an industry, we've

295
00:19:35.240 --> 00:19:40.640
<v Speaker 3>learned that statically known types are useful for code organization

296
00:19:41.000 --> 00:19:44.640
<v Speaker 3>and for code reuse. It is debatable whether when you

297
00:19:44.680 --> 00:19:46.880
<v Speaker 3>build a system it's better not to use it. To

298
00:19:46.920 --> 00:19:49.880
<v Speaker 3>have my own opinions, as I say, it's an esthetic

299
00:19:49.960 --> 00:19:53.559
<v Speaker 3>choice because you turns out you can build systems in

300
00:19:53.640 --> 00:19:59.799
<v Speaker 3>all of these but with JavaScript, with Python, with Php.

301
00:20:00.559 --> 00:20:03.519
<v Speaker 3>I'm less familiar with the Ruby angle of things. Admittedly,

302
00:20:04.119 --> 00:20:07.440
<v Speaker 3>certainly with Java and that whole ecosystem which started off

303
00:20:07.440 --> 00:20:12.039
<v Speaker 3>as statically type you see in the mainstream, which was

304
00:20:12.160 --> 00:20:15.400
<v Speaker 3>not the case twenty years ago. All of these ecosystems

305
00:20:15.480 --> 00:20:21.119
<v Speaker 3>have first class typing, whether gradual or optional, piping kind

306
00:20:21.160 --> 00:20:25.599
<v Speaker 3>of shoehorned onto the ecosystem, as is the case with Python,

307
00:20:26.240 --> 00:20:30.240
<v Speaker 3>or sort of building an ecosystem and top of one,

308
00:20:30.480 --> 00:20:35.319
<v Speaker 3>as is the case with Typescript, or built into the mix,

309
00:20:35.359 --> 00:20:38.319
<v Speaker 3>as with Java. But all of them have this because

310
00:20:38.400 --> 00:20:40.559
<v Speaker 3>we as an industry learned that this is a very

311
00:20:40.599 --> 00:20:44.079
<v Speaker 3>beneficial tool for code reuse. When you have libraries, and

312
00:20:44.119 --> 00:20:47.319
<v Speaker 3>those libraries expos static types, and those types are known

313
00:20:47.319 --> 00:20:51.359
<v Speaker 3>in advance. It makes code reuse a lot easier because

314
00:20:51.359 --> 00:20:53.400
<v Speaker 3>you don't have to reach into the code to figure

315
00:20:53.400 --> 00:20:57.720
<v Speaker 3>out how it's going to behave in an error condition. Right,

316
00:20:57.759 --> 00:21:02.079
<v Speaker 3>So that's just one example. Debittably, that's just one reason why.

317
00:21:02.160 --> 00:21:07.759
<v Speaker 4>So talking about that particular reason and Chuck you know

318
00:21:07.920 --> 00:21:11.920
<v Speaker 4>him better than I do, or we do. Dage Age

319
00:21:12.000 --> 00:21:17.279
<v Speaker 4>has a very contrarian opinion here. You know, every everybody, everybody.

320
00:21:17.799 --> 00:21:22.000
<v Speaker 4>It's like, from my perspective, looking at the JavaScript ecosystem,

321
00:21:22.240 --> 00:21:26.519
<v Speaker 4>you can say that typescript has one. I mean it's

322
00:21:26.920 --> 00:21:30.359
<v Speaker 4>possible that they are, you know, looking at the market

323
00:21:30.359 --> 00:21:33.319
<v Speaker 4>as a whole, maybe still more JavaScript is being written

324
00:21:33.480 --> 00:21:37.039
<v Speaker 4>than typescript. But when I look at enterprise companies, the

325
00:21:37.079 --> 00:21:40.279
<v Speaker 4>type of companies you know that I the type of

326
00:21:40.559 --> 00:21:43.680
<v Speaker 4>large scale projects that I tend to work on, you know,

327
00:21:44.799 --> 00:21:49.079
<v Speaker 4>it's JavaScript only if it's legacy. Everything new is being

328
00:21:49.119 --> 00:21:56.279
<v Speaker 4>written in typescript. Would you agree, But that's totally the

329
00:21:56.599 --> 00:22:00.480
<v Speaker 4>contrary to dh Age's opinion of how we should be

330
00:22:01.799 --> 00:22:04.880
<v Speaker 4>developing software.

331
00:22:06.119 --> 00:22:08.359
<v Speaker 1>Well, so there are a couple of things here. One is,

332
00:22:09.400 --> 00:22:12.000
<v Speaker 1>you know, just coming at it. You know, Tomer mentioned

333
00:22:12.039 --> 00:22:15.119
<v Speaker 1>that he's not as familiar with the Ruby ecosystem.

334
00:22:15.359 --> 00:22:20.160
<v Speaker 2>The typing is it's not even hotly debated anymore.

335
00:22:21.319 --> 00:22:25.400
<v Speaker 1>The there are type systems that you can plug in

336
00:22:25.440 --> 00:22:28.880
<v Speaker 1>to get type annotations on your Ruby. The vast majority

337
00:22:28.920 --> 00:22:33.000
<v Speaker 1>of the community doesn't use them as far as typescript

338
00:22:33.039 --> 00:22:37.240
<v Speaker 1>goes big part of it. If you've been watching, especially

339
00:22:37.319 --> 00:22:40.240
<v Speaker 1>like the keynotes from Rails World for the last which

340
00:22:40.359 --> 00:22:42.680
<v Speaker 1>was a couple of weeks ago, and then like last

341
00:22:42.759 --> 00:22:49.240
<v Speaker 1>year and when in October, it's been pretty clear that

342
00:22:49.920 --> 00:22:53.680
<v Speaker 1>David is much more a DHH. He's much more in

343
00:22:53.720 --> 00:22:59.000
<v Speaker 1>favor of He's moved a lot more toward import maps

344
00:22:59.759 --> 00:23:02.720
<v Speaker 1>and and a lot of the benefit that he's talking

345
00:23:02.799 --> 00:23:04.799
<v Speaker 1>about is not having a build step.

346
00:23:05.039 --> 00:23:07.400
<v Speaker 2>Right, if you have typescript, you have.

347
00:23:07.359 --> 00:23:10.880
<v Speaker 1>To have it transpiled the JavaScript, and so by not

348
00:23:11.039 --> 00:23:13.960
<v Speaker 1>using typescript, you avoid that step and you can actually

349
00:23:14.079 --> 00:23:18.079
<v Speaker 1>just have your JavaScript written and have it loaded into

350
00:23:18.079 --> 00:23:20.440
<v Speaker 1>your import map and then just come into your application

351
00:23:20.519 --> 00:23:23.039
<v Speaker 1>that way, and so you avoid that.

352
00:23:23.720 --> 00:23:26.920
<v Speaker 4>But did we also say that he's kind of opposed

353
00:23:26.920 --> 00:23:29.200
<v Speaker 4>to static typing on principle.

354
00:23:30.799 --> 00:23:32.240
<v Speaker 2>I've gotten that impression.

355
00:23:32.359 --> 00:23:34.000
<v Speaker 1>I don't know that I could go find a place

356
00:23:34.039 --> 00:23:37.359
<v Speaker 1>where he's actually directly said that you may be able to,

357
00:23:37.680 --> 00:23:43.440
<v Speaker 1>and that's definitely the sentiment that comes through. But yeah,

358
00:23:43.640 --> 00:23:45.440
<v Speaker 1>and I'm kind of in the same boat, right. I

359
00:23:45.519 --> 00:23:51.519
<v Speaker 1>am not a big fan or proponent of having typing

360
00:23:51.559 --> 00:23:56.920
<v Speaker 1>built into my stuff, and I think that, as Tomas mentioned,

361
00:23:57.359 --> 00:23:59.000
<v Speaker 1>is kind of more of an aesthetic thing.

362
00:23:59.079 --> 00:24:04.000
<v Speaker 2>I've never really felt the benefit of it when.

363
00:24:03.839 --> 00:24:07.279
<v Speaker 1>I've done it, and so I, you know, I'm just

364
00:24:07.400 --> 00:24:08.640
<v Speaker 1>not a huge proponent of it.

365
00:24:08.640 --> 00:24:10.480
<v Speaker 2>It doesn't mean I'm against it.

366
00:24:10.480 --> 00:24:14.480
<v Speaker 1>It's just that, you know, some of the other benefits,

367
00:24:14.559 --> 00:24:16.519
<v Speaker 1>like not having a build step and things like that,

368
00:24:18.039 --> 00:24:20.279
<v Speaker 1>you know, make it so that I look at it

369
00:24:20.319 --> 00:24:22.960
<v Speaker 1>and say, well, in order to get that, the trade

370
00:24:22.960 --> 00:24:24.519
<v Speaker 1>off just isn't worth it because I don't see the

371
00:24:24.559 --> 00:24:26.079
<v Speaker 1>benefit for it, If that makes sense.

372
00:24:28.279 --> 00:24:29.000
<v Speaker 2>It's interesting.

373
00:24:30.119 --> 00:24:33.319
<v Speaker 1>I'm gonna kind of take it back because I have

374
00:24:33.400 --> 00:24:39.319
<v Speaker 1>some other thoughts on this particular premise that is being

375
00:24:39.359 --> 00:24:43.359
<v Speaker 1>brought forward because I generally agree that in a lot

376
00:24:43.359 --> 00:24:47.839
<v Speaker 1>of cases, you know, capability wise, and you know, the

377
00:24:47.880 --> 00:24:50.119
<v Speaker 1>different approaches that the different languages are going to kind

378
00:24:50.160 --> 00:24:53.960
<v Speaker 1>of push you toward to get a job done. Yeah,

379
00:24:54.079 --> 00:24:59.119
<v Speaker 1>you know, there's not a major difference as far as

380
00:24:59.160 --> 00:25:01.680
<v Speaker 1>them being able to do the job. One thing that

381
00:25:01.720 --> 00:25:05.160
<v Speaker 1>I've seen though, is that depending on what the advancement

382
00:25:05.359 --> 00:25:07.720
<v Speaker 1>is and how actively those are being worked on.

383
00:25:08.119 --> 00:25:09.160
<v Speaker 2>So this has more to do.

384
00:25:09.119 --> 00:25:14.000
<v Speaker 1>With ecosystem really than language, we see that they tend

385
00:25:14.000 --> 00:25:17.279
<v Speaker 1>to converge, like you said, Tomer, But the difference is

386
00:25:17.400 --> 00:25:21.680
<v Speaker 1>that depending on where those innovations are coming from, being

387
00:25:21.720 --> 00:25:23.680
<v Speaker 1>on the leading edge of a lot of that stuff

388
00:25:24.079 --> 00:25:27.160
<v Speaker 1>is a benefit. But like I said, I think that

389
00:25:27.200 --> 00:25:29.079
<v Speaker 1>has more to do with the ecosystem you're in. So

390
00:25:29.160 --> 00:25:34.920
<v Speaker 1>for example, I just I just watched last week the

391
00:25:35.559 --> 00:25:40.440
<v Speaker 1>Key from Rails World, right, and so he's talking about, Hey,

392
00:25:40.480 --> 00:25:43.359
<v Speaker 1>we're simplifying the stack, and we're simplifying deployment, and we're

393
00:25:43.359 --> 00:25:45.599
<v Speaker 1>making it easier and you know, and so he's talking

394
00:25:45.599 --> 00:25:48.400
<v Speaker 1>about all these different things. A lot of these a

395
00:25:48.400 --> 00:25:51.440
<v Speaker 1>lot of good ideas have come out of Ruby into

396
00:25:51.480 --> 00:25:53.640
<v Speaker 1>other languages. A lot of great ideas have come from

397
00:25:53.640 --> 00:25:58.079
<v Speaker 1>other parts other languages into JavaScript or into Ruby. Ruby's

398
00:25:58.079 --> 00:26:01.720
<v Speaker 1>adopted some of this stuff, right, and so the convergence

399
00:26:01.799 --> 00:26:04.960
<v Speaker 1>is there. But I also look at it and think, Okay, well,

400
00:26:05.079 --> 00:26:08.359
<v Speaker 1>because I have the benefit of these particular things that

401
00:26:08.400 --> 00:26:11.680
<v Speaker 1>have come into the ecosystem that haven't been adopted elsewhere, yet,

402
00:26:12.960 --> 00:26:15.640
<v Speaker 1>I'm able to get more done in the system I

403
00:26:15.720 --> 00:26:17.519
<v Speaker 1>use and things like that. And yes, some of that

404
00:26:17.559 --> 00:26:19.759
<v Speaker 1>comes down to experience, but I think some of it

405
00:26:19.799 --> 00:26:23.400
<v Speaker 1>also comes down to the language and its approach and

406
00:26:23.880 --> 00:26:26.400
<v Speaker 1>the philosophy behind it and things like that. And so

407
00:26:26.680 --> 00:26:32.799
<v Speaker 1>I generally mostly agree with you that programming languages it

408
00:26:34.119 --> 00:26:37.240
<v Speaker 1>You know that there may be differences in hey, I

409
00:26:37.240 --> 00:26:38.720
<v Speaker 1>want to pick this for this, right, if I'm doing

410
00:26:38.799 --> 00:26:42.480
<v Speaker 1>system programming or something that needs that kind of characteristic,

411
00:26:42.519 --> 00:26:44.440
<v Speaker 1>I'm probably going to reach for us as opposed to.

412
00:26:44.799 --> 00:26:45.880
<v Speaker 2>Ruby your JavaScript.

413
00:26:46.279 --> 00:26:50.359
<v Speaker 1>But beyond those basic things, I still think that there

414
00:26:50.400 --> 00:26:54.519
<v Speaker 1>are meaningful differences between languages and systems that allow us

415
00:26:54.880 --> 00:27:00.920
<v Speaker 1>to operate and be more productive. You know, certain goals.

416
00:27:01.279 --> 00:27:04.440
<v Speaker 1>If if you care more about some characteristics than others,

417
00:27:04.480 --> 00:27:08.519
<v Speaker 1>then you can reach for one over the other. And

418
00:27:08.599 --> 00:27:12.759
<v Speaker 1>so like, I don't know that there's an empiric this

419
00:27:12.759 --> 00:27:15.359
<v Speaker 1>this language is better than that language so much as

420
00:27:17.039 --> 00:27:19.240
<v Speaker 1>you know, if you're working in this area. It's not

421
00:27:19.440 --> 00:27:22.720
<v Speaker 1>just down to does it give you better tools? But

422
00:27:22.920 --> 00:27:26.559
<v Speaker 1>does it give you better tools that literally make you

423
00:27:26.640 --> 00:27:27.559
<v Speaker 1>move that far ahead?

424
00:27:27.599 --> 00:27:28.599
<v Speaker 2>And Web in.

425
00:27:28.599 --> 00:27:33.319
<v Speaker 1>Particular and back end is so disparate that that I

426
00:27:33.319 --> 00:27:36.200
<v Speaker 1>feel like there really are I mean, I use Rails,

427
00:27:36.240 --> 00:27:38.519
<v Speaker 1>and I'm biased that way, but I feel like there

428
00:27:38.559 --> 00:27:42.160
<v Speaker 1>are a lot of really serious advantages that come from

429
00:27:42.240 --> 00:27:44.119
<v Speaker 1>using Rails that other systems don't have.

430
00:27:44.680 --> 00:27:49.680
<v Speaker 4>Yeah, but those advantages are those advantages from Rails are

431
00:27:49.680 --> 00:27:54.640
<v Speaker 4>from Ruby, and could and could a Rails like system

432
00:27:54.839 --> 00:27:58.400
<v Speaker 4>have been built on something other than Ruby, Right, because

433
00:27:58.400 --> 00:28:00.160
<v Speaker 4>the discussion here at the end of the day, it's

434
00:28:00.200 --> 00:28:03.680
<v Speaker 4>not so much about Rails. It's more about Ruby versus

435
00:28:03.759 --> 00:28:05.119
<v Speaker 4>other programming languages.

436
00:28:05.640 --> 00:28:09.079
<v Speaker 3>I would distinction that's I think.

437
00:28:08.960 --> 00:28:10.799
<v Speaker 2>Some of them come from Ruby, but I think, yeah,

438
00:28:10.839 --> 00:28:12.519
<v Speaker 2>I think some come from Rails. It could be built

439
00:28:12.559 --> 00:28:13.559
<v Speaker 2>in other systems.

440
00:28:13.920 --> 00:28:16.839
<v Speaker 3>I would argue that that distinction doesn't really exist when

441
00:28:16.880 --> 00:28:19.640
<v Speaker 3>you pick a language, you pick an ecosystem. We are

442
00:28:20.119 --> 00:28:23.759
<v Speaker 3>so far as an industry, as a as a discipline,

443
00:28:23.799 --> 00:28:28.359
<v Speaker 3>we're so far beyond the point where you would build

444
00:28:28.480 --> 00:28:34.400
<v Speaker 3>something on the language plus a very very lean standard library,

445
00:28:34.880 --> 00:28:36.680
<v Speaker 3>you'd have to reach out to a whole bunch of

446
00:28:36.680 --> 00:28:40.880
<v Speaker 3>stuff to build even the simplest of systems of the

447
00:28:40.960 --> 00:28:43.839
<v Speaker 3>sort that we're talking about. Again, there might there not

448
00:28:44.039 --> 00:28:47.960
<v Speaker 3>night there are exceptions to that rule. So if you're

449
00:28:48.079 --> 00:28:52.880
<v Speaker 3>a kernel development developer, you absolutely have to have you

450
00:28:52.920 --> 00:28:55.359
<v Speaker 3>have to do some degree of control over what the

451
00:28:55.400 --> 00:29:00.319
<v Speaker 3>compiler generates and how these parts integrate and in with

452
00:29:00.359 --> 00:29:02.319
<v Speaker 3>each other, which is why you would reach for a

453
00:29:02.319 --> 00:29:07.559
<v Speaker 3>systems programming language that doesn't have a live runtime, right,

454
00:29:07.559 --> 00:29:12.519
<v Speaker 3>that doesn't have garbage collection or whatnot. That being said

455
00:29:12.839 --> 00:29:16.200
<v Speaker 3>for the mainstream, and by the mainstream, I mean, you know,

456
00:29:16.279 --> 00:29:19.200
<v Speaker 3>the let's put it this way, not the part of

457
00:29:19.240 --> 00:29:23.319
<v Speaker 3>the industry that existed twenty thirty years ago when a

458
00:29:23.359 --> 00:29:25.720
<v Speaker 3>lot of us were starting our careers, but the part

459
00:29:25.720 --> 00:29:29.240
<v Speaker 3>of the industry that grew up on top of that.

460
00:29:29.319 --> 00:29:35.200
<v Speaker 3>Because the industry didn't just change, it grew exponentially, like

461
00:29:35.279 --> 00:29:38.640
<v Speaker 3>it grew crazy wise in the last twenty years. So

462
00:29:38.759 --> 00:29:41.079
<v Speaker 3>a lot of the software that end up writing today

463
00:29:41.119 --> 00:29:47.119
<v Speaker 3>in the mainstream. There are nuances. Sure, you might prefer

464
00:29:47.519 --> 00:29:51.960
<v Speaker 3>some element of an ecosystem or language or other, but

465
00:29:52.599 --> 00:29:56.039
<v Speaker 3>as if what you're building is not in a domain

466
00:29:56.160 --> 00:30:02.079
<v Speaker 3>where there is a tangible E system advantage. So, for instance,

467
00:30:02.160 --> 00:30:06.559
<v Speaker 3>right now, if you're you know, if you're training models

468
00:30:06.599 --> 00:30:11.880
<v Speaker 3>and you know, integrating in l lens and whatnot, probably

469
00:30:11.880 --> 00:30:14.359
<v Speaker 3>you are going to reach for Python because it's you know,

470
00:30:14.480 --> 00:30:17.599
<v Speaker 3>it's the go to ecosystem, it's the one that moves

471
00:30:17.599 --> 00:30:21.920
<v Speaker 3>the fastest, et cetera, et cetera. That is why you'd

472
00:30:21.960 --> 00:30:25.279
<v Speaker 3>reach for Python, not because you think Python is a

473
00:30:25.279 --> 00:30:29.559
<v Speaker 3>better language for that sort of worse than Java or whatever. Now,

474
00:30:30.359 --> 00:30:33.960
<v Speaker 3>once the ecosystems reach that kind of parody, which again

475
00:30:34.039 --> 00:30:37.559
<v Speaker 3>for most kind of business use case sort of software

476
00:30:37.599 --> 00:30:40.519
<v Speaker 3>that you would build, if you're in the front end

477
00:30:41.200 --> 00:30:43.559
<v Speaker 3>and you're not a native, you're on the web, you

478
00:30:43.599 --> 00:30:45.559
<v Speaker 3>don't really have that much of a choice. You can

479
00:30:45.559 --> 00:30:49.319
<v Speaker 3>basically choose JavaScript or something that compiles the JavaScript, which

480
00:30:49.519 --> 00:30:52.319
<v Speaker 3>again becomes more of an aesthetic choice than anything like

481
00:30:52.359 --> 00:30:55.359
<v Speaker 3>you want to use ELM. Sure there are trade offs

482
00:30:55.400 --> 00:30:59.720
<v Speaker 3>for your organization, not for the system you end up building,

483
00:30:59.759 --> 00:31:01.839
<v Speaker 3>because it's all going to be running in a browser,

484
00:31:01.920 --> 00:31:04.960
<v Speaker 3>the same as any other JavaScript based thing you're going

485
00:31:05.039 --> 00:31:05.799
<v Speaker 3>to build.

486
00:31:07.039 --> 00:31:12.119
<v Speaker 4>So yeah, but people writing ELM, for example, will swear

487
00:31:12.440 --> 00:31:15.480
<v Speaker 4>by the fact that when they can get when their

488
00:31:15.519 --> 00:31:17.960
<v Speaker 4>code compiles, it's correct.

489
00:31:18.839 --> 00:31:19.839
<v Speaker 3>So speaking in.

490
00:31:19.920 --> 00:31:23.480
<v Speaker 4>Which is not something you can say about JavaScript.

491
00:31:23.759 --> 00:31:27.599
<v Speaker 3>Or I would say two things to that. One. It's hyperbole. Okay.

492
00:31:27.640 --> 00:31:31.240
<v Speaker 3>If someone actually came up to my face and uttered

493
00:31:31.240 --> 00:31:34.160
<v Speaker 3>that sentence with a serious face, I'd call their bullshit

494
00:31:34.200 --> 00:31:37.359
<v Speaker 3>because that's that's just what it is. No, if your

495
00:31:37.440 --> 00:31:40.720
<v Speaker 3>code compiles, it's not production grade. Don't give me that crap.

496
00:31:40.839 --> 00:31:42.000
<v Speaker 3>Come on, we're grown ups.

497
00:31:43.119 --> 00:31:46.920
<v Speaker 2>Second, I think we just hamburger out of that one.

498
00:31:47.240 --> 00:31:52.000
<v Speaker 3>Yeah, just to qualify that assertion, Okay. I am strictly

499
00:31:52.240 --> 00:31:56.440
<v Speaker 3>in the statically type statically compiled language camp. As an

500
00:31:56.440 --> 00:31:59.640
<v Speaker 3>aesthetic preference. I'm a I'm I'm a Scalar guy, right

501
00:31:59.680 --> 00:32:02.400
<v Speaker 3>and been for many years. I'm a co founder of

502
00:32:03.000 --> 00:32:05.839
<v Speaker 3>what ended up being the Scala community in Israel and

503
00:32:05.960 --> 00:32:08.759
<v Speaker 3>the conference that we hang around that So that's that's

504
00:32:08.839 --> 00:32:11.799
<v Speaker 3>kind of my personal bias, and I can, you know,

505
00:32:11.880 --> 00:32:16.240
<v Speaker 3>explain why that is my preference. But fundamentally, I come

506
00:32:16.359 --> 00:32:20.720
<v Speaker 3>from the camp of languages that don't provide because no

507
00:32:20.839 --> 00:32:24.039
<v Speaker 3>language can provide that. But that sort of drives you

508
00:32:24.240 --> 00:32:27.119
<v Speaker 3>towards building code in a way where if it compiles,

509
00:32:27.160 --> 00:32:29.680
<v Speaker 3>there is a very good chance that will actually run

510
00:32:30.119 --> 00:32:34.240
<v Speaker 3>correctly in production. It's not going to guarantee that neither

511
00:32:34.319 --> 00:32:37.359
<v Speaker 3>WLL one hundred percent code coverage in your tests, but

512
00:32:37.480 --> 00:32:41.279
<v Speaker 3>will probably circle that to that point later. The point

513
00:32:41.319 --> 00:32:43.000
<v Speaker 3>I'm trying to make here is.

514
00:32:43.119 --> 00:32:46.960
<v Speaker 4>So before you get before you get to that point,

515
00:32:47.359 --> 00:32:49.759
<v Speaker 4>because you brought up Scala and the fact that you

516
00:32:49.839 --> 00:32:53.359
<v Speaker 4>were founding father of the Scala community, based on what

517
00:32:53.400 --> 00:32:57.640
<v Speaker 4>you're saying today, would you have founded Scala the Scala

518
00:32:57.720 --> 00:33:01.079
<v Speaker 4>community today given what Java can do, Because effectively what

519
00:33:01.119 --> 00:33:05.200
<v Speaker 4>you seem to be saying is you know Scala, Java,

520
00:33:05.279 --> 00:33:08.960
<v Speaker 4>they both run on the JVM. They're kind of parents.

521
00:33:09.079 --> 00:33:14.640
<v Speaker 3>So I absolutely would because of two very fundamental things.

522
00:33:14.799 --> 00:33:18.400
<v Speaker 3>One is circling back to my original assertion it's a

523
00:33:18.400 --> 00:33:23.759
<v Speaker 3>matter of aesthetics. I don't say that aesthetic preferences don't matter.

524
00:33:24.400 --> 00:33:28.039
<v Speaker 3>These are my aesthetic preferences. You know, if I'm growing

525
00:33:28.079 --> 00:33:31.119
<v Speaker 3>flowers and vases around my house and I start a

526
00:33:31.119 --> 00:33:34.359
<v Speaker 3>community around that, it's because I like flowers. It doesn't

527
00:33:34.440 --> 00:33:38.759
<v Speaker 3>necessarily mean that flowers are objectively important. That's one thing.

528
00:33:39.160 --> 00:33:42.720
<v Speaker 3>The second thing is that when I was heaving into

529
00:33:42.720 --> 00:33:45.279
<v Speaker 3>skal and espousing Scala and the you know, in the

530
00:33:45.440 --> 00:33:50.440
<v Speaker 3>Israeli tech community, Java couldn't do what Java can do

531
00:33:50.519 --> 00:33:52.920
<v Speaker 3>now in the sense of expressivity. Sure, you could build

532
00:33:52.960 --> 00:33:58.480
<v Speaker 3>systems in Java, but I would argue then, as now

533
00:33:58.559 --> 00:34:04.480
<v Speaker 3>that Scala has advantages over Java, it doesn't make it

534
00:34:04.519 --> 00:34:08.239
<v Speaker 3>a more useful language, or a more successful language, or

535
00:34:08.280 --> 00:34:12.960
<v Speaker 3>even a preferable language necessarily for some people. There were

536
00:34:14.079 --> 00:34:18.239
<v Speaker 3>organizations that have managed to convince to take the plunge,

537
00:34:18.320 --> 00:34:22.559
<v Speaker 3>and they decided to do so with the trade off

538
00:34:22.639 --> 00:34:25.320
<v Speaker 3>that it's going to be much harder to hire people

539
00:34:25.360 --> 00:34:27.760
<v Speaker 3>to work in Scala, which by the way, did not

540
00:34:27.800 --> 00:34:29.400
<v Speaker 3>turn out to be the taste. But that was the

541
00:34:29.440 --> 00:34:34.239
<v Speaker 3>assumption because they felt they had something to gain from

542
00:34:34.280 --> 00:34:38.119
<v Speaker 3>that choice. But it's not to say that if they

543
00:34:38.119 --> 00:34:41.400
<v Speaker 3>had de picked Java instead or Python instead, they would

544
00:34:41.400 --> 00:34:43.760
<v Speaker 3>have been any less successful. Wicks, by the way, which

545
00:34:43.760 --> 00:34:47.280
<v Speaker 3>is a company you and I worked for, was for

546
00:34:47.360 --> 00:34:52.159
<v Speaker 3>many years a poster child of Scala industry use, especially

547
00:34:52.159 --> 00:34:56.119
<v Speaker 3>in Israel. Was it a good call for Wicks? I

548
00:34:56.159 --> 00:34:58.920
<v Speaker 3>think so for a variety of reasons. But I don't

549
00:34:58.960 --> 00:35:07.639
<v Speaker 3>think that decision made a significant contribution or put any

550
00:35:07.679 --> 00:35:12.960
<v Speaker 3>sort of significant chunk of Wix's success in business or

551
00:35:13.039 --> 00:35:16.000
<v Speaker 3>finance on the table. It just didn't have anything to

552
00:35:16.039 --> 00:35:18.119
<v Speaker 3>do with it. Wix could have been developed in Java

553
00:35:18.159 --> 00:35:20.599
<v Speaker 3>and Skala and Python in any of those languages.

554
00:35:21.840 --> 00:35:25.159
<v Speaker 1>So would you make then the same argument around typescript

555
00:35:25.199 --> 00:35:28.679
<v Speaker 1>versus JavaScript, where you know it's it's an aesthetic decision.

556
00:35:29.239 --> 00:35:33.280
<v Speaker 1>Doesn't mean that typescript is necessarily better, but you know

557
00:35:33.400 --> 00:35:37.960
<v Speaker 1>it does have some areas where it reads better, and

558
00:35:38.000 --> 00:35:40.239
<v Speaker 1>it's a little nicer to work in and has some

559
00:35:40.280 --> 00:35:41.360
<v Speaker 1>other advantages to it.

560
00:35:42.199 --> 00:35:45.840
<v Speaker 3>I would, and this is I would argue against that,

561
00:35:46.760 --> 00:35:49.000
<v Speaker 3>or rather I would say yes, I would make the

562
00:35:49.039 --> 00:35:53.920
<v Speaker 3>same argument with respected typescript and JavaScript because and this

563
00:35:54.079 --> 00:35:57.480
<v Speaker 3>is a qualitative argument with no data could back it up.

564
00:35:59.360 --> 00:36:02.599
<v Speaker 3>Circling back to an original sentiment, we as an industry

565
00:36:02.760 --> 00:36:08.320
<v Speaker 3>have learned that static types that known ahead of time.

566
00:36:08.360 --> 00:36:15.039
<v Speaker 3>Static types are extremely useful in some cases. So JavaScript, sorry,

567
00:36:15.280 --> 00:36:18.280
<v Speaker 3>just doesn't have that. Typescript adds that on top of

568
00:36:18.360 --> 00:36:22.320
<v Speaker 3>JavaScript in a way that's been tried before to some

569
00:36:22.400 --> 00:36:25.760
<v Speaker 3>degree of success or other with Coffee Script and with Flow.

570
00:36:25.880 --> 00:36:31.199
<v Speaker 3>But Typescript made it work substantively better than those other

571
00:36:31.360 --> 00:36:35.559
<v Speaker 3>options in a way that allowed it to enter the mainstream.

572
00:36:35.679 --> 00:36:39.800
<v Speaker 3>But what caused the adoption of Typescript, in my opinion,

573
00:36:40.320 --> 00:36:45.000
<v Speaker 3>is the very real value of having static types, especially

574
00:36:45.039 --> 00:36:48.559
<v Speaker 3>in libraries of which you integrate a great many in

575
00:36:48.639 --> 00:36:53.199
<v Speaker 3>any front end project. So in that respect, Typescript is

576
00:36:54.679 --> 00:36:57.880
<v Speaker 3>quote unquote better than JavaScript because it's super set of

577
00:36:57.920 --> 00:37:01.000
<v Speaker 3>JavaScript and because it adds something we as an industry

578
00:37:01.119 --> 00:37:07.400
<v Speaker 3>find useful. That being said, it compiles down to JavaScript.

579
00:37:07.719 --> 00:37:11.119
<v Speaker 3>So clearly everything you build in Typescript you can build

580
00:37:11.119 --> 00:37:11.840
<v Speaker 3>in JavaScript.

581
00:37:12.320 --> 00:37:15.559
<v Speaker 4>This is beyond instance, just to say it's beyond being

582
00:37:15.599 --> 00:37:20.000
<v Speaker 4>compiled down to JavaScript. It's effectively you invest a lot

583
00:37:20.039 --> 00:37:23.239
<v Speaker 4>of effort into writing Typescript types, and then they all

584
00:37:23.280 --> 00:37:26.960
<v Speaker 4>get erased out of your code when it's deployed into

585
00:37:27.000 --> 00:37:27.519
<v Speaker 4>the production.

586
00:37:27.559 --> 00:37:31.159
<v Speaker 3>But the value proposition isn't at run time, Oh yeah,

587
00:37:32.239 --> 00:37:37.360
<v Speaker 3>is a distinction from the dot Net and Java ecosystems,

588
00:37:37.440 --> 00:37:40.960
<v Speaker 3>where types do matter at run time. That being said,

589
00:37:43.400 --> 00:37:47.119
<v Speaker 3>us that depends on how you write it. But sure,

590
00:37:47.320 --> 00:37:53.159
<v Speaker 3>the point I'm making here is Typescript to me is

591
00:37:53.199 --> 00:37:56.760
<v Speaker 3>an evolutionary state of JavaScript, like treating it as a

592
00:37:56.800 --> 00:37:59.960
<v Speaker 3>separate language. To my mind, as sort of an out

593
00:38:00.039 --> 00:38:03.199
<v Speaker 3>side observer, I have no dog in this race, right

594
00:38:03.280 --> 00:38:07.880
<v Speaker 3>I don't do my everyday work in JavaScript or typeescript.

595
00:38:07.960 --> 00:38:11.679
<v Speaker 3>I do occasional work in JavaScript and typescript and Python

596
00:38:11.760 --> 00:38:16.000
<v Speaker 3>and a whole plethora of other languages. So I don't

597
00:38:16.599 --> 00:38:20.559
<v Speaker 3>care in a sense, but as an outside observer perspective

598
00:38:20.599 --> 00:38:27.039
<v Speaker 3>in tying to this convergent evolution of languages, statement or

599
00:38:27.159 --> 00:38:31.400
<v Speaker 3>argument is that this is that evolutionary stip. So piping

600
00:38:31.599 --> 00:38:34.840
<v Speaker 3>at around three eighth or three seven, I think started

601
00:38:34.880 --> 00:38:39.320
<v Speaker 3>getting optional typing around the same time type script started

602
00:38:39.360 --> 00:38:40.000
<v Speaker 3>taking off.

603
00:38:40.880 --> 00:38:42.840
<v Speaker 2>These are the.

604
00:38:43.039 --> 00:38:51.320
<v Speaker 3>Those ecosystems version of a worthwhile feature that they took

605
00:38:51.400 --> 00:38:56.440
<v Speaker 3>from statically type languages just to make things.

606
00:38:56.760 --> 00:39:04.000
<v Speaker 4>You know, how would I praise it? Just things factually

607
00:39:04.239 --> 00:39:08.079
<v Speaker 4>correct typescript in JavaScript? You know, there might be some

608
00:39:08.159 --> 00:39:12.119
<v Speaker 4>conversion evolution. Obviously these two are tied at the waist,

609
00:39:12.840 --> 00:39:18.679
<v Speaker 4>but they are distinct programming languages. There's a JavaScript that

610
00:39:18.960 --> 00:39:24.199
<v Speaker 4>the ecmoscript standard says nothing about standard typing. It's highly

611
00:39:24.239 --> 00:39:27.800
<v Speaker 4>probable that it never will you know where.

612
00:39:29.559 --> 00:39:31.519
<v Speaker 3>And this is a production that may or may not

613
00:39:31.760 --> 00:39:34.199
<v Speaker 3>prove true, and I might eat my words. But it

614
00:39:34.480 --> 00:39:36.920
<v Speaker 3>also means that it's a standard that in five to

615
00:39:37.000 --> 00:39:41.320
<v Speaker 3>ten years, the only relevance it has is for supporting

616
00:39:41.480 --> 00:39:45.000
<v Speaker 3>legacy software, of which there is a lot. I don't

617
00:39:45.000 --> 00:39:48.280
<v Speaker 3>deny it, but the ECMAScript standard that doesn't have anything

618
00:39:48.280 --> 00:39:51.119
<v Speaker 3>to do with typing is about as relevant as the

619
00:39:51.199 --> 00:39:52.559
<v Speaker 3>latest COBOL standard.

620
00:39:54.159 --> 00:39:57.239
<v Speaker 4>Chuck, I will say this about the value of types.

621
00:39:57.480 --> 00:40:02.840
<v Speaker 4>So I'm actually going through fairly large legacy project at

622
00:40:02.880 --> 00:40:08.679
<v Speaker 4>work that's been that's like one hundred percent JavaScript, and

623
00:40:08.800 --> 00:40:14.320
<v Speaker 4>we are gradually adding static typing into it. And I

624
00:40:14.800 --> 00:40:19.239
<v Speaker 4>actually tweeted about this that the biggest challenge in adding

625
00:40:19.280 --> 00:40:26.360
<v Speaker 4>the static typing is fixing all the bugs that it discovers.

626
00:40:26.679 --> 00:40:33.639
<v Speaker 4>So for example, just just like yesterday, I ran into

627
00:40:33.639 --> 00:40:39.400
<v Speaker 4>the problem there where this legacy system uses mobics, and

628
00:40:39.719 --> 00:40:43.599
<v Speaker 4>mobiics has this concept of an observable array, which is

629
00:40:44.159 --> 00:40:47.679
<v Speaker 4>kind of like which extends regular JavaScript arrays. It's very

630
00:40:47.719 --> 00:40:51.320
<v Speaker 4>similar to JavaScript arrays, but it's not quite the same.

631
00:40:51.400 --> 00:40:55.639
<v Speaker 4>It has methods that regular jobscript arrays don't have. For example,

632
00:40:56.400 --> 00:40:59.880
<v Speaker 4>and people played fast and loose with it, they would

633
00:41:00.400 --> 00:41:06.840
<v Speaker 4>a sign like observable arrays and arrays into the same variables.

634
00:41:07.960 --> 00:41:09.079
<v Speaker 3>And the system.

635
00:41:09.400 --> 00:41:13.320
<v Speaker 4>Now that you know and obviously the software works, it's legacy.

636
00:41:13.599 --> 00:41:16.880
<v Speaker 4>It's you know, I like to say legacy software is

637
00:41:16.920 --> 00:41:21.000
<v Speaker 4>software that works. It's deployed, customers are using it, so

638
00:41:21.320 --> 00:41:24.920
<v Speaker 4>it works somehow. But it's also obviously a bug. Now,

639
00:41:24.960 --> 00:41:30.400
<v Speaker 4>maybe this bug doesn't actually manifest itself in production. Maybe

640
00:41:30.480 --> 00:41:35.280
<v Speaker 4>it does, and this system still somehow works because the

641
00:41:35.320 --> 00:41:41.159
<v Speaker 4>web platform is very forgiving for both good and bad.

642
00:41:43.079 --> 00:41:45.920
<v Speaker 4>But like I said, it's obviously a bug, and it's

643
00:41:45.960 --> 00:41:49.800
<v Speaker 4>been around probably for years, and I've found it now

644
00:41:50.199 --> 00:41:53.760
<v Speaker 4>because I'm adding static type information into the project.

645
00:41:54.880 --> 00:41:57.440
<v Speaker 1>Yeah, I would just put forward that, you know, because

646
00:41:57.480 --> 00:42:01.159
<v Speaker 1>we're talking about different languages having different characteristics. The two

647
00:42:01.239 --> 00:42:06.639
<v Speaker 1>systems for Ruby are RBS and sorbet. RBS is maintained

648
00:42:06.800 --> 00:42:09.199
<v Speaker 1>kind of by the Ruby core team, and then sorbet

649
00:42:09.280 --> 00:42:10.360
<v Speaker 1>is put out by Shopify.

650
00:42:13.119 --> 00:42:17.679
<v Speaker 2>They tend to feel more onerous than.

651
00:42:20.239 --> 00:42:23.760
<v Speaker 1>Surfacing any issues like this, right and so, and I

652
00:42:23.800 --> 00:42:30.639
<v Speaker 1>think sure, as some systems get more complex, I don't

653
00:42:30.639 --> 00:42:33.119
<v Speaker 1>know if I have the right terminology for exactly what.

654
00:42:34.199 --> 00:42:35.400
<v Speaker 2>It's kind of a vague term.

655
00:42:35.559 --> 00:42:39.360
<v Speaker 1>But you know, as things become more interconnected, as people

656
00:42:39.400 --> 00:42:42.159
<v Speaker 1>are pulling in more libraries, maybe you know, it might

657
00:42:42.199 --> 00:42:45.800
<v Speaker 1>begin to pay off. But my theory is more that,

658
00:42:46.440 --> 00:42:48.960
<v Speaker 1>as Thomas said, there are a lot of efforts that

659
00:42:49.000 --> 00:42:53.199
<v Speaker 1>were tried to get something like typescript to work in JavaScript,

660
00:42:53.199 --> 00:42:56.519
<v Speaker 1>to add the static types, and I'm thinking more along

661
00:42:56.559 --> 00:42:58.880
<v Speaker 1>the lines of these just aren't the right solution if

662
00:42:58.880 --> 00:43:01.400
<v Speaker 1>we're going to do it in Ruby, it just doesn't

663
00:43:01.480 --> 00:43:04.119
<v Speaker 1>jive with the way the language goes. I also have

664
00:43:04.199 --> 00:43:06.840
<v Speaker 1>to say that the duck typing and the approach that

665
00:43:06.880 --> 00:43:09.920
<v Speaker 1>we take to a lot of things in Ruby, it

666
00:43:10.079 --> 00:43:14.239
<v Speaker 1>really feels just free. I can just do what I

667
00:43:14.280 --> 00:43:16.880
<v Speaker 1>need to do and so, and I'm not saying that's

668
00:43:16.960 --> 00:43:21.639
<v Speaker 1>right or wrong. I'm just saying they're definitely things that

669
00:43:22.960 --> 00:43:26.559
<v Speaker 1>inform the way people work in these languages to where, Yeah,

670
00:43:26.599 --> 00:43:31.760
<v Speaker 1>I don't think just saying static typing is necessarily the answer.

671
00:43:32.000 --> 00:43:32.320
<v Speaker 2>Think you.

672
00:43:32.599 --> 00:43:34.480
<v Speaker 1>I think there's more nuanced to a lot of this,

673
00:43:34.760 --> 00:43:38.320
<v Speaker 1>And I think to be to be honest, as we've

674
00:43:38.440 --> 00:43:40.719
<v Speaker 1>kind of seen the convergence evolution of a lot of

675
00:43:40.760 --> 00:43:44.159
<v Speaker 1>these languages, that's what we see there too, right, is

676
00:43:44.159 --> 00:43:47.199
<v Speaker 1>that everybody kind of does it kind of their own

677
00:43:47.239 --> 00:43:50.760
<v Speaker 1>way as they adopt these things. And so it's it's

678
00:43:50.840 --> 00:43:54.079
<v Speaker 1>not just this language is picking up with this other

679
00:43:54.159 --> 00:43:57.360
<v Speaker 1>language innovated, it's that we've found a way to do

680
00:43:57.440 --> 00:43:59.480
<v Speaker 1>it in a way that works with the way that

681
00:43:59.519 --> 00:44:04.800
<v Speaker 1>people approach and think about problems in that language. Yeah,

682
00:44:05.119 --> 00:44:09.000
<v Speaker 1>you know, I guess I'm not really trying to defend

683
00:44:09.039 --> 00:44:09.840
<v Speaker 1>anything more.

684
00:44:10.119 --> 00:44:11.519
<v Speaker 2>I'm just trying to say.

685
00:44:13.920 --> 00:44:16.119
<v Speaker 1>I have I haven't seen the benefit, and it's mostly

686
00:44:16.159 --> 00:44:21.360
<v Speaker 1>because what I'm doing just it hasn't it hasn't had

687
00:44:21.360 --> 00:44:24.400
<v Speaker 1>the payoff. But you know, I mean, all of this

688
00:44:24.480 --> 00:44:25.039
<v Speaker 1>could change.

689
00:44:25.280 --> 00:44:27.320
<v Speaker 2>You just never know, So.

690
00:44:27.360 --> 00:44:30.159
<v Speaker 3>I would I would add to that that, first of all,

691
00:44:30.519 --> 00:44:37.159
<v Speaker 3>I think it's not just legit or fine that you

692
00:44:37.239 --> 00:44:42.000
<v Speaker 3>hold to those positions. It's a valid trade off to make.

693
00:44:42.519 --> 00:44:47.440
<v Speaker 3>So one canonical difference, which I think was very evident

694
00:44:47.519 --> 00:44:51.199
<v Speaker 3>in both what done describing his experiences and what you

695
00:44:51.320 --> 00:44:57.239
<v Speaker 3>Charles did, is that it's all a trade off. It's

696
00:44:57.360 --> 00:45:00.360
<v Speaker 3>it's a difference of what it is that you stress

697
00:45:00.400 --> 00:45:05.559
<v Speaker 3>in the system. So my intuition and again qualitative argument,

698
00:45:05.639 --> 00:45:07.280
<v Speaker 3>I have no data to back it up, and I

699
00:45:07.280 --> 00:45:10.480
<v Speaker 3>don't think anyone ever will, or at least not in

700
00:45:10.480 --> 00:45:16.079
<v Speaker 3>my lifetime. I could be wrong what pace even are.

701
00:45:16.800 --> 00:45:23.119
<v Speaker 3>Sometimes what I see is the value of static typing,

702
00:45:23.679 --> 00:45:27.239
<v Speaker 3>or rather static typing is a bit of a large term.

703
00:45:27.320 --> 00:45:29.360
<v Speaker 3>The value of the sort of typing that I'm talking

704
00:45:29.360 --> 00:45:32.320
<v Speaker 3>about which can be achieved with static typing, but also

705
00:45:32.440 --> 00:45:36.400
<v Speaker 3>with gradual typing, as you can see in typescript or

706
00:45:36.440 --> 00:45:42.559
<v Speaker 3>pipes in other languages. Really starts to bear fruit at

707
00:45:42.559 --> 00:45:48.039
<v Speaker 3>a certain not complexity level, but at a certain size

708
00:45:48.599 --> 00:45:52.760
<v Speaker 3>of the thing that you're building and the number of constituent,

709
00:45:53.000 --> 00:45:56.320
<v Speaker 3>interconnected parts that comprise it. So it's not so much

710
00:45:56.360 --> 00:45:59.920
<v Speaker 3>about whether what you're building is is a state.

711
00:46:00.199 --> 00:46:01.800
<v Speaker 2>I couldn't find the way of saying it, but yeah,

712
00:46:01.840 --> 00:46:02.400
<v Speaker 2>that makes sense.

713
00:46:02.880 --> 00:46:09.199
<v Speaker 3>It mostly starts manifesting for real. In my experience, two cases.

714
00:46:09.280 --> 00:46:12.440
<v Speaker 3>One is when the system grows past a certain volume

715
00:46:12.480 --> 00:46:15.280
<v Speaker 3>of stuff that's in it, and that's true of any

716
00:46:15.360 --> 00:46:19.519
<v Speaker 3>language I've ever worked with, including statically, dynamically ted, what

717
00:46:19.639 --> 00:46:24.880
<v Speaker 3>have you. The other situation, which I think is where

718
00:46:25.280 --> 00:46:30.320
<v Speaker 3>the sort of productivity gains perceived by the industry are

719
00:46:30.360 --> 00:46:37.280
<v Speaker 3>coming from, is it aids in someone not knowing what

720
00:46:37.480 --> 00:46:40.679
<v Speaker 3>the code is and how it's constructed, but knowing what

721
00:46:40.800 --> 00:46:44.320
<v Speaker 3>it is supposed to do and how code is constructed

722
00:46:44.400 --> 00:46:49.599
<v Speaker 3>in the general sense of things, being able to get

723
00:46:49.599 --> 00:46:53.960
<v Speaker 3>involved with the system or engage with the system at

724
00:46:53.960 --> 00:46:58.079
<v Speaker 3>a fairly deep level. The only way you can do

725
00:46:58.159 --> 00:47:04.400
<v Speaker 3>that rapidly without signalificant onboarding and significant prior knowledge, which,

726
00:47:04.519 --> 00:47:06.960
<v Speaker 3>by the way, as a Rails guy, you already have.

727
00:47:07.400 --> 00:47:09.920
<v Speaker 3>So when you come into another system built on Ruby,

728
00:47:10.599 --> 00:47:15.159
<v Speaker 3>built in Ruby on Rails, you already have that massive

729
00:47:15.280 --> 00:47:18.280
<v Speaker 3>baggage of how the system is built. Because Rails is very,

730
00:47:18.400 --> 00:47:22.559
<v Speaker 3>very prescriptive, and that is the trade off. I feel

731
00:47:22.599 --> 00:47:29.159
<v Speaker 3>that DHH is kind of espousing and fair enough. There

732
00:47:29.199 --> 00:47:32.480
<v Speaker 3>is no denying that you can be extremely productive if

733
00:47:32.519 --> 00:47:35.280
<v Speaker 3>you're a rails engineer moving from one system built and

734
00:47:35.400 --> 00:47:38.760
<v Speaker 3>Rails to another. I've seen it, right, I've seen people

735
00:47:38.800 --> 00:47:44.320
<v Speaker 3>do that and they're extremely productive. The difference is Rails

736
00:47:44.639 --> 00:47:48.159
<v Speaker 3>is incredibly prescriptive and as a result of that, is

737
00:47:48.159 --> 00:47:51.960
<v Speaker 3>a good fit for some systems, maybe even most systems

738
00:47:52.559 --> 00:47:56.280
<v Speaker 3>of that sort, I don't know, but it is definitely

739
00:47:56.320 --> 00:47:59.719
<v Speaker 3>a very very poor fit for other types of systems

740
00:48:00.079 --> 00:48:05.039
<v Speaker 3>that are in the mainstream. Otherwise, you know, I think

741
00:48:05.079 --> 00:48:09.599
<v Speaker 3>we would be seeing more success in Ruby and Rails

742
00:48:09.639 --> 00:48:15.800
<v Speaker 3>as we did in the two thousands. So my argument

743
00:48:15.840 --> 00:48:20.679
<v Speaker 3>here is there are trade offs that stress different parts

744
00:48:20.679 --> 00:48:26.679
<v Speaker 3>of the system under different circumstances. The most visible trade

745
00:48:26.679 --> 00:48:30.440
<v Speaker 3>off of picking a dynamic versus static language is in

746
00:48:30.480 --> 00:48:35.519
<v Speaker 3>a dynamic language especially on projects that don't meet that

747
00:48:35.639 --> 00:48:40.840
<v Speaker 3>sort of size or volume threshold and have a relatively

748
00:48:40.960 --> 00:48:44.039
<v Speaker 3>small number of people that engage with that system in

749
00:48:44.079 --> 00:48:48.440
<v Speaker 3>its life cycle, which, by the way, is you know,

750
00:48:48.559 --> 00:48:51.599
<v Speaker 3>a thing that happens very often, which is why rails

751
00:48:52.079 --> 00:48:57.599
<v Speaker 3>was and continues to be somewhat successful as long as

752
00:48:57.639 --> 00:49:02.800
<v Speaker 3>those limits are meant. It is an incredible experience. And

753
00:49:02.840 --> 00:49:05.920
<v Speaker 3>you see that with a variety of languages that some

754
00:49:05.960 --> 00:49:08.880
<v Speaker 3>of which have inspired Ruby. So you still see people

755
00:49:08.920 --> 00:49:12.159
<v Speaker 3>that have worked on production systems in small talk raving

756
00:49:12.280 --> 00:49:14.760
<v Speaker 3>about what it felt like to work on production systems

757
00:49:14.840 --> 00:49:18.239
<v Speaker 3>in small talk, right, not having had that experience. I

758
00:49:18.599 --> 00:49:20.480
<v Speaker 3>you know, I'm not going to argue with them about it,

759
00:49:20.719 --> 00:49:24.880
<v Speaker 3>but they kind of express what that did for them

760
00:49:25.000 --> 00:49:28.840
<v Speaker 3>in the same way that it felt very liberating. And

761
00:49:29.000 --> 00:49:33.559
<v Speaker 3>I categorically will not deny that or that there's a

762
00:49:33.599 --> 00:49:37.800
<v Speaker 3>productivity boost to be had by that. But you take

763
00:49:37.960 --> 00:49:41.519
<v Speaker 3>a Ruby rails engineer, you drop them into you know,

764
00:49:41.679 --> 00:49:48.360
<v Speaker 3>no prior knowledge, you drop them into a sufficiently voluminous

765
00:49:48.639 --> 00:49:53.360
<v Speaker 3>base in any other language, they will be able to onboard.

766
00:49:54.400 --> 00:49:57.639
<v Speaker 3>Not because there's nothing wrong with Ruby, and you're not

767
00:49:57.960 --> 00:50:01.519
<v Speaker 3>you know, you don't not owe something coming from group.

768
00:50:01.679 --> 00:50:04.559
<v Speaker 3>You have your preferences, but my point is that the

769
00:50:04.679 --> 00:50:07.199
<v Speaker 3>reverse is not true. You take people that are well

770
00:50:07.320 --> 00:50:10.440
<v Speaker 3>versed in production systems in a variety of languages, you

771
00:50:10.639 --> 00:50:14.280
<v Speaker 3>drop them into a rail system to extend it or

772
00:50:14.320 --> 00:50:17.280
<v Speaker 3>fix it, or improve the build process or whatever it

773
00:50:17.360 --> 00:50:21.079
<v Speaker 3>is that they want to do in that system, because

774
00:50:21.119 --> 00:50:26.000
<v Speaker 3>it relies so heavily on sort of ingering knowledge of

775
00:50:26.119 --> 00:50:29.000
<v Speaker 3>the philosophy of rails, how things are designed, how things

776
00:50:29.000 --> 00:50:32.320
<v Speaker 3>are built. If you don't have that coming in, and

777
00:50:32.400 --> 00:50:36.559
<v Speaker 3>you don't have that also kind of dated to when

778
00:50:36.599 --> 00:50:40.719
<v Speaker 3>that system was built, because modern rails doesn't look quite

779
00:50:40.800 --> 00:50:43.199
<v Speaker 3>like rails from five or ten or fifteen years ago,

780
00:50:43.519 --> 00:50:48.360
<v Speaker 3>and in some cases vastly different. Unless you have that knowledge,

781
00:50:48.400 --> 00:50:51.800
<v Speaker 3>you're just not going to be able to get up

782
00:50:51.840 --> 00:50:55.639
<v Speaker 3>to speed and be productive in that system in any way,

783
00:50:55.719 --> 00:50:59.920
<v Speaker 3>shape or form without significant handholding. And I've been in

784
00:51:00.079 --> 00:51:07.639
<v Speaker 3>that position myself, and it's not pleasant. Whereas you have

785
00:51:07.719 --> 00:51:09.800
<v Speaker 3>the same experience, by the way, with the system built

786
00:51:09.800 --> 00:51:13.039
<v Speaker 3>in Python or PHP from ten years ago, because then

787
00:51:13.840 --> 00:51:17.800
<v Speaker 3>they didn't have some of these quality of life enhancements,

788
00:51:17.880 --> 00:51:22.000
<v Speaker 3>you didn't have known types and known error conditions, and

789
00:51:22.519 --> 00:51:25.719
<v Speaker 3>a hell of a lot more Python docs that you

790
00:51:25.719 --> 00:51:28.519
<v Speaker 3>could see in your idee, and you know, you just

791
00:51:28.599 --> 00:51:32.320
<v Speaker 3>didn't have those things ten years ago. Whereas today, coming

792
00:51:32.400 --> 00:51:37.000
<v Speaker 3>from any language that's modern in mainstream to any other

793
00:51:37.119 --> 00:51:40.119
<v Speaker 3>language that's modern in mainstream is not going to be

794
00:51:40.119 --> 00:51:43.679
<v Speaker 3>smooth sailing because languages are different than there are nuances.

795
00:51:44.440 --> 00:51:48.679
<v Speaker 3>But you're gonna be able to figure out where you

796
00:51:48.719 --> 00:51:50.480
<v Speaker 3>are in the code. You are going to be able

797
00:51:50.559 --> 00:51:55.440
<v Speaker 3>to navigate to related things in the code without having

798
00:51:55.719 --> 00:51:59.920
<v Speaker 3>a lot of ahead of time knowledge. And that matters.

799
00:52:00.199 --> 00:52:03.639
<v Speaker 3>That matters with bigger products, with bigger teams, with products

800
00:52:03.639 --> 00:52:07.320
<v Speaker 3>whose life cycle spans many years and many teams and

801
00:52:07.360 --> 00:52:12.280
<v Speaker 3>many people. And I think that is the primary motivator

802
00:52:12.519 --> 00:52:20.639
<v Speaker 3>for those typing systems. Even in traditionally dynamic languages like Python, JavaScript, whatever. Again,

803
00:52:20.719 --> 00:52:24.840
<v Speaker 3>Ruby spouses a different philosophy, a different set of trade offs.

804
00:52:24.880 --> 00:52:29.719
<v Speaker 3>I don't deny that they're valid, I don't necessarily subscribe

805
00:52:29.760 --> 00:52:35.960
<v Speaker 3>to them. And if I were to find a legit

806
00:52:36.159 --> 00:52:39.159
<v Speaker 3>argument against that, I would say, simply look at the

807
00:52:39.519 --> 00:52:41.920
<v Speaker 3>you know, look at the math, look at the popularity.

808
00:52:43.280 --> 00:52:47.960
<v Speaker 3>Ruby was extremely popular for just short of a decade.

809
00:52:48.360 --> 00:52:50.920
<v Speaker 3>A decade is long gone, and it never picked up

810
00:52:50.960 --> 00:52:57.199
<v Speaker 3>since and there's nothing to indicate that it will. And

811
00:52:57.239 --> 00:53:00.360
<v Speaker 3>it's not because Ruby is bad or Rails is bad. Right,

812
00:53:00.480 --> 00:53:03.800
<v Speaker 3>it's against my personal biases. But you can build systems.

813
00:53:04.239 --> 00:53:07.599
<v Speaker 3>I mean, I've used based camp extensively. It's a great product.

814
00:53:08.039 --> 00:53:09.760
<v Speaker 3>I don't care what it's written in as long as

815
00:53:09.760 --> 00:53:14.599
<v Speaker 3>it works. So, yeah, you see the languages in the mainstream.

816
00:53:14.679 --> 00:53:17.239
<v Speaker 3>Circling back to our original premise, right, you see the

817
00:53:17.320 --> 00:53:24.519
<v Speaker 3>languages in the mainstream. There are nuances, there are philosophical differences.

818
00:53:25.320 --> 00:53:29.480
<v Speaker 3>Those do matter in the tactical sense, like as you

819
00:53:29.559 --> 00:53:31.920
<v Speaker 3>write code, you're not going to write the same code

820
00:53:31.960 --> 00:53:34.039
<v Speaker 3>in Python as you do in Java or Skylla or

821
00:53:34.079 --> 00:53:37.679
<v Speaker 3>any of those languages, or in type stript or in JavaScript.

822
00:53:38.199 --> 00:53:43.440
<v Speaker 3>But you look at the ecosystems and they're all learning

823
00:53:43.480 --> 00:53:47.440
<v Speaker 3>from each other and offering what appears to be a

824
00:53:48.079 --> 00:53:51.679
<v Speaker 3>productive in the broad sense set of features and type

825
00:53:51.719 --> 00:53:55.239
<v Speaker 3>systems is I think just the most visible of those.

826
00:53:55.599 --> 00:53:59.639
<v Speaker 3>You also have dependency management, which frankly wasn't the thing

827
00:54:00.079 --> 00:54:04.239
<v Speaker 3>years ago, right. Maven was probably one of the first

828
00:54:04.400 --> 00:54:07.840
<v Speaker 3>two major dependency management stacks.

829
00:54:08.559 --> 00:54:09.000
<v Speaker 2>Uh.

830
00:54:09.039 --> 00:54:13.119
<v Speaker 3>Pip picked up a lot of that. Then Pip kind

831
00:54:13.119 --> 00:54:16.360
<v Speaker 3>of languished. Poetry came along to fix you know, some

832
00:54:16.440 --> 00:54:18.960
<v Speaker 3>of these things and learn other lessons. And then you

833
00:54:19.039 --> 00:54:22.639
<v Speaker 3>have Cargo, which is probably the biggest, newest one of

834
00:54:22.639 --> 00:54:26.119
<v Speaker 3>the bunch, that learned a lot of those lessons from

835
00:54:26.199 --> 00:54:28.599
<v Speaker 3>languages that are in completely different spaces.

836
00:54:28.840 --> 00:54:35.599
<v Speaker 4>Rus typescript, don't forget NPM.

837
00:54:35.960 --> 00:54:39.199
<v Speaker 3>I'm trying to, but it's not gonna work out. But no,

838
00:54:39.239 --> 00:54:42.079
<v Speaker 3>I mean that I'm being you know, I'm being intentionally

839
00:54:42.119 --> 00:54:42.840
<v Speaker 3>cynical here.

840
00:54:43.400 --> 00:54:44.119
<v Speaker 2>I would say.

841
00:54:45.440 --> 00:54:50.679
<v Speaker 3>Colossal influence. I do not have a dog in this

842
00:54:50.880 --> 00:54:54.239
<v Speaker 3>race either, but I can say it's this interested observer

843
00:54:54.559 --> 00:54:59.320
<v Speaker 3>that NPM has had a colossal impact on pretty much

844
00:54:59.320 --> 00:55:02.440
<v Speaker 3>every ecosyste them out there. Without NPM, we would not

845
00:55:02.639 --> 00:55:07.280
<v Speaker 3>have Cargo, including the things that Cargo does better, simply

846
00:55:07.320 --> 00:55:10.800
<v Speaker 3>because it learned those lessons, right right, So that is

847
00:55:10.840 --> 00:55:13.800
<v Speaker 3>what I mean by convergent evolution. You have a lot

848
00:55:13.840 --> 00:55:15.800
<v Speaker 3>of the same things. And by the way, a lot

849
00:55:15.800 --> 00:55:19.000
<v Speaker 3>of languages. JavaScript used to be the poster child for

850
00:55:19.239 --> 00:55:21.599
<v Speaker 3>oh there's no build, isn't it great? I just update

851
00:55:21.639 --> 00:55:24.960
<v Speaker 3>the code and there it is, which comes with an

852
00:55:25.039 --> 00:55:29.280
<v Speaker 3>incredible set of trade offs, and some of those trade offs,

853
00:55:29.280 --> 00:55:33.079
<v Speaker 3>by the way, were very early on ruled not by

854
00:55:33.159 --> 00:55:35.920
<v Speaker 3>me and not by people hating on JavaScript like i I do,

855
00:55:36.480 --> 00:55:41.159
<v Speaker 3>ruled by the reality of it, ruled by the community

856
00:55:41.360 --> 00:55:46.480
<v Speaker 3>of people producing functional production code as being a non issue.

857
00:55:46.920 --> 00:55:50.679
<v Speaker 3>You had a build process in many, many, many, many

858
00:55:50.760 --> 00:55:54.000
<v Speaker 3>JavaScript systems over the last twe years, if only for

859
00:55:55.159 --> 00:56:00.920
<v Speaker 3>you know, dependency management, asset bundling, obfuscation, minifit cation, what

860
00:56:01.159 --> 00:56:04.599
<v Speaker 3>have you. All these things you couldn't get in a

861
00:56:04.679 --> 00:56:08.039
<v Speaker 3>runtime system. So it was not a worthwhile trade off, right,

862
00:56:08.119 --> 00:56:13.519
<v Speaker 3>So that ostensible advantage is not an advantage as such.

863
00:56:13.559 --> 00:56:16.599
<v Speaker 3>It's a tradeoff, And I think a lot of those

864
00:56:16.599 --> 00:56:20.480
<v Speaker 3>trade offs are made because the ecosystem hasn't met those

865
00:56:20.559 --> 00:56:24.199
<v Speaker 3>challenges properly in a way that doesn't require a trade off.

866
00:56:25.039 --> 00:56:27.559
<v Speaker 4>I really, I really want to try to get to

867
00:56:27.599 --> 00:56:30.519
<v Speaker 4>the second sacred cow, and we seem.

868
00:56:30.119 --> 00:56:32.920
<v Speaker 2>To be that. I was wondering if we were going

869
00:56:33.000 --> 00:56:34.320
<v Speaker 2>to get to any others.

870
00:56:35.000 --> 00:56:39.320
<v Speaker 4>So so, unless you've got something really insightful to add tomorrow,

871
00:56:39.320 --> 00:56:40.679
<v Speaker 4>I would like to move along.

872
00:56:41.239 --> 00:56:44.320
<v Speaker 3>I think I think that that does not have much

873
00:56:44.400 --> 00:56:45.639
<v Speaker 3>chance of ever happening.

874
00:56:48.280 --> 00:56:50.159
<v Speaker 2>If we do number two, we're not getting to any

875
00:56:50.320 --> 00:56:50.800
<v Speaker 2>any of the.

876
00:56:50.719 --> 00:56:53.320
<v Speaker 4>Other ones we can have Tomorrow on again.

877
00:56:53.840 --> 00:56:56.239
<v Speaker 2>I'm fine with that this has been fascinating to doctor.

878
00:56:57.599 --> 00:57:00.320
<v Speaker 4>All right, so let's try to at least on the

879
00:57:00.360 --> 00:57:07.840
<v Speaker 4>second one. Let's Chuck say you're going to read the

880
00:57:07.840 --> 00:57:09.079
<v Speaker 4>second one.

881
00:57:08.840 --> 00:57:12.000
<v Speaker 1>I will read the second one. So this is what

882
00:57:12.119 --> 00:57:13.639
<v Speaker 1>he's going to debunk.

883
00:57:14.000 --> 00:57:22.599
<v Speaker 2>This is not so anyway, It's clean code is important.

884
00:57:22.079 --> 00:57:22.480
<v Speaker 4>All right.

885
00:57:22.519 --> 00:57:24.599
<v Speaker 3>So I'll start by qualifying that.

886
00:57:28.159 --> 00:57:30.119
<v Speaker 2>I was gonna say, I don't know if I agree

887
00:57:30.119 --> 00:57:30.440
<v Speaker 2>with you, and.

888
00:57:30.480 --> 00:57:32.719
<v Speaker 3>I'm going to be talking about exactly what you think

889
00:57:32.760 --> 00:57:34.239
<v Speaker 3>I'm going to be talking to. I just want to

890
00:57:34.239 --> 00:57:36.199
<v Speaker 3>make sure we're all on the same page. So when

891
00:57:36.199 --> 00:57:39.760
<v Speaker 3>I say clean code, what I mean is the set

892
00:57:39.800 --> 00:57:46.039
<v Speaker 3>of perceived notions of what clean code is and how

893
00:57:46.079 --> 00:57:50.039
<v Speaker 3>to write it as had been espoused in the industry.

894
00:57:50.079 --> 00:57:53.360
<v Speaker 3>And we said we might name drop, but I mean,

895
00:57:53.400 --> 00:57:57.440
<v Speaker 3>you can't not name drop uncle Bob as the progenitor

896
00:57:57.480 --> 00:57:58.440
<v Speaker 3>of these practices.

897
00:57:58.679 --> 00:57:59.800
<v Speaker 2>Uncle Bob's a good friend of.

898
00:57:59.719 --> 00:58:04.480
<v Speaker 3>Mine, but muh cool, so one, I'm one of them.

899
00:58:05.159 --> 00:58:07.039
<v Speaker 2>I disagree with him too, So that's fine.

900
00:58:07.159 --> 00:58:10.280
<v Speaker 3>All right. So so here's here's what I have to

901
00:58:10.320 --> 00:58:13.719
<v Speaker 3>say on the subject. My issue with the with clean

902
00:58:13.760 --> 00:58:18.159
<v Speaker 3>code has nothing to do with its intent, and the

903
00:58:18.239 --> 00:58:21.960
<v Speaker 3>intent the way I see it is to help people

904
00:58:22.039 --> 00:58:26.119
<v Speaker 3>design systems that are more readable, that are more sensible. Uh,

905
00:58:26.280 --> 00:58:29.039
<v Speaker 3>you know, it's all those best intentions that the way

906
00:58:29.440 --> 00:58:30.320
<v Speaker 3>way to help.

907
00:58:31.039 --> 00:58:33.000
<v Speaker 2>Is the way I typically approach it.

908
00:58:35.239 --> 00:58:38.440
<v Speaker 4>You just noticed what Thomers said. He said, that's the way,

909
00:58:38.519 --> 00:58:44.880
<v Speaker 4>you know, the way to hell is paved with good intentions.

910
00:58:42.800 --> 00:58:48.880
<v Speaker 3>Because the rules of because what clean code is is prescriptive,

911
00:58:49.320 --> 00:58:53.639
<v Speaker 3>and the way people understand it is as a set

912
00:58:53.639 --> 00:58:56.760
<v Speaker 3>of rules and practices that must be adhere to or

913
00:58:57.440 --> 00:59:00.920
<v Speaker 3>code is bad or the code isn't clean. So there

914
00:59:00.920 --> 00:59:03.400
<v Speaker 3>are a lot of examples to this, but the kind

915
00:59:03.440 --> 00:59:05.639
<v Speaker 3>of most obvious, and I think in many ways the

916
00:59:05.639 --> 00:59:10.360
<v Speaker 3>most egregious one is dry is do not repeat yourself.

917
00:59:10.840 --> 00:59:15.519
<v Speaker 3>And there is a fascinating amount of the magogaery going

918
00:59:15.559 --> 00:59:21.519
<v Speaker 3>on in the industry around that in similar rules where

919
00:59:23.400 --> 00:59:26.920
<v Speaker 3>you will, sooner or later in your career if you

920
00:59:26.960 --> 00:59:30.440
<v Speaker 3>haven't already, and by you, I mean everyone with more

921
00:59:30.480 --> 00:59:34.719
<v Speaker 3>than half a year of experience, run into someone telling you, oh,

922
00:59:34.760 --> 00:59:38.400
<v Speaker 3>but why don't you extract these two identical lines that

923
00:59:38.519 --> 00:59:41.639
<v Speaker 3>come with you know, within twenty lines of each other

924
00:59:42.159 --> 00:59:46.119
<v Speaker 3>into a method because they're the same and they're reusable,

925
00:59:46.719 --> 00:59:52.360
<v Speaker 3>or if they're slightly more advanced, and they're digging into

926
00:59:52.400 --> 00:59:57.599
<v Speaker 3>this only when those that identical line shows up three times.

927
00:59:57.639 --> 01:00:00.199
<v Speaker 3>Because if it doesn't show up three times and it's not,

928
01:00:00.360 --> 01:00:01.119
<v Speaker 3>you know, you don't.

929
01:00:01.000 --> 01:00:05.239
<v Speaker 2>Dry it be juice, beetle juice.

930
01:00:05.480 --> 01:00:08.280
<v Speaker 3>Yeah. No, No, that's a prescription, and it's a really

931
01:00:08.400 --> 01:00:13.079
<v Speaker 3>terrible prescription, first of all because it doesn't do anything.

932
01:00:13.320 --> 01:00:15.719
<v Speaker 3>Second of all, it's because it wastes a whole heap

933
01:00:15.760 --> 01:00:19.239
<v Speaker 3>of people's time thinking about their own thing. And third

934
01:00:19.320 --> 01:00:24.119
<v Speaker 3>because it causes it and other uh. Discussions of clean

935
01:00:24.199 --> 01:00:29.199
<v Speaker 3>code end up wasting no more and no less time

936
01:00:29.440 --> 01:00:32.760
<v Speaker 3>than arguments about code formatting used to back in the day.

937
01:00:33.400 --> 01:00:38.519
<v Speaker 3>Because the rules are approximate, the rules are intended, are

938
01:00:38.599 --> 01:00:43.159
<v Speaker 3>are prescriptive and intended not for you to follow religiously.

939
01:00:44.159 --> 01:00:46.159
<v Speaker 3>That's my read on it, And that's kind of the

940
01:00:46.679 --> 01:00:50.360
<v Speaker 3>you know, my assumption of the intent behind the words, right, I.

941
01:00:50.320 --> 01:00:52.239
<v Speaker 2>Don't that's my understanding as well.

942
01:00:52.440 --> 01:00:55.159
<v Speaker 3>Yeah, I don't know, uncle Bob. You know, I'm not

943
01:00:55.199 --> 01:00:59.360
<v Speaker 3>gonna there's not an ad hominem thing. My concern with

944
01:00:59.440 --> 01:01:03.039
<v Speaker 3>these rules is that people take them as gospel without

945
01:01:03.239 --> 01:01:06.320
<v Speaker 3>considering what it is that they're trying to accomplish. So

946
01:01:06.559 --> 01:01:10.280
<v Speaker 3>the rules of clean code are not in and of themselves.

947
01:01:11.280 --> 01:01:14.480
<v Speaker 3>You know, they might be evil, but the intent isn't.

948
01:01:14.599 --> 01:01:21.519
<v Speaker 3>Intent to my mind is just misguided. The intent is

949
01:01:21.639 --> 01:01:25.199
<v Speaker 3>to build systems that are more maintainable, as you say,

950
01:01:25.559 --> 01:01:30.960
<v Speaker 3>or readable, or any of these things, without actually reaching

951
01:01:31.039 --> 01:01:34.639
<v Speaker 3>for what it is that that makes a system more

952
01:01:34.760 --> 01:01:37.639
<v Speaker 3>maintainable or readable or navigable or any of these things,

953
01:01:37.719 --> 01:01:44.639
<v Speaker 3>which is simplicity versus complexity. And I can define those things,

954
01:01:44.639 --> 01:01:50.559
<v Speaker 3>and we may want to. But critically, those rules, to

955
01:01:50.719 --> 01:01:55.280
<v Speaker 3>my mind, right as in my own reading of them,

956
01:01:55.400 --> 01:01:59.880
<v Speaker 3>were they are not so much that people know not

957
01:02:00.079 --> 01:02:02.719
<v Speaker 3>to repeat themselves more than twice in code, because that's

958
01:02:02.760 --> 01:02:06.719
<v Speaker 3>just garbage. The rules are there to get people thinking,

959
01:02:08.199 --> 01:02:12.400
<v Speaker 3>what is simple? What will make this code easier to grasp,

960
01:02:12.559 --> 01:02:16.679
<v Speaker 3>easier for another person, which, as the saying goes, might

961
01:02:16.760 --> 01:02:21.440
<v Speaker 3>be mean in six weeks. What will make it easier

962
01:02:21.480 --> 01:02:26.039
<v Speaker 3>to read this code, figure out what it does, why

963
01:02:26.079 --> 01:02:29.400
<v Speaker 3>it does it, how it does it with a minimal

964
01:02:29.719 --> 01:02:36.559
<v Speaker 3>of external drivers or external knowledge, And that means simplicity.

965
01:02:36.639 --> 01:02:41.000
<v Speaker 4>So here I'm going to push back on something. I

966
01:02:41.079 --> 01:02:45.760
<v Speaker 4>think what you might be ignoring is the fact that

967
01:02:46.199 --> 01:02:48.360
<v Speaker 4>is kind of the thing that comes up. It came

968
01:02:48.440 --> 01:02:50.960
<v Speaker 4>up very early in the in the industry in the

969
01:02:50.960 --> 01:02:54.000
<v Speaker 4>form of the mythical manment. Is the fact that not

970
01:02:54.079 --> 01:02:56.880
<v Speaker 4>all such by the way, yeah, the fact that not

971
01:02:56.960 --> 01:02:57.920
<v Speaker 4>all programmers are.

972
01:02:57.960 --> 01:02:59.280
<v Speaker 3>Another sacred cow too.

973
01:03:00.360 --> 01:03:06.400
<v Speaker 4>Yeah yeah, the fact that half the programmers in the

974
01:03:06.440 --> 01:03:08.760
<v Speaker 4>world are worse than the average programmer.

975
01:03:10.480 --> 01:03:13.199
<v Speaker 2>And definitionly, I guess it's mean.

976
01:03:14.280 --> 01:03:17.519
<v Speaker 4>It's mean, it's true, it's mean, but it's true by definitely.

977
01:03:17.920 --> 01:03:18.239
<v Speaker 3>Yeah.

978
01:03:18.280 --> 01:03:24.920
<v Speaker 4>Well, okay, yeah, I think in this particular case, the

979
01:03:24.960 --> 01:03:27.159
<v Speaker 4>average and the mean are probably fairly close.

980
01:03:28.760 --> 01:03:31.480
<v Speaker 3>We're talking humans, for a change, the normal distribution.

981
01:03:32.159 --> 01:03:37.400
<v Speaker 4>Yeah, it's not like wealth. So what I'm trying to

982
01:03:37.440 --> 01:03:42.079
<v Speaker 4>say is, if you've got a team on which you've

983
01:03:42.119 --> 01:03:47.280
<v Speaker 4>got a top notch developer that is able to make

984
01:03:47.360 --> 01:03:52.320
<v Speaker 4>sure that the system as a whole retains this attribute

985
01:03:52.360 --> 01:03:57.000
<v Speaker 4>of simplicity, then you need you You don't need to

986
01:03:57.079 --> 01:04:00.440
<v Speaker 4>adhere as much to these kinds of strict rules and

987
01:04:00.519 --> 01:04:06.719
<v Speaker 4>guidelines when you're on teams that don't have such a person,

988
01:04:07.800 --> 01:04:13.719
<v Speaker 4>then maybe having overly strict rules is a good thing,

989
01:04:14.880 --> 01:04:15.320
<v Speaker 4>don't you.

990
01:04:15.280 --> 01:04:19.519
<v Speaker 3>Think, Well, speaking is a statically typed guy, I can't

991
01:04:19.639 --> 01:04:24.280
<v Speaker 3>very well rail against that argument. But taking a little

992
01:04:24.320 --> 01:04:29.760
<v Speaker 3>bit more head on. There's two issues I have with

993
01:04:29.840 --> 01:04:33.000
<v Speaker 3>that argument that I think kind of nullify that argument.

994
01:04:33.199 --> 01:04:39.239
<v Speaker 3>The first is it doesn't actually argue anything beyond oh,

995
01:04:39.360 --> 01:04:42.159
<v Speaker 3>other people are stupid. It's for their own goods, which

996
01:04:42.440 --> 01:04:45.480
<v Speaker 3>is not an argument that I buy, even though you

997
01:04:45.519 --> 01:04:50.840
<v Speaker 3>know I might subscribe to that opinion. The second issue

998
01:04:50.880 --> 01:04:58.280
<v Speaker 3>I have with it is engineers that don't have in

999
01:05:01.519 --> 01:05:05.639
<v Speaker 3>that haven't over the course of presumably several years. They

1000
01:05:05.679 --> 01:05:08.000
<v Speaker 3>don't have to be super senior developers, right, But if

1001
01:05:08.039 --> 01:05:09.920
<v Speaker 3>you've been in the industry for a couple of years,

1002
01:05:10.679 --> 01:05:15.840
<v Speaker 3>presumably wrote a bunch of code, presumably read quite extensively

1003
01:05:15.960 --> 01:05:19.039
<v Speaker 3>more code than you wrote to begin with, and you

1004
01:05:19.159 --> 01:05:27.159
<v Speaker 3>haven't developed an appreciation for the basic truth that copy

1005
01:05:27.239 --> 01:05:31.119
<v Speaker 3>pasting a complex bit of code over and over again

1006
01:05:31.360 --> 01:05:34.480
<v Speaker 3>is bad, then your problem isn't that you have don't

1007
01:05:34.519 --> 01:05:36.719
<v Speaker 3>have the right rules in place to limit you. Your

1008
01:05:36.760 --> 01:05:39.440
<v Speaker 3>problem is that your company hired you to do a

1009
01:05:39.519 --> 01:05:44.119
<v Speaker 3>job that you're probably incapable of doing. Now that being

1010
01:05:44.159 --> 01:05:48.519
<v Speaker 3>said that that sounds like gatekeeping, probably because it is,

1011
01:05:48.800 --> 01:05:53.920
<v Speaker 3>because I can't help it. But to bring that home

1012
01:05:54.119 --> 01:05:59.519
<v Speaker 3>and perhaps you know, save my own skin with other people,

1013
01:06:00.199 --> 01:06:05.079
<v Speaker 3>my point is this, some types of programming you can

1014
01:06:05.159 --> 01:06:08.599
<v Speaker 3>do with these types of guardrails in place, and there

1015
01:06:08.719 --> 01:06:14.960
<v Speaker 3>is room for that work in the industry, I hope, right.

1016
01:06:15.079 --> 01:06:21.079
<v Speaker 3>But the types of systems that you will be able

1017
01:06:21.119 --> 01:06:24.280
<v Speaker 3>to work on is not infinite. You're not going to

1018
01:06:24.280 --> 01:06:31.559
<v Speaker 3>be able to build large, production grade, long lived, difficult

1019
01:06:32.159 --> 01:06:37.239
<v Speaker 3>systems that deal with actual problems that are interesting if

1020
01:06:37.800 --> 01:06:41.239
<v Speaker 3>you are not willing to put in the thought and

1021
01:06:41.440 --> 01:06:46.199
<v Speaker 3>learn what makes code more readable, more navigable, et cetera,

1022
01:06:46.480 --> 01:06:48.519
<v Speaker 3>and you have people around you to help you do that.

1023
01:06:48.599 --> 01:06:51.239
<v Speaker 3>So it's not like if you are a junior developer

1024
01:06:51.280 --> 01:06:53.360
<v Speaker 3>and you come in and you make a quote unquote

1025
01:06:53.440 --> 01:06:57.960
<v Speaker 3>dry violation mistake, you're going to get fired. You're hopefully

1026
01:06:58.519 --> 01:07:01.559
<v Speaker 3>going to because you're a junior developer. You were hired

1027
01:07:01.599 --> 01:07:04.320
<v Speaker 3>in the context where you can be you know, functional,

1028
01:07:04.679 --> 01:07:07.599
<v Speaker 3>and you have support. You're probably going to have the

1029
01:07:07.639 --> 01:07:12.599
<v Speaker 3>person next to you, that senior developer, explaining why this

1030
01:07:12.760 --> 01:07:18.079
<v Speaker 3>makes the code worse. But you're not likely to have

1031
01:07:18.159 --> 01:07:21.480
<v Speaker 3>a set of guardrails keeping you from making those mistakes

1032
01:07:21.559 --> 01:07:26.960
<v Speaker 3>because those guardrails are literally anathema to the way virtually

1033
01:07:27.039 --> 01:07:31.360
<v Speaker 3>any any practicing software engineer works. So if imagine you

1034
01:07:31.559 --> 01:07:34.960
<v Speaker 3>were working on a system and you were writing code,

1035
01:07:35.079 --> 01:07:38.239
<v Speaker 3>and your code would not compile because the compiler feels

1036
01:07:38.280 --> 01:07:41.639
<v Speaker 3>that you have, you know, those two lines of code

1037
01:07:41.719 --> 01:07:44.960
<v Speaker 3>identical in three places. So that's a dry violation, and

1038
01:07:45.079 --> 01:07:48.440
<v Speaker 3>you you know you can't compile the code, right. That

1039
01:07:48.519 --> 01:07:53.199
<v Speaker 3>is that sounds ridiculous because it is because the assumption

1040
01:07:53.400 --> 01:07:56.880
<v Speaker 3>is if you're working on those systems, you have to

1041
01:07:57.000 --> 01:08:03.079
<v Speaker 3>have both a taste four code, whereby you wouldn't necessarily

1042
01:08:03.199 --> 01:08:06.119
<v Speaker 3>you would learn very early on why that's mistake, and

1043
01:08:06.159 --> 01:08:09.800
<v Speaker 3>you would stop making it because it's communication. There is

1044
01:08:09.840 --> 01:08:13.960
<v Speaker 3>nothing inherently wrong with having several copies of the same

1045
01:08:14.039 --> 01:08:17.439
<v Speaker 3>code in the same place. It's a tradeoff, right, What

1046
01:08:17.760 --> 01:08:20.760
<v Speaker 3>is the tradeoff? If you can't have that conversation, you're

1047
01:08:20.880 --> 01:08:23.640
<v Speaker 3>never going to become a better developer. The guardrails aren't

1048
01:08:23.680 --> 01:08:25.840
<v Speaker 3>going to help you get there. They're just going to

1049
01:08:25.960 --> 01:08:28.079
<v Speaker 3>stop everyone else from doing their job.

1050
01:08:28.720 --> 01:08:34.439
<v Speaker 4>So I think this is a great topic and one

1051
01:08:34.479 --> 01:08:36.960
<v Speaker 4>I think we should probably have you on to discuss

1052
01:08:37.000 --> 01:08:42.039
<v Speaker 4>at length about what is actually simplicity and coding. We

1053
01:08:42.159 --> 01:08:46.680
<v Speaker 4>probably don't have time to do it, justice. I'll I'll

1054
01:08:46.720 --> 01:08:50.560
<v Speaker 4>just add the fact that I, you know, I never

1055
01:08:50.880 --> 01:08:56.039
<v Speaker 4>liked Douglas Crockford's linter, what's it called j slint, the

1056
01:08:56.119 --> 01:09:02.119
<v Speaker 4>original linter, because it basically say, you know, Douglas Crawford said,

1057
01:09:02.319 --> 01:09:05.600
<v Speaker 4>this is you know, this is JavaScript the good parts.

1058
01:09:05.720 --> 01:09:10.560
<v Speaker 4>Everything else is not good by definition, because I said so,

1059
01:09:11.239 --> 01:09:14.479
<v Speaker 4>and I built the splinter to enforce my rules, and

1060
01:09:14.840 --> 01:09:17.920
<v Speaker 4>you know you can't you can't modify it. And there's

1061
01:09:17.960 --> 01:09:23.159
<v Speaker 4>a reason E a splint one and because you know

1062
01:09:23.960 --> 01:09:28.680
<v Speaker 4>it's it's when you're so dogmatic, it's it's a problem.

1063
01:09:29.319 --> 01:09:33.640
<v Speaker 3>Contrary wise, there's a reason Java lost, if you can

1064
01:09:33.680 --> 01:09:36.479
<v Speaker 3>call it that. And the reason Java isn't anywhere near

1065
01:09:36.520 --> 01:09:39.239
<v Speaker 3>as popular as it used to be percentage wise for

1066
01:09:39.399 --> 01:09:41.960
<v Speaker 3>building the types of systems that Java used to be

1067
01:09:42.039 --> 01:09:46.640
<v Speaker 3>popular for is because a lot of people were thrown

1068
01:09:46.720 --> 01:09:51.359
<v Speaker 3>off and turned away by what is to a you know,

1069
01:09:52.000 --> 01:09:58.119
<v Speaker 3>a seasoned experienced engineer after the mission, a rigorous type

1070
01:09:58.119 --> 01:10:01.560
<v Speaker 3>system that forces you to not make mistakes, whereas a

1071
01:10:01.600 --> 01:10:04.720
<v Speaker 3>lot of practicing developers would look at it and go, yeah,

1072
01:10:04.720 --> 01:10:07.720
<v Speaker 3>but who gives a dam that's you know, that's completely trivial.

1073
01:10:07.760 --> 01:10:09.239
<v Speaker 3>I don't care. I don't want to have to miss

1074
01:10:09.279 --> 01:10:12.439
<v Speaker 3>with it, and moved on. So the languages that ended

1075
01:10:12.520 --> 01:10:17.079
<v Speaker 3>up being successful are the ones that found a workable

1076
01:10:17.119 --> 01:10:20.560
<v Speaker 3>middle ground, and I include on that list, by the way,

1077
01:10:20.840 --> 01:10:25.119
<v Speaker 3>later iterations of Java. Modern Java isn't anywhere near as

1078
01:10:25.239 --> 01:10:29.359
<v Speaker 3>verbose or part of my French anal retentive as traditional

1079
01:10:29.439 --> 01:10:33.119
<v Speaker 3>Java used to be, and that is because other languages

1080
01:10:33.199 --> 01:10:37.920
<v Speaker 3>showed that that kind of It's not just verbosity. Everyone

1081
01:10:38.199 --> 01:10:40.600
<v Speaker 3>you know, rails against Java being verbos but it's also

1082
01:10:41.640 --> 01:10:46.279
<v Speaker 3>that precision just isn't necessary in a lot of things. Right.

1083
01:10:46.399 --> 01:10:49.000
<v Speaker 3>The common case where you have a class and that

1084
01:10:49.039 --> 01:10:51.920
<v Speaker 3>class has hash code into string and a few constituent

1085
01:10:52.000 --> 01:10:55.720
<v Speaker 3>components is common enough that it makes sense to have

1086
01:10:55.760 --> 01:10:59.640
<v Speaker 3>a first class language concept around it. And it took

1087
01:10:59.720 --> 01:11:02.560
<v Speaker 3>Java way too long to reckon with that, but eventually

1088
01:11:02.600 --> 01:11:06.079
<v Speaker 3>it got record classes, you know, the sort of same

1089
01:11:06.439 --> 01:11:10.840
<v Speaker 3>ad hoc data containers that every other type every other

1090
01:11:10.960 --> 01:11:13.800
<v Speaker 3>language has had since the beginning of time, because it's

1091
01:11:13.840 --> 01:11:18.840
<v Speaker 3>convenient and useful and doesn't require the level of control

1092
01:11:18.880 --> 01:11:23.319
<v Speaker 3>and precision that Java espoused at the beginning. So things

1093
01:11:23.319 --> 01:11:26.399
<v Speaker 3>evolve across the board. It's not I'm not trying to

1094
01:11:26.399 --> 01:11:31.399
<v Speaker 3>make the point. You know, this kind of circles back

1095
01:11:31.399 --> 01:11:34.560
<v Speaker 3>to original Kyle, But with this as well. Is the

1096
01:11:34.720 --> 01:11:39.399
<v Speaker 3>tools that win tend to be the tools that are

1097
01:11:39.479 --> 01:11:44.039
<v Speaker 3>not the most rigid or the most liberating, and for

1098
01:11:44.119 --> 01:11:48.840
<v Speaker 3>a very good reason. It's because having absolutely no guardrails

1099
01:11:48.880 --> 01:11:52.199
<v Speaker 3>is a recipe for disaster, which is why hardly anyone

1100
01:11:53.399 --> 01:11:57.520
<v Speaker 3>writes business software in C or SQLS plus anymore. It's

1101
01:11:57.560 --> 01:12:01.800
<v Speaker 3>because you don't get anything in return to that level

1102
01:12:01.800 --> 01:12:05.000
<v Speaker 3>of precision and control. You only get deviced. Like for

1103
01:12:05.079 --> 01:12:11.720
<v Speaker 3>those domains, anything that's sufficiently successful in the modern sense

1104
01:12:12.159 --> 01:12:16.600
<v Speaker 3>has made those trade offs willingly, and I think we

1105
01:12:16.800 --> 01:12:21.560
<v Speaker 3>find those trade offs being made in every ecosystem, kind

1106
01:12:21.600 --> 01:12:24.319
<v Speaker 3>of converging on the same set of trade offs, roughly

1107
01:12:24.520 --> 01:12:31.840
<v Speaker 3>with nuances and preferences. As for clean code, clean code

1108
01:12:31.880 --> 01:12:36.479
<v Speaker 3>is prescriptive and therefore bogus. The problem is the rules

1109
01:12:36.600 --> 01:12:44.039
<v Speaker 3>are not. The rules are well intentioned, but they provide

1110
01:12:44.119 --> 01:12:48.359
<v Speaker 3>the wrong kind of guidance and end up causing more

1111
01:12:48.439 --> 01:12:50.039
<v Speaker 3>damage than harm in my opinion.

1112
01:12:50.119 --> 01:12:52.840
<v Speaker 1>So I'm gonna jump in on some of this. So,

1113
01:12:54.640 --> 01:12:57.279
<v Speaker 1>like I said, I've talked to Uncle Bob quite a bit.

1114
01:12:57.399 --> 01:12:59.760
<v Speaker 1>I've actually talked to him about the Clean Code book.

1115
01:13:01.359 --> 01:13:04.079
<v Speaker 1>We also I ran a book club for a while.

1116
01:13:04.119 --> 01:13:07.920
<v Speaker 1>In fact, I still kind of do. But so we

1117
01:13:08.000 --> 01:13:11.239
<v Speaker 1>did clean Code. We also did Clean Architecture. A lot

1118
01:13:11.279 --> 01:13:13.399
<v Speaker 1>of the things that we talked through as we talked

1119
01:13:13.399 --> 01:13:17.079
<v Speaker 1>through the book, right, he wrote it when he was

1120
01:13:17.159 --> 01:13:20.600
<v Speaker 1>writing a lot of languages that frankly are pretty different

1121
01:13:20.640 --> 01:13:24.760
<v Speaker 1>from Ruby or JavaScript where I was primarily working. And

1122
01:13:24.800 --> 01:13:27.720
<v Speaker 1>so I point some of these out, either, you know, hey,

1123
01:13:27.840 --> 01:13:30.359
<v Speaker 1>this doesn't make as much sense in the world I

1124
01:13:30.399 --> 01:13:32.760
<v Speaker 1>live in as the world that you know this seems

1125
01:13:32.760 --> 01:13:36.000
<v Speaker 1>to be written for. And he agreed, right, And so

1126
01:13:36.319 --> 01:13:39.000
<v Speaker 1>in a lot of cases, yeah, they're they're kind of prescriptive,

1127
01:13:39.000 --> 01:13:42.479
<v Speaker 1>and maybe he doesn't make that as clear that hey, look,

1128
01:13:42.479 --> 01:13:45.159
<v Speaker 1>you've got to apply this is makes sense depending on

1129
01:13:45.239 --> 01:13:45.880
<v Speaker 1>what you're doing.

1130
01:13:47.199 --> 01:13:49.720
<v Speaker 2>A lot of the ideas.

1131
01:13:49.039 --> 01:13:51.359
<v Speaker 1>In the book Clean Code, and a lot of the

1132
01:13:51.399 --> 01:13:55.800
<v Speaker 1>ideas in the book Clean Architecture, I picked up another

1133
01:13:55.800 --> 01:13:58.000
<v Speaker 1>one I can't clean Agile. I think I also read.

1134
01:13:58.560 --> 01:14:03.640
<v Speaker 1>And the main thing is is I find that the

1135
01:14:03.720 --> 01:14:08.800
<v Speaker 1>rules or ideas behind the rules are definitely worth discussing

1136
01:14:09.039 --> 01:14:12.319
<v Speaker 1>with your team, right and having the conversation, hey, look,

1137
01:14:12.680 --> 01:14:16.119
<v Speaker 1>when we're naming variables, we ought to consider these things,

1138
01:14:16.399 --> 01:14:18.720
<v Speaker 1>you know, when we're writing out our code, we ought

1139
01:14:18.760 --> 01:14:21.199
<v Speaker 1>to consider these things, right, so when you when you

1140
01:14:21.199 --> 01:14:24.920
<v Speaker 1>get down to you know, follow standard conventions, I mean,

1141
01:14:26.279 --> 01:14:29.039
<v Speaker 1>that makes it approachable for anybody who works in the

1142
01:14:29.119 --> 01:14:30.640
<v Speaker 1>language or framework or whatever.

1143
01:14:31.479 --> 01:14:32.960
<v Speaker 2>You know, you get into.

1144
01:14:32.880 --> 01:14:34.720
<v Speaker 1>Keeping it simple, I think is one of his points,

1145
01:14:34.720 --> 01:14:36.960
<v Speaker 1>which is also your point. But yeah, as you get

1146
01:14:37.000 --> 01:14:38.640
<v Speaker 1>into some of the other ones where it's like here's

1147
01:14:38.640 --> 01:14:41.159
<v Speaker 1>how you formulate comments, and here's how you name variables,

1148
01:14:41.199 --> 01:14:43.760
<v Speaker 1>and here's how you you know, do these kinds of things. Yeah,

1149
01:14:43.800 --> 01:14:47.399
<v Speaker 1>some of those I found just you know, we're a

1150
01:14:47.399 --> 01:14:51.840
<v Speaker 1>little bit tough to swallow. But it was mainly because

1151
01:14:52.800 --> 01:14:56.079
<v Speaker 1>my context was different enough to where I could come

1152
01:14:56.159 --> 01:14:58.359
<v Speaker 1>up with a guideline that made sense for what I

1153
01:14:58.399 --> 01:15:01.920
<v Speaker 1>was doing, and to like dry.

1154
01:15:02.039 --> 01:15:02.239
<v Speaker 2>Yeah.

1155
01:15:02.279 --> 01:15:04.319
<v Speaker 1>I think it's funny because you mentioned, you know what

1156
01:15:04.359 --> 01:15:06.520
<v Speaker 1>if your tool told you that it wouldn't compile if

1157
01:15:06.560 --> 01:15:11.960
<v Speaker 1>it wasn't dry enough. And back in the day, earlier

1158
01:15:12.079 --> 01:15:14.399
<v Speaker 1>in the Ruby community, there were tools that would do

1159
01:15:14.520 --> 01:15:17.079
<v Speaker 1>code analysis and they would point out areas of your

1160
01:15:17.119 --> 01:15:20.840
<v Speaker 1>code that weren't dry. And what I found was at

1161
01:15:20.960 --> 01:15:25.039
<v Speaker 1>least half, if not more than, you know, significantly more

1162
01:15:25.079 --> 01:15:26.800
<v Speaker 1>than half in some cases, in some of the code

1163
01:15:26.800 --> 01:15:29.399
<v Speaker 1>bases I worked in, it point out something wasn't dry,

1164
01:15:29.439 --> 01:15:33.279
<v Speaker 1>and it was wrong, right, it was it? It like,

1165
01:15:33.319 --> 01:15:38.640
<v Speaker 1>structurally the code looked similar, but in reality the concern

1166
01:15:38.760 --> 01:15:40.640
<v Speaker 1>was different enough to where it didn't make sense to

1167
01:15:40.640 --> 01:15:42.800
<v Speaker 1>combine them like you would have been putting in edge

1168
01:15:42.840 --> 01:15:45.800
<v Speaker 1>cases every other line. Oh this is different from that here,

1169
01:15:45.840 --> 01:15:47.439
<v Speaker 1>and so we're going to do this this way instead

1170
01:15:47.479 --> 01:15:49.520
<v Speaker 1>of that way. And it's just, you know, you're better

1171
01:15:49.560 --> 01:15:51.319
<v Speaker 1>off having two things that look kind of the same.

1172
01:15:51.960 --> 01:15:52.319
<v Speaker 2>And so.

1173
01:15:53.800 --> 01:15:55.920
<v Speaker 1>Again, I think I think there's a heavy dose of

1174
01:15:55.960 --> 01:15:59.800
<v Speaker 1>common sense that comes with this. Initially, when I saw

1175
01:15:59.840 --> 01:16:01.399
<v Speaker 1>your point, I thought you were going to make the

1176
01:16:01.479 --> 01:16:04.159
<v Speaker 1>point that, you know, trying to have code that's easy

1177
01:16:04.199 --> 01:16:06.720
<v Speaker 1>to understand and clean and maintainable and stuff like that

1178
01:16:07.199 --> 01:16:09.319
<v Speaker 1>is kind of an overblown.

1179
01:16:08.960 --> 01:16:10.840
<v Speaker 3>Making the case for cowboy coding.

1180
01:16:11.520 --> 01:16:14.479
<v Speaker 1>And yeah, and I was gonna say, no, you really

1181
01:16:14.479 --> 01:16:17.720
<v Speaker 1>do need to, you know, have some level of hey,

1182
01:16:17.800 --> 01:16:19.279
<v Speaker 1>you can look at this, you can understand it, and

1183
01:16:19.479 --> 01:16:23.039
<v Speaker 1>then that, like you said, that's the goal of clean code.

1184
01:16:23.119 --> 01:16:26.079
<v Speaker 1>But my deal is is with a lot of these

1185
01:16:26.159 --> 01:16:27.880
<v Speaker 1>or if you read other because there are other books

1186
01:16:27.920 --> 01:16:32.439
<v Speaker 1>that give different rules or standards. Yeah, and the reality

1187
01:16:32.560 --> 01:16:35.520
<v Speaker 1>is is you've got to figure out what works and

1188
01:16:35.560 --> 01:16:37.880
<v Speaker 1>in some cases it's not just works for your team.

1189
01:16:38.239 --> 01:16:41.359
<v Speaker 1>Sometimes it's this code base has a set of problems

1190
01:16:42.039 --> 01:16:44.760
<v Speaker 1>that if you apply the standard from the other codebase

1191
01:16:44.800 --> 01:16:48.279
<v Speaker 1>you're working in, it's just not going to work. One

1192
01:16:48.319 --> 01:16:51.640
<v Speaker 1>other case I want to make is several years ago

1193
01:16:51.760 --> 01:16:57.960
<v Speaker 1>Sandy Metz. She had a set of rules for how

1194
01:16:58.000 --> 01:17:01.239
<v Speaker 1>you formatted your Ruby code, and it was you should

1195
01:17:01.239 --> 01:17:03.800
<v Speaker 1>never have a method that's longer than so many lines.

1196
01:17:04.159 --> 01:17:06.399
<v Speaker 1>You should never have more than so many arguments in

1197
01:17:06.439 --> 01:17:10.359
<v Speaker 1>your methods, you shouldn't have many more than so many lines.

1198
01:17:10.399 --> 01:17:13.199
<v Speaker 4>And then I hate that so much when my method

1199
01:17:13.359 --> 01:17:15.159
<v Speaker 4>ends up being one line too long.

1200
01:17:16.079 --> 01:17:17.399
<v Speaker 2>Yeah, and that was the problem.

1201
01:17:17.560 --> 01:17:19.600
<v Speaker 1>And then you're looking at it and you're scrutinizing it,

1202
01:17:19.640 --> 01:17:22.199
<v Speaker 1>and you're trying to figure out right, because there were

1203
01:17:22.560 --> 01:17:25.920
<v Speaker 1>there were linters in Ruby that would enforce it and

1204
01:17:25.960 --> 01:17:28.840
<v Speaker 1>it would fail to build if or fail you know,

1205
01:17:28.920 --> 01:17:31.479
<v Speaker 1>fail ci if if it was right. So, you had

1206
01:17:31.520 --> 01:17:34.159
<v Speaker 1>an eight eight line method and you're looking at and

1207
01:17:34.239 --> 01:17:38.039
<v Speaker 1>you're going, well, the only way to get it that

1208
01:17:38.119 --> 01:17:41.560
<v Speaker 1>way is essentially to create a second method and just

1209
01:17:41.600 --> 01:17:46.079
<v Speaker 1>put two of the lines in it, which doesn't help, and.

1210
01:17:46.039 --> 01:17:49.279
<v Speaker 3>So I will I will add to there's there's two

1211
01:17:49.439 --> 01:17:53.199
<v Speaker 3>things here, right. There's, first of all, circling back to

1212
01:17:53.239 --> 01:18:01.359
<v Speaker 3>the really the beginning of the conversation, a programming language language.

1213
01:18:01.359 --> 01:18:05.520
<v Speaker 3>It's about communication, yes, funda mentally, you know. I think

1214
01:18:05.560 --> 01:18:09.680
<v Speaker 3>I've read some guy at some point, probably twenty thirty

1215
01:18:09.760 --> 01:18:13.359
<v Speaker 3>years ago putting it as a prose that's readable by

1216
01:18:13.439 --> 01:18:17.399
<v Speaker 3>humans and executable by machine, right, which I think is

1217
01:18:17.399 --> 01:18:20.279
<v Speaker 3>a very high fludent way of putting it. But it's

1218
01:18:20.359 --> 01:18:25.039
<v Speaker 3>close enough to reality. What matters when it comes to

1219
01:18:25.960 --> 01:18:30.119
<v Speaker 3>the way the code is structured and formatted are the people.

1220
01:18:30.760 --> 01:18:33.359
<v Speaker 3>If it does what it's supposed to do, then the

1221
01:18:33.399 --> 01:18:36.119
<v Speaker 3>only reason why you should ever care what the machines

1222
01:18:36.199 --> 01:18:39.800
<v Speaker 3>think is when the code doesn't compile. Obviously, in the

1223
01:18:39.840 --> 01:18:45.319
<v Speaker 3>one hand, but if you have a typically a performance

1224
01:18:45.439 --> 01:18:50.439
<v Speaker 3>oriented thing that requires you to express something in a

1225
01:18:50.479 --> 01:18:54.520
<v Speaker 3>way convoluted to humans but more easily executable to a machine,

1226
01:18:54.560 --> 01:18:58.960
<v Speaker 3>that can happen. That's niche though, so by and large,

1227
01:18:59.000 --> 01:19:02.359
<v Speaker 3>when when you did the work you do, you do

1228
01:19:02.439 --> 01:19:06.000
<v Speaker 3>it for other humans, and one of those humans might

1229
01:19:06.000 --> 01:19:10.800
<v Speaker 3>be in six weeks. Clean code as it is is

1230
01:19:10.840 --> 01:19:15.960
<v Speaker 3>a very good thing in the sense that it was

1231
01:19:16.119 --> 01:19:19.800
<v Speaker 3>one of the few and only resources in sort of

1232
01:19:19.840 --> 01:19:23.319
<v Speaker 3>the space of how to build better code. Like it

1233
01:19:23.399 --> 01:19:29.000
<v Speaker 3>was an honest attempt at it, but I think a

1234
01:19:29.000 --> 01:19:35.039
<v Speaker 3>lot of people read into it as again, more of abscription.

1235
01:19:35.399 --> 01:19:39.000
<v Speaker 3>More it became its own thing. I'm railing not against

1236
01:19:39.039 --> 01:19:41.960
<v Speaker 3>the intent or against Uncle Bob personally again, I don't

1237
01:19:42.239 --> 01:19:45.399
<v Speaker 3>know him that I've got nothing to add to that,

1238
01:19:45.520 --> 01:19:50.840
<v Speaker 3>but I am railing against the way it became embedded

1239
01:19:50.960 --> 01:19:55.119
<v Speaker 3>in the industry, because much like a topic we're not

1240
01:19:55.199 --> 01:19:58.359
<v Speaker 3>going to have time to discuss here again, which is TDD,

1241
01:19:59.279 --> 01:20:04.800
<v Speaker 3>it became more of a on the one hand, or

1242
01:20:04.800 --> 01:20:08.840
<v Speaker 3>religion and on the other hand, a gate keeping practice

1243
01:20:09.399 --> 01:20:13.319
<v Speaker 3>than what it was originally designed for, which is a

1244
01:20:13.359 --> 01:20:17.399
<v Speaker 3>set of useful tools deriving from a lot of thinking

1245
01:20:17.439 --> 01:20:21.479
<v Speaker 3>about a set of useful ideas that can make you

1246
01:20:21.600 --> 01:20:25.600
<v Speaker 3>more productive or a better communicator. So saying clean code

1247
01:20:25.760 --> 01:20:31.720
<v Speaker 3>is bad is obviously a hyperbole to some extent, but

1248
01:20:32.279 --> 01:20:35.479
<v Speaker 3>it is analogous to reading The Elements of Style in English,

1249
01:20:35.680 --> 01:20:39.800
<v Speaker 3>which is a fascinating book, very much worth reading for

1250
01:20:39.840 --> 01:20:44.079
<v Speaker 3>anyone who cares about communicating better in English, but it

1251
01:20:44.159 --> 01:20:49.359
<v Speaker 3>is also chock full of anachronisms and opinions that are

1252
01:20:49.479 --> 01:20:54.760
<v Speaker 3>not necessarily born out in the intervening years, and I

1253
01:20:54.760 --> 01:20:56.279
<v Speaker 3>think clean code is kind of like.

1254
01:20:56.239 --> 01:20:59.399
<v Speaker 4>That as well. Before we conclude, I just have to

1255
01:20:59.439 --> 01:21:04.399
<v Speaker 4>give my number one rule. It's almost the only rule really,

1256
01:21:05.079 --> 01:21:09.560
<v Speaker 4>is be consistent. A code base should strive for consistency.

1257
01:21:09.920 --> 01:21:14.920
<v Speaker 3>Yeah, it's somewhat an important rule, and I think it's

1258
01:21:14.920 --> 01:21:19.439
<v Speaker 3>also very overrated because now you run a foul of Okay,

1259
01:21:19.439 --> 01:21:22.199
<v Speaker 3>what is a code base? If a code base contains

1260
01:21:22.239 --> 01:21:26.000
<v Speaker 3>one thousand classes, do they have to be consistent considering

1261
01:21:26.119 --> 01:21:29.159
<v Speaker 3>you might have had forty different people from five teams

1262
01:21:29.199 --> 01:21:33.399
<v Speaker 3>working on them. Not necessarily. It's a trade off. There

1263
01:21:33.439 --> 01:21:35.600
<v Speaker 3>is value to that, but there is also.

1264
01:21:36.720 --> 01:21:39.880
<v Speaker 4>There are trade offs to everything, and there are exceptions

1265
01:21:39.920 --> 01:21:43.439
<v Speaker 4>to then. There obviously are exceptions to every rule. But

1266
01:21:43.800 --> 01:21:47.359
<v Speaker 4>I'm very much in favor of code consistency, and I

1267
01:21:47.399 --> 01:21:50.800
<v Speaker 4>think that these days we have tools in place to

1268
01:21:50.960 --> 01:21:59.119
<v Speaker 4>provide consistency guard rails across larger projects, and if you

1269
01:21:59.319 --> 01:22:03.880
<v Speaker 4>can nage it, it's a huge benefit because otherwise, when

1270
01:22:03.880 --> 01:22:07.840
<v Speaker 4>you read code, you get hung up on things that

1271
01:22:07.920 --> 01:22:10.640
<v Speaker 4>you shouldn't get hung up on, like why is this

1272
01:22:10.760 --> 01:22:15.039
<v Speaker 4>code different than that code? Well, because this was written

1273
01:22:15.079 --> 01:22:18.000
<v Speaker 4>by George and that was written by team, it's not

1274
01:22:18.079 --> 01:22:18.680
<v Speaker 4>a good enough.

1275
01:22:18.720 --> 01:22:20.840
<v Speaker 2>We upgraded the framework. The old way works and this

1276
01:22:20.960 --> 01:22:21.600
<v Speaker 2>is the new way.

1277
01:22:22.079 --> 01:22:25.880
<v Speaker 5>So those are the valid reason, actually because a very

1278
01:22:25.920 --> 01:22:28.600
<v Speaker 5>different reasons, and I think both are valid by the way,

1279
01:22:28.720 --> 01:22:32.800
<v Speaker 5>because again, when you code, whatever it is that you program,

1280
01:22:32.880 --> 01:22:35.760
<v Speaker 5>you are expressing a part of a problem both to

1281
01:22:35.800 --> 01:22:37.119
<v Speaker 5>the machine and another human.

1282
01:22:38.000 --> 01:22:41.199
<v Speaker 3>It is a form of expression by definition, which means

1283
01:22:41.239 --> 01:22:44.680
<v Speaker 3>by definition, two different people are going to express it

1284
01:22:45.119 --> 01:22:52.960
<v Speaker 3>differently times. My point is, consistency is a valuable asset

1285
01:22:53.199 --> 01:22:57.920
<v Speaker 3>to some degree, and it becomes a liability from some

1286
01:22:58.159 --> 01:23:04.960
<v Speaker 3>other threshold. And assuming that consistency is always positive is

1287
01:23:05.079 --> 01:23:08.800
<v Speaker 3>every bit as risky as saying no, who cares about consistency.

1288
01:23:09.119 --> 01:23:12.119
<v Speaker 3>Let's all have you know whatever, different code formatting for

1289
01:23:12.359 --> 01:23:16.640
<v Speaker 3>each code file. Right, that's dumb, But it's no more

1290
01:23:16.800 --> 01:23:19.319
<v Speaker 3>or less dumb than saying no, all files have to

1291
01:23:19.319 --> 01:23:23.920
<v Speaker 3>be identical, have to have consistent whatevers. Because what you're

1292
01:23:23.960 --> 01:23:27.479
<v Speaker 3>doing is you're constraining all of your engineers, all of

1293
01:23:27.479 --> 01:23:33.439
<v Speaker 3>your communicators effectively in the same way where you know

1294
01:23:33.760 --> 01:23:37.600
<v Speaker 3>they're not going to be working in the same way

1295
01:23:37.680 --> 01:23:41.119
<v Speaker 3>on the same thing, even if it's the same person

1296
01:23:41.359 --> 01:23:44.600
<v Speaker 3>coming to the same piece of code. Three six nine

1297
01:23:44.600 --> 01:23:50.159
<v Speaker 3>months later, they might have a different and potentially better

1298
01:23:50.279 --> 01:23:53.720
<v Speaker 3>way of expressing something. And a lot of the times

1299
01:23:54.119 --> 01:23:58.840
<v Speaker 3>the ability to express something elegantly in code actually runs

1300
01:23:58.840 --> 01:24:01.840
<v Speaker 3>a fall of Even something I'm not going to argue against,

1301
01:24:01.880 --> 01:24:05.800
<v Speaker 3>which is automatic code for matting. I'm all for automatic

1302
01:24:05.840 --> 01:24:10.319
<v Speaker 3>code formatting for a very simple reason, because I'm sick

1303
01:24:10.359 --> 01:24:14.000
<v Speaker 3>and tired of arguing, debating, or even talking about it.

1304
01:24:14.079 --> 01:24:16.760
<v Speaker 3>That is the only reason why i want to have,

1305
01:24:17.319 --> 01:24:20.600
<v Speaker 3>you know, a code reformatter as part of my pipeline

1306
01:24:20.640 --> 01:24:22.319
<v Speaker 3>is because they don't want to ever have one of

1307
01:24:22.319 --> 01:24:26.920
<v Speaker 3>those conversations. Again, that being said, I've often been in

1308
01:24:26.960 --> 01:24:32.920
<v Speaker 3>the position where the reformatic code just does not express

1309
01:24:33.000 --> 01:24:36.800
<v Speaker 3>the solution as elegantly as the code I would have

1310
01:24:36.920 --> 01:24:39.439
<v Speaker 3>formatted in some other way, because it trans the file

1311
01:24:39.600 --> 01:24:45.439
<v Speaker 3>of that whatever rule the team put in place. Right, So,

1312
01:24:45.560 --> 01:24:48.640
<v Speaker 3>even trivial rules like line length or how many lines,

1313
01:24:49.279 --> 01:24:51.399
<v Speaker 3>whatever it is that you end up having, you're going

1314
01:24:51.479 --> 01:24:54.880
<v Speaker 3>to have some subset of those in every project. Even

1315
01:24:54.960 --> 01:24:59.920
<v Speaker 3>those sometimes constrain your expressivity as an engineer more than

1316
01:25:00.039 --> 01:25:03.159
<v Speaker 3>and you would like. Now, again we're talking trade offs.

1317
01:25:03.199 --> 01:25:06.399
<v Speaker 3>The trade off of having those arguments about code formatting

1318
01:25:06.479 --> 01:25:09.319
<v Speaker 3>for the better part of thirty forty years of my

1319
01:25:09.399 --> 01:25:13.159
<v Speaker 3>life is exactly why this trade off is worthwhile. I

1320
01:25:13.199 --> 01:25:15.840
<v Speaker 3>will give up a bit of expressivity so I don't

1321
01:25:15.880 --> 01:25:19.159
<v Speaker 3>have to ever have those conversations again. But that is

1322
01:25:19.239 --> 01:25:24.479
<v Speaker 3>why it's not because inherently the consistency is a positive

1323
01:25:25.199 --> 01:25:29.319
<v Speaker 3>or the expressivity is a positive. It's always a trade off.

1324
01:25:31.079 --> 01:25:36.000
<v Speaker 4>I think we need to start wrapping up.

1325
01:25:36.239 --> 01:25:38.760
<v Speaker 3>Yeah, I think so, But we didn't even get to

1326
01:25:39.840 --> 01:25:43.079
<v Speaker 3>dunking on code coverage and dependency injection.

1327
01:25:43.680 --> 01:25:45.920
<v Speaker 4>Right next time, next time.

1328
01:25:46.119 --> 01:25:46.600
<v Speaker 2>Yeah.

1329
01:25:46.640 --> 01:25:50.600
<v Speaker 1>So people want to see what you're working on writing

1330
01:25:50.760 --> 01:25:53.159
<v Speaker 1>speaking about these days, where do they find your stuff?

1331
01:25:54.600 --> 01:25:57.760
<v Speaker 3>Well, I'm running my own consulting company, so that's substrate

1332
01:25:58.560 --> 01:26:02.239
<v Speaker 3>Substrate Software Engineering upstraight, dot co, dot I yell is

1333
01:26:02.279 --> 01:26:07.840
<v Speaker 3>the website. What I'm working on in commercial settings is

1334
01:26:07.880 --> 01:26:11.520
<v Speaker 3>not something I can generally talk about because it's customers stuff,

1335
01:26:11.560 --> 01:26:17.720
<v Speaker 3>not mine. That being said, I have as always there's

1336
01:26:17.800 --> 01:26:24.479
<v Speaker 3>something writing or presentation related down the road. So recently

1337
01:26:24.520 --> 01:26:27.520
<v Speaker 3>I gave a talk about migrating to a WS graviton,

1338
01:26:28.359 --> 01:26:31.319
<v Speaker 3>you know, taking a big production set of production systems

1339
01:26:31.359 --> 01:26:37.000
<v Speaker 3>actually and moving them over to ARM sixty four. So

1340
01:26:37.159 --> 01:26:41.199
<v Speaker 3>that was an AWS hosted event a few months ago.

1341
01:26:42.520 --> 01:26:46.319
<v Speaker 3>What happens next is anyone's guests. But I'm always ranting

1342
01:26:46.359 --> 01:26:52.520
<v Speaker 3>about something or other on Twitter at tomerg And if

1343
01:26:52.600 --> 01:26:57.000
<v Speaker 3>you want to argue with me, engage with me, talk

1344
01:26:57.039 --> 01:26:59.560
<v Speaker 3>to me, or hire me, then you're more than welcome

1345
01:26:59.600 --> 01:27:02.279
<v Speaker 3>to reach out. Just look up my name. It's pretty

1346
01:27:02.680 --> 01:27:03.600
<v Speaker 3>Internet unique.

1347
01:27:04.760 --> 01:27:07.760
<v Speaker 4>I would like to add that Toma has a whole

1348
01:27:07.800 --> 01:27:11.119
<v Speaker 4>bunch of talks which are all styled around the title

1349
01:27:11.199 --> 01:27:14.960
<v Speaker 4>of how shit works, and you know, like how shit

1350
01:27:15.079 --> 01:27:21.039
<v Speaker 4>works as CPU, how shit works, time, how shit works, memory, whatever.

1351
01:27:21.600 --> 01:27:24.920
<v Speaker 4>And you can find all of these talks on YouTube

1352
01:27:24.960 --> 01:27:28.039
<v Speaker 4>and I highly recommend watching them. They're all irreverent and

1353
01:27:28.199 --> 01:27:31.520
<v Speaker 4>all very highly educational and informative.

1354
01:27:32.359 --> 01:27:35.399
<v Speaker 3>Awesome, highly I reverent is my middle name.

1355
01:27:39.279 --> 01:27:41.960
<v Speaker 2>I'm getting there anyway. Let's go ahead and get to

1356
01:27:42.000 --> 01:27:44.199
<v Speaker 2>some pics. Dan, do you want to start us off

1357
01:27:44.199 --> 01:27:44.800
<v Speaker 2>with picks?

1358
01:27:45.119 --> 01:27:49.920
<v Speaker 4>Sure? So our listeners might have noticed that this is

1359
01:27:49.960 --> 01:27:54.399
<v Speaker 4>my return after a bit of atis. I haven't participated

1360
01:27:54.439 --> 01:27:57.920
<v Speaker 4>in like four or five episodes. Part of the reason

1361
01:27:58.319 --> 01:28:01.520
<v Speaker 4>was that I was on vacation. My wife and I

1362
01:28:01.720 --> 01:28:05.119
<v Speaker 4>just the two of us went to Italy together and

1363
01:28:05.239 --> 01:28:09.840
<v Speaker 4>toured all through South Italy. It was awesome. So my

1364
01:28:10.039 --> 01:28:13.720
<v Speaker 4>first picks would be, first of all, taking a vacation,

1365
01:28:14.319 --> 01:28:19.439
<v Speaker 4>second taking a vacation with your spouse, and third taking

1366
01:28:19.479 --> 01:28:23.720
<v Speaker 4>that vacation in Italy. All of these would be my picks.

1367
01:28:23.960 --> 01:28:27.000
<v Speaker 4>I would like to mention two places in particular that

1368
01:28:27.079 --> 01:28:32.239
<v Speaker 4>we visited in our extremely unique and really breathtaking and amazing.

1369
01:28:33.079 --> 01:28:37.479
<v Speaker 4>One of them is this town or city in Italy

1370
01:28:37.600 --> 01:28:41.560
<v Speaker 4>called Matterra's. I don't know if you visited. It's like

1371
01:28:41.920 --> 01:28:45.439
<v Speaker 4>nothing else I've ever seen. It's kind of like this

1372
01:28:45.600 --> 01:28:51.159
<v Speaker 4>place where people lived in caves in the rock and

1373
01:28:51.239 --> 01:28:54.600
<v Speaker 4>effectively built their city over the caves that they built in,

1374
01:28:55.359 --> 01:28:59.520
<v Speaker 4>and the living conditions used to be terrible, which is

1375
01:28:59.560 --> 01:29:03.119
<v Speaker 4>why this whole city was kind of evacuated in the

1376
01:29:03.119 --> 01:29:06.640
<v Speaker 4>beginning of the twentieth century. But then they realized that

1377
01:29:06.920 --> 01:29:11.199
<v Speaker 4>it really can be turned into an amazing tourist destination,

1378
01:29:12.000 --> 01:29:16.880
<v Speaker 4>so they've renovated it and rebuilt it and it's just gorgeous.

1379
01:29:17.119 --> 01:29:20.760
<v Speaker 4>And we stayed there in a hotel that was like itself,

1380
01:29:20.920 --> 01:29:25.239
<v Speaker 4>like kind of half a cave, and it's really amazing.

1381
01:29:25.279 --> 01:29:28.239
<v Speaker 4>It's like nothing I've ever seen, and I highly recommend

1382
01:29:28.359 --> 01:29:31.600
<v Speaker 4>visiting there, and if you do, and you go there,

1383
01:29:31.720 --> 01:29:35.720
<v Speaker 4>stay at the Query Resort. It was an amazing hotel,

1384
01:29:35.920 --> 01:29:40.760
<v Speaker 4>just twelve rooms and it's really amazing. So that would

1385
01:29:40.760 --> 01:29:45.079
<v Speaker 4>be one place that's really worth mentioning in. Another one

1386
01:29:45.560 --> 01:29:49.640
<v Speaker 4>is an even smaller town called almost a village, somewhere

1387
01:29:49.640 --> 01:29:54.600
<v Speaker 4>between a village and a town called Ostuni. It's again,

1388
01:29:54.960 --> 01:29:57.880
<v Speaker 4>it's a really old place that's been lived in for

1389
01:29:58.239 --> 01:30:02.560
<v Speaker 4>a millennia. But the city was built in the Middle Ages.

1390
01:30:02.640 --> 01:30:05.720
<v Speaker 4>It's kind of like inside effectively, it's almost like a fort.

1391
01:30:06.960 --> 01:30:11.119
<v Speaker 4>It's the old city is surrounded by walls. It's on

1392
01:30:11.199 --> 01:30:14.479
<v Speaker 4>the top of a hill with like these winding streets

1393
01:30:14.600 --> 01:30:19.600
<v Speaker 4>and and they're all coupled and staircases and whatnot. And

1394
01:30:19.640 --> 01:30:27.840
<v Speaker 4>it's also called the The Italians call it the White

1395
01:30:29.119 --> 01:30:36.039
<v Speaker 4>Town because the walls are like, you know, painted white,

1396
01:30:36.159 --> 01:30:40.760
<v Speaker 4>and the city really shines in the sun. It's it's

1397
01:30:40.760 --> 01:30:46.600
<v Speaker 4>an amazing sight. I highly recommend staying there. And and yeah,

1398
01:30:46.680 --> 01:30:50.079
<v Speaker 4>so these two places especially, but in general, just take

1399
01:30:50.119 --> 01:30:53.079
<v Speaker 4>a vacation with your spouse and have time and work

1400
01:30:53.119 --> 01:30:56.800
<v Speaker 4>on that relationship and you know, And so that would

1401
01:30:56.840 --> 01:31:01.159
<v Speaker 4>be my first pick. My second pick is I'm having

1402
01:31:01.239 --> 01:31:06.439
<v Speaker 4>an interesting time following along this whole krofuffle or well,

1403
01:31:06.479 --> 01:31:10.239
<v Speaker 4>it's way more than a kerfuffle now, it's a drama,

1404
01:31:10.279 --> 01:31:16.439
<v Speaker 4>I guess in the worldpress community. Between you know, Mett

1405
01:31:16.560 --> 01:31:20.439
<v Speaker 4>mullen went, I always forget how he pronounces his name,

1406
01:31:21.000 --> 01:31:26.039
<v Speaker 4>and WP Engine. I think it's like the first example

1407
01:31:26.119 --> 01:31:30.079
<v Speaker 4>that I can think of of an entire company and

1408
01:31:30.159 --> 01:31:35.479
<v Speaker 4>its user base and its contributions and whatever being ejected,

1409
01:31:36.479 --> 01:31:41.359
<v Speaker 4>forcefully ejected out of a large open source community. It's

1410
01:31:41.880 --> 01:31:44.800
<v Speaker 4>really quite amazing what's going on there. And you know,

1411
01:31:46.359 --> 01:31:50.279
<v Speaker 4>it's it's it's if you like the drama, then follow along.

1412
01:31:51.159 --> 01:31:52.920
<v Speaker 4>And those are my picks for today.

1413
01:31:54.399 --> 01:31:55.640
<v Speaker 2>So I'm going to pile on there.

1414
01:31:55.640 --> 01:31:58.560
<v Speaker 1>Because over the weekend they actually went after Advanced Custom

1415
01:31:58.560 --> 01:32:01.279
<v Speaker 1>Fields as well, which is a play in for WordPress

1416
01:32:01.319 --> 01:32:02.359
<v Speaker 1>that's pretty popular.

1417
01:32:03.520 --> 01:32:06.800
<v Speaker 4>They took it over I think it was.

1418
01:32:05.359 --> 01:32:09.239
<v Speaker 1>Yes, it took it off of their basically their app store,

1419
01:32:09.239 --> 01:32:11.800
<v Speaker 1>I can't reme call it plug in directory, and they

1420
01:32:11.840 --> 01:32:12.560
<v Speaker 1>put their own in.

1421
01:32:14.039 --> 01:32:17.760
<v Speaker 4>And the funny thing is, if I understand correctly, their

1422
01:32:17.920 --> 01:32:21.560
<v Speaker 4>justification for doing it was that it had security issues.

1423
01:32:22.079 --> 01:32:25.159
<v Speaker 4>What they didn't say is that those security issues were

1424
01:32:25.199 --> 01:32:30.079
<v Speaker 4>not being fixed by the original developers because those developers

1425
01:32:30.159 --> 01:32:34.239
<v Speaker 4>were affiliated with WP engine and were ejected off of

1426
01:32:34.239 --> 01:32:35.399
<v Speaker 4>the WordPress community.

1427
01:32:36.039 --> 01:32:38.600
<v Speaker 1>So I didn't follow that. I didn't realize that was

1428
01:32:38.640 --> 01:32:41.159
<v Speaker 1>the case that it had to tie into the other issue.

1429
01:32:41.880 --> 01:32:48.720
<v Speaker 3>So my qualm with this whole set of shenanigans not

1430
01:32:48.800 --> 01:32:52.359
<v Speaker 3>being a WordPress user. I don't have anything to do

1431
01:32:52.399 --> 01:32:56.800
<v Speaker 3>with the community, but just reading about this and assuming

1432
01:32:56.880 --> 01:33:00.359
<v Speaker 3>what I read was even remotely accurate, It's not just

1433
01:33:00.520 --> 01:33:04.720
<v Speaker 3>that the plug in in question was uh, you know,

1434
01:33:04.840 --> 01:33:08.159
<v Speaker 3>taken off because of a security issue or even because

1435
01:33:08.159 --> 01:33:12.079
<v Speaker 3>of something irrelevant like being affiliated with a company. It's

1436
01:33:12.159 --> 01:33:19.159
<v Speaker 3>that it was forked, and the fork was served from

1437
01:33:19.479 --> 01:33:24.600
<v Speaker 3>the whatever software repository that serves the whole community. So

1438
01:33:24.760 --> 01:33:27.479
<v Speaker 3>this isn't just a spat control of it.

1439
01:33:28.800 --> 01:33:31.600
<v Speaker 4>They basically took their project away.

1440
01:33:31.960 --> 01:33:35.720
<v Speaker 3>So it's not just that, which is again not fully

1441
01:33:35.800 --> 01:33:39.359
<v Speaker 3>understanding the details or the companies involved. It's what I'm

1442
01:33:39.399 --> 01:33:42.520
<v Speaker 3>thinking thinking about is from the perspective of a user.

1443
01:33:42.680 --> 01:33:47.560
<v Speaker 3>Imagine you're using mac os or Buntu or whatever system

1444
01:33:47.600 --> 01:33:50.880
<v Speaker 3>you use. There's a product you got off the respective

1445
01:33:51.000 --> 01:33:54.439
<v Speaker 3>app store for that you know it would be especially

1446
01:33:54.439 --> 01:33:57.119
<v Speaker 3>in a commercial setting, which is easier to explain because

1447
01:33:57.159 --> 01:34:00.319
<v Speaker 3>because the outrage is a lot more kind of obvious

1448
01:34:00.800 --> 01:34:06.039
<v Speaker 3>is imagine I'm using a Norton Commander Modern clone for

1449
01:34:06.159 --> 01:34:09.399
<v Speaker 3>mac os called Martha, which I highly recommend, by the way,

1450
01:34:10.199 --> 01:34:14.199
<v Speaker 3>now I'm paying for it happily. Now imagine if I

1451
01:34:14.319 --> 01:34:18.520
<v Speaker 3>bought that off of the Apple Max Store, and then,

1452
01:34:19.079 --> 01:34:22.800
<v Speaker 3>you know, a couple of years later, Apple just decided

1453
01:34:23.199 --> 01:34:25.960
<v Speaker 3>not just to yank it off the app Store with

1454
01:34:26.159 --> 01:34:31.560
<v Speaker 3>some you know, made up claim, but replace it with Marty,

1455
01:34:31.960 --> 01:34:38.199
<v Speaker 3>their own version of Maria that was forked without my knowledge, consent,

1456
01:34:38.720 --> 01:34:44.039
<v Speaker 3>or you know, ignoring the commercial and human shenanigans behind

1457
01:34:44.039 --> 01:34:44.439
<v Speaker 3>the scene.

1458
01:34:45.079 --> 01:34:45.600
<v Speaker 4>That is.

1459
01:34:47.399 --> 01:34:51.800
<v Speaker 3>Effectively a betrayal of trust of whoever is running that

1460
01:34:51.880 --> 01:34:57.439
<v Speaker 3>software repository that I haven't yet seen many people decrying,

1461
01:34:57.720 --> 01:35:02.199
<v Speaker 3>but you know, I would expected them to have them

1462
01:35:02.239 --> 01:35:06.960
<v Speaker 3>being users, not WP engine, actual WordPress users. I would

1463
01:35:06.960 --> 01:35:10.600
<v Speaker 3>have expected to hear a lot of outrage over this,

1464
01:35:12.079 --> 01:35:15.600
<v Speaker 3>because that's, you know, that's taking it one step further

1465
01:35:15.720 --> 01:35:19.239
<v Speaker 3>than the usual open source versus versus commercial drama that

1466
01:35:19.279 --> 01:35:21.760
<v Speaker 3>we're kind of used to seeing at this point. And

1467
01:35:21.840 --> 01:35:25.159
<v Speaker 3>that drama is explainable. You know, the whole rigg is thing,

1468
01:35:25.239 --> 01:35:27.720
<v Speaker 3>the elastic thing, you can you can see where it's

1469
01:35:27.760 --> 01:35:31.159
<v Speaker 3>coming from. This This is the same drama with someone

1470
01:35:32.840 --> 01:35:37.560
<v Speaker 3>abusing their you know, authority in a way that is

1471
01:35:37.720 --> 01:35:43.399
<v Speaker 3>probably legal, I wouldn't know, but is incredibly harmful to

1472
01:35:43.479 --> 01:35:44.960
<v Speaker 3>the community around the product.

1473
01:35:46.039 --> 01:35:47.840
<v Speaker 1>Yeah, I was just going to say, I saw the

1474
01:35:48.119 --> 01:35:52.920
<v Speaker 1>advanced custom fields piece of things kind of unfolding on Saturday.

1475
01:35:53.000 --> 01:35:53.760
<v Speaker 2>I want to say.

1476
01:35:54.159 --> 01:35:57.039
<v Speaker 1>So, it's entirely possible that the community comes around and

1477
01:35:57.880 --> 01:36:01.000
<v Speaker 1>does what you're saying, right because it's Monday morning.

1478
01:36:01.079 --> 01:36:05.000
<v Speaker 2>But I don't know. Maybe they won't, maybe they won't.

1479
01:36:05.479 --> 01:36:07.720
<v Speaker 3>Whether they do or not, we'll tell you a lot

1480
01:36:07.760 --> 01:36:10.640
<v Speaker 3>about open source governance in the coming years.

1481
01:36:10.680 --> 01:36:15.840
<v Speaker 1>I think that's that's where I'm interested. Is Hey, okay,

1482
01:36:15.840 --> 01:36:21.760
<v Speaker 1>so what does this mean for anyone else? And not

1483
01:36:22.000 --> 01:36:25.960
<v Speaker 1>necessarily that I'm in communities where I anticipate this from

1484
01:36:26.039 --> 01:36:29.159
<v Speaker 1>anybody who leads any of those communities, but the fact

1485
01:36:29.199 --> 01:36:30.600
<v Speaker 1>that it can happen.

1486
01:36:31.920 --> 01:36:33.840
<v Speaker 2>You have to at least think about it.

1487
01:36:33.920 --> 01:36:36.239
<v Speaker 4>So did you see the checkbox that they put on

1488
01:36:36.319 --> 01:36:37.359
<v Speaker 4>WordPress dot org.

1489
01:36:39.000 --> 01:36:41.000
<v Speaker 3>Yeah that if you want to log in you have

1490
01:36:41.079 --> 01:36:44.439
<v Speaker 3>to certify that you're not affiliated with WP engine or

1491
01:36:44.479 --> 01:36:45.119
<v Speaker 3>something like that.

1492
01:36:45.119 --> 01:36:49.359
<v Speaker 1>No way, y, Yes, that had happened, And and like

1493
01:36:49.399 --> 01:36:51.920
<v Speaker 1>you said, Tomer, it's it's also not whether or not

1494
01:36:51.960 --> 01:36:54.399
<v Speaker 1>it's legal, this is so toxic to the community.

1495
01:36:54.840 --> 01:37:00.439
<v Speaker 4>They basically ejected wp engine out of the WordPress community

1496
01:37:00.920 --> 01:37:04.000
<v Speaker 4>in a way that I've not seen done in any

1497
01:37:04.079 --> 01:37:09.840
<v Speaker 4>other open source project, like very abruptly and very violently.

1498
01:37:09.960 --> 01:37:13.319
<v Speaker 4>Now it might be justified, like Tomela, I don't have

1499
01:37:13.439 --> 01:37:18.479
<v Speaker 4>sufficient contexts, but the fact that it can be done is.

1500
01:37:19.479 --> 01:37:19.840
<v Speaker 2>I would have.

1501
01:37:19.960 --> 01:37:22.359
<v Speaker 3>I would have been a lot more at ease with

1502
01:37:22.800 --> 01:37:27.399
<v Speaker 3>even even with this whole bizarre kerfuffle between two companies

1503
01:37:27.439 --> 01:37:30.880
<v Speaker 3>that are ostensibly complementary in the market. Again, as an

1504
01:37:30.880 --> 01:37:34.239
<v Speaker 3>outside observer, I don't actually know the details, but I

1505
01:37:34.239 --> 01:37:37.199
<v Speaker 3>would have been a lot more at ease if the

1506
01:37:38.119 --> 01:37:42.199
<v Speaker 3>plugin in question had been removed from the software repository

1507
01:37:42.920 --> 01:37:46.319
<v Speaker 3>because it had whatever. Even if you used that excuse

1508
01:37:46.399 --> 01:37:51.119
<v Speaker 3>of it had unpatched security vulnerabilities, fine, that's, you know,

1509
01:37:51.239 --> 01:37:54.239
<v Speaker 3>at least a valid excuse. But it wasn't yanked. It

1510
01:37:54.399 --> 01:37:59.560
<v Speaker 3>was replaced with a fork, which is not okay under

1511
01:37:59.680 --> 01:38:02.880
<v Speaker 3>any like. This is basically I, you know, I, as

1512
01:38:02.920 --> 01:38:06.560
<v Speaker 3>a user, gave permission to the toolchain around this repository

1513
01:38:06.920 --> 01:38:11.000
<v Speaker 3>to install a certain piece of software, assuming you know

1514
01:38:11.439 --> 01:38:15.680
<v Speaker 3>certain characteristics of the people running the show. Both the

1515
01:38:15.760 --> 01:38:18.960
<v Speaker 3>repository and the people writing the plug in based on

1516
01:38:19.000 --> 01:38:23.640
<v Speaker 3>their reputation. Suddenly not only does that go away, but

1517
01:38:23.880 --> 01:38:29.399
<v Speaker 3>my you know, authorization to the toolchain to do that,

1518
01:38:29.560 --> 01:38:35.560
<v Speaker 3>on my behalf is effectively usurped to support a different

1519
01:38:35.840 --> 01:38:38.920
<v Speaker 3>effort by different people that may or may not have,

1520
01:38:39.399 --> 01:38:42.840
<v Speaker 3>you know, the reputation or characteristics that that I want

1521
01:38:43.079 --> 01:38:46.760
<v Speaker 3>or that I agree to. So that, to me is

1522
01:38:46.840 --> 01:38:50.159
<v Speaker 3>the really new thing about this whole drama, because everything

1523
01:38:50.199 --> 01:38:54.600
<v Speaker 3>else is just the usual. You know, open someone did

1524
01:38:54.640 --> 01:38:57.840
<v Speaker 3>something good open source wise, it succeeded, they built a

1525
01:38:57.880 --> 01:39:01.079
<v Speaker 3>company around it. Someone else built a different company with

1526
01:39:01.119 --> 01:39:04.880
<v Speaker 3>a different business model that you could, you know, discuss

1527
01:39:04.960 --> 01:39:08.279
<v Speaker 3>whether or not they're leveraging off of someone else's work.

1528
01:39:08.399 --> 01:39:10.720
<v Speaker 3>But the point is it's open source. If you didn't

1529
01:39:10.800 --> 01:39:13.800
<v Speaker 3>want someone to leverage off your work on their terms,

1530
01:39:14.279 --> 01:39:19.239
<v Speaker 3>you should have licensed it, not openly, right. That's that's

1531
01:39:19.279 --> 01:39:23.720
<v Speaker 3>on whomever released the software in first place. And again

1532
01:39:23.760 --> 01:39:29.640
<v Speaker 3>that's not discounting moral arguments, right, But this is not

1533
01:39:30.199 --> 01:39:33.920
<v Speaker 3>my issue with what Automatic did is not a moral argument.

1534
01:39:34.239 --> 01:39:38.119
<v Speaker 3>It is something that, not being a lawyer, I could

1535
01:39:38.159 --> 01:39:44.840
<v Speaker 3>never say is but should be in the vicinity of actually,

1536
01:39:46.319 --> 01:39:51.239
<v Speaker 3>you know, bordering on antitrust like this is people that

1537
01:39:51.279 --> 01:39:55.840
<v Speaker 3>have signed a yulaw, that have worked under some assumptions,

1538
01:39:55.920 --> 01:39:58.880
<v Speaker 3>and you yank the carpet and replace it under their feet.

1539
01:39:58.960 --> 01:39:59.920
<v Speaker 3>That should not. Ever.

1540
01:40:00.079 --> 01:40:03.159
<v Speaker 4>The answer, by the way, is that if WP engine

1541
01:40:03.199 --> 01:40:08.119
<v Speaker 4>wants to continue working with quote unquote WordPress, they should

1542
01:40:09.840 --> 01:40:12.920
<v Speaker 4>create their own fork, and.

1543
01:40:12.920 --> 01:40:15.960
<v Speaker 3>They probably will because there's a business there. Otherwise they

1544
01:40:16.000 --> 01:40:17.720
<v Speaker 3>wouldn't be in the situation to begin with.

1545
01:40:18.199 --> 01:40:21.640
<v Speaker 1>Yeah, I will also put out there that whatever the

1546
01:40:21.680 --> 01:40:26.000
<v Speaker 1>beef was, I remember looking at it and I didn't

1547
01:40:26.079 --> 01:40:30.319
<v Speaker 1>understand how because WP engine has been around for years,

1548
01:40:30.560 --> 01:40:32.760
<v Speaker 1>years and years and years and years, right, and so

1549
01:40:32.800 --> 01:40:36.880
<v Speaker 1>I didn't understand that the situation had changed it all

1550
01:40:37.800 --> 01:40:38.520
<v Speaker 1>to prompt this.

1551
01:40:38.760 --> 01:40:40.760
<v Speaker 2>Right, it was just out of.

1552
01:40:40.760 --> 01:40:42.880
<v Speaker 1>The blue from what I could tell. We should just

1553
01:40:42.920 --> 01:40:45.199
<v Speaker 1>do an episode on it and then just talk about how.

1554
01:40:45.119 --> 01:40:50.000
<v Speaker 4>What assuming we have sufficient information. Yeah, it certainly has

1555
01:40:50.039 --> 01:40:52.279
<v Speaker 4>an impact for the web on the web before the

1556
01:40:52.319 --> 01:40:56.439
<v Speaker 4>other reason that the third of websites on the web

1557
01:40:56.479 --> 01:40:59.520
<v Speaker 4>are still WordPress websites, not by traffic, I'm just by

1558
01:40:59.640 --> 01:41:00.760
<v Speaker 4>counting domains.

1559
01:41:01.279 --> 01:41:04.560
<v Speaker 1>Yeah, but there's a lot of people use WordPress on

1560
01:41:04.600 --> 01:41:07.560
<v Speaker 1>the back end of their JavaScript apps.

1561
01:41:08.239 --> 01:41:12.359
<v Speaker 3>Yeah, it's gonna have an interesting to track effect and

1562
01:41:12.920 --> 01:41:15.560
<v Speaker 3>a set of second order effects in the industry. If

1563
01:41:15.560 --> 01:41:18.199
<v Speaker 3>you really want to see something that most everyone ignores

1564
01:41:18.279 --> 01:41:20.680
<v Speaker 3>but that is coming and it is gonna affect the web.

1565
01:41:20.760 --> 01:41:22.720
<v Speaker 3>Is the whole profuffle with the io domain.

1566
01:41:23.720 --> 01:41:25.680
<v Speaker 4>Oh yeah, that's the second one.

1567
01:41:27.159 --> 01:41:31.199
<v Speaker 2>You heard about that, Chuck, No, I haven't. But so

1568
01:41:31.479 --> 01:41:33.199
<v Speaker 2>when we get into it another time.

1569
01:41:33.760 --> 01:41:35.399
<v Speaker 3>Yeah, okay, I.

1570
01:41:35.560 --> 01:41:38.760
<v Speaker 4>Just say this. You know, the io domain, like you know, Google,

1571
01:41:38.840 --> 01:41:40.159
<v Speaker 4>dot io and stuff like that.

1572
01:41:40.760 --> 01:41:47.399
<v Speaker 3>It's going away, Yeah, okay for very simple and good reasons.

1573
01:41:47.439 --> 01:41:49.039
<v Speaker 3>But it's gonna have a heck of a.

1574
01:41:49.720 --> 01:41:54.039
<v Speaker 1>It's gonna affect on things, yeah, for sure, Like businesses

1575
01:41:54.119 --> 01:41:55.119
<v Speaker 1>are built on dot.

1576
01:41:54.960 --> 01:41:57.439
<v Speaker 2>Io domains that yeah.

1577
01:41:57.800 --> 01:42:00.960
<v Speaker 3>Yeah, all right, So well so that's coming. Yeah.

1578
01:42:01.119 --> 01:42:04.199
<v Speaker 2>Fun, I'm gonna jump in with my picks.

1579
01:42:05.640 --> 01:42:08.319
<v Speaker 1>So the game that I've been playing lately with my

1580
01:42:08.439 --> 01:42:11.760
<v Speaker 1>friends is Risk Legacy. I'm pretty sure I've picked this before.

1581
01:42:12.720 --> 01:42:14.760
<v Speaker 1>Board Gang Geek has a weight on it of two

1582
01:42:14.800 --> 01:42:17.039
<v Speaker 1>point five to nine, which means that it's.

1583
01:42:17.000 --> 01:42:21.399
<v Speaker 2>Pretty approachable for casual gamers.

1584
01:42:21.560 --> 01:42:24.520
<v Speaker 1>Is a little more complicated than like Settlers of Catan,

1585
01:42:24.720 --> 01:42:27.600
<v Speaker 1>but you can play it and it's not terribly hard

1586
01:42:27.680 --> 01:42:31.079
<v Speaker 1>to pick up. If you've played risk before it's mostly

1587
01:42:31.159 --> 01:42:34.640
<v Speaker 1>risk with some twists. We'll just put it that way.

1588
01:42:35.560 --> 01:42:41.039
<v Speaker 1>So yeah, so I'm enjoying that. And then real quick,

1589
01:42:41.119 --> 01:42:44.000
<v Speaker 1>just a couple of other picks I have been reading lately.

1590
01:42:45.760 --> 01:42:47.840
<v Speaker 1>What's this book called. It's right here on my desk.

1591
01:42:49.159 --> 01:42:53.840
<v Speaker 1>It's Awaken the Giant Within by Tony Robbins. It is awesome.

1592
01:42:53.880 --> 01:42:56.560
<v Speaker 1>I'm really liking that, and so I'm going to pick that.

1593
01:42:57.640 --> 01:42:59.680
<v Speaker 1>I'm also going to encourage people to go out and vote.

1594
01:43:00.199 --> 01:43:02.760
<v Speaker 1>I recognize that I don't know how you vote, and

1595
01:43:02.800 --> 01:43:05.000
<v Speaker 1>many of you will vote different from how I vote,

1596
01:43:05.359 --> 01:43:08.920
<v Speaker 1>But do your homework, figure out who these people are.

1597
01:43:09.640 --> 01:43:13.279
<v Speaker 2>And to make the best decision you can. And yeah,

1598
01:43:13.319 --> 01:43:14.399
<v Speaker 2>those are my picks. Oh.

1599
01:43:14.439 --> 01:43:18.439
<v Speaker 1>One other thing, and this is kind of a self plug,

1600
01:43:18.840 --> 01:43:21.720
<v Speaker 1>but I am working on putting together a boot camp

1601
01:43:22.600 --> 01:43:24.319
<v Speaker 1>starting in January.

1602
01:43:24.199 --> 01:43:26.239
<v Speaker 2>That will show people how to build AI agents.

1603
01:43:27.279 --> 01:43:29.960
<v Speaker 1>I'm gonna have examples in Ruby and JavaScript, and so

1604
01:43:30.000 --> 01:43:32.920
<v Speaker 1>if you're interested in that, stay tuned because I'm going to.

1605
01:43:32.920 --> 01:43:36.479
<v Speaker 2>Put the sales page up soon. Tomer, what are your picks?

1606
01:43:38.720 --> 01:43:41.159
<v Speaker 3>So, I mean, beyond the whole thing with the IO

1607
01:43:41.399 --> 01:43:45.159
<v Speaker 3>country country code, top level domain going away, which is

1608
01:43:45.399 --> 01:43:51.760
<v Speaker 3>its own thing, one I guess I would say pick

1609
01:43:52.159 --> 01:43:57.760
<v Speaker 3>is retro computing is awesome. On a previous visit to

1610
01:43:57.800 --> 01:44:00.319
<v Speaker 3>Germany a couple of weeks ago, I got a TI

1611
01:44:00.560 --> 01:44:04.359
<v Speaker 3>ninety nine eight bit computer from nineteen seventy eight to.

1612
01:44:05.399 --> 01:44:08.520
<v Speaker 4>The first computer that I owned. By the way, it

1613
01:44:08.680 --> 01:44:12.560
<v Speaker 4>was it had a sixteen bit GPU or something like that.

1614
01:44:14.720 --> 01:44:17.760
<v Speaker 3>Or something like that, but anyway, it's a it's a

1615
01:44:17.920 --> 01:44:22.199
<v Speaker 3>very early computer. It gets added to my collection. This

1616
01:44:22.359 --> 01:44:26.359
<v Speaker 3>collection will be the seed to a full blown interactive

1617
01:44:26.399 --> 01:44:31.359
<v Speaker 3>computer museum in the north of Israel when I retire

1618
01:44:31.720 --> 01:44:37.640
<v Speaker 3>and or the war ends, whichever happens first, which brings

1619
01:44:37.720 --> 01:44:40.119
<v Speaker 3>me to my last pic, which is, don't be in

1620
01:44:40.199 --> 01:44:45.520
<v Speaker 3>a war. It's not good for you as a plug.

1621
01:44:45.920 --> 01:44:49.560
<v Speaker 3>I am. I just finished the first operation of and

1622
01:44:52.359 --> 01:44:58.159
<v Speaker 3>hammering on a Prometheus workshop for developers, so if anyone's

1623
01:44:58.359 --> 01:45:02.640
<v Speaker 3>interested in that, it will probably show up both as

1624
01:45:02.640 --> 01:45:05.439
<v Speaker 3>a commercial offering, but I'll probably be running it in

1625
01:45:05.840 --> 01:45:09.600
<v Speaker 3>some conferences in the foreseeable future. So if there's any

1626
01:45:09.640 --> 01:45:12.600
<v Speaker 3>interest in that, ping me and we'll see what we

1627
01:45:12.720 --> 01:45:13.359
<v Speaker 3>can make happen.

1628
01:45:13.960 --> 01:45:16.640
<v Speaker 4>We should talk about that, Tom, because I've done some

1629
01:45:17.439 --> 01:45:21.239
<v Speaker 4>done quite a bit of Prometheus development relatively recently. And

1630
01:45:21.319 --> 01:45:25.960
<v Speaker 4>even gave a talk or two about it, so you know,

1631
01:45:26.439 --> 01:45:30.920
<v Speaker 4>we had we had an episode where about Prometheus here.

1632
01:45:30.840 --> 01:45:34.560
<v Speaker 3>And everyone that uses Prometheus as an episode sooner or later,

1633
01:45:34.680 --> 01:45:35.520
<v Speaker 3>don't worry about it.

1634
01:45:39.239 --> 01:45:41.039
<v Speaker 2>All right, Well we'll go ahead and wrap it up here.

1635
01:45:41.720 --> 01:45:42.760
<v Speaker 2>Thanks for coming tomorrow.

1636
01:45:43.359 --> 01:45:47.560
<v Speaker 3>Sure, it's been a pleasure, all right, Thanks for thanks

1637
01:45:47.600 --> 01:45:50.840
<v Speaker 3>for opposing some of my opinions. It's always better when

1638
01:45:50.840 --> 01:45:53.039
<v Speaker 3>there's a you know, some back and forth.

1639
01:45:53.439 --> 01:45:55.399
<v Speaker 2>Until next time, folks, max out
