WEBVTT

1
00:00:06.719 --> 00:00:09.960
<v Speaker 1>Right, Hello everybody, and welcome to another episode of Mind.

2
00:00:10.279 --> 00:00:13.000
<v Speaker 1>I'm your host today, Calm Gazi, and I'm joined on

3
00:00:13.039 --> 00:00:15.599
<v Speaker 1>the panelist by first time panelist Jack Hamison.

4
00:00:15.919 --> 00:00:17.079
<v Speaker 2>Hey Carl, how are you doing.

5
00:00:17.719 --> 00:00:19.920
<v Speaker 1>I'm fine, Good to have you, Good to have you, Yeah,

6
00:00:19.960 --> 00:00:23.679
<v Speaker 1>great to be here. Awesome. And our guest today is

7
00:00:23.800 --> 00:00:24.640
<v Speaker 1>Tyler Hawkins.

8
00:00:24.760 --> 00:00:26.559
<v Speaker 3>How you doing? Thanks for having me.

9
00:00:27.079 --> 00:00:29.440
<v Speaker 1>So, Thailer, let's just start off by maybe you're telling

10
00:00:29.519 --> 00:00:32.280
<v Speaker 1>us a bit about yourself and obviously why you're famous.

11
00:00:33.359 --> 00:00:38.000
<v Speaker 3>Sure, So, I'm Tyler Hawkins. I'm a senior software engineer

12
00:00:38.039 --> 00:00:42.640
<v Speaker 3>at Adobe. I've been doing front end development for about

13
00:00:42.679 --> 00:00:45.560
<v Speaker 3>seven years now and blogging and tech writing for the

14
00:00:45.640 --> 00:00:47.560
<v Speaker 3>last year and a half. I don't know that I'm

15
00:00:47.560 --> 00:00:54.159
<v Speaker 3>necessarily famous now, but I do enjoy blogging and writing

16
00:00:54.200 --> 00:00:57.079
<v Speaker 3>and it's it's opened up some opportunities and giving me

17
00:00:57.119 --> 00:00:58.719
<v Speaker 3>a chance to talk to people like you guys.

18
00:00:59.039 --> 00:01:03.159
<v Speaker 1>Awesome. Great. So obviously I kind of made what stuff

19
00:01:03.200 --> 00:01:06.799
<v Speaker 1>today's show would be your article on pink code and React.

20
00:01:07.280 --> 00:01:09.239
<v Speaker 1>But I guess before we kind of go into that,

21
00:01:09.280 --> 00:01:12.560
<v Speaker 1>and let's just maybe dump it deep into your background

22
00:01:13.200 --> 00:01:15.280
<v Speaker 1>and to how you got into tech and how you

23
00:01:15.319 --> 00:01:17.959
<v Speaker 1>got into your kind of job now and how I've

24
00:01:17.959 --> 00:01:18.799
<v Speaker 1>been through yourself off.

25
00:01:19.159 --> 00:01:22.280
<v Speaker 3>Sure, Yeah, so I have a bit of a non

26
00:01:22.319 --> 00:01:26.480
<v Speaker 3>traditional tech background. I didn't have a degree in computer

27
00:01:26.519 --> 00:01:28.519
<v Speaker 3>science or anything like that. For a long time. I

28
00:01:28.560 --> 00:01:31.200
<v Speaker 3>was actually a psychology major. For about two and a

29
00:01:31.239 --> 00:01:35.040
<v Speaker 3>half years. I was pretty intent on, you know, finishing

30
00:01:35.079 --> 00:01:37.680
<v Speaker 3>up my bachelor's and going to get a master's or

31
00:01:37.719 --> 00:01:40.920
<v Speaker 3>a PhD and doing some form of counseling. But about

32
00:01:40.920 --> 00:01:44.840
<v Speaker 3>midway through that, i'd taken some statistics classes. Those are

33
00:01:44.879 --> 00:01:47.719
<v Speaker 3>some required classes just when you talk about doing research

34
00:01:47.719 --> 00:01:51.000
<v Speaker 3>and psychology, and I really enjoyed the statistics part of

35
00:01:51.040 --> 00:01:53.200
<v Speaker 3>it and kind of the more hard science as opposed

36
00:01:53.200 --> 00:01:57.000
<v Speaker 3>to the softer social science of psychology. So I started

37
00:01:57.000 --> 00:01:59.959
<v Speaker 3>getting really into that, and then stats actually kind of

38
00:02:00.040 --> 00:02:03.760
<v Speaker 3>traded a nice segue into coding and programming. Statisticians will

39
00:02:04.359 --> 00:02:07.879
<v Speaker 3>often use programming languages like R or SaaS or even

40
00:02:07.959 --> 00:02:10.919
<v Speaker 3>just SQL for managing data in a database, and so

41
00:02:10.960 --> 00:02:13.120
<v Speaker 3>that was really where I first got introduced to coding.

42
00:02:13.319 --> 00:02:16.199
<v Speaker 3>I just remember learning R and seeing how we could

43
00:02:16.199 --> 00:02:18.879
<v Speaker 3>create you know, these simulations. It was just a few

44
00:02:18.919 --> 00:02:20.599
<v Speaker 3>lines of code, it was super cool to me. Or

45
00:02:20.639 --> 00:02:23.120
<v Speaker 3>you could write a few lines and generate this beautiful

46
00:02:23.159 --> 00:02:25.759
<v Speaker 3>graph just out of literally just a few lines of codes.

47
00:02:25.840 --> 00:02:28.120
<v Speaker 3>That was really exciting for me. So at that point

48
00:02:28.159 --> 00:02:30.919
<v Speaker 3>I was almost I think I was. I think I

49
00:02:30.960 --> 00:02:32.639
<v Speaker 3>was in my second semester of my junior year. So

50
00:02:32.639 --> 00:02:35.360
<v Speaker 3>if I was to switch to computer science at that point,

51
00:02:35.400 --> 00:02:37.280
<v Speaker 3>I would have had you know, probably three more years

52
00:02:37.319 --> 00:02:40.280
<v Speaker 3>just to get my bachelor's degree. So figured I probably

53
00:02:40.280 --> 00:02:42.560
<v Speaker 3>wouldn't do that, so I stuck it out with statistics.

54
00:02:42.599 --> 00:02:45.240
<v Speaker 3>That's that's officially what my degree is in. But at

55
00:02:45.280 --> 00:02:47.680
<v Speaker 3>the time I was, I was working part time at

56
00:02:47.719 --> 00:02:50.639
<v Speaker 3>a tech company called qual Tricks. They were a software

57
00:02:50.680 --> 00:02:53.800
<v Speaker 3>as a service company. When I was working just just

58
00:02:53.840 --> 00:02:56.000
<v Speaker 3>doing tech support for them as a product specialist, so

59
00:02:56.000 --> 00:02:58.400
<v Speaker 3>a lot of just troubleshooting and problem solving and whatnot.

60
00:02:58.879 --> 00:03:01.520
<v Speaker 3>But that provided really nice and afterwards, you know, I

61
00:03:01.520 --> 00:03:05.000
<v Speaker 3>told them I'm looking for a software engineering job, so

62
00:03:05.039 --> 00:03:07.599
<v Speaker 3>it's just a question of can I do that here

63
00:03:07.680 --> 00:03:09.520
<v Speaker 3>or do I need to go look elsewhere. So they

64
00:03:09.520 --> 00:03:12.560
<v Speaker 3>offered me a job working on our professional services team,

65
00:03:12.680 --> 00:03:17.400
<v Speaker 3>just doing custom one off work for clients, building neat

66
00:03:17.439 --> 00:03:20.240
<v Speaker 3>little small projects. They were often you know, like a

67
00:03:20.240 --> 00:03:23.199
<v Speaker 3>week or two projects at a time, so pretty small scale,

68
00:03:23.759 --> 00:03:25.400
<v Speaker 3>but it was a good introduction to a lot of

69
00:03:25.639 --> 00:03:29.080
<v Speaker 3>I guess, unique, unique problems to solve, and then from

70
00:03:29.080 --> 00:03:31.080
<v Speaker 3>there if I've worked at a few other companies. I've

71
00:03:31.080 --> 00:03:35.000
<v Speaker 3>worked at an e commerce company called Unique, a ed

72
00:03:35.039 --> 00:03:39.879
<v Speaker 3>tech company called Instructure, Workfront that works as an operational

73
00:03:39.879 --> 00:03:43.159
<v Speaker 3>system of record, and then Workfront was recently acquired by

74
00:03:43.240 --> 00:03:46.719
<v Speaker 3>Adobe back in December of twenty twenty. So now here

75
00:03:46.719 --> 00:03:47.759
<v Speaker 3>I am at Adobe.

76
00:03:48.039 --> 00:03:49.120
<v Speaker 2>Wow. I love Adobe.

77
00:03:49.199 --> 00:03:51.560
<v Speaker 4>I used to work in Macromedia before it became Adobe,

78
00:03:51.639 --> 00:03:53.240
<v Speaker 4>and it's a fantastic company.

79
00:03:53.319 --> 00:03:54.840
<v Speaker 2>Yeah, really great place to work.

80
00:03:55.280 --> 00:03:56.560
<v Speaker 3>Yeah, they're a great place.

81
00:03:57.400 --> 00:03:59.759
<v Speaker 2>So when did you start with React? Yeah?

82
00:04:00.159 --> 00:04:05.360
<v Speaker 3>React was let's see early twenty seventeen, so it's been

83
00:04:05.400 --> 00:04:06.479
<v Speaker 3>about four years now.

84
00:04:06.639 --> 00:04:07.240
<v Speaker 2>Fantastic.

85
00:04:07.439 --> 00:04:10.240
<v Speaker 4>Sort of looking into your article, I'm curious as to

86
00:04:11.240 --> 00:04:15.240
<v Speaker 4>your take on typescript and how that might change this

87
00:04:15.360 --> 00:04:16.639
<v Speaker 4>clean coding approach.

88
00:04:18.240 --> 00:04:22.759
<v Speaker 3>Sure so, I think, I mean clean code applies regardless

89
00:04:22.800 --> 00:04:27.040
<v Speaker 3>of whether you're writing typescript or just plain vanilla JavaScript.

90
00:04:27.759 --> 00:04:30.879
<v Speaker 3>I've used typescript in past jobs. We're not using it

91
00:04:30.959 --> 00:04:33.839
<v Speaker 3>right now, at least in the repos that I primarily

92
00:04:33.879 --> 00:04:36.040
<v Speaker 3>work in. I know other places that the company are

93
00:04:36.480 --> 00:04:38.639
<v Speaker 3>I don't know I still have mixed feelings on it.

94
00:04:39.439 --> 00:04:42.600
<v Speaker 3>I enjoy the type safety. I enjoy that it's explicit

95
00:04:42.680 --> 00:04:45.639
<v Speaker 3>about the data type and that it provides these static

96
00:04:45.639 --> 00:04:49.000
<v Speaker 3>analysis and static type checking and error checking to prevent

97
00:04:49.040 --> 00:04:53.000
<v Speaker 3>you from using unexpected data types. There is also a

98
00:04:53.000 --> 00:04:55.680
<v Speaker 3>lot of complexity that stems from it, especially if the

99
00:04:55.720 --> 00:04:59.560
<v Speaker 3>types aren't maintained properly. You might have like a complex

100
00:05:00.079 --> 00:05:02.199
<v Speaker 3>type or maybe an object for lots of different properties,

101
00:05:02.199 --> 00:05:05.120
<v Speaker 3>and then people start, you know, slowly how code goes,

102
00:05:05.160 --> 00:05:06.839
<v Speaker 3>and it gets bigger and bigger until it becomes all

103
00:05:06.839 --> 00:05:08.920
<v Speaker 3>the spaghetti code. Now you have these spaghetti types that

104
00:05:08.959 --> 00:05:11.759
<v Speaker 3>people are trying to override and whatnot. So if you're

105
00:05:11.759 --> 00:05:13.759
<v Speaker 3>getting use type script, I think you have to be very,

106
00:05:13.959 --> 00:05:16.759
<v Speaker 3>very devoted to it and make sure it stays nice

107
00:05:16.800 --> 00:05:18.600
<v Speaker 3>and maintained for sure.

108
00:05:18.720 --> 00:05:21.560
<v Speaker 1>Yeah, I mean it's funny. I think, actually use your

109
00:05:21.639 --> 00:05:24.079
<v Speaker 1>article and I'm looking at it. I was actually trying

110
00:05:24.079 --> 00:05:28.120
<v Speaker 1>to at work, trying to set some kind of guidelines

111
00:05:28.319 --> 00:05:32.439
<v Speaker 1>regarding Funtain development because when I joined initially the company,

112
00:05:32.720 --> 00:05:35.839
<v Speaker 1>front of my grade from Angulo to React. So for

113
00:05:35.839 --> 00:05:37.920
<v Speaker 1>the last two years been doing that and then we

114
00:05:38.000 --> 00:05:40.879
<v Speaker 1>started working on a new project recently as well, so

115
00:05:40.879 --> 00:05:43.199
<v Speaker 1>then I think, okay, in order first play, which you

116
00:05:43.279 --> 00:05:46.240
<v Speaker 1>kind of move faster in the future, we have kind

117
00:05:46.240 --> 00:05:49.240
<v Speaker 1>of a guideline for front end development and all the

118
00:05:49.319 --> 00:05:52.639
<v Speaker 1>good stuff, and actually an article looking at it now.

119
00:05:52.680 --> 00:05:54.759
<v Speaker 1>And one thing that I kind of struggled with per

120
00:05:54.800 --> 00:05:58.839
<v Speaker 1>se is obviously, when it comes to clean code, it's

121
00:05:58.959 --> 00:06:02.519
<v Speaker 1>very subjective, right, what is clean for you? For somebody

122
00:06:02.600 --> 00:06:05.759
<v Speaker 1>or it is a mess? Right, So when you come

123
00:06:05.800 --> 00:06:08.199
<v Speaker 1>to think about clean code, how do you kind of say,

124
00:06:08.279 --> 00:06:10.920
<v Speaker 1>maybe you're kind of guidanizeding and your body is okay,

125
00:06:11.199 --> 00:06:15.439
<v Speaker 1>even though what I've written for me is what is clean? However,

126
00:06:15.920 --> 00:06:18.680
<v Speaker 1>are they principles you kind of use a wider and

127
00:06:19.439 --> 00:06:23.000
<v Speaker 1>across the whole field are usable? Yeah?

128
00:06:23.040 --> 00:06:25.600
<v Speaker 3>Absolutely. So that's a good point is that clean code

129
00:06:25.639 --> 00:06:29.399
<v Speaker 3>is pretty subjective to me. I guess how it would define.

130
00:06:29.439 --> 00:06:32.160
<v Speaker 3>Clean code is just code that's easy to read, it's

131
00:06:32.160 --> 00:06:36.040
<v Speaker 3>simple to understand, it's neatly organized, and that really lends

