BathRuby 2015
Learning Code Good
Summarized using AI

Learning Code Good

by Saron Yitbarek

In the video "Learning Code Good" by Saron Yitbarek, delivered at BathRuby 2015, the speaker shares her journey into programming after working in startups. The talk emphasizes the importance of community and collaborative learning in becoming a proficient coder. Key points include:

  • Transitioning from a Novice to Expert: Yitbarek reflects on her initial struggles as a new programmer and her desire to grow beyond a beginner. She discusses the Dreyfus model of skill acquisition, where one evolves from novice to expert through experiences.
  • Establishing Code Club: To accelerate learning, she and her bootcamp peers formed a 'Code Club', dedicating time to read and understand code collectively. They chose manageable code bases, pioneered a structured approach, and created rules to enhance their learning experience.
  • Lessons from Reading Code: Through the Code Club, they understood the value of picking small, exemplary code snippets to dissect. They learned that these sessions offered not only coding insights but also fostered discussions that deepened their comprehension.
  • Team Dynamics: Yitbarek emphasizes that collaborative learning is a team effort, encouraging participation and establishing a 'tour guide' to facilitate discussions. This setup ensured that every member's voice was heard, fostering a safe environment for inquiry and exploration.
  • Adapting and Evolving Learning Practices: Over time, they adapted their practices, realizing the importance of addressing knowledge gaps and enjoying the learning process. They also engaged with relevant code that resonated with their projects, enhancing the motivation to learn.
  • Creating a Community: After experiencing the isolation of solo learning, Yitbarek created 'Code Newbie', a platform to build a supportive community for aspiring coders. This initiative expanded from Twitter chats to various collaborative session formats, focusing on shared learning and engagement.
  • Conclusive Takeaways: Yitbarek concludes with actionable insights for others looking to start their own Code Clubs: choose manageable activities, focus on fruitful discussions, and encourage team participation for a more enriching coding experience.

Overall, the video encapsulates the transformative power of community in coding education, illustrating how collaborative approaches lead to deeper learning and confidence in programming.

