WEBVTT 00:00:16.890 --> 00:00:18.439 SARON YITBAREK: So, hello. My name is Saron. 00:00:18.439 --> 00:00:20.580 Thank you guys so much for coming to my talk. 00:00:20.580 --> 00:00:23.009 I'm really, really excited to be here. 00:00:23.009 --> 00:00:26.039 And as you can tell from the title of this talk, 00:00:26.039 --> 00:00:28.169 grammar is very important to me. 00:00:28.169 --> 00:00:30.390 So, before we begin, I want to start off 00:00:30.390 --> 00:00:34.000 by telling you a story. A year ago today, 00:00:34.000 --> 00:00:36.769 I was not a programmer. This is a, a 00:00:36.769 --> 00:00:38.750 really big confession that I'm sharing with you. A 00:00:38.750 --> 00:00:43.409 year ago today, I was this chick. I worked 00:00:43.409 --> 00:00:47.320 at tech startups. I did business development, sales, marketing. 00:00:47.320 --> 00:00:50.170 All of those non-technical roles. And I loved it. 00:00:50.170 --> 00:00:51.430 If you've ever worked at a tech start up, 00:00:51.430 --> 00:00:53.649 the best part is telling other people that you 00:00:53.649 --> 00:00:55.760 work at a tech start up, because they instantly 00:00:55.760 --> 00:00:57.940 think you're awesome and cool because you are. 00:00:57.940 --> 00:01:01.100 But I realized, over time, after that honeymoon phase 00:01:01.100 --> 00:01:04.959 was over, that my biggest skill, the best thing 00:01:04.959 --> 00:01:07.700 I had to offer my company, was being able 00:01:07.700 --> 00:01:11.350 to talk. And that didn't seem very valuable. And 00:01:11.350 --> 00:01:13.670 I was always surrounded by programmers. By these tech 00:01:13.670 --> 00:01:17.530 people who could build beautiful, powerful things. And so 00:01:17.530 --> 00:01:20.070 I found myself always creeping on them and looking 00:01:20.070 --> 00:01:21.920 at what they did and feeling like what they 00:01:21.920 --> 00:01:24.090 did was so much cooler and so much more 00:01:24.090 --> 00:01:26.369 interesting than anything I could ever do. 00:01:26.369 --> 00:01:29.310 So, I quit my job, I started learning how 00:01:29.310 --> 00:01:31.180 to code. I applied and got accepted to the 00:01:31.180 --> 00:01:33.740 Flat Iron school, which is a three month programming 00:01:33.740 --> 00:01:37.140 boot camp. And when we graduated, I was so 00:01:37.140 --> 00:01:39.390 excited. I could finally build stuff. I could make 00:01:39.390 --> 00:01:41.909 stuff. I was valuable. I could be a contributing 00:01:41.909 --> 00:01:45.799 member to society, as my mother tells me. 00:01:45.799 --> 00:01:48.520 And this is actually very important. One thing they 00:01:48.520 --> 00:01:50.700 don't tell you when you graduate from a programming 00:01:50.700 --> 00:01:52.340 boot camp is that you have to click your 00:01:52.340 --> 00:01:55.500 heels and hold up a keyboard, otherwise it's not 00:01:55.500 --> 00:01:57.229 official. 00:01:57.229 --> 00:01:59.350 So I was so proud. I was so excited. 00:01:59.350 --> 00:02:01.350 I learned all this stuff. I worked really, really 00:02:01.350 --> 00:02:04.659 hard. I'm apparently standing on a rock of code 00:02:04.659 --> 00:02:08.320 stuff that I conquered. But I was also painfully 00:02:08.320 --> 00:02:11.590 aware of all the other stuff left to learn. 00:02:11.590 --> 00:02:13.950 So there's the stuff I didn't know. There's the 00:02:13.950 --> 00:02:15.660 stuff I didn't know I didn't know. There was 00:02:15.660 --> 00:02:17.100 the stuff that I thought I knew, but I 00:02:17.100 --> 00:02:18.799 forgot, but I didn't know I'd forgotten it yet. 00:02:18.799 --> 00:02:20.910 So that's gonna be a nice surprise in the 00:02:20.910 --> 00:02:22.980 future. And then, by the way, all the stuff 00:02:22.980 --> 00:02:27.379 changes all the time. So welcome to programming. 00:02:27.379 --> 00:02:29.360 And I was painfully aware of how much of 00:02:29.360 --> 00:02:31.180 a novice I was. And this is the novice 00:02:31.180 --> 00:02:33.790 track, so hopefully this applies to you too. And 00:02:33.790 --> 00:02:37.349 this actually describes Dreyfus, or Dreyfus's Model of Skill 00:02:37.349 --> 00:02:39.980 Acquisition, that says that when you start at zero, 00:02:39.980 --> 00:02:42.110 when you start a new skill, you start at 00:02:42.110 --> 00:02:44.410 the novice level. You move up over time to 00:02:44.410 --> 00:02:46.930 an advanced beginner. Then you go on to confident, 00:02:46.930 --> 00:02:48.739 proficient, and hopefully an expert. 00:02:48.739 --> 00:02:51.090 And so, I don't want to be a novice. 00:02:51.090 --> 00:02:52.310 I don't think anyone here wants to be a 00:02:52.310 --> 00:02:54.480 novice. That's not fun. I want to be an 00:02:54.480 --> 00:02:56.170 expert. And I want that cape. That's who I 00:02:56.170 --> 00:02:58.930 want to be. So I started asking people and 00:02:58.930 --> 00:03:01.090 did some research on, how can I become an 00:03:01.090 --> 00:03:04.000 expert? How can I go from this poor novice 00:03:04.000 --> 00:03:05.830 person who kind of sort of thinks she knows 00:03:05.830 --> 00:03:08.450 what she's doing to, like, that cape-wearing expert. How 00:03:08.450 --> 00:03:09.950 do I do that? 00:03:09.950 --> 00:03:11.840 And the most popular answer I got was reading 00:03:11.840 --> 00:03:14.450 code. Which is both really helpful but also not 00:03:14.450 --> 00:03:16.819 very helpful. Because that leads to all these other 00:03:16.819 --> 00:03:18.459 questions, like, what code do I read? How often 00:03:18.459 --> 00:03:21.090 do I read it? And the best way to 00:03:21.090 --> 00:03:24.340 start an adventure is to start it with friends. 00:03:24.340 --> 00:03:25.920 So these are my friends. I think I drew 00:03:25.920 --> 00:03:29.250 them very flatteringly. And so these are some of 00:03:29.250 --> 00:03:31.290 my programming buddies from the Flat Iron school, and 00:03:31.290 --> 00:03:34.519 I got them together and I said, yo. If 00:03:34.519 --> 00:03:36.970 you get programming people together to start a code 00:03:36.970 --> 00:03:39.049 reading club, you have to start the conversation with 00:03:39.049 --> 00:03:41.420 yo. Otherwise it just won't work. 00:03:41.420 --> 00:03:46.569 So I said, yo, we should read code together. 00:03:46.569 --> 00:03:48.150 And so we decided that we were gonna dedicate 00:03:48.150 --> 00:03:52.170 one hour every single Sunday at 11 AM. By 00:03:52.170 --> 00:03:53.900 the way, this is a huge deal for me. 00:03:53.900 --> 00:03:55.680 I don't wake up before two on a weekend. 00:03:55.680 --> 00:03:58.540 So I'm, I'm already winning just by declaring that 00:03:58.540 --> 00:04:00.360 this might happen. 00:04:00.360 --> 00:04:01.769 And so we decided that we're gonna make this 00:04:01.769 --> 00:04:05.519 a regular thing. And we decided to call it 00:04:05.519 --> 00:04:09.180 Code Club. Because we are creative geniuses. 00:04:09.180 --> 00:04:10.970 So the first question was what code should we 00:04:10.970 --> 00:04:13.220 read? And we did some research. We asked, you 00:04:13.220 --> 00:04:14.989 know, the mentors and senior developers that we knew. 00:04:14.989 --> 00:04:17.608 We said, what would be a great starting point 00:04:17.608 --> 00:04:20.079 for a novice to start reading code? And they 00:04:20.079 --> 00:04:22.500 said, you should read anything. 00:04:22.500 --> 00:04:24.500 This is not helpful. Please do not answer in 00:04:24.500 --> 00:04:26.220 this way if someone asks you, where do you 00:04:26.220 --> 00:04:29.210 start? And so we came up with our own 00:04:29.210 --> 00:04:31.750 rules. We decided that the point of reading code 00:04:31.750 --> 00:04:35.659 was to find code that we thought was inspirational 00:04:35.659 --> 00:04:37.640 and would be great examples. So we decided that 00:04:37.640 --> 00:04:42.020 whatever we read, it was gonna be exemplary code. 00:04:42.020 --> 00:04:44.599 And we defined exemplary as having four attributes. We 00:04:44.599 --> 00:04:47.159 said that one, it had to be somewhat popular. 00:04:47.159 --> 00:04:49.710 Something that was well-used. Something that was endorsed by 00:04:49.710 --> 00:04:52.820 the, the developer community. Something that hopefully was well-documented, 00:04:52.820 --> 00:04:55.229 so that if we got stuck we wanted somewhere 00:04:55.229 --> 00:04:56.039 to go to. 00:04:56.039 --> 00:04:59.169 Third, it should be well-written, and four it should 00:04:59.169 --> 00:05:01.339 be well-maintained. So knowing that it had, you know, 00:05:01.339 --> 00:05:03.789 recent commits and people were still keeping, you know, 00:05:03.789 --> 00:05:07.719 maintaining it was really important to us. 00:05:07.719 --> 00:05:10.130 And we thought that if we did this, we 00:05:10.130 --> 00:05:13.159 studied our exemplary code and read every Sunday, we 00:05:13.159 --> 00:05:15.760 were gonna go from novice programmers to bad ass 00:05:15.760 --> 00:05:20.080 experts. So, the one suggestion that I actually did 00:05:20.080 --> 00:05:23.080 get from a much more senior person than I, 00:05:23.080 --> 00:05:25.210 said, why don't you start with Sinatra? You've done 00:05:25.210 --> 00:05:27.169 Sinatra. You know it. You're kind of familiar with 00:05:27.169 --> 00:05:29.219 it. So we said, great. We'll start with the 00:05:29.219 --> 00:05:31.729 get method, which is something that I never really 00:05:31.729 --> 00:05:34.399 understood. 00:05:34.399 --> 00:05:37.580 And so we gathered on the Google, and we 00:05:37.580 --> 00:05:39.149 got together and we said, we're gonna get through 00:05:39.149 --> 00:05:41.140 the get method. The get method in one hour? 00:05:41.140 --> 00:05:43.310 Totally doable. If you've seen the get method in 00:05:43.310 --> 00:05:45.440 Sinatra, I think it's like seven lines of code, 00:05:45.440 --> 00:05:48.050 which sounds perfectly doable. No. This is a trick. 00:05:48.050 --> 00:05:49.529 This is a huge lie. 00:05:49.529 --> 00:05:52.339 Because every single line is completely abstracted code, and 00:05:52.339 --> 00:05:53.969 you have to go through all these other files 00:05:53.969 --> 00:05:55.339 to find out what they're doing, and then they 00:05:55.339 --> 00:05:57.330 have more abstracted code. Then you go to other 00:05:57.330 --> 00:05:59.979 files, and it became just one rabbit hole after 00:05:59.979 --> 00:06:02.169 another. And we found that we really got nowhere 00:06:02.169 --> 00:06:04.080 with it. And so we went from being really 00:06:04.080 --> 00:06:07.469 excited to completely overwhelmed. 00:06:07.469 --> 00:06:11.300 So, I'm a really, really big believer in retros. 00:06:11.300 --> 00:06:13.789 I like taking the opportunity to reflect on what 00:06:13.789 --> 00:06:15.909 I just did, especially if it's something that I'm 00:06:15.909 --> 00:06:18.500 doing for the very first time. So, at the 00:06:18.500 --> 00:06:21.010 end of the very first Code Club session, we 00:06:21.010 --> 00:06:24.839 paused and we said, how was this experience, on 00:06:24.839 --> 00:06:28.209 an individual level? How did each person feel? 00:06:28.209 --> 00:06:31.219 What did we learn? And most importantly, how can 00:06:31.219 --> 00:06:33.349 we improve? The idea was to keep this going 00:06:33.349 --> 00:06:35.190 every week, so what can we do to make 00:06:35.190 --> 00:06:37.580 sure that the next time we do this, we 00:06:37.580 --> 00:06:39.529 learn a ton? 00:06:39.529 --> 00:06:42.020 And the first and most important part about the 00:06:42.020 --> 00:06:45.770 code-reading experience, is to pick a manageable code base. 00:06:45.770 --> 00:06:48.580 It was very, very disappointing, and a huge hit 00:06:48.580 --> 00:06:50.200 to our ego, to know that we couldn't even 00:06:50.200 --> 00:06:52.130 figure out a get method, that started out looking 00:06:52.130 --> 00:06:54.020 like just seven lines of code. 00:06:54.020 --> 00:06:56.050 And so, picking something that is manageable, that is 00:06:56.050 --> 00:06:58.909 digestible, that you can actually get through and understand 00:06:58.909 --> 00:07:01.430 is really, really important. This is the first guideline 00:07:01.430 --> 00:07:04.080 of having your own code club, and definitely the 00:07:04.080 --> 00:07:05.409 most important. 00:07:05.409 --> 00:07:07.520 So we decided that, for us, one hundred lines 00:07:07.520 --> 00:07:09.589 of code was the great limit. And it was 00:07:09.589 --> 00:07:13.130 a pretty arbitrary number, but it ended up being 00:07:13.130 --> 00:07:15.680 perfect. Because what happened was, in that hundred lines 00:07:15.680 --> 00:07:17.630 of code, you have just enough that you can 00:07:17.630 --> 00:07:20.459 complete a full gem or library. And that's a 00:07:20.459 --> 00:07:22.310 great accomplishment. Being able to say, hey, I read 00:07:22.310 --> 00:07:24.099 through this whole thing and I finished it? Even 00:07:24.099 --> 00:07:25.630 if you didn't understand it, you feel really good 00:07:25.630 --> 00:07:26.779 about yourself. 00:07:26.779 --> 00:07:28.880 Second, it gives you the amount of time and 00:07:28.880 --> 00:07:32.300 flexibility to stop and comfortably ask questions. So if 00:07:32.300 --> 00:07:34.640 there's something you haven't seen before, you can say, 00:07:34.640 --> 00:07:36.469 hey, can we slow down? Cause I, I don't 00:07:36.469 --> 00:07:38.560 really get this. Can someone explain it to me? 00:07:38.560 --> 00:07:40.080 And you don't feel like you're slowing anyone else 00:07:40.080 --> 00:07:40.800 down. 00:07:40.800 --> 00:07:43.740 Second, you have the opportunity to try things. One 00:07:43.740 --> 00:07:45.760 of my favorite parts about reading code is finding 00:07:45.760 --> 00:07:47.810 new methods that I haven't seen before, or maybe 00:07:47.810 --> 00:07:49.580 finding methods that I haven't seen in a long 00:07:49.580 --> 00:07:52.510 time. And so being able to stop the session 00:07:52.510 --> 00:07:54.080 and say, can we open up IRB and just 00:07:54.080 --> 00:07:55.830 play with this and see how this works is 00:07:55.830 --> 00:07:57.820 really, really valuable. 00:07:57.820 --> 00:08:00.440 And the third thing was research topics. So there 00:08:00.440 --> 00:08:03.110 were always patterns that we've seen that look kind 00:08:03.110 --> 00:08:05.149 of familiar, that we've seen in other places. Being 00:08:05.149 --> 00:08:07.580 able to stop and look things up on StackOverflow 00:08:07.580 --> 00:08:10.409 or just Google was a really great opportunity. And 00:08:10.409 --> 00:08:13.630 so with that limit, limited code base, we're able 00:08:13.630 --> 00:08:18.140 to do these things while also getting through code. 00:08:18.140 --> 00:08:20.330 Which brings me to the second really, really important 00:08:20.330 --> 00:08:22.820 part about reading code. It's not really about reading 00:08:22.820 --> 00:08:24.769 the code. Reading the code is just the starting 00:08:24.769 --> 00:08:26.890 point. All these other things that I mentioned, the 00:08:26.890 --> 00:08:28.490 parts where you kind of get off track and 00:08:28.490 --> 00:08:31.339 you kind of digress and you have conversations. Those 00:08:31.339 --> 00:08:33.620 are the things that matter. That's the real value 00:08:33.620 --> 00:08:35.019 in reading code. 00:08:35.019 --> 00:08:38.570 So, the learning happens in these digressions. In these 00:08:38.570 --> 00:08:41.839 conversations. I am very, very sensitive to getting off 00:08:41.839 --> 00:08:43.700 track and making sure that everything I do is 00:08:43.700 --> 00:08:45.700 very focused, so this is a little bit difficult 00:08:45.700 --> 00:08:47.640 for me. But over time, I got to see 00:08:47.640 --> 00:08:50.960 a lot of value in it. 00:08:50.960 --> 00:08:53.090 The third thing is that it's a team effort. 00:08:53.090 --> 00:08:54.490 Do not go at this alone. It will be 00:08:54.490 --> 00:08:56.210 very painful and you will not have a good 00:08:56.210 --> 00:08:58.860 time. So knowing that I had other people that 00:08:58.860 --> 00:09:01.700 were about my same level and that, you know, 00:09:01.700 --> 00:09:03.330 we knew what we knew and we knew what 00:09:03.330 --> 00:09:06.200 we didn't know, made it really, really easy to 00:09:06.200 --> 00:09:08.430 start on this journey and to keep going. 00:09:08.430 --> 00:09:10.190 It's really important to make sure that everyone you 00:09:10.190 --> 00:09:12.650 do this with feels comfortable enough to raise their 00:09:12.650 --> 00:09:14.250 hand and say, can we stop here? I don't 00:09:14.250 --> 00:09:16.110 quite get that. Or, I know you just said 00:09:16.110 --> 00:09:17.370 that, but can you say it a different way, 00:09:17.370 --> 00:09:18.630 because it didn't make sense to me the first 00:09:18.630 --> 00:09:19.320 time. 00:09:19.320 --> 00:09:21.550 So it's really important that everyone is comfortable, that 00:09:21.550 --> 00:09:25.590 everyone is engaged, and in order to do that, 00:09:25.590 --> 00:09:27.440 we find it very helpful to have a tour 00:09:27.440 --> 00:09:29.890 guide. So every week we trade off, and we 00:09:29.890 --> 00:09:32.310 have one person lead the conversation. This is just 00:09:32.310 --> 00:09:34.130 one person to say, hey, we're gonna start on 00:09:34.130 --> 00:09:36.700 line two. We're gonna keep going. Stephanie do you 00:09:36.700 --> 00:09:38.330 have a question? Dan, what do you think about 00:09:38.330 --> 00:09:40.320 this? Ian, have you seen this before? And having 00:09:40.320 --> 00:09:42.510 someone stop at all the right places, make sure 00:09:42.510 --> 00:09:45.540 everyone is engaged and excited is a really important 00:09:45.540 --> 00:09:48.450 part of this journey. 00:09:48.450 --> 00:09:51.480 So we found, very quickly, that finding exemplary code 00:09:51.480 --> 00:09:54.160 that's only a hundred lines is very, very difficult. 00:09:54.160 --> 00:09:56.270 I think we ran out after a couple of 00:09:56.270 --> 00:09:58.510 weeks. And so, out of necessity, we had to 00:09:58.510 --> 00:10:00.560 kind of lower our standards. We had to say, 00:10:00.560 --> 00:10:02.740 the most important part is really that we finish 00:10:02.740 --> 00:10:05.300 getting through the code base, so we're gonna, you 00:10:05.300 --> 00:10:07.800 know, not worry about whether it's well-maintained or well-written. 00:10:07.800 --> 00:10:10.600 We're just gonna find code that's a hundred lines. 00:10:10.600 --> 00:10:13.540 And this ended up being a really great thing. 00:10:13.540 --> 00:10:16.270 So one day, the very first week that we 00:10:16.270 --> 00:10:18.960 decided to lower our standards, we were looking at 00:10:18.960 --> 00:10:21.470 a method that we didn't really think was very 00:10:21.470 --> 00:10:26.110 well-written. And Dan said, this method sucks. How would 00:10:26.110 --> 00:10:27.360 we write it? 00:10:27.360 --> 00:10:29.450 And he gave us our very first point of 00:10:29.450 --> 00:10:31.770 interaction. And that's the fifth guide line, is to 00:10:31.770 --> 00:10:34.750 find these opportunities to interact with the code. Because 00:10:34.750 --> 00:10:37.270 in him asking that one question, it lead to 00:10:37.270 --> 00:10:41.430 a very interesting conversation. One, about what the intent 00:10:41.430 --> 00:10:43.220 was. What was the point of that method? What 00:10:43.220 --> 00:10:43.930 was it doing? 00:10:43.930 --> 00:10:46.560 Two, why was it written that way? Was it 00:10:46.560 --> 00:10:48.710 because the developer had a certain style? Was it 00:10:48.710 --> 00:10:50.940 because it was a fork from a different gem 00:10:50.940 --> 00:10:52.920 and they were just kind of, you know, maintaining 00:10:52.920 --> 00:10:55.900 that, that writing style stylistically? And how does it 00:10:55.900 --> 00:10:58.070 fit in to the overall design and architecture of 00:10:58.070 --> 00:11:00.080 the entire code base? Did this one stand out 00:11:00.080 --> 00:11:01.530 as being worse than the other ones? Or did 00:11:01.530 --> 00:11:04.740 it just kind of follow the general pattern? 00:11:04.740 --> 00:11:07.590 And so, these questions were awesome, because now it's 00:11:07.590 --> 00:11:10.030 not just about reading code, it's about going on 00:11:10.030 --> 00:11:12.050 a little adventure. We got to pretend that we 00:11:12.050 --> 00:11:14.710 were the developer, and we were the ones that, 00:11:14.710 --> 00:11:17.080 that were building this code and connecting what we 00:11:17.080 --> 00:11:20.000 knew, in our world and in our workplace, to 00:11:20.000 --> 00:11:23.030 this specific situation. So having that moment of interaction 00:11:23.030 --> 00:11:26.130 really changed the game for us. 00:11:26.130 --> 00:11:28.550 So, this leads to the sixth point, which is, 00:11:28.550 --> 00:11:31.010 it doesn't have to be exemplary. Actually, reading bad 00:11:31.010 --> 00:11:33.340 code is awesome. Because the fact that you get 00:11:33.340 --> 00:11:35.130 to say, as a novice, that this is bad 00:11:35.130 --> 00:11:37.200 code, and you get to, like, you know, have 00:11:37.200 --> 00:11:39.310 an opinion on someone else's work, you feel really 00:11:39.310 --> 00:11:43.090 good about that. It makes you feel fairly adequate. 00:11:43.090 --> 00:11:44.540 And so it doesn't have to be exemplary. It 00:11:44.540 --> 00:11:45.980 can be really bad, and you can learn a 00:11:45.980 --> 00:11:48.710 lot from that as well. 00:11:48.710 --> 00:11:52.710 So, everything was going swimmingly. It was going awesome. 00:11:52.710 --> 00:11:54.530 And then one day, we encountered a gem that 00:11:54.530 --> 00:11:58.440 talked about rack middleware. And in that conversation, Dan, 00:11:58.440 --> 00:12:01.070 who comes up with awesome things to say, says, 00:12:01.070 --> 00:12:03.330 guys, I don't think I really understand how rack 00:12:03.330 --> 00:12:06.070 middleware works. And we said, Dan, it's, it's obvious. 00:12:06.070 --> 00:12:07.860 This is how it works. And then we realized 00:12:07.860 --> 00:12:10.529 that none of us really knew how it worked. 00:12:10.529 --> 00:12:13.920 And in that conversation, we found a knowledge gap. 00:12:13.920 --> 00:12:15.860 We found this, this thing that we thought we 00:12:15.860 --> 00:12:17.840 understood, that at one point we did understand, but 00:12:17.840 --> 00:12:21.160 we'd just forgotten about. So the following week, instead 00:12:21.160 --> 00:12:24.200 of doing our regular code review session where we 00:12:24.200 --> 00:12:26.860 just read through the code, we, instead, took a 00:12:26.860 --> 00:12:28.940 break. We did some research on what rack middleware 00:12:28.940 --> 00:12:30.970 was, how it worked, when you'd modify it, what 00:12:30.970 --> 00:12:33.450 you do with it. We watched a few RailsCast 00:12:33.450 --> 00:12:35.270 videos, did some, you know, looked at some blog 00:12:35.270 --> 00:12:37.800 posts. And the following week, we shared that knowledge 00:12:37.800 --> 00:12:38.520 together. 00:12:38.520 --> 00:12:40.950 So we had a much higher-level conversation, but it 00:12:40.950 --> 00:12:43.660 just emphasizes the fact that it's not really about 00:12:43.660 --> 00:12:46.230 reading code. It's about reading code that's a launching 00:12:46.230 --> 00:12:50.510 point for more interesting conversation. 00:12:50.510 --> 00:12:52.300 The eighth thing is you gotta keep at it. 00:12:52.300 --> 00:12:54.420 So, I've never told my code club this, and 00:12:54.420 --> 00:12:57.170 they're gonna find out, which is awesome. But I 00:12:57.170 --> 00:12:58.420 thought it was kind of a chore. It really 00:12:58.420 --> 00:13:00.880 wasn't fun at first. It wasn't that exciting. It 00:13:00.880 --> 00:13:02.250 was something that I felt like I had to 00:13:02.250 --> 00:13:03.690 do. I don't like waking up in the morning 00:13:03.690 --> 00:13:06.000 on a Sunday. So it was really something that 00:13:06.000 --> 00:13:07.800 I had to force myself to do. But over 00:13:07.800 --> 00:13:10.220 time is when I saw the value. I was 00:13:10.220 --> 00:13:12.260 really looking forward to that first code reading session, 00:13:12.260 --> 00:13:14.510 when it ended and I said, yeah, I'm now, 00:13:14.510 --> 00:13:16.480 like, ten steps closer to being an expert. 00:13:16.480 --> 00:13:18.240 But that's not how it works. It really takes 00:13:18.240 --> 00:13:20.460 time to get the value from it. So keep 00:13:20.460 --> 00:13:22.290 at it long enough and hopefully you'll see the 00:13:22.290 --> 00:13:25.300 value as well. 00:13:25.300 --> 00:13:28.800 So everything was going swimmingly again, and then we 00:13:28.800 --> 00:13:31.310 read the omniauth-meetup gem. So right now I'm a 00:13:31.310 --> 00:13:33.700 developer for the New York tech meetup. Yes, it's 00:13:33.700 --> 00:13:36.340 a meetup group. Yes. This is a real job. 00:13:36.340 --> 00:13:38.910 And there we use the omniauth-meetup gem to authenticate 00:13:38.910 --> 00:13:42.529 our members. And this is something that was very 00:13:42.529 --> 00:13:44.930 interesting, because it was very unexpected for me. 00:13:44.930 --> 00:13:46.660 For me, I read code because I felt like 00:13:46.660 --> 00:13:48.050 that's what I had to do to be a 00:13:48.050 --> 00:13:51.100 better programmer. That's what everyone told me to do. 00:13:51.100 --> 00:13:52.980 But when I looked at a gem that I 00:13:52.980 --> 00:13:56.339 found personally interesting and personally relevant, it made the 00:13:56.339 --> 00:13:58.800 whole thing so much more exciting. Cause I use 00:13:58.800 --> 00:14:00.380 that gem. I used it all the time. I 00:14:00.380 --> 00:14:01.529 knew what it was supposed to do. I knew 00:14:01.529 --> 00:14:03.720 it wasn't, what it wasn't supposed to do, and 00:14:03.720 --> 00:14:05.339 having the opportunity to look under the hood and 00:14:05.339 --> 00:14:07.650 see how it did it got me really, really 00:14:07.650 --> 00:14:09.180 excited. 00:14:09.180 --> 00:14:11.400 And so the ninth guideline is to find interesting 00:14:11.400 --> 00:14:13.970 code bases. Things on topics or problems that maybe 00:14:13.970 --> 00:14:16.589 you've had. Things that you've worked on before. That 00:14:16.589 --> 00:14:20.400 makes it a whole lot more interesting. 00:14:20.400 --> 00:14:22.210 And then there are the unexpected benefits. Things that 00:14:22.210 --> 00:14:26.029 I really didn't consider at all. The first is 00:14:26.029 --> 00:14:27.830 that, you get to explore the organization of the 00:14:27.830 --> 00:14:30.690 code base. So we really focused on reading, literally, 00:14:30.690 --> 00:14:32.870 the lines of code. But just as interesting was 00:14:32.870 --> 00:14:35.310 the file structure, was, what are the folders called? 00:14:35.310 --> 00:14:36.920 And what are the files named? And how do 00:14:36.920 --> 00:14:37.690 we work together? 00:14:37.690 --> 00:14:40.240 And we got the opportunity to see that and 00:14:40.240 --> 00:14:41.800 get exposed to that from all different types of 00:14:41.800 --> 00:14:45.430 gems and libraries. The second was, you get to 00:14:45.430 --> 00:14:48.560 really see how collaborative code is. When you start 00:14:48.560 --> 00:14:50.560 as a programmer, people tell you that open source 00:14:50.560 --> 00:14:52.750 is amazing and this beautiful thing, where people from 00:14:52.750 --> 00:14:55.820 all over the world collaborate and build great things 00:14:55.820 --> 00:14:58.390 together. But when you actually see it for yourself 00:14:58.390 --> 00:14:59.940 and you see that that gem that you love 00:14:59.940 --> 00:15:01.970 is really just a fork from this other gem 00:15:01.970 --> 00:15:03.940 and really this gem is dependent on all these 00:15:03.940 --> 00:15:05.970 other things that you didn't think would ever have 00:15:05.970 --> 00:15:08.310 a connection, that's really powerful. And it makes the 00:15:08.310 --> 00:15:12.080 whole thing so much more beautiful. 00:15:12.080 --> 00:15:13.890 And the third, and honestly the most important one, 00:15:13.890 --> 00:15:16.220 especially as a novice, is it's a great opportunity 00:15:16.220 --> 00:15:19.040 to build your confidence. I didn't fully appreciate how 00:15:19.040 --> 00:15:22.310 intimidating it was to open up source code until 00:15:22.310 --> 00:15:24.089 I had to do it for Code Club. Cause 00:15:24.089 --> 00:15:26.020 that first day, when I said, guys we're really 00:15:26.020 --> 00:15:28.120 gonna open up this gem and try to understand 00:15:28.120 --> 00:15:30.410 what's going on. And I think it was maybe 00:15:30.410 --> 00:15:32.220 a month and a half into doing this, so 00:15:32.220 --> 00:15:33.960 it's been about, like, six code clubs at this 00:15:33.960 --> 00:15:36.550 point, or at that point, when I was at 00:15:36.550 --> 00:15:38.130 work and I wanted to know how this gem 00:15:38.130 --> 00:15:39.990 worked, I just opened it up. I didn't even 00:15:39.990 --> 00:15:42.380 think twice about it. Because by that point, it'd 00:15:42.380 --> 00:15:44.470 become such a habit. It had become so normal 00:15:44.470 --> 00:15:47.279 to look into how things worked. And having that 00:15:47.279 --> 00:15:49.670 frame of mind and that mindset is really, really 00:15:49.670 --> 00:15:51.649 important. It really makes you feel a lot more 00:15:51.649 --> 00:15:52.670 competent. 00:15:52.670 --> 00:15:56.260 So, obviously by now, I have fully convinced you 00:15:56.260 --> 00:15:57.830 that you do want to start your own code 00:15:57.830 --> 00:15:59.210 club. But you can't call it code club cause 00:15:59.210 --> 00:16:00.660 I called that. So you have to find out 00:16:00.660 --> 00:16:03.000 your own name. But I wanted to review the 00:16:03.000 --> 00:16:03.980 guidelines. 00:16:03.980 --> 00:16:06.399 So the first is, manageable code base. For us, 00:16:06.399 --> 00:16:08.230 it was a hundred lines of code. If you 00:16:08.230 --> 00:16:10.950 feel like that's too low for you, definitely raise 00:16:10.950 --> 00:16:12.520 the stakes, but I think having a limit is 00:16:12.520 --> 00:16:14.360 very important. 00:16:14.360 --> 00:16:17.920 Two. Understanding that the learning really does happen in 00:16:17.920 --> 00:16:20.610 the digressions and in the conversations. 00:16:20.610 --> 00:16:22.740 Three, that it's a team effort. Make sure you 00:16:22.740 --> 00:16:24.640 go at it with other people, and make sure 00:16:24.640 --> 00:16:26.839 that you check in and see that everyone is 00:16:26.839 --> 00:16:30.790 engaged and just as excited and hopefully you are. 00:16:30.790 --> 00:16:33.130 Four, to pick a tour guide, to take turns 00:16:33.130 --> 00:16:35.330 and have someone lead the conversations. It's also a 00:16:35.330 --> 00:16:37.710 great opportunity for people to lead and kind of 00:16:37.710 --> 00:16:39.320 feel like they're, they're taking charge as well. It's 00:16:39.320 --> 00:16:42.690 a different type of confidence booster. 00:16:42.690 --> 00:16:45.380 Five, to find those moments when you can interact 00:16:45.380 --> 00:16:46.740 with the code, where you can say, how would 00:16:46.740 --> 00:16:48.710 I do that? How do I feel about that? 00:16:48.710 --> 00:16:51.010 Even asking that question of, what do you think 00:16:51.010 --> 00:16:52.550 of this code and having an opinion is very, 00:16:52.550 --> 00:16:53.960 very powerful. 00:16:53.960 --> 00:16:57.270 Six, it doesn't have to be good. You can 00:16:57.270 --> 00:16:59.140 learn just as much from bad code as you 00:16:59.140 --> 00:17:00.870 can from good code. 00:17:00.870 --> 00:17:03.740 Seven, find those knowledge gaps and find a way 00:17:03.740 --> 00:17:06.039 to fill them. And hopefully fill them together. 00:17:06.039 --> 00:17:08.740 Finally, to, to keep at it and make sure 00:17:08.740 --> 00:17:09.959 that this is a habit, it's something you do 00:17:09.959 --> 00:17:12.398 on a weekly basis or a monthly basis. 00:17:12.398 --> 00:17:14.380 And finally to find interesting code bases. You're gonna 00:17:14.380 --> 00:17:17.398 find the experience much more enjoyable. 00:17:17.398 --> 00:17:21.079 So, the question that I had, every single week, 00:17:21.079 --> 00:17:23.439 was, how does this get me to an expert? 00:17:23.439 --> 00:17:25.160 I wanted to feel that moment where I said, 00:17:25.160 --> 00:17:27.540 yes, now I am so much closer, and I 00:17:27.540 --> 00:17:31.540 can feel myself growing and getting that cape, finally. 00:17:31.540 --> 00:17:33.860 And it didn't really happen quite that way. That 00:17:33.860 --> 00:17:37.130 transformation wasn't quite as visible and as tangible as 00:17:37.130 --> 00:17:39.250 I would have liked it to be. And so, 00:17:39.250 --> 00:17:40.640 I thought a lot about why. I thought a 00:17:40.640 --> 00:17:42.890 lot about, if I can't feel the change in 00:17:42.890 --> 00:17:46.130 a very tangible, physical way, how do I know 00:17:46.130 --> 00:17:47.860 that I'm becoming an expert? 00:17:47.860 --> 00:17:51.440 And I found this really great infographic on Twitter 00:17:51.440 --> 00:17:53.809 a couple months ago that I repurposed for my 00:17:53.809 --> 00:17:57.559 own agenda, that I think really explains the process 00:17:57.559 --> 00:17:59.770 and the result. 00:17:59.770 --> 00:18:02.420 So this is what information looks like. It looks 00:18:02.420 --> 00:18:05.220 like Skittles. And information is just all these little 00:18:05.220 --> 00:18:08.650 data points that are separate and isolated, that happen 00:18:08.650 --> 00:18:10.750 to kind of relate and, just by being in 00:18:10.750 --> 00:18:12.900 the same bucket. 00:18:12.900 --> 00:18:15.440 And then eventually, you're able to connect these little 00:18:15.440 --> 00:18:18.390 dots, and you're able to have knowledge. And knowledge 00:18:18.390 --> 00:18:20.610 is being able to tell a story. Being able 00:18:20.610 --> 00:18:23.470 to say, I can start from that yellow skittle 00:18:23.470 --> 00:18:25.280 in the corner, and if I go right, I 00:18:25.280 --> 00:18:26.470 can get to that green one, and then I 00:18:26.470 --> 00:18:28.630 go, shoom, go all the way down to orange, 00:18:28.630 --> 00:18:30.400 and then if I make a left, or, a 00:18:30.400 --> 00:18:32.640 right I'm at green. And then if I make 00:18:32.640 --> 00:18:34.230 a right again, I'm at red. And that's how 00:18:34.230 --> 00:18:35.630 I get from yellow to red. 00:18:35.630 --> 00:18:39.730 It's understanding that, that path. 00:18:39.730 --> 00:18:41.530 And then wisdom is saying, you know what, I 00:18:41.530 --> 00:18:43.140 don't need to go through all those skittles. I 00:18:43.140 --> 00:18:44.700 can just go straight from yellow to red if 00:18:44.700 --> 00:18:46.390 I make my own path. And you know, I 00:18:46.390 --> 00:18:47.760 don't even need that path to be straight. It's 00:18:47.760 --> 00:18:49.940 gonna be all straight, cause I'm a rebel. 00:18:49.940 --> 00:18:51.900 And so, this was kind of the journey of 00:18:51.900 --> 00:18:54.670 reading code together. The information and all those little 00:18:54.670 --> 00:18:56.740 data points come from all the code bases that 00:18:56.740 --> 00:18:58.309 you get to read, from all the things that 00:18:58.309 --> 00:19:01.020 you're exposed to that you've never seen before. 00:19:01.020 --> 00:19:03.350 Those points where things connect and you have knowledge 00:19:03.350 --> 00:19:05.910 and you have these stories and these paths, that 00:19:05.910 --> 00:19:08.850 comes from having really good code reading sessions. That 00:19:08.850 --> 00:19:11.290 comes from working with other people who give you 00:19:11.290 --> 00:19:14.020 their input, from asking those questions that you're gonna 00:19:14.020 --> 00:19:16.660 ask that are very insightful, and it also comes 00:19:16.660 --> 00:19:20.300 from leveraging everyone else's experiences. So when I go 00:19:20.300 --> 00:19:21.570 to work and I use a gem, I can 00:19:21.570 --> 00:19:23.110 say, hey, I've seen this before. 00:19:23.110 --> 00:19:25.050 When Dan goes to work and, and uses a 00:19:25.050 --> 00:19:27.030 specific method, he can say, I've done that before. 00:19:27.030 --> 00:19:29.700 And, in doing that, we're finding all these connections 00:19:29.700 --> 00:19:31.970 that would have been way harder to find on 00:19:31.970 --> 00:19:33.290 our own. 00:19:33.290 --> 00:19:35.250 And then, finally, we'll be able to see that, 00:19:35.250 --> 00:19:37.800 of all that noise, of all those patterns and 00:19:37.800 --> 00:19:40.700 designs and concepts and all those lines of code, 00:19:40.700 --> 00:19:42.260 the ones that we really care about are just 00:19:42.260 --> 00:19:43.840 yellow and red. And those are the ones that 00:19:43.840 --> 00:19:45.920 keep popping out, over and over again, over time. 00:19:45.920 --> 00:19:48.170 And eventually we have wisdom and we're much closer 00:19:48.170 --> 00:19:51.480 to being experts. 00:19:51.480 --> 00:19:54.470 So, these are just a handful of the code 00:19:54.470 --> 00:19:56.580 bases that we've read. If you're interested in looking 00:19:56.580 --> 00:19:58.020 at them. I think most of them are about 00:19:58.020 --> 00:19:59.550 a hundred lines. I think one or two may 00:19:59.550 --> 00:20:02.240 be a little bit bigger. But take a look, 00:20:02.240 --> 00:20:04.140 and I'd love to hear kind of your stories 00:20:04.140 --> 00:20:06.240 and see what you get from that. 00:20:06.240 --> 00:20:09.260 That is my website, bloggytoons dot com slash code-club. 00:20:09.260 --> 00:20:10.800 There's a page that has links to all of 00:20:10.800 --> 00:20:14.760 these gems and a few other ones as well. 00:20:14.760 --> 00:20:16.650 That's the end. That's my handle. I pretty much 00:20:16.650 --> 00:20:19.400 Tweet, like, mostly about programming and, like, cake. So 00:20:19.400 --> 00:20:22.770 you've been warned. But, and that's the website again. 00:20:22.770 --> 00:20:25.159 So I think that's pretty much it. Any questions?