132
00:06:36.120 --> 00:06:39.920
<v Speaker 3>itself to making it easier for future developers to pick

133
00:06:40.000 --> 00:06:41.839
<v Speaker 3>up on the code. You know, they can instantly dive

134
00:06:41.839 --> 00:06:44.639
<v Speaker 3>into the code base and understand, and also makes it

135
00:06:44.680 --> 00:06:47.160
<v Speaker 3>a lot easier to refactor or extend the code later.

136
00:06:47.720 --> 00:06:50.519
<v Speaker 3>As you're you know, building out new functionality as the

137
00:06:50.560 --> 00:06:53.360
<v Speaker 3>app evolves and grows. But you're right in doing that, Like,

138
00:06:53.439 --> 00:06:57.959
<v Speaker 3>it's it's a pretty subjective principle, right, or subjective idea

139
00:06:58.319 --> 00:07:00.639
<v Speaker 3>of okay, what what what makes clean and what's not?

140
00:07:01.240 --> 00:07:03.439
<v Speaker 3>And so I think that's important to call out, right,

141
00:07:03.519 --> 00:07:05.879
<v Speaker 3>especially like I've written this article of some things that

142
00:07:05.920 --> 00:07:08.920
<v Speaker 3>I find helpful when writing React code, But it doesn't

143
00:07:08.959 --> 00:07:11.399
<v Speaker 3>necessarily mean that you'll find it helpful. You might have

144
00:07:12.079 --> 00:07:15.759
<v Speaker 3>very different, very strongly held opinions that contradict my own,

145
00:07:16.199 --> 00:07:18.959
<v Speaker 3>and that's that might be okay, right, there might not

146
00:07:19.040 --> 00:07:22.560
<v Speaker 3>be a right or wrong answer, But even with that, like,

147
00:07:22.600 --> 00:07:26.879
<v Speaker 3>there definitely are still some generally accepted principles, not just

148
00:07:26.920 --> 00:07:31.920
<v Speaker 3>in React, but across all programming languages, right, Like, it's

149
00:07:32.040 --> 00:07:35.480
<v Speaker 3>pretty commonly accepted that we should use clear variable names

150
00:07:35.639 --> 00:07:39.399
<v Speaker 3>instead of just naming your variable T, it should be

151
00:07:40.120 --> 00:07:44.160
<v Speaker 3>you know, whatever time or whatever you're representing, right, Or

152
00:07:44.279 --> 00:07:48.279
<v Speaker 3>rather than having a comment that says increment counter by one,

153
00:07:48.680 --> 00:07:51.279
<v Speaker 3>let's just have our code be explicit and clear to

154
00:07:51.279 --> 00:07:53.680
<v Speaker 3>write that, right. So there, there still are some generally

155
00:07:53.720 --> 00:07:56.480
<v Speaker 3>accepted principles when it comes to writing clean code.

156
00:07:56.720 --> 00:08:00.399
<v Speaker 1>Yeah, So with the article. What made you want to

157
00:08:00.399 --> 00:08:03.079
<v Speaker 1>write then and actually publish it. I'm assuming there's something

158
00:08:03.079 --> 00:08:05.959
<v Speaker 1>that happened to be in your in your own development

159
00:08:05.959 --> 00:08:08.120
<v Speaker 1>that made you want to actually make this article, write

160
00:08:08.120 --> 00:08:11.560
<v Speaker 1>it down, and then obviously share it because it's it's

161
00:08:11.600 --> 00:08:13.439
<v Speaker 1>a big thing. I guess, kind of saying Okay, this

162
00:08:13.480 --> 00:08:15.600
<v Speaker 1>is what I think is keen code, right, and then

163
00:08:15.639 --> 00:08:17.800
<v Speaker 1>people read that and then discuss and say I agree,

164
00:08:17.839 --> 00:08:19.920
<v Speaker 1>I don't agree, But what was the kind of beginnings

165
00:08:19.920 --> 00:08:21.040
<v Speaker 1>of the article for you?

166
00:08:21.639 --> 00:08:22.160
<v Speaker 2>Yeah?

167
00:08:22.360 --> 00:08:24.639
<v Speaker 3>So I'm a big fan of reading, just like the

168
00:08:25.079 --> 00:08:30.079
<v Speaker 3>classical tech programming books. So I have read Clean Code

169
00:08:30.120 --> 00:08:33.799
<v Speaker 3>by Robert Martin Refactoring by Martin Fowler. Those are probably

170
00:08:34.240 --> 00:08:37.399
<v Speaker 3>the two biggest ones just when it comes to clean

171
00:08:37.440 --> 00:08:41.919
<v Speaker 3>Code and Refactory as their titles say, and rightly so

172
00:08:42.120 --> 00:08:45.480
<v Speaker 3>like these books focus more on general principles that would

173
00:08:45.519 --> 00:08:49.440
<v Speaker 3>apply to any programming language. I think the original Refactoring

174
00:08:49.600 --> 00:08:53.480
<v Speaker 3>was written with Java examples, and then they recently released

175
00:08:53.480 --> 00:08:56.480
<v Speaker 3>a second edition in I think it was like twenty nineteen,

176
00:08:56.879 --> 00:08:59.360
<v Speaker 3>but that's been re updated to all be written in JavaScript,

177
00:08:59.399 --> 00:09:01.679
<v Speaker 3>which is super nice for me as a front and developer.

178
00:09:01.840 --> 00:09:03.799
<v Speaker 3>But so all of these principles that they've that they've

179
00:09:03.840 --> 00:09:10.039
<v Speaker 3>outlined are more general programming sort of language agnostic principles. Right,

180
00:09:10.039 --> 00:09:12.799
<v Speaker 3>they should be true regardless of whether your front end

181
00:09:12.879 --> 00:09:15.919
<v Speaker 3>or back end or Python or C plus plus or whatever. Right,

182
00:09:16.320 --> 00:09:19.840
<v Speaker 3>And so in thinking about that, I wanted to sort

183
00:09:19.840 --> 00:09:23.360
<v Speaker 3>of get more specific of, Okay, we have these general principles,

184
00:09:24.000 --> 00:09:26.879
<v Speaker 3>and now in my job, I'm primarily writing React, and

185
00:09:27.600 --> 00:09:31.639
<v Speaker 3>so are hundreds of thousands of other developers, So how

186
00:09:31.639 --> 00:09:35.039
<v Speaker 3>can we take these principles and make them even more specific?

187
00:09:35.080 --> 00:09:36.919
<v Speaker 3>Of like, how do we how do we distill these

188
00:09:36.960 --> 00:09:41.120
<v Speaker 3>into what makes React code clean for our very specific

189
00:09:41.240 --> 00:09:43.399
<v Speaker 3>use case. So that was sort of the intent, And

190
00:09:43.440 --> 00:09:45.960
<v Speaker 3>then the other part of it is like, there are

191
00:09:46.480 --> 00:09:49.000
<v Speaker 3>you know, useful automated tools you can use, So things

192
00:09:49.039 --> 00:09:53.320
<v Speaker 3>like es lend to establish best practices so that enforces

193
00:09:53.360 --> 00:09:57.720
<v Speaker 3>the consistency. You can use tools like Prettier for formatting codes,

194
00:09:57.799 --> 00:09:59.759
<v Speaker 3>so now you don't have to have arguments anymore of

195
00:10:00.120 --> 00:10:02.360
<v Speaker 3>should we have semi colons or no semi colons, or

196
00:10:02.360 --> 00:10:05.000
<v Speaker 3>trailing commas or no trailing commas. You can just pick

197
00:10:05.039 --> 00:10:07.639
<v Speaker 3>one and have Prettier format it for you. So those

198
00:10:07.679 --> 00:10:09.960
<v Speaker 3>are super helpful and essential tools. But then there's also

199
00:10:09.960 --> 00:10:14.879
<v Speaker 3>still things that aren't necessarily enforceable, right, So like if

200
00:10:14.919 --> 00:10:18.279
<v Speaker 3>you think about a clear variable name, like a tool

201
00:10:18.399 --> 00:10:21.720
<v Speaker 3>like pretty or easlink can't tell you yes, that variable

202
00:10:21.799 --> 00:10:24.879
<v Speaker 3>name makes sense to a human, Right, that's more subjective

203
00:10:24.919 --> 00:10:27.720
<v Speaker 3>and it's where people get involved. And so that's kind

204
00:10:27.720 --> 00:10:30.600
<v Speaker 3>of where my article is more focusing is not the

205
00:10:31.440 --> 00:10:35.399
<v Speaker 3>syntactical differences, but more just what makes this understandable for

206
00:10:35.440 --> 00:10:35.879
<v Speaker 3>a human.

207
00:10:36.480 --> 00:10:39.080
<v Speaker 4>So when I'm looking at your code, it's interesting to

208
00:10:39.080 --> 00:10:43.759
<v Speaker 4>see you're creating these closures inside the component. Have you

209
00:10:43.799 --> 00:10:47.720
<v Speaker 4>looked at things like use callback and use memo and

210
00:10:47.759 --> 00:10:48.799
<v Speaker 4>what's your take on those?

211
00:10:49.159 --> 00:10:51.840
<v Speaker 3>Yeah, so use callback and use memos, So those are

212
00:10:51.879 --> 00:10:55.679
<v Speaker 3>really handy REACT hooks, right, So working with function components,

213
00:10:56.360 --> 00:11:00.600
<v Speaker 3>and they're both essentially memoization techniques, right, so where you

214
00:11:00.639 --> 00:11:05.080
<v Speaker 3>can take some value that's expensive to compute and memorize

215
00:11:05.120 --> 00:11:07.879
<v Speaker 3>it so that you're not constantly recalculating that, and so

216
00:11:07.919 --> 00:11:11.679
<v Speaker 3>those can come in handy when you are realizing that

217
00:11:11.720 --> 00:11:16.679
<v Speaker 3>you've had that you've that you're having performance issues. Pretty

218
00:11:16.960 --> 00:11:21.159
<v Speaker 3>commonly accepted ideas that you don't want to prematurely optimize

219
00:11:21.159 --> 00:11:24.440
<v Speaker 3>your application, right, And so for the most part, I

220
00:11:24.519 --> 00:11:28.360
<v Speaker 3>tend to avoid use callback and use memo until I

221
00:11:28.399 --> 00:11:31.120
<v Speaker 3>recognize that it might be a problem because there's an

222
00:11:31.120 --> 00:11:33.480
<v Speaker 3>overhead to that, right when you when you memoize something

223
00:11:33.519 --> 00:11:35.879
<v Speaker 3>and you have this cash that's created, that does take

224
00:11:35.919 --> 00:11:38.039
<v Speaker 3>some overhead. And so if you're trying to memorize everything,

225
00:11:38.399 --> 00:11:41.759
<v Speaker 3>you actually will have worse performance than if you hadn't, right,

226
00:11:42.080 --> 00:11:44.639
<v Speaker 3>So there's a fine line to draw. And so yeah,

227
00:11:44.679 --> 00:11:48.559
<v Speaker 3>that typically the advice is just don't until you realize, like, hey,

228
00:11:48.559 --> 00:11:51.720
<v Speaker 3>this is behaving pretty slowly, then let's go figureze figure

229
00:11:51.759 --> 00:11:53.440
<v Speaker 3>out what we need to go memorize.

230
00:11:53.799 --> 00:11:58.120
<v Speaker 1>Sure, yeah, and also I'm looking at your result. One

231
00:11:58.120 --> 00:12:02.320
<v Speaker 1>thing I actually stop do now was actually before I

232
00:12:02.440 --> 00:12:05.679
<v Speaker 1>used to use a lot of kind of effect and

233
00:12:06.360 --> 00:12:09.799
<v Speaker 1>for example operator and instead of using a ternary. And

234
00:12:09.879 --> 00:12:12.559
<v Speaker 1>I think I also do an article by Kensey Dodds

235
00:12:12.600 --> 00:12:15.759
<v Speaker 1>about the same thing saying that actually it's better to

236
00:12:15.919 --> 00:12:19.679
<v Speaker 1>have the ternary as opposed to sometimes this kind of operator.

237
00:12:19.799 --> 00:12:23.480
<v Speaker 1>So I think it's good because for me, my philosophy

238
00:12:23.519 --> 00:12:26.759
<v Speaker 1>has always been underpinned by I read this comment in

239
00:12:26.879 --> 00:12:30.360
<v Speaker 1>a book by Kyle Simpson, which was the U Don't

240
00:12:30.360 --> 00:12:35.879
<v Speaker 1>Know JS series, and he said that developers write code

241
00:12:36.000 --> 00:12:40.240
<v Speaker 1>for developers, not for the computer. So your your code

242
00:12:41.000 --> 00:12:43.919
<v Speaker 1>read by add yourself in tomorrow or in a few

243
00:12:43.919 --> 00:12:47.480
<v Speaker 1>months time, in a year's time, or your colleagues. So therefore,

244
00:12:47.919 --> 00:12:51.480
<v Speaker 1>always try to write code that makes it easier for

245
00:12:51.600 --> 00:12:53.960
<v Speaker 1>you in the future or your code has come in,

246
00:12:54.360 --> 00:12:57.919
<v Speaker 1>look at it, understand it, and actually get it working.

247
00:12:57.960 --> 00:13:00.759
<v Speaker 1>And it's something I actually seen when I was looking

248
00:13:00.799 --> 00:13:04.039
<v Speaker 1>at the source code for React, for example, I came

249
00:13:04.080 --> 00:13:06.759
<v Speaker 1>across that they use variable names are very explicit and

250
00:13:06.879 --> 00:13:10.799
<v Speaker 1>quite long, right, which for me looks quite odd, but

251
00:13:10.919 --> 00:13:14.240
<v Speaker 1>actually it helps you actually make sense of what's happening

252
00:13:14.279 --> 00:13:17.440
<v Speaker 1>because even though the name for the vailable might be

253
00:13:17.480 --> 00:13:20.960
<v Speaker 1>quite long and explicit, actually it makes it easy to

254
00:13:21.360 --> 00:13:24.480
<v Speaker 1>work out to getting on. So I think on that front, definitely,

255
00:13:24.799 --> 00:13:27.559
<v Speaker 1>that's how I can approach my clean code and try

256
00:13:27.559 --> 00:13:29.399
<v Speaker 1>to wrap my code in that way where I'm trying

257
00:13:29.399 --> 00:13:32.960
<v Speaker 1>to say, Okay, I want to communicate to my colleagues

258
00:13:33.120 --> 00:13:36.120
<v Speaker 1>my intention, or maybe try to make it clear that

259
00:13:36.159 --> 00:13:37.960
<v Speaker 1>I'm trying to do the X, Y and Z and

260
00:13:38.240 --> 00:13:42.159
<v Speaker 1>all at comments when I'm doing something, which maybe is

261
00:13:42.159 --> 00:13:45.799
<v Speaker 1>not the best practice, but because in this particular example,

