I’m Starting a Programming Camp for Middle and High School Students
Last year, I tried my hand at teaching a group of ninth graders how to program. The pilot was moderately successful but there was definitely a lot of room for improvement. At the end of the semester, I cataloged what I learned about teaching programming to teenagers for future reference. I won’t rehash all of that here, but I will bring up some key points as we go along.
Tomorrow is the first day of the summer programming boot camp at the Scholars’ Academy and I’m super-excited. Three hours a day for three days a week for three weeks. My students have given up a significant amount of time out in the sun (or in front of their televisions) to sit with me in a poorly air-conditioned room and learn how to hack. I’m under a lot of pressure to make sure that they don’t regret that decision.
Looking over my notes from seven months ago, I apparently learned a few things. The first thing I learned is that the web filtering proxy at my school cripples most package management systems (e.g. RubyGems, PIP, NPM). Ruby and Python’s core are both wonderful things, but libraries are typically a prerequisite for making anything non-trivial.1 Secondly, whatever technology I choose needs to be easy for them to install on their computers at home. Most students have Windows and many don’t have administrative rights.
That’s all fine, dandy and technical. The core issue is that, for many of my students, it has to be visual for it to be real. They have an amazingly short attention span for printing “Hello World” to the command line—an environment that up until nine minutes ago, they didn’t even know existed. They understand that Angry Birds and Tumblr are made through the magic of programming, but if I want to keep their attention, I need to stop rambling about the differences between integers and floating point numbers and show them how to make something cool and when are we going to learn how to make iPad apps?
Lucky for me, there is a language out there that runs in it’s own little environment. In addition, it is easily installed pretty much every operating system and it comes ready to rock with a familiar GUI. That’s right, I’m talking about JavaScript. We’re targeting Google Chrome as our platform of choice.
My approach is to focus on teaching the bare minimum necessary to get hacking. The guiding principals are as follows:
- Learning to code gives you the ability to take your ideas and make them a reality.
- The web is malleable. With JavaScript (and other languages), you can alter and change anything you want.
- The web is full of powerful APIs that allow you to make interesting things by mashing two or more existing things together.
Week One
We’re going to start by firing up the JavaScript console in Chrome and start messing with other people’s web pages (e.g. head over to the Wikipedia page for George Washington and change the title to your name) as well as abuse the prompt(), alert(), and confirm() functions for fun and profit.
With any luck, this will pique their interest to tolerate learning just enough JavaScript, HTML, and CSS in the context of real web pages. The idea is that I want to cover all of the basic concepts of computer programming (e.g. variables, functions, objects, arrays, and control flow) so that they can make sense of code that they come across, but not obsess over the plethora of string methods at their disposal.
We’ll finish out the week with an introduction to jQuery how you can use it to easily add interaction to a page and mess around with a little page I whipped up where they can connect buttons to different events that modify a series of colored boxes on the screen.
Weeks Two and Three
The main focus for the second week will be introducing students to APIs and shipping a Google Chrome extension that either adds functionality to a site they frequent or pulls information from an API. By the end of the week, they should have a small piece of software they created all by themselves. In the third week, we’re going to explore jQuery Mobile to get the basic skeleton of a basic mobile app fleshed out and working on an iPad or iPod touch.
I may have to build a proxy server sitting outside the school that makes API calls to blocked services like Twitter and Tumblr and passes the results back to the students in JSONP so that they can work with it in their browsers.
In Conclusion
The Common Core Standards talk a good game about preparing students for college and career readiness and yet, in an economy that values taking your ideas and shipping based on them, there is little to no focus on these the embarrassment of riches that exists on the Internet these days. I’m still a little angry that the 16 years of my life I put in the hands of the educational system left me completely unprepared for the real world and I’m not comfortable letting the same thing happen to my students.
I’m really excited about this project, but I’m also scared out of my wits. Some really smart people (thanks Nick and Jocelyn!) helped me think through a lot of my curriculum, but any additional feedback on how to make this awesome and worthwhile for my kids. Feel free to reach out on Twitter.
-
You can solve the large majority of the proxy problems with a little love to your
.bashrc, but that’s not the way I want to spend the better part of the first session getting that working across 32 machines and there are still all sorts of edge cases that crop up where that doesn’t work. ↩
-
analogian likes this
-
luciditywaver likes this
-
yasicheh likes this
-
positivelypersistentteach likes this
-
myaccessprompts likes this
-
rayfoxy reblogged this from stevekinney
-
sfiasconaro likes this
-
vivaci0usly likes this
-
reddfoxxthepoet reblogged this from stevekinney
-
This was featured in #Education
-
stevekinney posted this