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