262
00:13:46.080 --> 00:13:48.639
<v Speaker 1>it's the best way and actually works. So that's how

263
00:13:48.679 --> 00:13:50.720
<v Speaker 1>I approached it. I don't know if you've also had

264
00:13:50.759 --> 00:13:52.679
<v Speaker 1>a similar kind of viewprint and how you do your

265
00:13:52.919 --> 00:13:53.559
<v Speaker 1>code as well.

266
00:13:54.159 --> 00:13:54.559
<v Speaker 2>Yeah.

267
00:13:54.639 --> 00:13:56.840
<v Speaker 3>Absolutely. I can't remember who said it. I want to

268
00:13:56.840 --> 00:13:59.159
<v Speaker 3>say it was like ken Beck, but it's somewhere along

269
00:13:59.159 --> 00:14:02.279
<v Speaker 3>the lines of anyone can write code a computer can understand.

270
00:14:02.320 --> 00:14:03.960
<v Speaker 3>It's a lot more difficult to write code a human

271
00:14:04.000 --> 00:14:07.320
<v Speaker 3>can understand. Right. And then another really important principle is

272
00:14:07.360 --> 00:14:10.919
<v Speaker 3>that code is read a lot more often than it

273
00:14:11.000 --> 00:14:13.480
<v Speaker 3>is written. You know, like in my day to day

274
00:14:13.559 --> 00:14:16.360
<v Speaker 3>job as a software engineer, I will spend a lot

275
00:14:16.399 --> 00:14:20.159
<v Speaker 3>of time doing code reviews prior to merging code. I'll

276
00:14:20.200 --> 00:14:23.039
<v Speaker 3>spend time reading through the code base as I'm trying

277
00:14:23.080 --> 00:14:25.720
<v Speaker 3>to you know, troubleshoot or debug some issue that I'm

278
00:14:25.759 --> 00:14:29.000
<v Speaker 3>working on right that someone may have written eight months ago.

279
00:14:29.200 --> 00:14:30.840
<v Speaker 3>You may spend your time in meetings, and so if

280
00:14:30.879 --> 00:14:33.480
<v Speaker 3>you look at like how often you actually spend time

281
00:14:33.519 --> 00:14:36.159
<v Speaker 3>writing code, like, it's probably like ten to twenty percent

282
00:14:36.200 --> 00:14:40.360
<v Speaker 3>of my day is actually writing code versus reading code

283
00:14:40.679 --> 00:14:43.360
<v Speaker 3>or discussing, right. So yeah, I mean there's a lot

284
00:14:43.399 --> 00:14:47.919
<v Speaker 3>of value in writing this clean code and making it understandable.

285
00:14:47.919 --> 00:14:53.000
<v Speaker 3>Because that's a majority of your time and your codeker's time. Yeah.

286
00:14:53.039 --> 00:14:54.559
<v Speaker 2>Also looking through your code, it's interesting.

287
00:14:54.639 --> 00:14:57.240
<v Speaker 4>I'm looking at the undefined props one and where you

288
00:14:57.480 --> 00:15:00.559
<v Speaker 4>are sending in a handle click and it it's interesting.

289
00:15:00.639 --> 00:15:03.360
<v Speaker 4>Have you looked at the optional chaining operator question mark

290
00:15:03.399 --> 00:15:05.759
<v Speaker 4>dot and just come out, well, I guess last couple

291
00:15:05.799 --> 00:15:06.679
<v Speaker 4>of years I have.

292
00:15:06.919 --> 00:15:09.679
<v Speaker 3>Yeah, the optional chaining that was in the Yes twenty

293
00:15:09.759 --> 00:15:10.519
<v Speaker 3>twenty release.

294
00:15:11.120 --> 00:15:14.600
<v Speaker 4>Well, yeah, I think that could actually be a lot

295
00:15:14.600 --> 00:15:17.000
<v Speaker 4>easier here. You know, we basically just question mark dot

296
00:15:17.039 --> 00:15:19.720
<v Speaker 4>on the invocation of handle click and there you go.

297
00:15:19.879 --> 00:15:22.360
<v Speaker 2>It's if it's there, it works. If it doesn't, it doesn't.

298
00:15:22.639 --> 00:15:24.799
<v Speaker 3>Yeah, the optional chaining is great when it comes to

299
00:15:25.639 --> 00:15:29.200
<v Speaker 3>ye being uncertain of whether a certain property or method

300
00:15:29.279 --> 00:15:30.279
<v Speaker 3>exists on an object.

301
00:15:30.360 --> 00:15:33.200
<v Speaker 4>Absolutely, it definitely helps, like, as you say, like clean

302
00:15:33.200 --> 00:15:34.720
<v Speaker 4>out with the code so that you know, if you

303
00:15:35.000 --> 00:15:38.200
<v Speaker 4>have like a deeply nested thing in a structure, you know,

304
00:15:38.600 --> 00:15:41.039
<v Speaker 4>data dot first name or data dot name dot first

305
00:15:41.159 --> 00:15:43.080
<v Speaker 4>or something like that, you can easily just say, Okay,

306
00:15:43.080 --> 00:15:45.320
<v Speaker 4>if it's there, then it's this, and if it's not,

307
00:15:45.480 --> 00:15:48.120
<v Speaker 4>then you can back off and get to whatever your

308
00:15:48.120 --> 00:15:50.639
<v Speaker 4>default value is. And it definitely pairs it down from

309
00:15:50.679 --> 00:15:54.320
<v Speaker 4>those nasty, nested ifs we have to used to have to.

310
00:15:54.240 --> 00:15:58.639
<v Speaker 1>Do absolutely so with clean code. What impact have you

311
00:15:58.720 --> 00:16:01.559
<v Speaker 1>seen in your work person or maybe in your teams

312
00:16:02.000 --> 00:16:05.240
<v Speaker 1>when you've tried to actually use these principles if we see,

313
00:16:06.000 --> 00:16:10.399
<v Speaker 1>let's say, an improvement and probability as the code become

314
00:16:10.759 --> 00:16:13.039
<v Speaker 1>much eier to work with over time, What have you

315
00:16:13.080 --> 00:16:15.159
<v Speaker 1>seen impact wise from what you've actually be sharing in

316
00:16:15.159 --> 00:16:15.679
<v Speaker 1>your audible?

317
00:16:16.000 --> 00:16:19.279
<v Speaker 3>Yeah, absolutely so, there has been a lot of benefits

318
00:16:19.679 --> 00:16:22.440
<v Speaker 3>as far as like even just discussing these things, right, So,

319
00:16:22.440 --> 00:16:24.759
<v Speaker 3>like if we were to go through this and do

320
00:16:24.879 --> 00:16:26.879
<v Speaker 3>like a team training or something, right and just just

321
00:16:26.960 --> 00:16:32.759
<v Speaker 3>having a shared understanding of certain principles or styling conventions

322
00:16:32.799 --> 00:16:36.399
<v Speaker 3>that we agree on, I think is huge, right because

323
00:16:36.399 --> 00:16:39.240
<v Speaker 3>now we're all using the same language, we're using the

324
00:16:39.240 --> 00:16:44.559
<v Speaker 3>same terms, we're writing code, and hopefully mostly the same way, right,

325
00:16:44.639 --> 00:16:46.080
<v Speaker 3>And so that makes it very easy for it to

326
00:16:46.080 --> 00:16:48.279
<v Speaker 3>transfer from one person to another. You know, if I'm

327
00:16:48.279 --> 00:16:50.000
<v Speaker 3>reviewing your code, I don't have to get used to

328
00:16:50.039 --> 00:16:52.039
<v Speaker 3>your style and then I have to get used to

329
00:16:52.120 --> 00:16:54.559
<v Speaker 3>Jack styles or review his code. Right, We're all we're

330
00:16:54.559 --> 00:16:56.120
<v Speaker 3>all kind of writing the same way, So there's a

331
00:16:56.159 --> 00:16:58.399
<v Speaker 3>lot of value in that. And then even just like

332
00:16:59.080 --> 00:17:02.360
<v Speaker 3>trying to pick us specific principle and focus on it

333
00:17:02.679 --> 00:17:05.039
<v Speaker 3>for however long, a few weeks or a month, whatever,

334
00:17:05.440 --> 00:17:08.200
<v Speaker 3>we've seen a lot of value in that. So, for instance,

335
00:17:08.400 --> 00:17:10.359
<v Speaker 3>this isn't one actually I think it is mentioned at

336
00:17:10.359 --> 00:17:13.759
<v Speaker 3>the bottom of the article. But just like extracting logic

337
00:17:13.880 --> 00:17:16.839
<v Speaker 3>out into a clearly named function, you might have like

338
00:17:17.440 --> 00:17:19.680
<v Speaker 3>I don't know, I'm trying to think of a good example,

339
00:17:19.720 --> 00:17:22.079
<v Speaker 3>but basically just a whole bunch of conditions. Right, so

340
00:17:22.119 --> 00:17:25.319
<v Speaker 3>you might say, like if condition one and condition two

341
00:17:25.400 --> 00:17:28.799
<v Speaker 3>and condition three or condition four or five, then do

342
00:17:28.920 --> 00:17:32.359
<v Speaker 3>this thing. And it's like it may be clear to

343
00:17:32.359 --> 00:17:34.359
<v Speaker 3>the developer when they're writing it of like why I'm

344
00:17:34.359 --> 00:17:36.920
<v Speaker 3>writing this if statement, but at some point, like the

345
00:17:37.359 --> 00:17:42.119
<v Speaker 3>intent of that can be it can be misunderstood or misinterpreted. Right,

346
00:17:42.119 --> 00:17:45.279
<v Speaker 3>maybe that's not well documented, that's lost. And so there's

347
00:17:45.319 --> 00:17:48.519
<v Speaker 3>a ton of value just like it's extracting that condition

348
00:17:48.720 --> 00:17:50.880
<v Speaker 3>out into a function or into a variable that says

349
00:17:50.920 --> 00:17:55.480
<v Speaker 3>like this is check for user or whatever, right like

350
00:17:55.839 --> 00:17:58.319
<v Speaker 3>this is why I am doing all these conditions in

351
00:17:58.359 --> 00:18:00.440
<v Speaker 3>this if statement. Anyway, So that was that was just

352
00:18:00.440 --> 00:18:03.440
<v Speaker 3>a simple example of something we had focused on of Okay,

353
00:18:03.519 --> 00:18:06.400
<v Speaker 3>let's let's start extracting this code into functions. And as

354
00:18:06.440 --> 00:18:08.279
<v Speaker 3>we do that, like the code becomes a lot more

355
00:18:08.519 --> 00:18:11.839
<v Speaker 3>I guess self documenting and a lot more easy to understand, right,

356
00:18:11.880 --> 00:18:13.920
<v Speaker 3>because now you've got this code extracted out, and so

357
00:18:13.960 --> 00:18:16.720
<v Speaker 3>now you basically just have high level steps of like okay,

358
00:18:16.720 --> 00:18:18.400
<v Speaker 3>I'm going to check if the user is logged in,

359
00:18:19.000 --> 00:18:22.559
<v Speaker 3>then I'm going to fetch their user data, avatar or whatever. Right,

360
00:18:22.640 --> 00:18:25.319
<v Speaker 3>so you have these very clear steps. That's almost like,

361
00:18:25.359 --> 00:18:27.480
<v Speaker 3>I mean, it's not pseudocode, but it's it's a lot

362
00:18:27.519 --> 00:18:30.000
<v Speaker 3>more human readable to just read, like here these three

363
00:18:30.000 --> 00:18:33.440
<v Speaker 3>functions that are being executed, as opposed to digging through

364
00:18:33.480 --> 00:18:36.480
<v Speaker 3>one hundred lines of code of you know, this is

365
00:18:36.480 --> 00:18:38.200
<v Speaker 3>what's actually going on underneath the hood.

366
00:18:38.559 --> 00:18:43.400
<v Speaker 4>So, building on Carl's questions, so when you are going

367
00:18:43.440 --> 00:18:46.480
<v Speaker 4>through these with your team, you know these principles, how

368
00:18:46.480 --> 00:18:49.559
<v Speaker 4>do you find decide when you say, okay, this is

369
00:18:49.839 --> 00:18:52.000
<v Speaker 4>this one's really important? You know, somebody pushed it back

370
00:18:52.039 --> 00:18:54.240
<v Speaker 4>They're like I wouldn't do it that way, I would

371
00:18:54.279 --> 00:18:56.599
<v Speaker 4>do it this way, or something like that. How do

372
00:18:56.640 --> 00:19:00.039
<v Speaker 4>you decide, Okay, this is a really important one. This

373
00:19:00.039 --> 00:19:01.920
<v Speaker 4>is the one I'm you know, willing to go to

374
00:19:01.920 --> 00:19:06.119
<v Speaker 4>town on, you know, versus we can agree to disagree

375
00:19:06.279 --> 00:19:08.640
<v Speaker 4>on that. How do you make that? How do you

376
00:19:08.720 --> 00:19:09.640
<v Speaker 4>weigh those choices?

377
00:19:10.160 --> 00:19:13.279
<v Speaker 3>Yeah, it's a good question because software engineers in general,

378
00:19:13.319 --> 00:19:16.839
<v Speaker 3>I feel like we're pretty pedantic people and we like, no,

379
00:19:17.319 --> 00:19:22.000
<v Speaker 3>we have made strongly held opinions about things that really

380
00:19:22.039 --> 00:19:22.680
<v Speaker 3>don't matter.

381
00:19:23.000 --> 00:19:23.240
<v Speaker 2>Right.

382
00:19:24.359 --> 00:19:30.160
<v Speaker 3>No, it sounds like this is ringing a bell. Yeah,

383
00:19:31.160 --> 00:19:34.000
<v Speaker 3>but honestly, like when it comes to that kind of stuff,

384
00:19:34.079 --> 00:19:37.359
<v Speaker 3>like I feel like it's I mean, it doesn't have

385
00:19:37.440 --> 00:19:40.119
<v Speaker 3>to be complicated. You can have a discussion of Okay,

386
00:19:40.160 --> 00:19:42.279
<v Speaker 3>I like it, I like writing it this way, you

387
00:19:42.319 --> 00:19:45.000
<v Speaker 3>like writing it that way. We can talk about if

388
00:19:45.319 --> 00:19:48.200
<v Speaker 3>there actually is a value or a benefit to doing

389
00:19:48.240 --> 00:19:51.000
<v Speaker 3>one over the other. If there is, right, like, hopefully

390
00:19:51.000 --> 00:19:52.680
<v Speaker 3>you can have a discussion and show like, Okay, this

391
00:19:52.880 --> 00:19:56.559
<v Speaker 3>is clearly better, it provides whatever better performance or you know,

392
00:19:56.599 --> 00:19:59.119
<v Speaker 3>whatever it is, right like, this is objectively better. And

393
00:19:59.160 --> 00:20:01.559
<v Speaker 3>if it's not, if it's a question of do you