00:00:24.000 So, how's everybody doing? Really, that's all I get? That's terrible! Can I get a little more energy? How's everybody doing?
00:00:34.960 Much, much better! So, this is my first time in Europe, and I'm very excited. Everything I know about England comes from Harry Potter, and it's pretty accurate. So, I'm really happy.
00:00:44.320 Bath is an absolutely gorgeous place in case you didn't notice. Can I get a round of applause for the organizers who are doing a great job? Okay, that's too much applause; I think I'm going to get them a little jealous.
00:01:01.039 My name is Saron, and I would like to start by telling you a story. Two years ago, I was not a programmer. I was this chick who worked for startups. Show of hands, how many people have worked for or are currently working for a startup? Raise your hand. Oh, that's wonderful!
00:01:10.240 Okay, so you know the life, right? There's like five people trying to make it work. On that team, I was not technical; I was the person who did pretty much everything else. I did some marketing, some sales, and some business development. But I found myself always looking over at the developers.
00:01:27.680 I was so jealous of them because they could build things and create tangible projects, things I couldn't do. I wanted that superpower, so I quit my job at a startup. I decided to learn to code, went to a three-month bootcamp, and graduated. I was so excited!
00:01:48.800 If you don't know, when you graduate from a bootcamp to become a real developer, you have to raise a keyboard and click your heels! Otherwise, it's just not official. When I graduated, I felt powerful! There was all this stuff that I had conquered. But then I realized there was so much more to know.
00:02:09.039 There’s the coding stuff you don't know, the stuff you don’t even know you don't know, and there's all the stuff you thought you knew but never fully understood. Then there's the stuff that you forgot, and you didn't even know you forgot. And when you do remember it, it’s always a great surprise. By the way, everything changes all the time, so welcome to programming!
00:02:37.519 If you’re not familiar with the Dreyfus model of skill acquisition, it says that when you are trying to learn something new, you go through several phases. Everyone starts as a novice. When I got my first job, I was very aware of how much of a beginner I was. I don’t want to be a beginner; I don’t think anyone here wants to be a novice.
00:02:55.200 You want to be an expert, to be that person with the orange cape and the cool sunglasses. That’s who I wanted to be. So, I went to all of my senior developer friends and asked them how to become an expert, how to transition from novice to expert as quickly as possible.
00:03:08.080 They all said the same thing: "Read code!" Wonderful! That's pretty straightforward advice, I thought. So, I gathered a few of my friends who graduated with me, and I said, 'Hey, let’s meet for one hour every Sunday at 11 am.' By the way, I'm not a morning person; I don't wake up before 2 p.m. on a weekend. So, this was a huge commitment for me.
00:03:15.040 We decided to call it Code Club. We asked our senior developer friends what kind of code we should read. What's a good code base to study from a beginner's perspective? They said that we should read anything that wasn’t too complicated. If someone asks you how to start learning something, don’t just say, 'Oh, you can start anywhere'. That’s not very helpful!
00:03:40.720 So, we created our own set of rules. We said that the code base we read should be exemplary. We defined exemplary as being popular, something we had heard of before, well-documented, well-written—and well-maintained—to ensure it wasn't outdated and was still being used.
00:04:03.040 We hoped that by reading code together regularly, we would transition from novices to badass experts. We decided to start with Sinatra’s GET method. In school, Sinatra was the first framework we learned, but we never fully understood how it worked, so we thought this would be a good place to start.
00:04:30.080 We got together on Google Hangout—by the way, I’m a huge fan of remote working; any excuse to not wear pants is great! We were excited to finally understand how the GET method worked. However, after some time we realized it was a little too complex for us.
00:04:50.560 We found ourselves following one method call to another, jumping across files, and getting lost in the complexity. What started as excitement quickly turned to overwhelm. I’m a big fan of retrospectives; I like to step back and assess how we did and how we can improve.
00:05:10.080 At the end of our first session, we asked ourselves how everyone felt about the experience, what we learned, and how we could improve for next week. The first lesson we learned was to pick a manageable code base. Sinatra was too big for us to cover in one hour.
00:05:33.720 We decided that for future sessions, we would stick with 100 lines of code. It was an arbitrary number, but it ended up working really well. Starting with something small gives everyone space to ask questions without feeling pressured to keep up.
00:05:52.560 It allowed us to try things out. We often opened Pry or IRB to test out what we were learning, and it was a great way to grasp new concepts. It was also great because we could research topics that intrigued us, allowing everyone the freedom to explore without the fear of holding others back.
00:06:03.920 I learned during that first session that it wasn’t just about reading the code; the code was a great excuse to have conversations. The digressions, those rabbit holes I initially worried about, were the best part of the whole experience.
00:06:21.680 A third lesson was that it’s a team effort. We kept our group small—at five people—so when we told others about it, I had to say no to those who wanted to join. But keeping the group small enabled everyone to have a voice and participate.
00:06:36.720 Another important thing we found was the need for a tour guide. This person isn’t an expert or the one who knows everything; they facilitate the conversation, starting at line four and guiding us down the line while ensuring everyone is engaged.
00:06:51.040 After a few weeks, we realized that finding exemplary code was challenging, especially given our definition. Out of necessity, we just grabbed whatever code base was around 100 lines long.
00:07:11.680 In one session, Dan said, 'This method sucks! How would we write it differently?' That was our first moment of interaction. It was the first time we challenged ourselves to think differently about the code.
00:07:30.640 We interacted with the code base by asking questions: What is the intent of this method? What is it actually doing? Why was it written that way? Was there a pattern or context we missed? The discussions we had as a result were invaluable.
00:08:00.000 Reading bad code is just as important because if you know what you're reading isn't stellar, it gives you permission to critique it. This is a really important skill for novice programmers—understanding that it doesn't have to be exemplary.
00:08:15.000 So, we started to break the rules a bit. Everything was going great until one day when Dan, who always asked questions, said, 'I don’t really understand how Rack middleware works.' We realized that we didn’t understand it either!
00:08:34.000 The next code session, instead of reading code, we chose to research Rack middleware. We sent each other blog posts and videos, reconvened, and engaged in discussions. We found that identifying knowledge gaps and leveraging these sessions to address them was a powerful learning tool.
00:08:58.400 We continued with our progress and then we tackled the OmniAuth Meetup gem. I had to use this gem for a project, so I asked the Code Club if we could dive into it together. When I realized I had to use something, the experience became so much more engaging.
00:09:11.360 Seeing relevant code bases transformed the way we learned. There were some unexpected benefits too; we were learning, asking questions, and having a great time. But there were also things I didn’t expect.
00:09:39.600 First, as we read code, we began to observe its organization and structure. It wasn't just the individual lines of code we focused on; it was about how the folders were structured, how the files were named, and all those little details that enhanced our understanding.
00:10:00.960 Next, we got to see collaboration in action. Initially, I'd heard about open source and how it enables people around the world to come together to write code, but I didn’t fully grasp it until I started reading code.
00:10:19.440 I realized that one gem was actually forked from another gem, which came from another code base entirely. Witnessing that level of collaboration was incredibly beautiful.
00:10:39.680 Finally, it built my confidence as a novice programmer. You're often self-conscious about what you know and don’t know. With each opportunity to engage, voice opinions, and ask questions, my confidence began to grow, and so did my coding skills.
00:11:00.960 After some time, I wanted to try something new. I didn’t just want to read code, and I didn’t want to do it only with people I knew. Before coding bootcamp, I spent three months alone in my apartment learning on my own.
00:11:21.680 It was exhausting and lonely. I used resources like Treehouse and Code School, but after learning together in the bootcamp, it was challenging to go back to that isolation.
00:11:47.840 The bootcamp was a community of wonderful people, and it cost me eleven thousand dollars. Many people can’t afford that. The value was not just the technical foundation; it was the community support I found there.
00:12:07.680 Realizing that I wanted to create a similar supportive community, I started 'Code Newbie.' I didn’t like the notion that if you didn’t have money, you couldn’t find a community to learn with.
00:12:25.680 I initiated a Twitter chat to foster a community. That was Code Newbie. The goal was to create a platform for us to learn together.
00:12:37.600 Every Wednesday night at 9 PM eastern time, we decided to convene. People would respond to questions I posed with a specific hashtag, creating a continuous conversation.
00:12:58.320 I thought it would only last a few weeks, but it’s been over a year now. We transitioned from a simple Twitter chat to a diverse, inclusive community excited about learning to code.
00:13:18.080 With this community, I wanted to try hosting Code Club sessions. I learned that we could read not only code but also blog posts, tutorials, and videos.
00:13:39.679 We kept all the guidelines we initially set for Code Club—small sessions with a maximum of four people, lasting one hour and focused on manageable activities.
00:13:58.240 In recent months, we’ve had over 50 different Code Club sessions! I've learned that becoming a better programmer isn't just about reading code bases; it’s about learning together.
00:14:11.000 It’s about understanding the rules of collective learning that help us grow as developers and as individuals. Obviously, you’re excited about starting your own Code Club, right? Yes? Okay!
00:15:03.680 To review, pick a manageable activity. For code reading, about 100 lines is usually comfortable. Don't try to read a whole book at once—maybe just one chapter at a time.
00:15:31.640 Understand that learning isn’t just about the reading or the activity; it's about the conversations that arise. Learning happens through interaction and discussions.
00:15:54.000 It's a team effort, so make sure everyone is engaged. Prompt quiet members to participate. Pick a tour guide to help facilitate the conversation.
00:16:12.799 Actively interact with the code; actually try things out. Bad code can be very instructive for learning. When you find a knowledge gap, seize that opportunity to dive deeper.
00:16:29.280 Finding relevant code bases aligned with your interests amplifies engagement. As I mentioned earlier, my focus is on becoming an expert, transitioning through the stages.
00:16:46.480 I believe that by learning together and having these conversations, we pave the way towards wisdom, which is crucial in becoming experts.
00:17:07.760 Thank you for your time! You're welcome to learn more at codenewbie.com.
00:17:23.679 You!
Explore all talks recorded at BathRuby 2015
+1