LA RubyConf 2010

Indoctrinating the Next Generation: Teaching Ruby to Kids

Indoctrinating the Next Generation: Teaching Ruby to Kids

by Sarah Mei

Teaching Ruby to Kids: A Pep Rally for Future Educators

In this engaging presentation, Sarah Mei discusses the importance of teaching programming, particularly Ruby, to kids. Drawing from her experiences as a software engineer and educator, she outlines why programming education is vital in today's society and how to effectively engage young learners.

Key Points Discussed:

- Importance of Teaching Programming:

- Most current programming educators lack hands-on experience, which diminishes learning outcomes.

- Programming is becoming an essential skill, akin to literacy.

- As languages evolve into more English-like syntax, accessibility and understanding for learners will increase.

  • Benefits of Teaching:

    • Teaching is rewarding and enhances the instructor’s understanding of the material.
    • Every teaching experience reveals new insights, as exemplified by Mei's workshop where a student posed a thought-provoking question about coding concepts.
  • Setting Effective Goals:

    • Use specific, measurable, and achievable goals when teaching.
    • Avoid vague goals; instead, aim to inspire excitement and lead learners towards independent exploration of programming.
  • Lesson Planning:

    • Create structured lesson plans using available online resources while keeping specific objectives in mind.
    • Incorporate visual and interactive tools to engage students.
    • Use short lesson segments (~15 minutes) to maintain interest and provide immediate results.
    • Be flexible with your lesson plan, adapting to student interests and their spontaneous questions.
  • Continuous Improvement in Teaching:

    • Recognize that teaching, like programming, is a skill that improves with practice.
    • Engage in various teaching opportunities, including formal talks, meetups, and volunteering for youth programs.
    • It's important to keep realistic expectations and understand that not every lesson will resonate with all students.

Conclusion:

- Sarah encourages everyone to embrace teaching by applying agile principles learned in development to the teaching process.

- The main takeaway is that fostering a passion for programming in children is essential for their future success, and with practice, anyone can become a compelling teacher.