394
00:20:01.640 --> 00:20:04.440
<v Speaker 3>like semi colons or no semi colons and javascripts like

395
00:20:05.359 --> 00:20:08.359
<v Speaker 3>to me, it doesn't matter, Like, let's just pick one

396
00:20:08.599 --> 00:20:11.359
<v Speaker 3>and We'll go with it because really, probably what's more

397
00:20:11.400 --> 00:20:13.880
<v Speaker 3>important than the standards that you do pick is just

398
00:20:13.920 --> 00:20:16.920
<v Speaker 3>that you have a standard and that you enforce it.

399
00:20:16.960 --> 00:20:18.680
<v Speaker 3>And that comes back to just like the s lent

400
00:20:18.799 --> 00:20:22.480
<v Speaker 3>and Prettier tools, right, you can configure those, So just

401
00:20:22.519 --> 00:20:25.720
<v Speaker 3>pick a standard and go with it. It honestly doesn't matter.

402
00:20:26.119 --> 00:20:27.160
<v Speaker 3>Just be consistent.

403
00:20:27.359 --> 00:20:30.200
<v Speaker 4>Yeah, I couldn't agree more honestly when people ask me,

404
00:20:30.319 --> 00:20:33.160
<v Speaker 4>what's your favorite lnting standards? Like whatever is in the

405
00:20:33.359 --> 00:20:35.920
<v Speaker 4>es lend r C and is managed by Prettier and

406
00:20:35.960 --> 00:20:38.799
<v Speaker 4>does it when I hit save, That's where I'm at.

407
00:20:38.720 --> 00:20:40.200
<v Speaker 2>You know. So if you want to do Sammy Colins,

408
00:20:40.200 --> 00:20:42.839
<v Speaker 2>you do you well, whichever.

409
00:20:42.720 --> 00:20:44.799
<v Speaker 5>Hey, folks, if you love this podcast and would like

410
00:20:44.839 --> 00:20:47.039
<v Speaker 5>to support the show, or if you wish you could

411
00:20:47.039 --> 00:20:49.680
<v Speaker 5>listen without the sponsorship messages, then you're in luck. We're

412
00:20:49.720 --> 00:20:52.079
<v Speaker 5>setting up new premium podcast feeds where you can get

413
00:20:52.079 --> 00:20:55.000
<v Speaker 5>all of the episodes released after Christmas twenty twenty without

414
00:20:55.000 --> 00:20:57.680
<v Speaker 5>the ads. Signing up will help us pay for editing

415
00:20:57.720 --> 00:21:00.640
<v Speaker 5>and production, and you can go sign up dot tv

416
00:21:00.720 --> 00:21:01.920
<v Speaker 5>slash Premium.

417
00:21:02.000 --> 00:21:05.599
<v Speaker 1>Yeah, so on that with React. In your opinion, Tyler,

418
00:21:06.079 --> 00:21:09.359
<v Speaker 1>do you think there are things about React that make

419
00:21:09.400 --> 00:21:12.920
<v Speaker 1>it harder to write clean code or easier. For example,

420
00:21:13.480 --> 00:21:16.720
<v Speaker 1>I know that in my experience, one of the issues

421
00:21:16.759 --> 00:21:20.160
<v Speaker 1>that I come across or people say to me, is okay,

422
00:21:20.839 --> 00:21:24.720
<v Speaker 1>because it's so flexible, right, I can do one thing

423
00:21:24.880 --> 00:21:28.839
<v Speaker 1>ten different ways, So that I guess makes it harder

424
00:21:28.839 --> 00:21:32.079
<v Speaker 1>to have a clean code because I could maybe spend

425
00:21:32.720 --> 00:21:35.359
<v Speaker 1>time working on this particular stutuf or programming in rects.

426
00:21:35.680 --> 00:21:38.559
<v Speaker 1>I dream and then you're working on this startup programming

427
00:21:38.559 --> 00:21:42.640
<v Speaker 1>and reacting kind of clashing. But I mean, for movie point,

428
00:21:42.680 --> 00:21:44.720
<v Speaker 1>are there things that make it harder in React? We've

429
00:21:44.799 --> 00:21:47.039
<v Speaker 1>in code and things that make it easier code.

430
00:21:47.279 --> 00:21:49.720
<v Speaker 3>Sure, that's a good question. I don't know if I

431
00:21:49.720 --> 00:21:53.079
<v Speaker 3>would say that it makes it harder to write clean code,

432
00:21:53.440 --> 00:21:55.359
<v Speaker 3>but I do get where you're coming from, right, is

433
00:21:55.400 --> 00:21:59.960
<v Speaker 3>like React is somewhat unopinionated, Like if you were to look,

434
00:22:00.079 --> 00:22:02.480
<v Speaker 3>you know, maybe the differences between React and Angular, Like

435
00:22:03.000 --> 00:22:06.799
<v Speaker 3>React is presented as a UI library, whereas Angular is

436
00:22:06.839 --> 00:22:09.839
<v Speaker 3>presented as a UI framework, right, and so Angler is

437
00:22:09.960 --> 00:22:13.599
<v Speaker 3>very opinionated as to this is the Angular router that

438
00:22:13.640 --> 00:22:16.400
<v Speaker 3>we use, and this is the Angular animation library that

439
00:22:16.400 --> 00:22:18.720
<v Speaker 3>we use. Right, But with React, we don't have that

440
00:22:18.799 --> 00:22:21.839
<v Speaker 3>at all. We have to choose between what state management

441
00:22:21.839 --> 00:22:23.279
<v Speaker 3>system are you going to use? Is it going to

442
00:22:23.319 --> 00:22:26.680
<v Speaker 3>be the context API or redex or something else. You know,

443
00:22:26.759 --> 00:22:30.079
<v Speaker 3>what are you going to use? Yep, yeah, those are

444
00:22:30.079 --> 00:22:32.799
<v Speaker 3>the big ones. What are you going to use for

445
00:22:32.880 --> 00:22:36.240
<v Speaker 3>CSS stuff? Is it going to be the emotion or

446
00:22:36.720 --> 00:22:39.640
<v Speaker 3>CSS modules or tailwinds. So there are tons of different

447
00:22:39.640 --> 00:22:42.720
<v Speaker 3>opinions or options out there, I should say. And so

448
00:22:43.519 --> 00:22:46.599
<v Speaker 3>I mean that's almost a different discussion to me is like,

449
00:22:47.160 --> 00:22:48.480
<v Speaker 3>you know, how do you how do you choose the

450
00:22:48.559 --> 00:22:51.079
<v Speaker 3>right tool? How do you make decisions as an organization?

451
00:22:51.440 --> 00:22:53.440
<v Speaker 3>But regardless of what tool you choose, like, I think

452
00:22:53.440 --> 00:22:56.279
<v Speaker 3>you can still write code in a clean way, you know,

453
00:22:56.400 --> 00:22:58.640
<v Speaker 3>regardless of what solution that you're using.

454
00:22:59.319 --> 00:23:02.039
<v Speaker 1>Yeah, it's fine for me. I actually find the fact

455
00:23:02.079 --> 00:23:05.759
<v Speaker 1>that reacts is flexible actually kind of makes it easier

456
00:23:06.000 --> 00:23:11.279
<v Speaker 1>because you know, you're not having to follow a path, right,

457
00:23:11.400 --> 00:23:15.720
<v Speaker 1>let's say that angler or whatever. You're able to adapt

458
00:23:15.839 --> 00:23:19.079
<v Speaker 1>to maybe what the team likes the best, what the

459
00:23:19.079 --> 00:23:21.519
<v Speaker 1>skill set is in the team. And I mean that's

460
00:23:21.519 --> 00:23:23.720
<v Speaker 1>for me anyway, Maybe other people that prefer to be

461
00:23:23.759 --> 00:23:26.160
<v Speaker 1>handheld and be total Okay, this is this is the

462
00:23:26.200 --> 00:23:28.079
<v Speaker 1>way to do it. In other way, it's wrong, But

463
00:23:28.119 --> 00:23:32.039
<v Speaker 1>personally I like that about React that I don't have

464
00:23:32.200 --> 00:23:34.759
<v Speaker 1>to always follow a path. I can kind of work

465
00:23:34.799 --> 00:23:37.359
<v Speaker 1>my way there, and I can then kind of learn

466
00:23:37.519 --> 00:23:40.960
<v Speaker 1>from other people's ways as well. So yeah, that's kind

467
00:23:40.960 --> 00:23:43.079
<v Speaker 1>of how well approached it really.

468
00:23:43.440 --> 00:23:46.319
<v Speaker 3>Yeah, absolutely, I would agree. I think it's fun to

469
00:23:46.319 --> 00:23:48.279
<v Speaker 3>be able to kind of pick and choose, especially if

470
00:23:48.279 --> 00:23:52.400
<v Speaker 3>maybe there's one solution that works best for your particular application.

471
00:23:52.599 --> 00:23:55.319
<v Speaker 3>Like I'm just thinking of, like going back to reducts

472
00:23:55.480 --> 00:23:58.240
<v Speaker 3>and middle, where you might use something like reducts THUNK

473
00:23:58.480 --> 00:24:02.440
<v Speaker 3>that's honestly therey simple middle where it's it's like literally

474
00:24:02.480 --> 00:24:04.799
<v Speaker 3>like thirteen lines of code this is the whole average,

475
00:24:06.079 --> 00:24:08.119
<v Speaker 3>or you might have something like reduc SAGA, which is

476
00:24:08.160 --> 00:24:11.079
<v Speaker 3>far more complex but far more powerful, and so yeah,

477
00:24:11.119 --> 00:24:13.039
<v Speaker 3>then it kind of comes down to of like, Okay,

478
00:24:13.119 --> 00:24:17.440
<v Speaker 3>we do have whatever these very convoluted actions and effects

479
00:24:17.440 --> 00:24:22.000
<v Speaker 3>that we need reduct SAGA to handle versus our actions

480
00:24:22.039 --> 00:24:25.559
<v Speaker 3>and reducts setup is fairly simple and FUNK serves their needs.

481
00:24:25.960 --> 00:24:28.279
<v Speaker 3>So yeah, I think that flexibility is great, being able

482
00:24:28.279 --> 00:24:30.640
<v Speaker 3>to choose the right tool for the job. The hard

483
00:24:30.640 --> 00:24:33.799
<v Speaker 3>part is making that decision of what is the right tool, right.

484
00:24:33.839 --> 00:24:38.119
<v Speaker 1>So yeah, yeah, so I think this is a good

485
00:24:38.160 --> 00:24:41.519
<v Speaker 1>point you segue into your article on clean code of tests.

486
00:24:42.240 --> 00:24:44.440
<v Speaker 1>So I think we've covered like the clean coding of

487
00:24:44.599 --> 00:24:48.680
<v Speaker 1>reaction for for a bit. So when it comes to tests,

488
00:24:48.799 --> 00:24:51.440
<v Speaker 1>how are these same princeps applied to testing to make

489
00:24:51.519 --> 00:24:55.079
<v Speaker 1>your code again cleaner, readable, and better to work with

490
00:24:55.440 --> 00:24:56.279
<v Speaker 1>you and your colleagues.

491
00:24:56.960 --> 00:24:59.880
<v Speaker 3>Yeah, so with clean code with tests. So this was, yeah,

492
00:25:00.200 --> 00:25:03.279
<v Speaker 3>a different article I'd written, and this one focuses a

493
00:25:03.319 --> 00:25:06.920
<v Speaker 3>lot more on not so much in just making code

494
00:25:07.400 --> 00:25:09.799
<v Speaker 3>pretty or coming to a certain standard, but more as

495
00:25:09.799 --> 00:25:12.880
<v Speaker 3>far as like how you actually organize your code. So

496
00:25:12.920 --> 00:25:15.000
<v Speaker 3>there are a lot of really important principles in there,

497
00:25:15.039 --> 00:25:17.599
<v Speaker 3>so like, for example, structuring your test like it's pretty

498
00:25:17.599 --> 00:25:21.400
<v Speaker 3>common to structure them and like this arrange act assert

499
00:25:21.920 --> 00:25:24.440
<v Speaker 3>sort of set of groupings right where you first set

500
00:25:24.480 --> 00:25:27.240
<v Speaker 3>up your test fixtures and then you actually act on it,

501
00:25:27.279 --> 00:25:30.799
<v Speaker 3>perform some operation, and then you assert that the expected

502
00:25:30.839 --> 00:25:33.880
<v Speaker 3>behavior occurred. So I mean that's huge just as far

503
00:25:33.920 --> 00:25:37.440
<v Speaker 3>as like writing very clear sections of your test. There

504
00:25:37.440 --> 00:25:39.559
<v Speaker 3>are a lot of other principles as well, so things

505
00:25:39.599 --> 00:25:42.400
<v Speaker 3>like using test object builders, so that helps you know

506
00:25:43.279 --> 00:25:46.640
<v Speaker 3>reduce the amount of duplication in your code, kind of

507
00:25:46.680 --> 00:25:50.519
<v Speaker 3>keeping things dry there. And test builders if you or

508
00:25:50.799 --> 00:25:53.680
<v Speaker 3>listeners aren't aren't sure what they are. They're essentially methods

509
00:25:53.680 --> 00:25:57.000
<v Speaker 3>that can be used to build commonly used objects. So,

510
00:25:57.039 --> 00:25:59.160
<v Speaker 3>for example, if you have like a user object or

511
00:25:59.240 --> 00:26:02.440
<v Speaker 3>a whatever, any sort of common object working with, rather

512
00:26:02.480 --> 00:26:04.480
<v Speaker 3>than creating a new user every single time and having

513
00:26:04.519 --> 00:26:07.240
<v Speaker 3>like twenty lines of setup code in each of your tests,

514
00:26:07.519 --> 00:26:09.880
<v Speaker 3>you can define define these helper functions where you can

515
00:26:10.000 --> 00:26:13.720
<v Speaker 3>essentially just create a new user with either using some

516
00:26:13.799 --> 00:26:16.920
<v Speaker 3>default values or some overrides that you provide. So it

517
00:26:16.960 --> 00:26:19.440
<v Speaker 3>really helps make it more maintainable, so that you can

518
00:26:19.480 --> 00:26:21.880
<v Speaker 3>just create a new user in one line of code,

519
00:26:21.960 --> 00:26:24.599
<v Speaker 3>as opposed to know, however many lines that uses to

520
00:26:24.599 --> 00:26:26.759
<v Speaker 3>actually generate that object. I don't know how much more

521
00:26:26.759 --> 00:26:28.519
<v Speaker 3>you want to go into. We've got We've got all

522
00:26:28.559 --> 00:26:30.400
<v Speaker 3>sorts of things we could talk about with tests.

523
00:26:31.000 --> 00:26:33.200
<v Speaker 4>I do love that first acronym that you have in there,

524
00:26:33.279 --> 00:26:38.000
<v Speaker 4>so that the test should be fast, independent, repeatable, self validating,

