1 00:00:16,890 --> 00:00:18,439 SARON YITBAREK: So, hello. My name is Saron. 2 00:00:18,439 --> 00:00:20,580 Thank you guys so much for coming to my talk. 3 00:00:20,580 --> 00:00:23,009 I'm really, really excited to be here. 4 00:00:23,009 --> 00:00:26,039 And as you can tell from the title of this talk, 5 00:00:26,039 --> 00:00:28,169 grammar is very important to me. 6 00:00:28,169 --> 00:00:30,390 So, before we begin, I want to start off 7 00:00:30,390 --> 00:00:34,000 by telling you a story. A year ago today, 8 00:00:34,000 --> 00:00:36,769 I was not a programmer. This is a, a 9 00:00:36,769 --> 00:00:38,750 really big confession that I'm sharing with you. A 10 00:00:38,750 --> 00:00:43,409 year ago today, I was this chick. I worked 11 00:00:43,409 --> 00:00:47,320 at tech startups. I did business development, sales, marketing. 12 00:00:47,320 --> 00:00:50,170 All of those non-technical roles. And I loved it. 13 00:00:50,170 --> 00:00:51,430 If you've ever worked at a tech start up, 14 00:00:51,430 --> 00:00:53,649 the best part is telling other people that you 15 00:00:53,649 --> 00:00:55,760 work at a tech start up, because they instantly 16 00:00:55,760 --> 00:00:57,940 think you're awesome and cool because you are. 17 00:00:57,940 --> 00:01:01,100 But I realized, over time, after that honeymoon phase 18 00:01:01,100 --> 00:01:04,959 was over, that my biggest skill, the best thing 19 00:01:04,959 --> 00:01:07,700 I had to offer my company, was being able 20 00:01:07,700 --> 00:01:11,350 to talk. And that didn't seem very valuable. And 21 00:01:11,350 --> 00:01:13,670 I was always surrounded by programmers. By these tech 22 00:01:13,670 --> 00:01:17,530 people who could build beautiful, powerful things. And so 23 00:01:17,530 --> 00:01:20,070 I found myself always creeping on them and looking 24 00:01:20,070 --> 00:01:21,920 at what they did and feeling like what they 25 00:01:21,920 --> 00:01:24,090 did was so much cooler and so much more 26 00:01:24,090 --> 00:01:26,369 interesting than anything I could ever do. 27 00:01:26,369 --> 00:01:29,310 So, I quit my job, I started learning how 28 00:01:29,310 --> 00:01:31,180 to code. I applied and got accepted to the 29 00:01:31,180 --> 00:01:33,740 Flat Iron school, which is a three month programming 30 00:01:33,740 --> 00:01:37,140 boot camp. And when we graduated, I was so 31 00:01:37,140 --> 00:01:39,390 excited. I could finally build stuff. I could make 32 00:01:39,390 --> 00:01:41,909 stuff. I was valuable. I could be a contributing 33 00:01:41,909 --> 00:01:45,799 member to society, as my mother tells me. 34 00:01:45,799 --> 00:01:48,520 And this is actually very important. One thing they 35 00:01:48,520 --> 00:01:50,700 don't tell you when you graduate from a programming 36 00:01:50,700 --> 00:01:52,340 boot camp is that you have to click your 37 00:01:52,340 --> 00:01:55,500 heels and hold up a keyboard, otherwise it's not 38 00:01:55,500 --> 00:01:57,229 official. 39 00:01:57,229 --> 00:01:59,350 So I was so proud. I was so excited. 40 00:01:59,350 --> 00:02:01,350 I learned all this stuff. I worked really, really 41 00:02:01,350 --> 00:02:04,659 hard. I'm apparently standing on a rock of code 42 00:02:04,659 --> 00:02:08,320 stuff that I conquered. But I was also painfully 43 00:02:08,320 --> 00:02:11,590 aware of all the other stuff left to learn. 44 00:02:11,590 --> 00:02:13,950 So there's the stuff I didn't know. There's the 45 00:02:13,950 --> 00:02:15,660 stuff I didn't know I didn't know. There was 46 00:02:15,660 --> 00:02:17,100 the stuff that I thought I knew, but I 47 00:02:17,100 --> 00:02:18,799 forgot, but I didn't know I'd forgotten it yet. 48 00:02:18,799 --> 00:02:20,910 So that's gonna be a nice surprise in the 49 00:02:20,910 --> 00:02:22,980 future. And then, by the way, all the stuff 50 00:02:22,980 --> 00:02:27,379 changes all the time. So welcome to programming. 51 00:02:27,379 --> 00:02:29,360 And I was painfully aware of how much of 52 00:02:29,360 --> 00:02:31,180 a novice I was. And this is the novice 53 00:02:31,180 --> 00:02:33,790 track, so hopefully this applies to you too. And 54 00:02:33,790 --> 00:02:37,349 this actually describes Dreyfus, or Dreyfus's Model of Skill 55 00:02:37,349 --> 00:02:39,980 Acquisition, that says that when you start at zero, 56 00:02:39,980 --> 00:02:42,110 when you start a new skill, you start at 57 00:02:42,110 --> 00:02:44,410 the novice level. You move up over time to 58 00:02:44,410 --> 00:02:46,930 an advanced beginner. Then you go on to confident, 59 00:02:46,930 --> 00:02:48,739 proficient, and hopefully an expert. 60 00:02:48,739 --> 00:02:51,090 And so, I don't want to be a novice. 61 00:02:51,090 --> 00:02:52,310 I don't think anyone here wants to be a 62 00:02:52,310 --> 00:02:54,480 novice. That's not fun. I want to be an 63 00:02:54,480 --> 00:02:56,170 expert. And I want that cape. That's who I 64 00:02:56,170 --> 00:02:58,930 want to be. So I started asking people and 65 00:02:58,930 --> 00:03:01,090 did some research on, how can I become an 66 00:03:01,090 --> 00:03:04,000 expert? How can I go from this poor novice 67 00:03:04,000 --> 00:03:05,830 person who kind of sort of thinks she knows 68 00:03:05,830 --> 00:03:08,450 what she's doing to, like, that cape-wearing expert. How 69 00:03:08,450 --> 00:03:09,950 do I do that? 70 00:03:09,950 --> 00:03:11,840 And the most popular answer I got was reading 71 00:03:11,840 --> 00:03:14,450 code. Which is both really helpful but also not 72 00:03:14,450 --> 00:03:16,819 very helpful. Because that leads to all these other 73 00:03:16,819 --> 00:03:18,459 questions, like, what code do I read? How often 74 00:03:18,459 --> 00:03:21,090 do I read it? And the best way to 75 00:03:21,090 --> 00:03:24,340 start an adventure is to start it with friends. 76 00:03:24,340 --> 00:03:25,920 So these are my friends. I think I drew 77 00:03:25,920 --> 00:03:29,250 them very flatteringly. And so these are some of 78 00:03:29,250 --> 00:03:31,290 my programming buddies from the Flat Iron school, and 79 00:03:31,290 --> 00:03:34,519 I got them together and I said, yo. If 80 00:03:34,519 --> 00:03:36,970 you get programming people together to start a code 81 00:03:36,970 --> 00:03:39,049 reading club, you have to start the conversation with 82 00:03:39,049 --> 00:03:41,420 yo. Otherwise it just won't work. 83 00:03:41,420 --> 00:03:46,569 So I said, yo, we should read code together. 84 00:03:46,569 --> 00:03:48,150 And so we decided that we were gonna dedicate 85 00:03:48,150 --> 00:03:52,170 one hour every single Sunday at 11 AM. By 86 00:03:52,170 --> 00:03:53,900 the way, this is a huge deal for me. 87 00:03:53,900 --> 00:03:55,680 I don't wake up before two on a weekend. 88 00:03:55,680 --> 00:03:58,540 So I'm, I'm already winning just by declaring that 89 00:03:58,540 --> 00:04:00,360 this might happen. 90 00:04:00,360 --> 00:04:01,769 And so we decided that we're gonna make this 91 00:04:01,769 --> 00:04:05,519 a regular thing. And we decided to call it 92 00:04:05,519 --> 00:04:09,180 Code Club. Because we are creative geniuses. 93 00:04:09,180 --> 00:04:10,970 So the first question was what code should we 94 00:04:10,970 --> 00:04:13,220 read? And we did some research. We asked, you 95 00:04:13,220 --> 00:04:14,989 know, the mentors and senior developers that we knew. 96 00:04:14,989 --> 00:04:17,608 We said, what would be a great starting point 97 00:04:17,608 --> 00:04:20,079 for a novice to start reading code? And they 98 00:04:20,079 --> 00:04:22,500 said, you should read anything. 99 00:04:22,500 --> 00:04:24,500 This is not helpful. Please do not answer in 100 00:04:24,500 --> 00:04:26,220 this way if someone asks you, where do you 101 00:04:26,220 --> 00:04:29,210 start? And so we came up with our own 102 00:04:29,210 --> 00:04:31,750 rules. We decided that the point of reading code 103 00:04:31,750 --> 00:04:35,659 was to find code that we thought was inspirational 104 00:04:35,659 --> 00:04:37,640 and would be great examples. So we decided that 105 00:04:37,640 --> 00:04:42,020 whatever we read, it was gonna be exemplary code. 106 00:04:42,020 --> 00:04:44,599 And we defined exemplary as having four attributes. We 107 00:04:44,599 --> 00:04:47,159 said that one, it had to be somewhat popular. 108 00:04:47,159 --> 00:04:49,710 Something that was well-used. Something that was endorsed by 109 00:04:49,710 --> 00:04:52,820 the, the developer community. Something that hopefully was well-documented, 110 00:04:52,820 --> 00:04:55,229 so that if we got stuck we wanted somewhere 111 00:04:55,229 --> 00:04:56,039 to go to. 112 00:04:56,039 --> 00:04:59,169 Third, it should be well-written, and four it should 113 00:04:59,169 --> 00:05:01,339 be well-maintained. So knowing that it had, you know, 114 00:05:01,339 --> 00:05:03,789 recent commits and people were still keeping, you know, 115 00:05:03,789 --> 00:05:07,719 maintaining it was really important to us. 116 00:05:07,719 --> 00:05:10,130 And we thought that if we did this, we 117 00:05:10,130 --> 00:05:13,159 studied our exemplary code and read every Sunday, we 118 00:05:13,159 --> 00:05:15,760 were gonna go from novice programmers to bad ass 119 00:05:15,760 --> 00:05:20,080 experts. So, the one suggestion that I actually did 120 00:05:20,080 --> 00:05:23,080 get from a much more senior person than I, 121 00:05:23,080 --> 00:05:25,210 said, why don't you start with Sinatra? You've done 122 00:05:25,210 --> 00:05:27,169 Sinatra. You know it. You're kind of familiar with 123 00:05:27,169 --> 00:05:29,219 it. So we said, great. We'll start with the 124 00:05:29,219 --> 00:05:31,729 get method, which is something that I never really 125 00:05:31,729 --> 00:05:34,399 understood. 126 00:05:34,399 --> 00:05:37,580 And so we gathered on the Google, and we 127 00:05:37,580 --> 00:05:39,149 got together and we said, we're gonna get through 128 00:05:39,149 --> 00:05:41,140 the get method. The get method in one hour? 129 00:05:41,140 --> 00:05:43,310 Totally doable. If you've seen the get method in 130 00:05:43,310 --> 00:05:45,440 Sinatra, I think it's like seven lines of code, 131 00:05:45,440 --> 00:05:48,050 which sounds perfectly doable. No. This is a trick. 132 00:05:48,050 --> 00:05:49,529 This is a huge lie. 133 00:05:49,529 --> 00:05:52,339 Because every single line is completely abstracted code, and 134 00:05:52,339 --> 00:05:53,969 you have to go through all these other files 135 00:05:53,969 --> 00:05:55,339 to find out what they're doing, and then they 136 00:05:55,339 --> 00:05:57,330 have more abstracted code. Then you go to other 137 00:05:57,330 --> 00:05:59,979 files, and it became just one rabbit hole after 138 00:05:59,979 --> 00:06:02,169 another. And we found that we really got nowhere 139 00:06:02,169 --> 00:06:04,080 with it. And so we went from being really 140 00:06:04,080 --> 00:06:07,469 excited to completely overwhelmed. 141 00:06:07,469 --> 00:06:11,300 So, I'm a really, really big believer in retros. 142 00:06:11,300 --> 00:06:13,789 I like taking the opportunity to reflect on what 143 00:06:13,789 --> 00:06:15,909 I just did, especially if it's something that I'm 144 00:06:15,909 --> 00:06:18,500 doing for the very first time. So, at the 145 00:06:18,500 --> 00:06:21,010 end of the very first Code Club session, we 146 00:06:21,010 --> 00:06:24,839 paused and we said, how was this experience, on 147 00:06:24,839 --> 00:06:28,209 an individual level? How did each person feel? 148 00:06:28,209 --> 00:06:31,219 What did we learn? And most importantly, how can 149 00:06:31,219 --> 00:06:33,349 we improve? The idea was to keep this going 150 00:06:33,349 --> 00:06:35,190 every week, so what can we do to make 151 00:06:35,190 --> 00:06:37,580 sure that the next time we do this, we 152 00:06:37,580 --> 00:06:39,529 learn a ton? 153 00:06:39,529 --> 00:06:42,020 And the first and most important part about the 154 00:06:42,020 --> 00:06:45,770 code-reading experience, is to pick a manageable code base. 155 00:06:45,770 --> 00:06:48,580 It was very, very disappointing, and a huge hit 156 00:06:48,580 --> 00:06:50,200 to our ego, to know that we couldn't even 157 00:06:50,200 --> 00:06:52,130 figure out a get method, that started out looking 158 00:06:52,130 --> 00:06:54,020 like just seven lines of code. 159 00:06:54,020 --> 00:06:56,050 And so, picking something that is manageable, that is 160 00:06:56,050 --> 00:06:58,909 digestible, that you can actually get through and understand 161 00:06:58,909 --> 00:07:01,430 is really, really important. This is the first guideline 162 00:07:01,430 --> 00:07:04,080 of having your own code club, and definitely the 163 00:07:04,080 --> 00:07:05,409 most important. 164 00:07:05,409 --> 00:07:07,520 So we decided that, for us, one hundred lines 165 00:07:07,520 --> 00:07:09,589 of code was the great limit. And it was 166 00:07:09,589 --> 00:07:13,130 a pretty arbitrary number, but it ended up being 167 00:07:13,130 --> 00:07:15,680 perfect. Because what happened was, in that hundred lines 168 00:07:15,680 --> 00:07:17,630 of code, you have just enough that you can 169 00:07:17,630 --> 00:07:20,459 complete a full gem or library. And that's a 170 00:07:20,459 --> 00:07:22,310 great accomplishment. Being able to say, hey, I read 171 00:07:22,310 --> 00:07:24,099 through this whole thing and I finished it? Even 172 00:07:24,099 --> 00:07:25,630 if you didn't understand it, you feel really good 173 00:07:25,630 --> 00:07:26,779 about yourself. 174 00:07:26,779 --> 00:07:28,880 Second, it gives you the amount of time and 175 00:07:28,880 --> 00:07:32,300 flexibility to stop and comfortably ask questions. So if 176 00:07:32,300 --> 00:07:34,640 there's something you haven't seen before, you can say, 177 00:07:34,640 --> 00:07:36,469 hey, can we slow down? Cause I, I don't 178 00:07:36,469 --> 00:07:38,560 really get this. Can someone explain it to me? 179 00:07:38,560 --> 00:07:40,080 And you don't feel like you're slowing anyone else 180 00:07:40,080 --> 00:07:40,800 down. 181 00:07:40,800 --> 00:07:43,740 Second, you have the opportunity to try things. One 182 00:07:43,740 --> 00:07:45,760 of my favorite parts about reading code is finding 183 00:07:45,760 --> 00:07:47,810 new methods that I haven't seen before, or maybe 184 00:07:47,810 --> 00:07:49,580 finding methods that I haven't seen in a long 185 00:07:49,580 --> 00:07:52,510 time. And so being able to stop the session 186 00:07:52,510 --> 00:07:54,080 and say, can we open up IRB and just 187 00:07:54,080 --> 00:07:55,830 play with this and see how this works is 188 00:07:55,830 --> 00:07:57,820 really, really valuable. 189 00:07:57,820 --> 00:08:00,440 And the third thing was research topics. So there 190 00:08:00,440 --> 00:08:03,110 were always patterns that we've seen that look kind 191 00:08:03,110 --> 00:08:05,149 of familiar, that we've seen in other places. Being 192 00:08:05,149 --> 00:08:07,580 able to stop and look things up on StackOverflow 193 00:08:07,580 --> 00:08:10,409 or just Google was a really great opportunity. And 194 00:08:10,409 --> 00:08:13,630 so with that limit, limited code base, we're able 195 00:08:13,630 --> 00:08:18,140 to do these things while also getting through code. 196 00:08:18,140 --> 00:08:20,330 Which brings me to the second really, really important 197 00:08:20,330 --> 00:08:22,820 part about reading code. It's not really about reading 198 00:08:22,820 --> 00:08:24,769 the code. Reading the code is just the starting 199 00:08:24,769 --> 00:08:26,890 point. All these other things that I mentioned, the 200 00:08:26,890 --> 00:08:28,490 parts where you kind of get off track and 201 00:08:28,490 --> 00:08:31,339 you kind of digress and you have conversations. Those 202 00:08:31,339 --> 00:08:33,620 are the things that matter. That's the real value 203 00:08:33,620 --> 00:08:35,019 in reading code. 204 00:08:35,019 --> 00:08:38,570 So, the learning happens in these digressions. In these 205 00:08:38,570 --> 00:08:41,839 conversations. I am very, very sensitive to getting off 206 00:08:41,839 --> 00:08:43,700 track and making sure that everything I do is 207 00:08:43,700 --> 00:08:45,700 very focused, so this is a little bit difficult 208 00:08:45,700 --> 00:08:47,640 for me. But over time, I got to see 209 00:08:47,640 --> 00:08:50,960 a lot of value in it. 210 00:08:50,960 --> 00:08:53,090 The third thing is that it's a team effort. 211 00:08:53,090 --> 00:08:54,490 Do not go at this alone. It will be 212 00:08:54,490 --> 00:08:56,210 very painful and you will not have a good 213 00:08:56,210 --> 00:08:58,860 time. So knowing that I had other people that 214 00:08:58,860 --> 00:09:01,700 were about my same level and that, you know, 215 00:09:01,700 --> 00:09:03,330 we knew what we knew and we knew what 216 00:09:03,330 --> 00:09:06,200 we didn't know, made it really, really easy to 217 00:09:06,200 --> 00:09:08,430 start on this journey and to keep going. 218 00:09:08,430 --> 00:09:10,190 It's really important to make sure that everyone you 219 00:09:10,190 --> 00:09:12,650 do this with feels comfortable enough to raise their 220 00:09:12,650 --> 00:09:14,250 hand and say, can we stop here? I don't 221 00:09:14,250 --> 00:09:16,110 quite get that. Or, I know you just said 222 00:09:16,110 --> 00:09:17,370 that, but can you say it a different way, 223 00:09:17,370 --> 00:09:18,630 because it didn't make sense to me the first 224 00:09:18,630 --> 00:09:19,320 time. 225 00:09:19,320 --> 00:09:21,550 So it's really important that everyone is comfortable, that 226 00:09:21,550 --> 00:09:25,590 everyone is engaged, and in order to do that, 227 00:09:25,590 --> 00:09:27,440 we find it very helpful to have a tour 228 00:09:27,440 --> 00:09:29,890 guide. So every week we trade off, and we 229 00:09:29,890 --> 00:09:32,310 have one person lead the conversation. This is just 230 00:09:32,310 --> 00:09:34,130 one person to say, hey, we're gonna start on 231 00:09:34,130 --> 00:09:36,700 line two. We're gonna keep going. Stephanie do you 232 00:09:36,700 --> 00:09:38,330 have a question? Dan, what do you think about 233 00:09:38,330 --> 00:09:40,320 this? Ian, have you seen this before? And having 234 00:09:40,320 --> 00:09:42,510 someone stop at all the right places, make sure 235 00:09:42,510 --> 00:09:45,540 everyone is engaged and excited is a really important 236 00:09:45,540 --> 00:09:48,450 part of this journey. 237 00:09:48,450 --> 00:09:51,480 So we found, very quickly, that finding exemplary code 238 00:09:51,480 --> 00:09:54,160 that's only a hundred lines is very, very difficult. 239 00:09:54,160 --> 00:09:56,270 I think we ran out after a couple of 240 00:09:56,270 --> 00:09:58,510 weeks. And so, out of necessity, we had to 241 00:09:58,510 --> 00:10:00,560 kind of lower our standards. We had to say, 242 00:10:00,560 --> 00:10:02,740 the most important part is really that we finish 243 00:10:02,740 --> 00:10:05,300 getting through the code base, so we're gonna, you 244 00:10:05,300 --> 00:10:07,800 know, not worry about whether it's well-maintained or well-written. 245 00:10:07,800 --> 00:10:10,600 We're just gonna find code that's a hundred lines. 246 00:10:10,600 --> 00:10:13,540 And this ended up being a really great thing. 247 00:10:13,540 --> 00:10:16,270 So one day, the very first week that we 248 00:10:16,270 --> 00:10:18,960 decided to lower our standards, we were looking at 249 00:10:18,960 --> 00:10:21,470 a method that we didn't really think was very 250 00:10:21,470 --> 00:10:26,110 well-written. And Dan said, this method sucks. How would 251 00:10:26,110 --> 00:10:27,360 we write it? 252 00:10:27,360 --> 00:10:29,450 And he gave us our very first point of 253 00:10:29,450 --> 00:10:31,770 interaction. And that's the fifth guide line, is to 254 00:10:31,770 --> 00:10:34,750 find these opportunities to interact with the code. Because 255 00:10:34,750 --> 00:10:37,270 in him asking that one question, it lead to 256 00:10:37,270 --> 00:10:41,430 a very interesting conversation. One, about what the intent 257 00:10:41,430 --> 00:10:43,220 was. What was the point of that method? What 258 00:10:43,220 --> 00:10:43,930 was it doing? 259 00:10:43,930 --> 00:10:46,560 Two, why was it written that way? Was it 260 00:10:46,560 --> 00:10:48,710 because the developer had a certain style? Was it 261 00:10:48,710 --> 00:10:50,940 because it was a fork from a different gem 262 00:10:50,940 --> 00:10:52,920 and they were just kind of, you know, maintaining 263 00:10:52,920 --> 00:10:55,900 that, that writing style stylistically? And how does it 264 00:10:55,900 --> 00:10:58,070 fit in to the overall design and architecture of 265 00:10:58,070 --> 00:11:00,080 the entire code base? Did this one stand out 266 00:11:00,080 --> 00:11:01,530 as being worse than the other ones? Or did 267 00:11:01,530 --> 00:11:04,740 it just kind of follow the general pattern? 268 00:11:04,740 --> 00:11:07,590 And so, these questions were awesome, because now it's 269 00:11:07,590 --> 00:11:10,030 not just about reading code, it's about going on 270 00:11:10,030 --> 00:11:12,050 a little adventure. We got to pretend that we 271 00:11:12,050 --> 00:11:14,710 were the developer, and we were the ones that, 272 00:11:14,710 --> 00:11:17,080 that were building this code and connecting what we 273 00:11:17,080 --> 00:11:20,000 knew, in our world and in our workplace, to 274 00:11:20,000 --> 00:11:23,030 this specific situation. So having that moment of interaction 275 00:11:23,030 --> 00:11:26,130 really changed the game for us. 276 00:11:26,130 --> 00:11:28,550 So, this leads to the sixth point, which is, 277 00:11:28,550 --> 00:11:31,010 it doesn't have to be exemplary. Actually, reading bad 278 00:11:31,010 --> 00:11:33,340 code is awesome. Because the fact that you get 279 00:11:33,340 --> 00:11:35,130 to say, as a novice, that this is bad 280 00:11:35,130 --> 00:11:37,200 code, and you get to, like, you know, have 281 00:11:37,200 --> 00:11:39,310 an opinion on someone else's work, you feel really 282 00:11:39,310 --> 00:11:43,090 good about that. It makes you feel fairly adequate. 283 00:11:43,090 --> 00:11:44,540 And so it doesn't have to be exemplary. It 284 00:11:44,540 --> 00:11:45,980 can be really bad, and you can learn a 285 00:11:45,980 --> 00:11:48,710 lot from that as well. 286 00:11:48,710 --> 00:11:52,710 So, everything was going swimmingly. It was going awesome. 287 00:11:52,710 --> 00:11:54,530 And then one day, we encountered a gem that 288 00:11:54,530 --> 00:11:58,440 talked about rack middleware. And in that conversation, Dan, 289 00:11:58,440 --> 00:12:01,070 who comes up with awesome things to say, says, 290 00:12:01,070 --> 00:12:03,330 guys, I don't think I really understand how rack 291 00:12:03,330 --> 00:12:06,070 middleware works. And we said, Dan, it's, it's obvious. 292 00:12:06,070 --> 00:12:07,860 This is how it works. And then we realized 293 00:12:07,860 --> 00:12:10,529 that none of us really knew how it worked. 294 00:12:10,529 --> 00:12:13,920 And in that conversation, we found a knowledge gap. 295 00:12:13,920 --> 00:12:15,860 We found this, this thing that we thought we 296 00:12:15,860 --> 00:12:17,840 understood, that at one point we did understand, but 297 00:12:17,840 --> 00:12:21,160 we'd just forgotten about. So the following week, instead 298 00:12:21,160 --> 00:12:24,200 of doing our regular code review session where we 299 00:12:24,200 --> 00:12:26,860 just read through the code, we, instead, took a 300 00:12:26,860 --> 00:12:28,940 break. We did some research on what rack middleware 301 00:12:28,940 --> 00:12:30,970 was, how it worked, when you'd modify it, what 302 00:12:30,970 --> 00:12:33,450 you do with it. We watched a few RailsCast 303 00:12:33,450 --> 00:12:35,270 videos, did some, you know, looked at some blog 304 00:12:35,270 --> 00:12:37,800 posts. And the following week, we shared that knowledge 305 00:12:37,800 --> 00:12:38,520 together. 306 00:12:38,520 --> 00:12:40,950 So we had a much higher-level conversation, but it 307 00:12:40,950 --> 00:12:43,660 just emphasizes the fact that it's not really about 308 00:12:43,660 --> 00:12:46,230 reading code. It's about reading code that's a launching 309 00:12:46,230 --> 00:12:50,510 point for more interesting conversation. 310 00:12:50,510 --> 00:12:52,300 The eighth thing is you gotta keep at it. 311 00:12:52,300 --> 00:12:54,420 So, I've never told my code club this, and 312 00:12:54,420 --> 00:12:57,170 they're gonna find out, which is awesome. But I 313 00:12:57,170 --> 00:12:58,420 thought it was kind of a chore. It really 314 00:12:58,420 --> 00:13:00,880 wasn't fun at first. It wasn't that exciting. It 315 00:13:00,880 --> 00:13:02,250 was something that I felt like I had to 316 00:13:02,250 --> 00:13:03,690 do. I don't like waking up in the morning 317 00:13:03,690 --> 00:13:06,000 on a Sunday. So it was really something that 318 00:13:06,000 --> 00:13:07,800 I had to force myself to do. But over 319 00:13:07,800 --> 00:13:10,220 time is when I saw the value. I was 320 00:13:10,220 --> 00:13:12,260 really looking forward to that first code reading session, 321 00:13:12,260 --> 00:13:14,510 when it ended and I said, yeah, I'm now, 322 00:13:14,510 --> 00:13:16,480 like, ten steps closer to being an expert. 323 00:13:16,480 --> 00:13:18,240 But that's not how it works. It really takes 324 00:13:18,240 --> 00:13:20,460 time to get the value from it. So keep 325 00:13:20,460 --> 00:13:22,290 at it long enough and hopefully you'll see the 326 00:13:22,290 --> 00:13:25,300 value as well. 327 00:13:25,300 --> 00:13:28,800 So everything was going swimmingly again, and then we 328 00:13:28,800 --> 00:13:31,310 read the omniauth-meetup gem. So right now I'm a 329 00:13:31,310 --> 00:13:33,700 developer for the New York tech meetup. Yes, it's 330 00:13:33,700 --> 00:13:36,340 a meetup group. Yes. This is a real job. 331 00:13:36,340 --> 00:13:38,910 And there we use the omniauth-meetup gem to authenticate 332 00:13:38,910 --> 00:13:42,529 our members. And this is something that was very 333 00:13:42,529 --> 00:13:44,930 interesting, because it was very unexpected for me. 334 00:13:44,930 --> 00:13:46,660 For me, I read code because I felt like 335 00:13:46,660 --> 00:13:48,050 that's what I had to do to be a 336 00:13:48,050 --> 00:13:51,100 better programmer. That's what everyone told me to do. 337 00:13:51,100 --> 00:13:52,980 But when I looked at a gem that I 338 00:13:52,980 --> 00:13:56,339 found personally interesting and personally relevant, it made the 339 00:13:56,339 --> 00:13:58,800 whole thing so much more exciting. Cause I use 340 00:13:58,800 --> 00:14:00,380 that gem. I used it all the time. I 341 00:14:00,380 --> 00:14:01,529 knew what it was supposed to do. I knew 342 00:14:01,529 --> 00:14:03,720 it wasn't, what it wasn't supposed to do, and 343 00:14:03,720 --> 00:14:05,339 having the opportunity to look under the hood and 344 00:14:05,339 --> 00:14:07,650 see how it did it got me really, really 345 00:14:07,650 --> 00:14:09,180 excited. 346 00:14:09,180 --> 00:14:11,400 And so the ninth guideline is to find interesting 347 00:14:11,400 --> 00:14:13,970 code bases. Things on topics or problems that maybe 348 00:14:13,970 --> 00:14:16,589 you've had. Things that you've worked on before. That 349 00:14:16,589 --> 00:14:20,400 makes it a whole lot more interesting. 350 00:14:20,400 --> 00:14:22,210 And then there are the unexpected benefits. Things that 351 00:14:22,210 --> 00:14:26,029 I really didn't consider at all. The first is 352 00:14:26,029 --> 00:14:27,830 that, you get to explore the organization of the 353 00:14:27,830 --> 00:14:30,690 code base. So we really focused on reading, literally, 354 00:14:30,690 --> 00:14:32,870 the lines of code. But just as interesting was 355 00:14:32,870 --> 00:14:35,310 the file structure, was, what are the folders called? 356 00:14:35,310 --> 00:14:36,920 And what are the files named? And how do 357 00:14:36,920 --> 00:14:37,690 we work together? 358 00:14:37,690 --> 00:14:40,240 And we got the opportunity to see that and 359 00:14:40,240 --> 00:14:41,800 get exposed to that from all different types of 360 00:14:41,800 --> 00:14:45,430 gems and libraries. The second was, you get to 361 00:14:45,430 --> 00:14:48,560 really see how collaborative code is. When you start 362 00:14:48,560 --> 00:14:50,560 as a programmer, people tell you that open source 363 00:14:50,560 --> 00:14:52,750 is amazing and this beautiful thing, where people from 364 00:14:52,750 --> 00:14:55,820 all over the world collaborate and build great things 365 00:14:55,820 --> 00:14:58,390 together. But when you actually see it for yourself 366 00:14:58,390 --> 00:14:59,940 and you see that that gem that you love 367 00:14:59,940 --> 00:15:01,970 is really just a fork from this other gem 368 00:15:01,970 --> 00:15:03,940 and really this gem is dependent on all these 369 00:15:03,940 --> 00:15:05,970 other things that you didn't think would ever have 370 00:15:05,970 --> 00:15:08,310 a connection, that's really powerful. And it makes the 371 00:15:08,310 --> 00:15:12,080 whole thing so much more beautiful. 372 00:15:12,080 --> 00:15:13,890 And the third, and honestly the most important one, 373 00:15:13,890 --> 00:15:16,220 especially as a novice, is it's a great opportunity 374 00:15:16,220 --> 00:15:19,040 to build your confidence. I didn't fully appreciate how 375 00:15:19,040 --> 00:15:22,310 intimidating it was to open up source code until 376 00:15:22,310 --> 00:15:24,089 I had to do it for Code Club. Cause 377 00:15:24,089 --> 00:15:26,020 that first day, when I said, guys we're really 378 00:15:26,020 --> 00:15:28,120 gonna open up this gem and try to understand 379 00:15:28,120 --> 00:15:30,410 what's going on. And I think it was maybe 380 00:15:30,410 --> 00:15:32,220 a month and a half into doing this, so 381 00:15:32,220 --> 00:15:33,960 it's been about, like, six code clubs at this 382 00:15:33,960 --> 00:15:36,550 point, or at that point, when I was at 383 00:15:36,550 --> 00:15:38,130 work and I wanted to know how this gem 384 00:15:38,130 --> 00:15:39,990 worked, I just opened it up. I didn't even 385 00:15:39,990 --> 00:15:42,380 think twice about it. Because by that point, it'd 386 00:15:42,380 --> 00:15:44,470 become such a habit. It had become so normal 387 00:15:44,470 --> 00:15:47,279 to look into how things worked. And having that 388 00:15:47,279 --> 00:15:49,670 frame of mind and that mindset is really, really 389 00:15:49,670 --> 00:15:51,649 important. It really makes you feel a lot more 390 00:15:51,649 --> 00:15:52,670 competent. 391 00:15:52,670 --> 00:15:56,260 So, obviously by now, I have fully convinced you 392 00:15:56,260 --> 00:15:57,830 that you do want to start your own code 393 00:15:57,830 --> 00:15:59,210 club. But you can't call it code club cause 394 00:15:59,210 --> 00:16:00,660 I called that. So you have to find out 395 00:16:00,660 --> 00:16:03,000 your own name. But I wanted to review the 396 00:16:03,000 --> 00:16:03,980 guidelines. 397 00:16:03,980 --> 00:16:06,399 So the first is, manageable code base. For us, 398 00:16:06,399 --> 00:16:08,230 it was a hundred lines of code. If you 399 00:16:08,230 --> 00:16:10,950 feel like that's too low for you, definitely raise 400 00:16:10,950 --> 00:16:12,520 the stakes, but I think having a limit is 401 00:16:12,520 --> 00:16:14,360 very important. 402 00:16:14,360 --> 00:16:17,920 Two. Understanding that the learning really does happen in 403 00:16:17,920 --> 00:16:20,610 the digressions and in the conversations. 404 00:16:20,610 --> 00:16:22,740 Three, that it's a team effort. Make sure you 405 00:16:22,740 --> 00:16:24,640 go at it with other people, and make sure 406 00:16:24,640 --> 00:16:26,839 that you check in and see that everyone is 407 00:16:26,839 --> 00:16:30,790 engaged and just as excited and hopefully you are. 408 00:16:30,790 --> 00:16:33,130 Four, to pick a tour guide, to take turns 409 00:16:33,130 --> 00:16:35,330 and have someone lead the conversations. It's also a 410 00:16:35,330 --> 00:16:37,710 great opportunity for people to lead and kind of 411 00:16:37,710 --> 00:16:39,320 feel like they're, they're taking charge as well. It's 412 00:16:39,320 --> 00:16:42,690 a different type of confidence booster. 413 00:16:42,690 --> 00:16:45,380 Five, to find those moments when you can interact 414 00:16:45,380 --> 00:16:46,740 with the code, where you can say, how would 415 00:16:46,740 --> 00:16:48,710 I do that? How do I feel about that? 416 00:16:48,710 --> 00:16:51,010 Even asking that question of, what do you think 417 00:16:51,010 --> 00:16:52,550 of this code and having an opinion is very, 418 00:16:52,550 --> 00:16:53,960 very powerful. 419 00:16:53,960 --> 00:16:57,270 Six, it doesn't have to be good. You can 420 00:16:57,270 --> 00:16:59,140 learn just as much from bad code as you 421 00:16:59,140 --> 00:17:00,870 can from good code. 422 00:17:00,870 --> 00:17:03,740 Seven, find those knowledge gaps and find a way 423 00:17:03,740 --> 00:17:06,039 to fill them. And hopefully fill them together. 424 00:17:06,039 --> 00:17:08,740 Finally, to, to keep at it and make sure 425 00:17:08,740 --> 00:17:09,959 that this is a habit, it's something you do 426 00:17:09,959 --> 00:17:12,398 on a weekly basis or a monthly basis. 427 00:17:12,398 --> 00:17:14,380 And finally to find interesting code bases. You're gonna 428 00:17:14,380 --> 00:17:17,398 find the experience much more enjoyable. 429 00:17:17,398 --> 00:17:21,079 So, the question that I had, every single week, 430 00:17:21,079 --> 00:17:23,439 was, how does this get me to an expert? 431 00:17:23,439 --> 00:17:25,160 I wanted to feel that moment where I said, 432 00:17:25,160 --> 00:17:27,540 yes, now I am so much closer, and I 433 00:17:27,540 --> 00:17:31,540 can feel myself growing and getting that cape, finally. 434 00:17:31,540 --> 00:17:33,860 And it didn't really happen quite that way. That 435 00:17:33,860 --> 00:17:37,130 transformation wasn't quite as visible and as tangible as 436 00:17:37,130 --> 00:17:39,250 I would have liked it to be. And so, 437 00:17:39,250 --> 00:17:40,640 I thought a lot about why. I thought a 438 00:17:40,640 --> 00:17:42,890 lot about, if I can't feel the change in 439 00:17:42,890 --> 00:17:46,130 a very tangible, physical way, how do I know 440 00:17:46,130 --> 00:17:47,860 that I'm becoming an expert? 441 00:17:47,860 --> 00:17:51,440 And I found this really great infographic on Twitter 442 00:17:51,440 --> 00:17:53,809 a couple months ago that I repurposed for my 443 00:17:53,809 --> 00:17:57,559 own agenda, that I think really explains the process 444 00:17:57,559 --> 00:17:59,770 and the result. 445 00:17:59,770 --> 00:18:02,420 So this is what information looks like. It looks 446 00:18:02,420 --> 00:18:05,220 like Skittles. And information is just all these little 447 00:18:05,220 --> 00:18:08,650 data points that are separate and isolated, that happen 448 00:18:08,650 --> 00:18:10,750 to kind of relate and, just by being in 449 00:18:10,750 --> 00:18:12,900 the same bucket. 450 00:18:12,900 --> 00:18:15,440 And then eventually, you're able to connect these little 451 00:18:15,440 --> 00:18:18,390 dots, and you're able to have knowledge. And knowledge 452 00:18:18,390 --> 00:18:20,610 is being able to tell a story. Being able 453 00:18:20,610 --> 00:18:23,470 to say, I can start from that yellow skittle 454 00:18:23,470 --> 00:18:25,280 in the corner, and if I go right, I 455 00:18:25,280 --> 00:18:26,470 can get to that green one, and then I 456 00:18:26,470 --> 00:18:28,630 go, shoom, go all the way down to orange, 457 00:18:28,630 --> 00:18:30,400 and then if I make a left, or, a 458 00:18:30,400 --> 00:18:32,640 right I'm at green. And then if I make 459 00:18:32,640 --> 00:18:34,230 a right again, I'm at red. And that's how 460 00:18:34,230 --> 00:18:35,630 I get from yellow to red. 461 00:18:35,630 --> 00:18:39,730 It's understanding that, that path. 462 00:18:39,730 --> 00:18:41,530 And then wisdom is saying, you know what, I 463 00:18:41,530 --> 00:18:43,140 don't need to go through all those skittles. I 464 00:18:43,140 --> 00:18:44,700 can just go straight from yellow to red if 465 00:18:44,700 --> 00:18:46,390 I make my own path. And you know, I 466 00:18:46,390 --> 00:18:47,760 don't even need that path to be straight. It's 467 00:18:47,760 --> 00:18:49,940 gonna be all straight, cause I'm a rebel. 468 00:18:49,940 --> 00:18:51,900 And so, this was kind of the journey of 469 00:18:51,900 --> 00:18:54,670 reading code together. The information and all those little 470 00:18:54,670 --> 00:18:56,740 data points come from all the code bases that 471 00:18:56,740 --> 00:18:58,309 you get to read, from all the things that 472 00:18:58,309 --> 00:19:01,020 you're exposed to that you've never seen before. 473 00:19:01,020 --> 00:19:03,350 Those points where things connect and you have knowledge 474 00:19:03,350 --> 00:19:05,910 and you have these stories and these paths, that 475 00:19:05,910 --> 00:19:08,850 comes from having really good code reading sessions. That 476 00:19:08,850 --> 00:19:11,290 comes from working with other people who give you 477 00:19:11,290 --> 00:19:14,020 their input, from asking those questions that you're gonna 478 00:19:14,020 --> 00:19:16,660 ask that are very insightful, and it also comes 479 00:19:16,660 --> 00:19:20,300 from leveraging everyone else's experiences. So when I go 480 00:19:20,300 --> 00:19:21,570 to work and I use a gem, I can 481 00:19:21,570 --> 00:19:23,110 say, hey, I've seen this before. 482 00:19:23,110 --> 00:19:25,050 When Dan goes to work and, and uses a 483 00:19:25,050 --> 00:19:27,030 specific method, he can say, I've done that before. 484 00:19:27,030 --> 00:19:29,700 And, in doing that, we're finding all these connections 485 00:19:29,700 --> 00:19:31,970 that would have been way harder to find on 486 00:19:31,970 --> 00:19:33,290 our own. 487 00:19:33,290 --> 00:19:35,250 And then, finally, we'll be able to see that, 488 00:19:35,250 --> 00:19:37,800 of all that noise, of all those patterns and 489 00:19:37,800 --> 00:19:40,700 designs and concepts and all those lines of code, 490 00:19:40,700 --> 00:19:42,260 the ones that we really care about are just 491 00:19:42,260 --> 00:19:43,840 yellow and red. And those are the ones that 492 00:19:43,840 --> 00:19:45,920 keep popping out, over and over again, over time. 493 00:19:45,920 --> 00:19:48,170 And eventually we have wisdom and we're much closer 494 00:19:48,170 --> 00:19:51,480 to being experts. 495 00:19:51,480 --> 00:19:54,470 So, these are just a handful of the code 496 00:19:54,470 --> 00:19:56,580 bases that we've read. If you're interested in looking 497 00:19:56,580 --> 00:19:58,020 at them. I think most of them are about 498 00:19:58,020 --> 00:19:59,550 a hundred lines. I think one or two may 499 00:19:59,550 --> 00:20:02,240 be a little bit bigger. But take a look, 500 00:20:02,240 --> 00:20:04,140 and I'd love to hear kind of your stories 501 00:20:04,140 --> 00:20:06,240 and see what you get from that. 502 00:20:06,240 --> 00:20:09,260 That is my website, bloggytoons dot com slash code-club. 503 00:20:09,260 --> 00:20:10,800 There's a page that has links to all of 504 00:20:10,800 --> 00:20:14,760 these gems and a few other ones as well. 505 00:20:14,760 --> 00:20:16,650 That's the end. That's my handle. I pretty much 506 00:20:16,650 --> 00:20:19,400 Tweet, like, mostly about programming and, like, cake. So 507 00:20:19,400 --> 00:20:22,770 you've been warned. But, and that's the website again. 508 00:20:22,770 --> 00:20:25,159 So I think that's pretty much it. Any questions?