00:00:18.240 I'm here to talk to you today about teaching. This is not an overly technical talk; in fact, this is more of a pep rally. I'm Sarah Mei, and I am a software engineer at Pivotal Labs. However, this talk is actually about what I do in my spare time.
00:00:31.840 I somehow found myself doing a lot of teaching, so I figure I must like it. In San Francisco, I conduct a lot of workshops for adults, and I've started doing workshops for kids. This has led me to think a lot about what it takes to be a good teacher. So, I'm here today to convert you all into teachers.
00:00:50.719 Now, why might you want to learn how to teach programming? The main reason I decided to do it is that I realized that most people who teach programming have no idea what they’re doing. It's really important for someone who teaches programming—especially more than other subjects—to be a practicing programmer. Not just someone who knows about programming or maybe did it once ten years ago, but someone who is doing it more or less full-time. The main thing about teaching—and the main way you're effective at teaching—is if you're excited about what you're doing. I'm really lucky to love what I do, and I want to convey that to others.
00:01:34.720 A lot of times, people learn about programming from someone who is simply giving them lesson plans out of a book, and that approach doesn't work very well. I believe that in the next 10 to 15 years, programming will become a much more important skill. Ten or fifteen years ago, typing was a different skill than literacy; these days, you can't really be considered literate without knowing how to type. Programming is becoming similar. The barrier to entry is lowering, and the languages are becoming more English-like, which means that being able to understand and manipulate software is likely to become part of basic life skills.
00:02:20.560 So, why should you teach, in particular? Let's get this out of the way: teaching can be very rewarding, which is why teachers often aren't paid well. More importantly, teaching leads to learning for the teacher. Every time I give a talk, I learn something about the topic, even if I thought I understood it well beforehand. In the workshops I conduct in San Francisco for adults, we teach a very basic Rails application, which consists of two models, one association, and a couple of scaffolded views. Yet, every time I teach that app to someone, I learn something new about it.
00:02:53.519 For instance, the last time I taught it, someone asked, 'Why are the instance variables that you declare in the controller available in the views? I thought Action View and Action Controller were separate class trees.' That was a really good point, and I hadn’t thought of it in that way. Teaching, for me, was very mysterious for a while. I have a CS degree, but I didn’t have any training in education or instructional design, and I didn’t understand how to convey information in an exciting way.
00:03:38.799 What I discovered is that it’s not that hard if you apply many of the same techniques you use in your regular development. I would argue that you already have all the tools you need and that you already use those techniques, but you typically apply them to a different end—creating software. So, does this process look familiar? Set goals, form a plan, expect to adapt, use short iterations, and continuous deployment. This is essentially the same set of steps you would follow to be a successful teacher. The first step is defining your goals.
00:04:20.320 Setting specific, immediate, measurable, and achievable goals is really important and is something many people overlook when teaching programming. You need to have a clear purpose for what you're doing. An example of a bad goal would be something vague, where it's unclear if the goal is achievable or measurable. For example, saying, 'I want to get students interested in programming' is too vague. On the other hand, a better goal would be something concrete and measurable. When I teach, I often look for these clear indicators of success in student engagement.
00:05:21.120 Most of what I've talked about so far applies equally well to teaching both kids and adults. However, when teaching kids, you must aim for goals that inspire excitement about what software can do. Your goal should be to instill enthusiasm, so that when they attain the intellectual capacity to grasp more concrete and complex programming issues, their excitement will help them overcome challenges. If you are working with a group of kids, another useful goal could be to ensure they leave with tools that equip them to explore programming further on their own.
00:06:05.600 Now that you've set your goals, the next step is to develop a lesson plan. I recently gave a talk at RubyConf about creating a lesson plan using Ruby and Shoes for high schoolers. Between then and now, I realized that creating the lesson plan is the easy part. There are many resources available online to help you break down the learning process into manageable steps. When you come up with a plan, remember to keep your goals in mind and choose resources that match those objectives.
00:06:55.080 In teaching, using visual and interactive tools is crucial. I’ve worked with kids of different ages and genders, and it seems true across the board that they respond positively when they can see the immediate results of their code. For example, using IRB is engaging for adults. For kids, having something visual pop up as a result of their coding can be incredibly exciting.
00:08:09.680 To develop a good teaching plan, install all necessary tools on the computers kids will use, allowing them to explore on their own. Start with straightforward exercises. There are many resources available for programming lesson plans, but not as many that discuss how to teach effectively, which is why I am sharing these tips.
00:09:02.480 When teaching, remember the importance of short iterations. Break your lessons into short segments of about 15 minutes that each lead to some visual change in the program. Also, be sure to listen to your students. If you have a plan but notice that your students are particularly excited about a topic, don't be afraid to adjust your lesson.
00:10:05.120 For instance, in one of my sessions with high schoolers, we began with a simple task of changing the window’s background color. They were so excited by this that we took extra time to explore other colors and their RGB composition. Although it wasn't part of my original lesson plan, the spontaneity enhanced their learning experience. Always look for those teachable moments and adapt your plan accordingly.
00:11:06.000 Don't stick rigidly to your plan, as some of the worst teachers do. They will try to hit every point in their outline regardless of the students' engagement. Rather than focusing on finishing the lesson, prioritize providing enough tools and inspiration for students to pursue learning independently. Look for those moments of curiosity and engagement, and follow them.
00:12:40.320 When I talk about continuous improvement in teaching, I mean that becoming a good teacher takes practice. The first time you try to teach something, things might not go smoothly, and that's completely normal. Just like programming, teaching is a skill that can be developed over time. Seek and seize opportunities to teach, whether it's through formal talks, meetups, or informal pair programming.
00:13:30.120 Additionally, volunteer for summer camps or initiatives like National Lab Day, which pairs teachers with scientists. These roles often seek more volunteers than they have available, and they are very grateful for your help. Remember, it’s important to maintain realistic expectations—sometimes you won’t reach every kid, and some lesson plans will fall flat. But keep pushing forward; the more you practice, the better you will get.
00:14:39.199 In summary, you should teach! You can teach, and the principles of agile methodology apply beyond just development. I believe that teaching is an area that could greatly benefit from these agile principles. Most importantly, practice frequently. Are there any questions?
00:15:14.920 One question was about the difference between teaching Shoes and Rails. It’s important to choose something achievable within the time frame you have. When teaching high schoolers, for example, you might have limited time. If you only have a few hours, it's important to select a topic manageable during that time. I've heard others recommend the Sinatra framework as a way to teach middle schoolers about building web apps, as it captures their interest more effectively. Ultimately, choose a programming language or tool that excites you, as your enthusiasm will translate into your teaching.