525
00:26:38.240 --> 00:26:40.559
<v Speaker 4>and timely. Could you talk to me a little bit

526
00:26:40.599 --> 00:26:43.039
<v Speaker 4>about self validating and timely on that?

527
00:26:43.440 --> 00:26:43.759
<v Speaker 2>Yeah?

528
00:26:44.039 --> 00:26:48.160
<v Speaker 3>So, yeah, the whole, the whole acronym first, so fast independent, repeatable,

529
00:26:48.240 --> 00:26:51.440
<v Speaker 3>self validating timely. That comes from I think that one's

530
00:26:51.440 --> 00:26:54.559
<v Speaker 3>from Uncle Bob in Clean Code. He's got a chapter

531
00:26:54.599 --> 00:26:56.839
<v Speaker 3>on unit tests. But so when it comes to test

532
00:26:56.920 --> 00:27:01.720
<v Speaker 3>being self validating, it's very important that tests either return

533
00:27:02.160 --> 00:27:06.880
<v Speaker 3>as passing or failing, as opposed to just returning a

534
00:27:06.920 --> 00:27:09.920
<v Speaker 3>message saying like here was the test output. You know

535
00:27:10.039 --> 00:27:15.920
<v Speaker 3>your your function returned ten, You're exactly and so like

536
00:27:15.960 --> 00:27:17.759
<v Speaker 3>in the React world, that's one of you know, the

537
00:27:17.799 --> 00:27:22.559
<v Speaker 3>big complaints of snapshot tests when you are testing your components. Yeah, everyone,

538
00:27:22.759 --> 00:27:26.480
<v Speaker 3>everyone hates snapshot tests, right, But that's that's one of

539
00:27:26.519 --> 00:27:28.880
<v Speaker 3>the problems of them is that snapshot tests are not

540
00:27:28.960 --> 00:27:32.440
<v Speaker 3>self validating. They just tell you that something changed, and

541
00:27:32.519 --> 00:27:35.640
<v Speaker 3>now it's up to the human to verify of, Okay,

542
00:27:35.759 --> 00:27:38.319
<v Speaker 3>was this a correct change because I've changed something the

543
00:27:38.400 --> 00:27:41.279
<v Speaker 3>source code and therefore my snapshot test updated, or is

544
00:27:41.319 --> 00:27:44.559
<v Speaker 3>this an unwanted change? Did I accidentally modify something that

545
00:27:44.599 --> 00:27:46.920
<v Speaker 3>I didn't mean to? And so again it's it's not

546
00:27:46.960 --> 00:27:49.160
<v Speaker 3>self validating. The human has to provide some sort of

547
00:27:49.240 --> 00:27:51.839
<v Speaker 3>judgment there and often what happens then, I'm sure you know,

548
00:27:51.960 --> 00:27:54.799
<v Speaker 3>is with snapshots is that the developer just says, yes,

549
00:27:54.960 --> 00:27:55.440
<v Speaker 3>update and.

550
00:27:55.519 --> 00:27:56.519
<v Speaker 1>Except to the changes.

551
00:27:56.640 --> 00:27:59.440
<v Speaker 3>Right now, we've updated our snapshots and we haven't really

552
00:27:59.480 --> 00:28:02.359
<v Speaker 3>validated at all, and so that's huge. And for the

553
00:28:02.440 --> 00:28:07.000
<v Speaker 3>most part, I mean, test frameworks today are self validating, right.

554
00:28:07.039 --> 00:28:09.079
<v Speaker 3>You write a test, either passes or fails, and it

555
00:28:09.119 --> 00:28:11.960
<v Speaker 3>reports your test successes or error. So that's mostly taken

556
00:28:12.000 --> 00:28:15.279
<v Speaker 3>care of. But that's a hugely important principle that I

557
00:28:15.319 --> 00:28:17.240
<v Speaker 3>think we might take for granted. And then your other

558
00:28:17.440 --> 00:28:22.359
<v Speaker 3>questions you asked about writing tests and timely manner. Yeah,

559
00:28:22.400 --> 00:28:23.920
<v Speaker 3>and so this is a big one, just as far

560
00:28:24.000 --> 00:28:29.200
<v Speaker 3>as like I think writing code responsibly. So to me, like,

561
00:28:30.000 --> 00:28:33.559
<v Speaker 3>you shouldn't be writing any sort of code really, whether

562
00:28:33.599 --> 00:28:36.480
<v Speaker 3>it's a feature or a bug fix or whatever, without

563
00:28:36.599 --> 00:28:39.480
<v Speaker 3>unit tests, right, or tests of some sort, right, whether

564
00:28:39.480 --> 00:28:41.839
<v Speaker 3>it's integration tests or end end or whatever. You need

565
00:28:41.880 --> 00:28:45.200
<v Speaker 3>to adequately test it because when you write the tests

566
00:28:45.279 --> 00:28:50.119
<v Speaker 3>alongside your production code, you have a better understanding of

567
00:28:50.160 --> 00:28:53.799
<v Speaker 3>how the test should function, or sorry, how the code

568
00:28:53.799 --> 00:28:54.519
<v Speaker 3>should function.

569
00:28:54.880 --> 00:28:55.119
<v Speaker 2>Right.

570
00:28:55.240 --> 00:28:57.519
<v Speaker 3>You have the product requirements. If you're working on some

571
00:28:57.599 --> 00:29:00.799
<v Speaker 3>new feature, you've probably talked to the product owner and

572
00:29:00.839 --> 00:29:03.839
<v Speaker 3>the UX designer and you know the requirements and so

573
00:29:03.880 --> 00:29:05.799
<v Speaker 3>it's up to you to write the test to say, hey,

574
00:29:05.799 --> 00:29:07.640
<v Speaker 3>this is how this feature should work, and this is

575
00:29:07.680 --> 00:29:10.599
<v Speaker 3>the expected behavior. And the opposite of that if you

576
00:29:10.640 --> 00:29:13.319
<v Speaker 3>don't do that is let's say you've written your code

577
00:29:13.359 --> 00:29:16.240
<v Speaker 3>and there are no tests. I'm sure we've all worked

578
00:29:16.279 --> 00:29:19.359
<v Speaker 3>places where testing was not a priority at the company,

579
00:29:19.400 --> 00:29:23.400
<v Speaker 3>and so now we have this massive monolith here of code,

580
00:29:23.839 --> 00:29:27.319
<v Speaker 3>and people are afraid to make changes to maybe core

581
00:29:27.400 --> 00:29:32.119
<v Speaker 3>parts of the application. You've got your authentication code, or

582
00:29:32.160 --> 00:29:35.279
<v Speaker 3>maybe your e commerce company, so you've got your actual

583
00:29:35.400 --> 00:29:38.759
<v Speaker 3>checkout and order processing code, and people are terrified to

584
00:29:38.759 --> 00:29:41.039
<v Speaker 3>touch it to make any change because they're afraid that

585
00:29:41.039 --> 00:29:43.680
<v Speaker 3>they'll break it. And now users can't log in or

586
00:29:43.680 --> 00:29:46.440
<v Speaker 3>they can't complete purchases, and they're costing the company tons

587
00:29:46.480 --> 00:29:49.240
<v Speaker 3>of money. And it's all because there are no tests there, right.

588
00:29:49.279 --> 00:29:51.960
<v Speaker 3>The tests provide that confidence for you to be able

589
00:29:52.000 --> 00:29:55.480
<v Speaker 3>to change your app and to refactor it and add

590
00:29:55.519 --> 00:29:57.759
<v Speaker 3>new things in the future, because then if the tests

591
00:29:57.759 --> 00:29:59.799
<v Speaker 3>are actually in place, they'll tell you when you've broken

592
00:29:59.799 --> 00:30:01.799
<v Speaker 3>some thing. And so as we're trying to play catch

593
00:30:01.839 --> 00:30:04.400
<v Speaker 3>up them. Let's say we're in that scenario where we

594
00:30:04.440 --> 00:30:07.920
<v Speaker 3>don't have tests, and now we're trying to increase the

595
00:30:07.960 --> 00:30:11.720
<v Speaker 3>code coverage and make our application a little bit better. Now,

596
00:30:11.759 --> 00:30:14.319
<v Speaker 3>we might be missing some of those product requirements, right.

597
00:30:14.359 --> 00:30:17.880
<v Speaker 3>We might have a general idea of what the main

598
00:30:17.920 --> 00:30:20.960
<v Speaker 3>functionality of the code is supposed to be doing, but

599
00:30:21.000 --> 00:30:24.839
<v Speaker 3>we missed the nuance of all the product requirements and

600
00:30:24.880 --> 00:30:27.160
<v Speaker 3>all the discussions that were had when that code was

601
00:30:27.200 --> 00:30:30.279
<v Speaker 3>initially being written. And so when that happens, you'll have

602
00:30:30.400 --> 00:30:34.440
<v Speaker 3>you know, missed edge cases or just maybe a misunderstanding

603
00:30:34.680 --> 00:30:36.319
<v Speaker 3>as far as the expected behavior.

604
00:30:36.680 --> 00:30:36.920
<v Speaker 2>Yeah.

605
00:30:36.960 --> 00:30:40.839
<v Speaker 4>Absolutely, I mean we mentioned the dreaded snapshot test, and

606
00:30:42.000 --> 00:30:45.200
<v Speaker 4>those tend for me to come in when I'm adding

607
00:30:45.319 --> 00:30:47.680
<v Speaker 4>unit tests to older code. And the me that was

608
00:30:47.759 --> 00:30:51.480
<v Speaker 4>me three weeks ago that wrote that code decided not

609
00:30:51.519 --> 00:30:52.480
<v Speaker 4>to write the test or whatever.

610
00:30:52.519 --> 00:30:55.160
<v Speaker 2>I'm like, I'll just snapshot it. It'll be fine.

611
00:30:55.599 --> 00:31:00.240
<v Speaker 4>But yeah, when it's timely, right, you say, Okay, the

612
00:31:00.279 --> 00:31:03.519
<v Speaker 4>really important part here is the total when it's when

613
00:31:03.519 --> 00:31:06.880
<v Speaker 4>you're trying to check out or whatever, and so you

614
00:31:06.880 --> 00:31:08.759
<v Speaker 4>know you want to make a test that's specific to

615
00:31:08.759 --> 00:31:10.519
<v Speaker 4>making sure that the total is right and not that

616
00:31:10.680 --> 00:31:15.279
<v Speaker 4>like the entire component stack is exactly what you expected,

617
00:31:15.400 --> 00:31:16.960
<v Speaker 4>which is what you're going to get from a snapshot.

618
00:31:17.039 --> 00:31:20.119
<v Speaker 4>And that's why when you do those auto updates, it's

619
00:31:20.119 --> 00:31:22.720
<v Speaker 4>like maybe maybe the total change and that was the

620
00:31:22.720 --> 00:31:24.640
<v Speaker 4>bad thing, or maybe it was just some class name

621
00:31:25.039 --> 00:31:27.559
<v Speaker 4>and it's you can't really tell the difference unless you

622
00:31:27.599 --> 00:31:29.000
<v Speaker 4>really drill down and do it, look at the gift

623
00:31:29.000 --> 00:31:31.599
<v Speaker 4>to get this and all that. So I totally get

624
00:31:31.880 --> 00:31:34.200
<v Speaker 4>why those two things are super important, and they kind

625
00:31:34.240 --> 00:31:35.279
<v Speaker 4>of work.

626
00:31:35.079 --> 00:31:35.799
<v Speaker 2>Across each other.

627
00:31:35.839 --> 00:31:38.279
<v Speaker 4>It's like, yeah, you gotta get the right test and

628
00:31:38.359 --> 00:31:40.079
<v Speaker 4>also write it right then because when you have it

629
00:31:40.119 --> 00:31:41.400
<v Speaker 4>in mind, that's important.

630
00:31:41.519 --> 00:31:42.119
<v Speaker 3>Absolutely.

631
00:31:42.400 --> 00:31:45.000
<v Speaker 1>Yeah, And I guess also on testing, I'm looking at

632
00:31:45.119 --> 00:31:48.880
<v Speaker 1>some root put number six, which is about edge cases

633
00:31:48.960 --> 00:31:53.880
<v Speaker 1>and boundaries, and I feel that we sometimes either either

634
00:31:54.039 --> 00:31:59.160
<v Speaker 1>either go to extreme and we develop edge cases too much, right, oh,

635
00:31:59.759 --> 00:32:02.599
<v Speaker 1>we just forget about the motrone. And I think that

636
00:32:02.720 --> 00:32:06.720
<v Speaker 1>reminded that. Yes, actually always try to think if I

637
00:32:06.759 --> 00:32:08.960
<v Speaker 1>was like, how can I break my code right, or

638
00:32:09.000 --> 00:32:12.519
<v Speaker 1>how can I break this feature and test that kind

639
00:32:12.559 --> 00:32:16.000
<v Speaker 1>of edge case where if that happens, if the stars aligning,

640
00:32:16.319 --> 00:32:19.319
<v Speaker 1>if it's on a windy day, if the moon is up,

641
00:32:20.000 --> 00:32:25.359
<v Speaker 1>then this gonna happen. So yeah, that's a good point.

642
00:32:25.440 --> 00:32:29.119
<v Speaker 1>So I guess A question which kind of ties pieces together?

643
00:32:29.240 --> 00:32:32.720
<v Speaker 1>Is Okay? So let's say I've heard your argument and

644
00:32:32.759 --> 00:32:35.640
<v Speaker 1>I say, okay, okay, I agree with you. Clean code

645
00:32:35.680 --> 00:32:37.599
<v Speaker 1>is a way to go. I like your tips, I

646
00:32:37.720 --> 00:32:42.319
<v Speaker 1>like your testing tips. However, one, how can I make

647
00:32:42.400 --> 00:32:44.440
<v Speaker 1>this a day to day part of my workflow?

648
00:32:44.960 --> 00:32:45.440
<v Speaker 2>Number one?

649
00:32:45.799 --> 00:32:50.000
<v Speaker 1>And crucially, how can I then introduce into my team?

650
00:32:50.359 --> 00:32:50.559
<v Speaker 2>Right?

651
00:32:50.680 --> 00:32:54.640
<v Speaker 1>Because obviously this is a new worth working and it

652
00:32:54.720 --> 00:32:59.119
<v Speaker 1>requires us to change our mentality our workflow, but we

653
00:32:59.279 --> 00:33:02.880
<v Speaker 1>see that benefit. However, how do you get from the

654
00:33:02.880 --> 00:33:06.200
<v Speaker 1>theory in your articles to actually be the practical day

655
00:33:06.240 --> 00:33:07.559
<v Speaker 1>to day coding for it?

656
00:33:08.039 --> 00:33:08.440
<v Speaker 2>Yeah?

657
00:33:08.480 --> 00:33:11.400
<v Speaker 3>So basically, how do we take these principles and start

658
00:33:11.400 --> 00:33:14.960
<v Speaker 3>implementing them if we're a team that hasn't in the past, right?

