SARON YITBAREK: So, hello. My name is Saron. Thank you guys so much for coming to my talk. I'm really, really excited to be here. And as you can tell from the title of this talk, grammar is very important to me. So, before we begin, I want to start off by telling you a story. A year ago today, I was not a programmer. This is a, a really big confession that I'm sharing with you. A year ago today, I was this chick. I worked at tech startups. I did business development, sales, marketing. All of those non-technical roles. And I loved it. If you've ever worked at a tech start up, the best part is telling other people that you work at a tech start up, because they instantly think you're awesome and cool because you are. But I realized, over time, after that honeymoon phase was over, that my biggest skill, the best thing I had to offer my company, was being able to talk. And that didn't seem very valuable. And I was always surrounded by programmers. By these tech people who could build beautiful, powerful things. And so I found myself always creeping on them and looking at what they did and feeling like what they did was so much cooler and so much more interesting than anything I could ever do. So, I quit my job, I started learning how to code. I applied and got accepted to the Flat Iron school, which is a three month programming boot camp. And when we graduated, I was so excited. I could finally build stuff. I could make stuff. I was valuable. I could be a contributing member to society, as my mother tells me. And this is actually very important. One thing they don't tell you when you graduate from a programming boot camp is that you have to click your heels and hold up a keyboard, otherwise it's not official. So I was so proud. I was so excited. I learned all this stuff. I worked really, really hard. I'm apparently standing on a rock of code stuff that I conquered. But I was also painfully aware of all the other stuff left to learn. So there's the stuff I didn't know. There's the stuff I didn't know I didn't know. There was the stuff that I thought I knew, but I forgot, but I didn't know I'd forgotten it yet. So that's gonna be a nice surprise in the future. And then, by the way, all the stuff changes all the time. So welcome to programming. And I was painfully aware of how much of a novice I was. And this is the novice track, so hopefully this applies to you too. And this actually describes Dreyfus, or Dreyfus's Model of Skill Acquisition, that says that when you start at zero, when you start a new skill, you start at the novice level. You move up over time to an advanced beginner. Then you go on to confident, proficient, and hopefully an expert. And so, I don't want to be a novice. I don't think anyone here wants to be a novice. That's not fun. I want to be an expert. And I want that cape. That's who I want to be. So I started asking people and did some research on, how can I become an expert? How can I go from this poor novice person who kind of sort of thinks she knows what she's doing to, like, that cape-wearing expert. How do I do that? And the most popular answer I got was reading code. Which is both really helpful but also not very helpful. Because that leads to all these other questions, like, what code do I read? How often do I read it? And the best way to start an adventure is to start it with friends. So these are my friends. I think I drew them very flatteringly. And so these are some of my programming buddies from the Flat Iron school, and I got them together and I said, yo. If you get programming people together to start a code reading club, you have to start the conversation with yo. Otherwise it just won't work. So I said, yo, we should read code together. And so we decided that we were gonna dedicate one hour every single Sunday at 11 AM. By the way, this is a huge deal for me. I don't wake up before two on a weekend. So I'm, I'm already winning just by declaring that this might happen. And so we decided that we're gonna make this a regular thing. And we decided to call it Code Club. Because we are creative geniuses. So the first question was what code should we read? And we did some research. We asked, you know, the mentors and senior developers that we knew. We said, what would be a great starting point for a novice to start reading code? And they said, you should read anything. This is not helpful. Please do not answer in this way if someone asks you, where do you start? And so we came up with our own rules. We decided that the point of reading code was to find code that we thought was inspirational and would be great examples. So we decided that whatever we read, it was gonna be exemplary code. And we defined exemplary as having four attributes. We said that one, it had to be somewhat popular. Something that was well-used. Something that was endorsed by the, the developer community. Something that hopefully was well-documented, so that if we got stuck we wanted somewhere to go to. Third, it should be well-written, and four it should be well-maintained. So knowing that it had, you know, recent commits and people were still keeping, you know, maintaining it was really important to us. And we thought that if we did this, we studied our exemplary code and read every Sunday, we were gonna go from novice programmers to bad ass experts. So, the one suggestion that I actually did get from a much more senior person than I, said, why don't you start with Sinatra? You've done Sinatra. You know it. You're kind of familiar with it. So we said, great. We'll start with the get method, which is something that I never really understood. And so we gathered on the Google, and we got together and we said, we're gonna get through the get method. The get method in one hour? Totally doable. If you've seen the get method in Sinatra, I think it's like seven lines of code, which sounds perfectly doable. No. This is a trick. This is a huge lie. Because every single line is completely abstracted code, and you have to go through all these other files to find out what they're doing, and then they have more abstracted code. Then you go to other files, and it became just one rabbit hole after another. And we found that we really got nowhere with it. And so we went from being really excited to completely overwhelmed. So, I'm a really, really big believer in retros. I like taking the opportunity to reflect on what I just did, especially if it's something that I'm doing for the very first time. So, at the end of the very first Code Club session, we paused and we said, how was this experience, on an individual level? How did each person feel? What did we learn? And most importantly, how can we improve? The idea was to keep this going every week, so what can we do to make sure that the next time we do this, we learn a ton? And the first and most important part about the code-reading experience, is to pick a manageable code base. It was very, very disappointing, and a huge hit to our ego, to know that we couldn't even figure out a get method, that started out looking like just seven lines of code. And so, picking something that is manageable, that is digestible, that you can actually get through and understand is really, really important. This is the first guideline of having your own code club, and definitely the most important. So we decided that, for us, one hundred lines of code was the great limit. And it was a pretty arbitrary number, but it ended up being perfect. Because what happened was, in that hundred lines of code, you have just enough that you can complete a full gem or library. And that's a great accomplishment. Being able to say, hey, I read through this whole thing and I finished it? Even if you didn't understand it, you feel really good about yourself. Second, it gives you the amount of time and flexibility to stop and comfortably ask questions. So if there's something you haven't seen before, you can say, hey, can we slow down? Cause I, I don't really get this. Can someone explain it to me? And you don't feel like you're slowing anyone else down. Second, you have the opportunity to try things. One of my favorite parts about reading code is finding new methods that I haven't seen before, or maybe finding methods that I haven't seen in a long time. And so being able to stop the session and say, can we open up IRB and just play with this and see how this works is really, really valuable. And the third thing was research topics. So there were always patterns that we've seen that look kind of familiar, that we've seen in other places. Being able to stop and look things up on StackOverflow or just Google was a really great opportunity. And so with that limit, limited code base, we're able to do these things while also getting through code. Which brings me to the second really, really important part about reading code. It's not really about reading the code. Reading the code is just the starting point. All these other things that I mentioned, the parts where you kind of get off track and you kind of digress and you have conversations. Those are the things that matter. That's the real value in reading code. So, the learning happens in these digressions. In these conversations. I am very, very sensitive to getting off track and making sure that everything I do is very focused, so this is a little bit difficult for me. But over time, I got to see a lot of value in it. The third thing is that it's a team effort. Do not go at this alone. It will be very painful and you will not have a good time. So knowing that I had other people that were about my same level and that, you know, we knew what we knew and we knew what we didn't know, made it really, really easy to start on this journey and to keep going. It's really important to make sure that everyone you do this with feels comfortable enough to raise their hand and say, can we stop here? I don't quite get that. Or, I know you just said that, but can you say it a different way, because it didn't make sense to me the first time. So it's really important that everyone is comfortable, that everyone is engaged, and in order to do that, we find it very helpful to have a tour guide. So every week we trade off, and we have one person lead the conversation. This is just one person to say, hey, we're gonna start on line two. We're gonna keep going. Stephanie do you have a question? Dan, what do you think about this? Ian, have you seen this before? And having someone stop at all the right places, make sure everyone is engaged and excited is a really important part of this journey. So we found, very quickly, that finding exemplary code that's only a hundred lines is very, very difficult. I think we ran out after a couple of weeks. And so, out of necessity, we had to kind of lower our standards. We had to say, the most important part is really that we finish getting through the code base, so we're gonna, you know, not worry about whether it's well-maintained or well-written. We're just gonna find code that's a hundred lines. And this ended up being a really great thing. So one day, the very first week that we decided to lower our standards, we were looking at a method that we didn't really think was very well-written. And Dan said, this method sucks. How would we write it? And he gave us our very first point of interaction. And that's the fifth guide line, is to find these opportunities to interact with the code. Because in him asking that one question, it lead to a very interesting conversation. One, about what the intent was. What was the point of that method? What was it doing? Two, why was it written that way? Was it because the developer had a certain style? Was it because it was a fork from a different gem and they were just kind of, you know, maintaining that, that writing style stylistically? And how does it fit in to the overall design and architecture of the entire code base? Did this one stand out as being worse than the other ones? Or did it just kind of follow the general pattern? And so, these questions were awesome, because now it's not just about reading code, it's about going on a little adventure. We got to pretend that we were the developer, and we were the ones that, that were building this code and connecting what we knew, in our world and in our workplace, to this specific situation. So having that moment of interaction really changed the game for us. So, this leads to the sixth point, which is, it doesn't have to be exemplary. Actually, reading bad code is awesome. Because the fact that you get to say, as a novice, that this is bad code, and you get to, like, you know, have an opinion on someone else's work, you feel really good about that. It makes you feel fairly adequate. And so it doesn't have to be exemplary. It can be really bad, and you can learn a lot from that as well. So, everything was going swimmingly. It was going awesome. And then one day, we encountered a gem that talked about rack middleware. And in that conversation, Dan, who comes up with awesome things to say, says, guys, I don't think I really understand how rack middleware works. And we said, Dan, it's, it's obvious. This is how it works. And then we realized that none of us really knew how it worked. And in that conversation, we found a knowledge gap. We found this, this thing that we thought we understood, that at one point we did understand, but we'd just forgotten about. So the following week, instead of doing our regular code review session where we just read through the code, we, instead, took a break. We did some research on what rack middleware was, how it worked, when you'd modify it, what you do with it. We watched a few RailsCast videos, did some, you know, looked at some blog posts. And the following week, we shared that knowledge together. So we had a much higher-level conversation, but it just emphasizes the fact that it's not really about reading code. It's about reading code that's a launching point for more interesting conversation. The eighth thing is you gotta keep at it. So, I've never told my code club this, and they're gonna find out, which is awesome. But I thought it was kind of a chore. It really wasn't fun at first. It wasn't that exciting. It was something that I felt like I had to do. I don't like waking up in the morning on a Sunday. So it was really something that I had to force myself to do. But over time is when I saw the value. I was really looking forward to that first code reading session, when it ended and I said, yeah, I'm now, like, ten steps closer to being an expert. But that's not how it works. It really takes time to get the value from it. So keep at it long enough and hopefully you'll see the value as well. So everything was going swimmingly again, and then we read the omniauth-meetup gem. So right now I'm a developer for the New York tech meetup. Yes, it's a meetup group. Yes. This is a real job. And there we use the omniauth-meetup gem to authenticate our members. And this is something that was very interesting, because it was very unexpected for me. For me, I read code because I felt like that's what I had to do to be a better programmer. That's what everyone told me to do. But when I looked at a gem that I found personally interesting and personally relevant, it made the whole thing so much more exciting. Cause I use that gem. I used it all the time. I knew what it was supposed to do. I knew it wasn't, what it wasn't supposed to do, and having the opportunity to look under the hood and see how it did it got me really, really excited. And so the ninth guideline is to find interesting code bases. Things on topics or problems that maybe you've had. Things that you've worked on before. That makes it a whole lot more interesting. And then there are the unexpected benefits. Things that I really didn't consider at all. The first is that, you get to explore the organization of the code base. So we really focused on reading, literally, the lines of code. But just as interesting was the file structure, was, what are the folders called? And what are the files named? And how do we work together? And we got the opportunity to see that and get exposed to that from all different types of gems and libraries. The second was, you get to really see how collaborative code is. When you start as a programmer, people tell you that open source is amazing and this beautiful thing, where people from all over the world collaborate and build great things together. But when you actually see it for yourself and you see that that gem that you love is really just a fork from this other gem and really this gem is dependent on all these other things that you didn't think would ever have a connection, that's really powerful. And it makes the whole thing so much more beautiful. And the third, and honestly the most important one, especially as a novice, is it's a great opportunity to build your confidence. I didn't fully appreciate how intimidating it was to open up source code until I had to do it for Code Club. Cause that first day, when I said, guys we're really gonna open up this gem and try to understand what's going on. And I think it was maybe a month and a half into doing this, so it's been about, like, six code clubs at this point, or at that point, when I was at work and I wanted to know how this gem worked, I just opened it up. I didn't even think twice about it. Because by that point, it'd become such a habit. It had become so normal to look into how things worked. And having that frame of mind and that mindset is really, really important. It really makes you feel a lot more competent. So, obviously by now, I have fully convinced you that you do want to start your own code club. But you can't call it code club cause I called that. So you have to find out your own name. But I wanted to review the guidelines. So the first is, manageable code base. For us, it was a hundred lines of code. If you feel like that's too low for you, definitely raise the stakes, but I think having a limit is very important. Two. Understanding that the learning really does happen in the digressions and in the conversations. Three, that it's a team effort. Make sure you go at it with other people, and make sure that you check in and see that everyone is engaged and just as excited and hopefully you are. Four, to pick a tour guide, to take turns and have someone lead the conversations. It's also a great opportunity for people to lead and kind of feel like they're, they're taking charge as well. It's a different type of confidence booster. Five, to find those moments when you can interact with the code, where you can say, how would I do that? How do I feel about that? Even asking that question of, what do you think of this code and having an opinion is very, very powerful. Six, it doesn't have to be good. You can learn just as much from bad code as you can from good code. Seven, find those knowledge gaps and find a way to fill them. And hopefully fill them together. Finally, to, to keep at it and make sure that this is a habit, it's something you do on a weekly basis or a monthly basis. And finally to find interesting code bases. You're gonna find the experience much more enjoyable. So, the question that I had, every single week, was, how does this get me to an expert? I wanted to feel that moment where I said, yes, now I am so much closer, and I can feel myself growing and getting that cape, finally. And it didn't really happen quite that way. That transformation wasn't quite as visible and as tangible as I would have liked it to be. And so, I thought a lot about why. I thought a lot about, if I can't feel the change in a very tangible, physical way, how do I know that I'm becoming an expert? And I found this really great infographic on Twitter a couple months ago that I repurposed for my own agenda, that I think really explains the process and the result. So this is what information looks like. It looks like Skittles. And information is just all these little data points that are separate and isolated, that happen to kind of relate and, just by being in the same bucket. And then eventually, you're able to connect these little dots, and you're able to have knowledge. And knowledge is being able to tell a story. Being able to say, I can start from that yellow skittle in the corner, and if I go right, I can get to that green one, and then I go, shoom, go all the way down to orange, and then if I make a left, or, a right I'm at green. And then if I make a right again, I'm at red. And that's how I get from yellow to red. It's understanding that, that path. And then wisdom is saying, you know what, I don't need to go through all those skittles. I can just go straight from yellow to red if I make my own path. And you know, I don't even need that path to be straight. It's gonna be all straight, cause I'm a rebel. And so, this was kind of the journey of reading code together. The information and all those little data points come from all the code bases that you get to read, from all the things that you're exposed to that you've never seen before. Those points where things connect and you have knowledge and you have these stories and these paths, that comes from having really good code reading sessions. That comes from working with other people who give you their input, from asking those questions that you're gonna ask that are very insightful, and it also comes from leveraging everyone else's experiences. So when I go to work and I use a gem, I can say, hey, I've seen this before. When Dan goes to work and, and uses a specific method, he can say, I've done that before. And, in doing that, we're finding all these connections that would have been way harder to find on our own. And then, finally, we'll be able to see that, of all that noise, of all those patterns and designs and concepts and all those lines of code, the ones that we really care about are just yellow and red. And those are the ones that keep popping out, over and over again, over time. And eventually we have wisdom and we're much closer to being experts. So, these are just a handful of the code bases that we've read. If you're interested in looking at them. I think most of them are about a hundred lines. I think one or two may be a little bit bigger. But take a look, and I'd love to hear kind of your stories and see what you get from that. That is my website, bloggytoons dot com slash code-club. There's a page that has links to all of these gems and a few other ones as well. That's the end. That's my handle. I pretty much Tweet, like, mostly about programming and, like, cake. So you've been warned. But, and that's the website again. So I think that's pretty much it. Any questions?