I recently decided to stop talking about teaching kids to code, and actually do it. I don't plan to quite my job as a developer to become a full time teacher, so instead I started an after school program. This was made a lot easier because my wife is a high school teacher. We started a technology club at her high school with the dual goals of showing kids really interesting things that can be done with technology as well as actually teaching them some coding skills.
We've only been running for a few weeks but we've got about ten kids showing up every week. So far I've shown them some demos of things like using Google maps in your own software, making your own maps with TileMill, browser based games with Crafty, and phone call and SMS stuff with Twilio. They seemed to respond positively to all the demos but were very excited about the Twilio demo. I'm not surprised, because I also thought the ability to type something into a text area in the browser and then receive a phone call with that text read to me, is pretty sweet!
Most recently we started doing some basic HTML. Pages, images, links, etc. The kids were simultaneously making jokes about how simplistic it was ("oh wow, text on a page") and super excited to be creating something ("look I made it say something different", "cool, let me try!").
So basically what I'm saying is that if you have the opportunity, stop just "spreading the word about programming" and actually work with some kids to teach them something. It's only been a few weeks, but already it feels like very fulfilling work, and hopefully it will make a difference to expose these kids to the what's possible for them to do earlier than they might otherwise encounter it.
Sounds like you are enjoying running these workshops (the pupils will notice that and respond of course)!
Suggest you pop basic documentation of the demos and what you evolve as the club progresses somewhere for other people with the skills to use as some kind of model, or at least a starting point.
I have the basics up on GitHub at https://github.com/madisonpdx. I also plan to teach them how to use Git, but while version control is important, it didn't seem like the most exciting thing to begin with. I have been directing the students to the GitHub page though to get them comfortable with the idea of browsing open source code and possibly looking for other projects that interest them.
Is your wife planning to describe this club and its impact on the general motivation and development of the pupils to her school governors and local professional development forums?
They range in age from 14-17. One of the challenges I am trying to tackle is finding ways to keep everyone engaged even though they have a pretty wide array of skill levels. I've found that while none of the students have extensive programming training, the older ones have picked up a little bit here or there while the younger ones are more users of technology and don't really know anything about programming.
My wife is part of an initiative at her school to bring technology into the classroom, so there is already some awareness of this program within the school administration. Right now I'm totally focused on working with the kids that took the initiative to join the club, but who knows, maybe it can be developed into a program that could reach a larger audience within the school.
I really love what you did there and am wondering if you mind sharing some ideas on how to go about starting an initiative like this? How do you explain computer science concepts to students - things like classes, variables, etc? In essence, I would love to know more :)
Honestly, I don't really know. I've been trying to figure this out over the past couple of weeks and am starting to think that the answer to how to teach some of those things is not to (or at least not from the start). When I look at all the knowledge I have built up over the past 10-15 years, it's kind of overwhelming to attempt to identify a place to start. But when I think about how I got started programming, it was much more organic. I saw little bits of code around the web that did something that interested me, and then I just played with it to see if I could get it to do something slightly different. In the process I certainly learned about things like variables, logical constructs, loops, etc., but it wasn't until later years (and after firmly solidifying my interest) that I started a more formalized education in computer science.
Most of the students are very interested in writing mobile apps. While I would love to jump right into that, I don't know if we would get very far in one hour a week. So currently I'm just trying to provide some "exercises" that let them get their hands dirty with programming and maybe lead them in the right direction towards the type of programs that they are interested in writing. Then on their own time they can pursue things further, and I'm always available to answer questions or help solve problems they run into.
I agree with you. Thinking back about how I started, I only started really getting into programming in university. However, my main motivation back then was to make video games. In my early teens, I learned the basics of HTML and JS to do weird things on the web and that completely fascinated me. So I think you're right that the formalized education stuff shouldn't be taught directly. In fact, I wonder if it should even be taught at all at such an early stage. It sorta kills the fun of discovery how to do things with code.
It's not a direct answer to your question, but a while back I ran across http://www.introtopython.org/ which in a beginners introduction to programming using Python as the first language. It has a github project[1] full of IPython notebooks used in the course.
I became interested in computers in part because of a middle school teacher's similar weekly after-school program (TRS-80s!!). Thank you very much for improving these kids lives.
Thanks for the kind words! I was had the good fortune of having a father who was a software developer which is what made me aware of the field in general. But writing programs in BASIC on my TI-83 graphing calculator was what really spurred my interest in programming, and just making things in general. I just hope I can pass that excitement on to a younger generation.
We've only been running for a few weeks but we've got about ten kids showing up every week. So far I've shown them some demos of things like using Google maps in your own software, making your own maps with TileMill, browser based games with Crafty, and phone call and SMS stuff with Twilio. They seemed to respond positively to all the demos but were very excited about the Twilio demo. I'm not surprised, because I also thought the ability to type something into a text area in the browser and then receive a phone call with that text read to me, is pretty sweet!
Most recently we started doing some basic HTML. Pages, images, links, etc. The kids were simultaneously making jokes about how simplistic it was ("oh wow, text on a page") and super excited to be creating something ("look I made it say something different", "cool, let me try!").
So basically what I'm saying is that if you have the opportunity, stop just "spreading the word about programming" and actually work with some kids to teach them something. It's only been a few weeks, but already it feels like very fulfilling work, and hopefully it will make a difference to expose these kids to the what's possible for them to do earlier than they might otherwise encounter it.