659
00:33:15.519 --> 00:33:15.680
<v Speaker 1>Yeah?

660
00:33:15.759 --> 00:33:20.119
<v Speaker 3>Yeah, So I think code reviews are a very crucial

661
00:33:20.119 --> 00:33:23.400
<v Speaker 3>part of this process and being diligent in code reviews.

662
00:33:23.720 --> 00:33:26.680
<v Speaker 3>So if let's say your company was not as serious

663
00:33:26.680 --> 00:33:28.880
<v Speaker 3>about tests and now now they are they want to

664
00:33:29.279 --> 00:33:31.880
<v Speaker 3>write tests and increase the code coverage and whatnot, we

665
00:33:31.960 --> 00:33:33.960
<v Speaker 3>need to actually put our money where our mouth is

666
00:33:34.039 --> 00:33:36.240
<v Speaker 3>and make sure we do those things right. And so

667
00:33:36.839 --> 00:33:39.039
<v Speaker 3>if you let's say I'm reviewing your code and you've

668
00:33:39.119 --> 00:33:42.279
<v Speaker 3>checked in code and you haven't written tests. The responsibilities

669
00:33:42.279 --> 00:33:44.720
<v Speaker 3>on me then, as the reviewer, to say, hey, the

670
00:33:44.720 --> 00:33:46.759
<v Speaker 3>code looks good, but I can't approve this until you

671
00:33:46.799 --> 00:33:50.640
<v Speaker 3>write tests, right, And so that's sort of the human

672
00:33:50.720 --> 00:33:54.039
<v Speaker 3>gate check or gatekeeper right there of doing that, And

673
00:33:54.079 --> 00:33:56.880
<v Speaker 3>so that requires all of us to have this shared understanding. Right,

674
00:33:56.960 --> 00:33:59.039
<v Speaker 3>it doesn't work if Jack is over here and he'll

675
00:33:59.119 --> 00:34:00.839
<v Speaker 3>prodge your code no matter what. So you're just going

676
00:34:00.880 --> 00:34:03.720
<v Speaker 3>to send all the mrs to Jack. And so it

677
00:34:03.759 --> 00:34:05.839
<v Speaker 3>sort of requires kind of that team effort, right, so

678
00:34:05.880 --> 00:34:07.960
<v Speaker 3>we have this shared understanding that yes, this is what

679
00:34:08.000 --> 00:34:10.400
<v Speaker 3>we do. We have tests. Another thing that I've found

680
00:34:10.480 --> 00:34:12.840
<v Speaker 3>very helpful when it comes to code reviews is just

681
00:34:13.039 --> 00:34:17.039
<v Speaker 3>using like merge request templates or pull request templates, depending

682
00:34:17.039 --> 00:34:19.639
<v Speaker 3>if you're a get hub or get lab user. But

683
00:34:19.719 --> 00:34:24.880
<v Speaker 3>so those templates are essentially a checklist, right of Typically

684
00:34:24.920 --> 00:34:27.320
<v Speaker 3>when I create a merged request template for a repot,

685
00:34:27.360 --> 00:34:30.599
<v Speaker 3>would have something like, what's the description of what you're changing?

686
00:34:30.840 --> 00:34:32.159
<v Speaker 3>You know, so give me a one or two line

687
00:34:32.159 --> 00:34:35.239
<v Speaker 3>summary of what this is all about, maybe a quick

688
00:34:35.280 --> 00:34:37.559
<v Speaker 3>test plan of how someone could verify that this is

689
00:34:37.599 --> 00:34:39.800
<v Speaker 3>working if they wanted to go manually check it out,

690
00:34:40.239 --> 00:34:42.039
<v Speaker 3>and then there might be a checklist as well of

691
00:34:42.199 --> 00:34:45.679
<v Speaker 3>like literally, just have you written unit tests? Have you

692
00:34:45.760 --> 00:34:48.639
<v Speaker 3>cross browser tested this? You know if you support I

693
00:34:48.760 --> 00:34:52.440
<v Speaker 3>E eleven or whatever? Right, have you made sure user

694
00:34:52.440 --> 00:34:55.360
<v Speaker 3>facing text is translated if you support different languages, or

695
00:34:55.400 --> 00:34:57.920
<v Speaker 3>have you you know, made sure that your your code

696
00:34:58.000 --> 00:35:01.719
<v Speaker 3>is accessible for screen reader users keyboard navigation. So just

697
00:35:01.760 --> 00:35:05.280
<v Speaker 3>having that checklist in place provides just a little nudge

698
00:35:05.599 --> 00:35:08.039
<v Speaker 3>and a little reminder of like, okay, I've checked in

699
00:35:08.079 --> 00:35:10.719
<v Speaker 3>my code. Now I go through this checklist like oh okay,

700
00:35:10.719 --> 00:35:12.400
<v Speaker 3>I didn't write test. Let me go back and take

701
00:35:12.440 --> 00:35:15.559
<v Speaker 3>care of that. Anyway, those are two small things I

702
00:35:15.559 --> 00:35:16.400
<v Speaker 3>think could help a lot.

703
00:35:16.840 --> 00:35:19.199
<v Speaker 4>Have you thought about rolling this out at Adobe? And

704
00:35:19.840 --> 00:35:22.719
<v Speaker 4>how would you think about doing that? Somebody's really big

705
00:35:22.840 --> 00:35:23.400
<v Speaker 4>like Adobe.

706
00:35:23.679 --> 00:35:26.199
<v Speaker 3>Yeah, so that's that's a tough question when it comes

707
00:35:26.239 --> 00:35:30.199
<v Speaker 3>to Adobe specifically, because you know, Adobe has acquired a

708
00:35:30.239 --> 00:35:33.239
<v Speaker 3>lot of different companies, right, They're made up of tons

709
00:35:33.239 --> 00:35:36.440
<v Speaker 3>and tons of different technologies and platforms and whatnot. And

710
00:35:36.519 --> 00:35:38.559
<v Speaker 3>so even though I'm working at Adobe, I'm still largely

711
00:35:38.599 --> 00:35:42.320
<v Speaker 3>working within like the Workfront application that's now part of

712
00:35:42.360 --> 00:35:47.559
<v Speaker 3>the Adobe Cloud, right, And so oftentimes the different applications

713
00:35:47.639 --> 00:35:50.320
<v Speaker 3>or different product teams will operate pretty independently, right, so

714
00:35:50.360 --> 00:35:52.599
<v Speaker 3>we might have different standards of different things, but we

715
00:35:52.599 --> 00:35:55.320
<v Speaker 3>actually are rolling this out when it comes to work fronts.

716
00:35:55.400 --> 00:35:57.719
<v Speaker 3>Is we've got these merger request templates in here, right,

717
00:35:58.199 --> 00:36:00.800
<v Speaker 3>and you know, at least in the teams I've worked

718
00:36:00.800 --> 00:36:04.840
<v Speaker 3>on were very strict and saying, okay, this the MR

719
00:36:05.000 --> 00:36:07.920
<v Speaker 3>does need to have tests included. So yeah, we've got

720
00:36:08.000 --> 00:36:09.960
<v Speaker 3>we've got a little bit of a success story there

721
00:36:10.000 --> 00:36:12.320
<v Speaker 3>that we've we've rolled this out and it's working well

722
00:36:12.360 --> 00:36:14.480
<v Speaker 3>so far. So things are Things are good?

723
00:36:14.760 --> 00:36:15.079
<v Speaker 2>Cool.

724
00:36:15.559 --> 00:36:19.239
<v Speaker 4>Did you build a kind of internal community around advocating

725
00:36:19.280 --> 00:36:21.519
<v Speaker 4>for that and trying to get that done like within

726
00:36:21.599 --> 00:36:22.840
<v Speaker 4>your team?

727
00:36:22.840 --> 00:36:25.239
<v Speaker 3>Sure? Yeah, So, I mean we have you know, team

728
00:36:25.280 --> 00:36:27.199
<v Speaker 3>trainings that we do, We have lunch and learns that

729
00:36:27.239 --> 00:36:29.039
<v Speaker 3>we will do as well. So you know, we've we've

730
00:36:29.039 --> 00:36:31.199
<v Speaker 3>presented this at a luncheon learn and then gone through

731
00:36:31.280 --> 00:36:34.880
<v Speaker 3>and added these merger request templates to different repos So, yeah,

732
00:36:34.920 --> 00:36:36.840
<v Speaker 3>it was it was a good a good number of

733
00:36:36.960 --> 00:36:39.920
<v Speaker 3>or a good combination of just you know, having these

734
00:36:39.920 --> 00:36:42.199
<v Speaker 3>p s as and these trainings and announcements as well

735
00:36:42.239 --> 00:36:44.559
<v Speaker 3>as you know a group of people that will go

736
00:36:44.599 --> 00:36:47.039
<v Speaker 3>in and do those things and actually enforce enforce those

737
00:36:47.079 --> 00:36:48.639
<v Speaker 3>rules and principles. Awesome.

738
00:36:49.199 --> 00:36:54.960
<v Speaker 1>So in actually, so, at what stage in your career

739
00:36:55.039 --> 00:36:58.320
<v Speaker 1>did this become important to you? Would would you say

740
00:36:58.400 --> 00:37:01.199
<v Speaker 1>it was when you were when you becoming a mid

741
00:37:01.320 --> 00:37:05.159
<v Speaker 1>to senior or jus mid. At what stage did you say, Okay,

742
00:37:05.159 --> 00:37:08.079
<v Speaker 1>you know what, actually clean code is actually something for

743
00:37:08.239 --> 00:37:11.159
<v Speaker 1>me now which is very important as opposed to I

744
00:37:11.199 --> 00:37:14.079
<v Speaker 1>know it's good, but it's not that important to me

745
00:37:14.719 --> 00:37:16.840
<v Speaker 1>at the moment.

746
00:37:17.079 --> 00:37:20.440
<v Speaker 3>Yeah, that's a good question. Probably in the more yeah,

747
00:37:20.559 --> 00:37:23.280
<v Speaker 3>mid level range, I would say, I guess I'm starting

748
00:37:23.320 --> 00:37:26.679
<v Speaker 3>to start to care more about the clean code honestly,

749
00:37:26.760 --> 00:37:29.920
<v Speaker 3>as as a junior engineer, you know, at least for me,

750
00:37:30.119 --> 00:37:32.320
<v Speaker 3>like I'm I'm just trying to get my work done,

751
00:37:32.360 --> 00:37:35.280
<v Speaker 3>you know, like I'm early in I'm early in the

752
00:37:35.519 --> 00:37:37.760
<v Speaker 3>or new in the field and early in my career,

753
00:37:37.880 --> 00:37:41.280
<v Speaker 3>and you know, maybe I'm struggling to even do whatever

754
00:37:41.400 --> 00:37:44.440
<v Speaker 3>task is asked with me, right. And so I I

755
00:37:44.519 --> 00:37:47.480
<v Speaker 3>get this task done, I have this feature working, and

756
00:37:47.519 --> 00:37:49.119
<v Speaker 3>I go check in the code right. And that's a

757
00:37:49.159 --> 00:37:51.360
<v Speaker 3>mistake that a lot of us make, you know, whether

758
00:37:51.400 --> 00:37:54.880
<v Speaker 3>we're junior, mid or senior or whatever is that we

759
00:37:54.960 --> 00:37:59.159
<v Speaker 3>get the code working and then we stop, right. But

760
00:37:59.239 --> 00:38:01.480
<v Speaker 3>that's that's like just the first tap, right, So we

761
00:38:01.480 --> 00:38:04.440
<v Speaker 3>should first get the code working and then we should,

762
00:38:04.760 --> 00:38:06.840
<v Speaker 3>you know, make sure it's it's nice and clean, so

763
00:38:06.880 --> 00:38:09.679
<v Speaker 3>we could do whatever factoring we need. Maybe we've written

764
00:38:09.679 --> 00:38:12.719
<v Speaker 3>tests already because we're doing TVD, or maybe we're going

765
00:38:12.760 --> 00:38:15.840
<v Speaker 3>to write test now after the fact, and then after that,

766
00:38:15.920 --> 00:38:19.320
<v Speaker 3>maybe we do performance testing and make it more performance right.

767
00:38:19.360 --> 00:38:21.199
<v Speaker 3>So I'm trying to remember who said this. I think

768
00:38:21.199 --> 00:38:23.199
<v Speaker 3>it was Kent back again, but it's like make it

769
00:38:23.559 --> 00:38:26.320
<v Speaker 3>what does it, make it work, make it right, make

770
00:38:26.400 --> 00:38:29.039
<v Speaker 3>it fast, something like that. Anyway, So just like not

771
00:38:29.119 --> 00:38:31.760
<v Speaker 3>stopping right in that process. And sorry, I feel like

772
00:38:31.800 --> 00:38:34.639
<v Speaker 3>I'm going off on a tangent here from your original question.

773
00:38:36.360 --> 00:38:40.119
<v Speaker 1>Yeah, because I'm It's something I find myself thinking about

774
00:38:40.119 --> 00:38:42.679
<v Speaker 1>a lot more. Is when I started off a key,

775
00:38:42.960 --> 00:38:47.079
<v Speaker 1>I also have a nontep backgun, right. So I came

776
00:38:47.159 --> 00:38:51.360
<v Speaker 1>from journalism and learned how to program, got pot my

777
00:38:51.360 --> 00:38:54.639
<v Speaker 1>first job, and I was just Okay, I have to

778
00:38:54.639 --> 00:38:56.480
<v Speaker 1>get this working. I have to understand how that I

779
00:38:56.519 --> 00:38:58.840
<v Speaker 1>have to work out what you're doing in the first place, right,

780
00:38:58.880 --> 00:39:02.239
<v Speaker 1>And it works, I'm happy and move on. And then now,

781
00:39:02.639 --> 00:39:05.440
<v Speaker 1>as I've been in the field for for years now,

782
00:39:05.440 --> 00:39:08.760
<v Speaker 1>I'm now going to think more about, Okay, what can

783
00:39:08.800 --> 00:39:12.079
<v Speaker 1>I do to make the team better or to make

784
00:39:12.119 --> 00:39:15.039
<v Speaker 1>the team perform better? Right, And it's these things like

785
00:39:15.159 --> 00:39:19.599
<v Speaker 1>clean code, which are not very easy to measure, right,

786
00:39:19.719 --> 00:39:23.440
<v Speaker 1>you can measure how clean code maybe helps the team,

787
00:39:23.920 --> 00:39:26.840
<v Speaker 1>but it's intangible, and you know it's there because you

788
00:39:26.880 --> 00:39:30.440
<v Speaker 1>then see over time that the code bases become cleaner

789
00:39:30.519 --> 00:39:33.119
<v Speaker 1>to work on. It's easy to write, to write bog fixes,

790
00:39:33.199 --> 00:39:36.519
<v Speaker 1>to write features because a new different company jump in

791
00:39:36.800 --> 00:39:40.239
<v Speaker 1>and then a short amount of time kind of get upscratched.

792
00:39:40.239 --> 00:39:43.559
<v Speaker 1>So yeah, I think it's one of those things where

793
00:39:44.119 --> 00:39:47.400
<v Speaker 1>it takes time to actually begin to appreciate just the

794
00:39:47.480 --> 00:39:50.800
<v Speaker 1>impact having clean code can do on your team, your

795
00:39:50.840 --> 00:39:54.679
<v Speaker 1>company and you you as a deb as well. And

796
00:39:54.719 --> 00:39:57.559
<v Speaker 1>I think, yeah, it's a thing where I think you

797
00:39:57.599 --> 00:39:58.880
<v Speaker 1>need to make I think you need to have made

798
00:39:58.880 --> 00:40:02.920
<v Speaker 1>these mistakes before and listen code which is a mess, right,

799
00:40:02.960 --> 00:40:06.760
<v Speaker 1>and then trying to go back and unpick it. It's okay, now,

800
00:40:06.800 --> 00:40:09.599
<v Speaker 1>I see why my clean code is is needed as

801
00:40:09.639 --> 00:40:12.079
<v Speaker 1>opposed to trying to jump into it.

802
00:40:13.079 --> 00:40:16.320
<v Speaker 3>Yeah, absolutely, Like that experience is pretty key, right, like

803
00:40:16.760 --> 00:40:19.599
<v Speaker 3>having worked at places just going back to testing again,

804
00:40:19.719 --> 00:40:22.320
<v Speaker 3>like having worked at places that don't have tests versus

805
00:40:22.360 --> 00:40:25.559
<v Speaker 3>places that have very good test coverage and a good principle.

806
00:40:25.599 --> 00:40:28.239
<v Speaker 3>Like there's a huge difference, right of you know, having

807
00:40:28.280 --> 00:40:30.440
<v Speaker 3>actually been in that situation of Okay, I need to

808
00:40:30.440 --> 00:40:33.800
<v Speaker 3>go modify or authentication code, Like okay, cross my fingers,

809
00:40:33.840 --> 00:40:36.320
<v Speaker 3>I'm going to go merge this, like I help it

810
00:40:36.400 --> 00:40:40.000
<v Speaker 3>works right as opposed to my tests are passing, I

811
00:40:40.039 --> 00:40:42.480
<v Speaker 3>feel good about this, let's submit the code. So like

812
00:40:42.920 --> 00:40:45.719
<v Speaker 3>just having been there and having experienced that like helps

813
00:40:45.719 --> 00:40:48.400
<v Speaker 3>a ton of Like, man, there's a huge difference just

814
00:40:48.480 --> 00:40:51.280
<v Speaker 3>in my developer experience, and that you know, makes a

815
00:40:51.320 --> 00:40:53.760
<v Speaker 3>difference for all of the engineers that are working at

816
00:40:53.800 --> 00:40:54.480
<v Speaker 3>the company too.

817
00:40:54.800 --> 00:40:55.400
<v Speaker 2>Yeah.

818
00:40:55.519 --> 00:40:56.800
<v Speaker 4>Yeah, I think there's a lot of folks who are

819
00:40:56.840 --> 00:40:59.400
<v Speaker 4>looking for a path to go from like junior to

820
00:40:59.599 --> 00:41:04.679
<v Speaker 4>senior or the team lead up that line, and one

821
00:41:04.679 --> 00:41:06.400
<v Speaker 4>of the things that I think is really important is

822
00:41:06.440 --> 00:41:09.880
<v Speaker 4>having a care about the code quality and putting in

823
00:41:09.920 --> 00:41:12.239
<v Speaker 4>that time and up leveling the rest of the team.

824
00:41:12.519 --> 00:41:17.239
<v Speaker 3>Yeah. Absolutely, I mean I know that's specifically something you

825
00:41:17.440 --> 00:41:19.480
<v Speaker 3>that a lot of companies look for in it more

826
00:41:19.519 --> 00:41:22.440
<v Speaker 3>of a senior engineer type role is not just are

827
00:41:22.480 --> 00:41:26.000
<v Speaker 3>you an efficient individual contributor, but can you help make

828
00:41:26.039 --> 00:41:27.199
<v Speaker 3>other people better as well?

829
00:41:27.280 --> 00:41:27.440
<v Speaker 2>Right?

830
00:41:27.639 --> 00:41:30.079
<v Speaker 3>Can you mentionor those people with less experience, can you

831
00:41:30.119 --> 00:41:33.119
<v Speaker 3>help them also have that same appreciation, right, that same

832
00:41:33.119 --> 00:41:36.519
<v Speaker 3>appreciation for clean code and for testing and taking pride

833
00:41:36.559 --> 00:41:38.880
<v Speaker 3>in their work is a huge part of it, that venturing.

834
00:41:39.199 --> 00:41:41.880
<v Speaker 1>So just kind of come to the kind of end

835
00:41:42.079 --> 00:41:45.800
<v Speaker 1>of the discussion, I'd like to touch upon the fact that

836
00:41:45.840 --> 00:41:48.360
<v Speaker 1>you've written quite a lot of articles and looking at

837
00:41:48.360 --> 00:41:50.400
<v Speaker 1>your website, have got a lot of kind apps you

838
00:41:50.440 --> 00:41:54.280
<v Speaker 1>could have built. So clearly you have I don't know

839
00:41:54.280 --> 00:41:57.679
<v Speaker 1>how you do it, but clearly you have time to

840
00:41:57.920 --> 00:42:00.599
<v Speaker 1>produce a lot. So I guess the question is, and

841
00:42:00.679 --> 00:42:03.719
<v Speaker 1>as somebody also who has written a few articles there

842
00:42:03.719 --> 00:42:08.199
<v Speaker 1>and there, what are your kind of tricks for being productive?

843
00:42:08.280 --> 00:42:08.440
<v Speaker 3>Right?

844
00:42:08.719 --> 00:42:12.119
<v Speaker 1>So when it comes to penning your articles, how do

845
00:42:12.159 --> 00:42:13.800
<v Speaker 1>you do it? Is there kind of a workflow you

846
00:42:13.840 --> 00:42:20.719
<v Speaker 1>have for research, writing, editing, publication promotion, right, and then

847
00:42:20.760 --> 00:42:23.360
<v Speaker 1>also looking at all these kind of demops to go

848
00:42:23.440 --> 00:42:25.800
<v Speaker 1>on your website, how do you also do that as well?

849
00:42:25.880 --> 00:42:28.239
<v Speaker 1>Do you have a workflow where you're able to kind

850
00:42:28.239 --> 00:42:31.039
<v Speaker 1>of push out and pump out all these apps and content,

851
00:42:31.039 --> 00:42:33.719
<v Speaker 1>which obviously helps you as a programm right to learn

852
00:42:33.719 --> 00:42:36.880
<v Speaker 1>new skills, shopping your skills, and give you stuff for

853
00:42:36.960 --> 00:42:37.800
<v Speaker 1>your articles as well.

854
00:42:38.199 --> 00:42:40.440
<v Speaker 3>Yeah, so a lot to unpack in there. So let's

855
00:42:40.440 --> 00:42:42.920
<v Speaker 3>start first with the demo apps and stuff.

856
00:42:43.039 --> 00:42:44.559
<v Speaker 1>So yeah, so.

857
00:42:44.559 --> 00:42:47.320
<v Speaker 3>Yeah, I've built a decent amount of you know, little

858
00:42:47.559 --> 00:42:50.920
<v Speaker 3>side projects and pet projects. I think on my portfolio

859
00:42:51.000 --> 00:42:54.360
<v Speaker 3>I probably have I don't know, seventy or eighty projects

860
00:42:54.360 --> 00:42:57.320
<v Speaker 3>on there, some demo apps and whatnot. A good chunk

861
00:42:57.360 --> 00:42:59.880
<v Speaker 3>of those from when I was first learning to code.

862
00:43:00.239 --> 00:43:04.519
<v Speaker 3>So that was one of my strategies of actually teaching myself.

863
00:43:04.559 --> 00:43:07.840
<v Speaker 3>So again, I had that statistics degree, and I for

864
00:43:07.920 --> 00:43:10.719
<v Speaker 3>the most part, I was generally self taught when it

865
00:43:10.760 --> 00:43:13.599
<v Speaker 3>comes to coding. So I did a lot of online

866
00:43:13.639 --> 00:43:16.840
<v Speaker 3>courses and you know, watched plural site videos and did

867
00:43:16.880 --> 00:43:20.000
<v Speaker 3>free code camp projects and code Academy courses and all

868
00:43:20.000 --> 00:43:23.360
<v Speaker 3>that good stuff. And so really the best way that

869
00:43:23.400 --> 00:43:25.960
<v Speaker 3>I find that I learned is by doing. And so

870
00:43:26.119 --> 00:43:28.119
<v Speaker 3>oftentimes it was just like, Okay, I want to figure

871
00:43:28.159 --> 00:43:29.840
<v Speaker 3>out how this thing works, so we're going to build

872
00:43:29.840 --> 00:43:32.960
<v Speaker 3>an app, right, as opposed to just reading a tutorial

873
00:43:33.039 --> 00:43:35.480
<v Speaker 3>or watching a video, we're going to actually do this, right,

874
00:43:35.519 --> 00:43:37.880
<v Speaker 3>So now I have the hands on experience of how

875
00:43:37.880 --> 00:43:41.239
<v Speaker 3>I can, you know, go build this feature or work

876
00:43:41.280 --> 00:43:43.000
<v Speaker 3>with this new technology. Right. So a lot of them

877
00:43:43.000 --> 00:43:47.119
<v Speaker 3>were built just as like a personal learning experience and

878
00:43:47.159 --> 00:43:48.920
<v Speaker 3>then also to build up that portfolio.

879
00:43:49.000 --> 00:43:49.159
<v Speaker 2>Right.

880
00:43:49.239 --> 00:43:51.280
<v Speaker 3>So again not having a CS degree, I feel like,

881
00:43:51.760 --> 00:43:54.400
<v Speaker 3>especially if we're starting in your career, you have to

882
00:43:54.880 --> 00:43:58.360
<v Speaker 3>almost kind of work a little harder to prove yourself right.

883
00:43:58.440 --> 00:44:01.360
<v Speaker 3>Of I don't have this degree, but I can code, right,

884
00:44:01.440 --> 00:44:03.960
<v Speaker 3>I can do it. And so having that portfolio to

885
00:44:04.000 --> 00:44:05.880
<v Speaker 3>point to and say like, look, I built this. It's

886
00:44:06.000 --> 00:44:08.480
<v Speaker 3>it's a full stack app, and it has authentication and

887
00:44:08.519 --> 00:44:10.920
<v Speaker 3>it does all these things right, sort of provides that

888
00:44:11.039 --> 00:44:14.559
<v Speaker 3>proof that hopefully at least have some understanding of what

889
00:44:14.599 --> 00:44:18.559
<v Speaker 3>you're talking about and some level of expertise that was,

890
00:44:18.679 --> 00:44:19.840
<v Speaker 3>you know, a while ago when I was when I

891
00:44:19.880 --> 00:44:22.079
<v Speaker 3>was first getting started. Nowadays, a lot of the apps

892
00:44:22.079 --> 00:44:26.760
<v Speaker 3>that I'm creating are honestly for the articles, so maybe

893
00:44:26.760 --> 00:44:30.119
<v Speaker 3>I'll be working on some sort of proof of concept.

894
00:44:30.760 --> 00:44:32.440
<v Speaker 3>A few of my last ones in there, I think

895
00:44:32.480 --> 00:44:35.960
<v Speaker 3>we're like graph ql focused. So I did one of

896
00:44:36.039 --> 00:44:39.320
<v Speaker 3>like implementing a graph ql API on top of an

897
00:44:39.360 --> 00:44:41.960
<v Speaker 3>existing rest API. And then I didn't just want like

898
00:44:41.960 --> 00:44:44.119
<v Speaker 3>a boring, you know, to do app app, So I

899
00:44:44.159 --> 00:44:48.480
<v Speaker 3>made a dad joke database and anyway, so it fetches

900
00:44:48.519 --> 00:44:51.400
<v Speaker 3>the dad jokes and has a graph QO layer implemented.

901
00:44:51.840 --> 00:44:54.360
<v Speaker 3>But so anyway, So so oftentimes like getting more into

902
00:44:54.360 --> 00:44:57.320
<v Speaker 3>these articles. Now, I've been writing for about a year

903
00:44:57.320 --> 00:44:59.960
<v Speaker 3>and a half, and so oftentimes I'll be writing about,

904
00:45:00.199 --> 00:45:02.199
<v Speaker 3>you know, either things that I'm passionate about, so like

905
00:45:02.280 --> 00:45:05.320
<v Speaker 3>these articles with the React clean code and clean code

906
00:45:05.320 --> 00:45:08.280
<v Speaker 3>if unit tests, or things that I'm you know, just

907
00:45:08.360 --> 00:45:11.000
<v Speaker 3>interested in and learning about. So I've been you know,

908
00:45:11.119 --> 00:45:14.079
<v Speaker 3>studying graph ql a lot lately, and so as I'm

909
00:45:14.599 --> 00:45:16.800
<v Speaker 3>as I'm preparing to write these articles, I like to

910
00:45:16.840 --> 00:45:18.639
<v Speaker 3>have a demo app to show people how we can

911
00:45:18.679 --> 00:45:21.360
<v Speaker 3>actually use it. And so creating these apps is more

912
00:45:21.480 --> 00:45:25.679
<v Speaker 3>just the preparation for the article of like, Okay, how

913
00:45:25.719 --> 00:45:28.119
<v Speaker 3>could we solve the problem of if we have an

914
00:45:28.159 --> 00:45:30.239
<v Speaker 3>existing rest API and we want to move over to

915
00:45:30.280 --> 00:45:34.039
<v Speaker 3>graph ql, is it possible to kind of have them

916
00:45:34.079 --> 00:45:36.519
<v Speaker 3>running side by side as opposed to just cutting over

917
00:45:36.920 --> 00:45:38.679
<v Speaker 3>And if so, how would you do that? And so

918
00:45:38.719 --> 00:45:41.880
<v Speaker 3>the the demo apps sort of became the exploration of

919
00:45:41.920 --> 00:45:44.800
<v Speaker 3>that sort of problem, and then the article then is

920
00:45:44.880 --> 00:45:48.079
<v Speaker 3>just an overview of Okay, what was the problem, how

921
00:45:48.079 --> 00:45:49.760
<v Speaker 3>did we tackle it, and what did we learn from this?

922
00:45:50.199 --> 00:45:52.320
<v Speaker 3>So really they kind of just go hand in hand

923
00:45:52.320 --> 00:45:53.679
<v Speaker 3>to support each other at this point.

924
00:45:54.000 --> 00:45:57.440
<v Speaker 4>Yeah, absolutely agree with all of that. And when when

925
00:45:57.440 --> 00:46:00.800
<v Speaker 4>you talked about doing your own projects to learn stuff,

926
00:46:00.800 --> 00:46:03.719
<v Speaker 4>that is just absolutely so critical. I mean it's not

927
00:46:03.840 --> 00:46:07.039
<v Speaker 4>just you mentioned proof of expertise, and it's not just

928
00:46:07.039 --> 00:46:09.000
<v Speaker 4>to others, it's to yourself.

929
00:46:09.239 --> 00:46:09.440
<v Speaker 2>Right.

930
00:46:10.079 --> 00:46:12.440
<v Speaker 4>You hear a lot about imposter syndrome and people not

931
00:46:12.519 --> 00:46:15.039
<v Speaker 4>feeling like they you know, they're they've.

932
00:46:14.800 --> 00:46:15.559
<v Speaker 2>Got the skills.

933
00:46:15.920 --> 00:46:18.039
<v Speaker 4>Best way to make sure that you feel like you

934
00:46:18.079 --> 00:46:20.159
<v Speaker 4>have those skills is to try it out and do

935
00:46:20.280 --> 00:46:23.039
<v Speaker 4>it and make stuff. And it gives you a lot

936
00:46:23.079 --> 00:46:25.880
<v Speaker 4>of pride as well. And a lot of people ask me, hey,

937
00:46:25.920 --> 00:46:28.719
<v Speaker 4>you know, how do I become a reactive and it's like, well,

938
00:46:28.760 --> 00:46:31.400
<v Speaker 4>you can watch a lot of videos, but you just

939
00:46:31.440 --> 00:46:33.559
<v Speaker 4>gotta do it. I mean, you can watch videos on

940
00:46:33.599 --> 00:46:35.719
<v Speaker 4>AX juggling, it doesn't make you an AX juggler. And

941
00:46:35.760 --> 00:46:39.199
<v Speaker 4>I wouldn't try juggling access after just watching some videos

942
00:46:39.239 --> 00:46:41.119
<v Speaker 4>on it. You know, you gotta go out there, you

943
00:46:41.119 --> 00:46:43.880
<v Speaker 4>gotta try stuff and build stuff, and then you'll get

944
00:46:43.880 --> 00:46:46.360
<v Speaker 4>that confidence and you'll beat that imposter syndrome and you'll

945
00:46:46.360 --> 00:46:48.559
<v Speaker 4>feel like you belong in the business.

946
00:46:48.559 --> 00:46:50.079
<v Speaker 3>Definitely awesome.

947
00:46:50.280 --> 00:46:53.440
<v Speaker 1>So unless there's anything else you fool, maybe we should

948
00:46:53.480 --> 00:46:54.800
<v Speaker 1>touch upon who can move to picks?

949
00:46:54.840 --> 00:46:56.760
<v Speaker 3>Now, sure, let's go to picks.

950
00:46:57.159 --> 00:46:57.400
<v Speaker 2>Cool.

951
00:46:57.480 --> 00:47:00.920
<v Speaker 1>So basically picks just basically we just though choose like

952
00:47:00.960 --> 00:47:03.280
<v Speaker 1>an article podcast to show whatever that we were wanting

953
00:47:03.280 --> 00:47:06.400
<v Speaker 1>to share. So I can start off with my pick,

954
00:47:06.480 --> 00:47:10.039
<v Speaker 1>which actually is is actually based on the fact that

955
00:47:10.079 --> 00:47:12.679
<v Speaker 1>I think I said earlier. I've been on the annually

956
00:47:12.760 --> 00:47:14.639
<v Speaker 1>for the last week in a bit and I've not

957
00:47:14.800 --> 00:47:17.519
<v Speaker 1>been plugged in as I normally am, and it's quite

958
00:47:17.519 --> 00:47:20.760
<v Speaker 1>amasing just to have that refreshing time away from the

959
00:47:20.760 --> 00:47:24.639
<v Speaker 1>screens and Twitter and plugging and all that all that stuff.

960
00:47:24.679 --> 00:47:27.360
<v Speaker 1>And so that's my pick that if you can try

961
00:47:27.400 --> 00:47:29.239
<v Speaker 1>and at least like find them maybe a week or

962
00:47:29.280 --> 00:47:33.400
<v Speaker 1>so where you just put one down, just go outside

963
00:47:33.480 --> 00:47:36.599
<v Speaker 1>or whatever and just give your brain the research. And

964
00:47:36.639 --> 00:47:37.440
<v Speaker 1>I'm quite enjoyed that.

965
00:47:37.599 --> 00:47:38.639
<v Speaker 2>So I'll be.

966
00:47:38.559 --> 00:47:40.800
<v Speaker 1>Definitely trying to do to do more that than going

967
00:47:40.800 --> 00:47:43.400
<v Speaker 1>forward let's go to Jack.

968
00:47:43.840 --> 00:47:47.119
<v Speaker 2>Yeah, definitely take a take a week and or just.

969
00:47:47.119 --> 00:47:49.280
<v Speaker 4>Take a day, but you don't have to code seven

970
00:47:49.360 --> 00:47:51.000
<v Speaker 4>days a week, code code six.

971
00:47:51.079 --> 00:47:54.079
<v Speaker 2>Take that Saturday, go for a hike, clear your mind.

972
00:47:54.840 --> 00:47:58.039
<v Speaker 4>My pick for this week would be Joe tie It's

973
00:47:58.159 --> 00:48:02.440
<v Speaker 4>a state manager from Daishi Kato and it's a re

974
00:48:02.519 --> 00:48:06.840
<v Speaker 4>implementation of Facebook's Recoil and it's really interesting. It's an

975
00:48:06.880 --> 00:48:10.320
<v Speaker 4>interesting different take on the state management. By creating, you

976
00:48:10.440 --> 00:48:13.840
<v Speaker 4>can create these little atoms and they're interrelated and then

977
00:48:13.880 --> 00:48:17.000
<v Speaker 4>when one changes, the other update. And what's really cool

978
00:48:17.039 --> 00:48:19.880
<v Speaker 4>about Joe Time particular is he's actually integrated it recently

979
00:48:19.920 --> 00:48:22.840
<v Speaker 4>with immer, which is an immutable library, so you can

980
00:48:22.920 --> 00:48:25.719
<v Speaker 4>have an immutable atom, and you can have an ex

981
00:48:25.840 --> 00:48:27.679
<v Speaker 4>state atom, which means you can have an atom that

982
00:48:27.719 --> 00:48:29.239
<v Speaker 4>actually has any little state.

983
00:48:29.119 --> 00:48:30.119
<v Speaker 2>Machine in it.

984
00:48:30.119 --> 00:48:33.280
<v Speaker 4>It's very very cool stuff. So I'm really excited about

985
00:48:33.320 --> 00:48:36.800
<v Speaker 4>all of Daishi Kato's state managers, but Joe Time Particular

986
00:48:36.880 --> 00:48:38.800
<v Speaker 4>is really pretty cool, awesome.

987
00:48:39.199 --> 00:48:40.719
<v Speaker 1>And then Tie up.

988
00:48:40.960 --> 00:48:44.639
<v Speaker 3>Yeah, my pick. This will be totally unrelated, but I'm

989
00:48:44.679 --> 00:48:48.480
<v Speaker 3>currently reading a book called Being Wrong by Catherine Schultz.

990
00:48:49.599 --> 00:48:51.760
<v Speaker 3>I'm about halfway into it right now, but it has

991
00:48:51.840 --> 00:48:55.920
<v Speaker 3>been excellent read so far. It is all about essentially

992
00:48:55.960 --> 00:48:58.920
<v Speaker 3>the experience of being wrong. How you know, all most

993
00:48:58.960 --> 00:49:01.760
<v Speaker 3>of us have a a pretty general idea that we

994
00:49:01.840 --> 00:49:04.280
<v Speaker 3>are we are right most of the time. Right, if

995
00:49:04.280 --> 00:49:07.639
<v Speaker 3>we didn't believe the things we believe, we wouldn't believe

996
00:49:07.679 --> 00:49:10.920
<v Speaker 3>them by definition right, And yet we're wrong all the time.

997
00:49:11.119 --> 00:49:13.480
<v Speaker 3>And it's it's been a really fascinating read, just into

998
00:49:14.000 --> 00:49:17.079
<v Speaker 3>the experience of being wrong and how we can deal

999
00:49:17.119 --> 00:49:20.039
<v Speaker 3>with it a lot more like typically when when we're

1000
00:49:20.039 --> 00:49:23.239
<v Speaker 3>wrong about something, we tend to feel upset or embarrassed

1001
00:49:23.320 --> 00:49:27.239
<v Speaker 3>or angry at being proven wrong. But her whole book is,

1002
00:49:27.280 --> 00:49:30.760
<v Speaker 3>you know, more about embracing, embracing being wrong and how

1003
00:49:30.800 --> 00:49:32.599
<v Speaker 3>we can learn from it. So it's been it's been

1004
00:49:32.599 --> 00:49:33.519
<v Speaker 3>a fascinating read.

1005
00:49:33.760 --> 00:49:35.719
<v Speaker 4>That's what being a pargmer is all about. Right, We're

1006
00:49:35.760 --> 00:49:39.519
<v Speaker 4>all we're very wrong until it's right, you know, until

1007
00:49:39.519 --> 00:49:41.559
<v Speaker 4>it works. Everything is wrong up until then, So you

1008
00:49:41.639 --> 00:49:45.000
<v Speaker 4>got to be comfortable with being wrong of the time.

1009
00:49:45.519 --> 00:49:49.039
<v Speaker 1>Yeah, I mean, I also speakle programming is basically being

1010
00:49:49.079 --> 00:49:53.119
<v Speaker 1>paid to work to work that out right.

1011
00:49:53.280 --> 00:49:56.760
<v Speaker 2>Exactly, you know I think paid well, yes.

1012
00:49:56.599 --> 00:50:00.559
<v Speaker 1>Yeah, and for me when that actually clicks. That essentially

1013
00:50:01.119 --> 00:50:04.480
<v Speaker 1>I'm not. I'm being hired to know things. They want

1014
00:50:04.639 --> 00:50:07.519
<v Speaker 1>me to use what I've learned to find out the

1015
00:50:07.519 --> 00:50:11.000
<v Speaker 1>best solution to whatever they working on right and for

1016
00:50:11.079 --> 00:50:13.800
<v Speaker 1>me that when that clicked, it changed how I approached

1017
00:50:13.840 --> 00:50:16.840
<v Speaker 1>my work. I was now less scared of not knowing

1018
00:50:17.239 --> 00:50:19.079
<v Speaker 1>what I was doing, and it can be being more

1019
00:50:19.119 --> 00:50:20.920
<v Speaker 1>open to you know what, this guts to be wrong,

1020
00:50:21.119 --> 00:50:24.880
<v Speaker 1>but that's fine because I'll be paid for actually saying, Okay,

1021
00:50:24.920 --> 00:50:27.039
<v Speaker 1>this is wrong, but this is how you fix it,

1022
00:50:27.360 --> 00:50:30.800
<v Speaker 1>as opposed to going in thinking okay, every single thing

1023
00:50:30.840 --> 00:50:34.360
<v Speaker 1>I do first time right is correct, which never never

1024
00:50:34.400 --> 00:50:35.840
<v Speaker 1>happens in our industry.

1025
00:50:36.320 --> 00:50:39.599
<v Speaker 3>Absolutely, there's a lot of value in having that humility

1026
00:50:39.719 --> 00:50:42.639
<v Speaker 3>to to not think you're always right, that you're you're

1027
00:50:42.639 --> 00:50:45.760
<v Speaker 3>okay with being wrong and maybe being proved wrong in

1028
00:50:45.840 --> 00:50:48.960
<v Speaker 3>the hopes of eventually getting it right right as a team,

1029
00:50:49.280 --> 00:50:51.239
<v Speaker 3>as opposed to just always being right.

1030
00:50:51.519 --> 00:50:53.719
<v Speaker 4>It's a great opportunity. You know, when you think about

1031
00:50:53.760 --> 00:50:56.760
<v Speaker 4>it like you're that means that you're learning and that's

1032
00:50:56.760 --> 00:50:57.320
<v Speaker 4>a great thing.

1033
00:50:58.079 --> 00:51:01.039
<v Speaker 1>Awesome. So I'm trying of how can people get in

1034
00:51:01.079 --> 00:51:03.079
<v Speaker 1>touch with you if they want to say hello or

1035
00:51:03.320 --> 00:51:05.639
<v Speaker 1>asking you any more questions about clean Code.

1036
00:51:05.960 --> 00:51:08.400
<v Speaker 3>Yeah, if you want to check out any of my articles,

1037
00:51:08.880 --> 00:51:12.000
<v Speaker 3>I'm fairly active on Medium and dev I also read

1038
00:51:12.039 --> 00:51:14.599
<v Speaker 3>a lot on d Zone and Hafernoons, so feel free

1039
00:51:14.599 --> 00:51:16.760
<v Speaker 3>to check out anything there. If you want to get

1040
00:51:16.760 --> 00:51:18.679
<v Speaker 3>in touch with me, you can find me on LinkedIn.

1041
00:51:19.400 --> 00:51:21.960
<v Speaker 3>I think I'm the only Tyler Hawkins that works out Adobe,

1042
00:51:22.039 --> 00:51:26.800
<v Speaker 3>so it should be able to I'm on Twitter as well.

1043
00:51:26.960 --> 00:51:30.440
<v Speaker 3>I honestly don't don't tweet that much. I'm not super active,

1044
00:51:30.519 --> 00:51:32.960
<v Speaker 3>but feel free to chat with me there if you'd

1045
00:51:33.039 --> 00:51:33.559
<v Speaker 3>like as well.

1046
00:51:33.719 --> 00:51:36.639
<v Speaker 1>Awesome. So yeah, I'll post the links to your verious

1047
00:51:36.639 --> 00:51:40.119
<v Speaker 1>social profiles on the guest notes. So yeah, that's a

1048
00:51:40.159 --> 00:51:42.880
<v Speaker 1>little beat so, but thank you so much for today

1049
00:51:42.920 --> 00:51:45.639
<v Speaker 1>til it's moody, informative. Thank you for your time, and

1050
00:51:45.719 --> 00:51:48.360
<v Speaker 1>I'm definitely going to be going back to your clean

1051
00:51:48.360 --> 00:51:51.719
<v Speaker 1>Code article and try to clean one or two more gems.

1052
00:51:51.639 --> 00:51:54.400
<v Speaker 2>And episodely, thank you for sharing. That was great.

1053
00:51:54.599 --> 00:51:56.119
<v Speaker 3>Yeah, thanks for having me. It's been fun.

1054
00:51:57.039 --> 00:52:00.840
<v Speaker 1>Awesome. So that's over today's show. Thank you, Sumpch and

1055
00:52:00.920 --> 00:52:02.199
<v Speaker 1>I'm seeing you next time. Thank you.
