Wednesday, June 25, 2014

Lowering the barriers to learning programming

At Velocity 2014, I gave a talk to the attendees, a room full of web developers and backend ops, about why we need to lower the barriers to programming, and ways we can do that.

Since the goal of the talk was to give everyone an action item to lower a barrier in some way, here's a run-down of the ways you can help:

  1. Donate hardware:
    You can donate your own unused laptops to local schools or organizations (like Boys & Girls Club, YMCA, or coding specific ones).
  2. Fund a DonorsChoose.org project:
    You can search on DonorsChoose.org for projects that are funding laptops to teach CS in their classrooms. You can also filter by topic, poverty level, or location, and you can turn your donations into a gift in the name of a friend or family member.
  3. Contribute to online programming environments:
    You can contribute to existing open-source environments like repl.it, jsbin.com, or to the tools that power them like JSHint, ACE editor. You could also build curriculum around existing environments, or create an entirely new environment, like for Arduino, Objective-C, or 3D games.
  4. Make CS count in your K-12 state/district:
    You can visit code.org/promote, select your state, and follow the instructions to sign a petition or email a politician. You could also write letters to your local high school, especially if you have a student there, and offer to explain to the administration why it's important. Perhaps you could even volunteer to teach yourself (like via the TEALS program or mentor a teacher.
  5. Volunteer at a local coding club:
    Search on code.org/local/learn for local coding clubs, and volunteer as a mentor or teacher. If you can't find one, start one (like a CoderDojo chapter). You can use online self-guided curriculum like Khan Academy, so you don't even have to feel comfortable teaching.
  6. Encourage your kids:
    According to recent Google research, encouragement - especially parental - is very important. Encourage your kids, especially daughters, but do not pressure them.
  7. Clear up misconceptions about CS as a career:
    Many students don't know what CS is like as a career and realize that it can have social impact. Share stories of CS in the real world, like from Khan Academy's Meet the Computing Professional, Computing is Everywhere, Made With Code. Share those with kids you know, and encourage teachers to highlight one a week.

If you're interested in the whole talk, you can watch the video recording, see the slides embedded below or see slides here with speaker notes. Think of other ways that industry professionals can help? Let me know in the comments!


Monday, June 23, 2014

CS4HS @ Cal: Meeting CS high school teachers in person!

This past Friday, on June 20th, I was invited and honored to stop by CS4HS @ Cal, a gathering of local high school Computer Science teachers. As you can see from their group photo, they were a lively bunch:

I presented slides giving an overview of the Khan Academy programming curriculum, community, and challenges, plus our future plans:

It was lovely to speak with teachers that were using our curriculum or thinking of using it, and informative to hear about the struggles (and joys!) they face as CS teachers. If you're a CS teacher, you might be interested in reading through the extensive notes they took during the meeting.

We look forward to more opportunities to connect with CS teachers in the future! Thanks again to the inimitable Dan Garcia for inviting us.

Monday, May 12, 2014

New advanced JS course: Learn to program natural simulations!

Last fall, I discovered natureofcode.com: an online and print book about programming natural simulations using the Java version of ProcessingJS. I started going through the book myself, porting the programs to JavaScript and trying the suggested exercises. It was so much fun that I thought, hey, let's put this on Khan Academy so that all of our students can have this much fun learning!

Fortunately, author Daniel Shiffman CC-licensed the book, so we were allowed to port over the text, and add our interactive coding challenges and projects on top.

We've just released the new course as "Advanced JS: Natural Simulations," and we think that teachers and students alike will find it a great way to practice JavaScript, learn new ProcessingJS functionality, and brush up on basic math and physics concepts along the way. Here's a run-down of the units, to give you a better idea of what's covered:
  • Randomness: Learn about randomness, probability, and normal distributions, and use those techniques to make all sorts of "random walkers."
  • Noise: Learn about Perlin noise, which you can then use to create animated clouds and mountain ranges.
  • Vectors: Learn how to program with vectors and use them to simulate lightsabers, braking cars, and mouse-following motion.
  • Forces: Use forces to make more realistic simulations, modeling gravity, friction, and fluid resistance.
  • Angular movement: Use angles, polar coordinates, and trigonometry to simulate angular movement like batons spinning, boulders rolling, and cars rotating as they turn.
  • Oscillations: See how you can use the sine function to model simple harmonic motion, how to simulate a pendulum, and how to program Hooke's law for spring forces. Create programs that simulate slinkies, waves, and puppets along the way.
  • Particle Systems: Now that you've learned many ways to program the movement of single objects, you'll create particle systems, the standard way that games and movies simulate movement of groups of particles, like for smoke, wind, fire, and water.

Intrigued? Check out the intro video here, and you'll be on your way!

Monday, April 21, 2014

New case study: Going beyond our curriculum with cryptography, technology news, and games

We've added a new case study to our coach resources, highlighting Jenny Oliver's classroom in Thailand. She's a software engineer that suddenly found herself in charge of the CS class at the local high school, so she decided to base her class on our intro curriculum and build on top of it. Together with her husband, also an engineer, they added lessons about cryptography, technology news, and created new exercises and projects, like Rock-Paper-Scissors-Lizard-Spock. Interested? Read more here!.

Monday, April 14, 2014

New teacher tool: class progress viewer!

Want to get a general idea of how your class is progressing through our Intro to JS course? How many challenges have most students gone through? Are they behind or ahead of where you thought? Which students haven't started the later ones? Now, instead of looking at each individual student's progress, you can look at your class progress overall to find answers to all of those questions.

Just select the "Intro to JS" mission for the "Skills Progress" report, and you'll see bars representing the percent of your students that have started or completed bits of the course:

You can click on those bars to find out precisely which students are implied by the bars:

If you only care about their progress on types of content, like challenges or videos/talk-throughs, you can filter down what you see:

If you'd like your progress picker to always show "Intro to JS", you can now select that as your class' default mission, in the "Manage Students" tab:

We hope you enjoy the new tool and look forward to hearing how you use it!

Monday, April 7, 2014

CoderDojo JS workshop for girls: Great success!

CoderDojo is a network of clubs around the world that hold coding workshops for kids, and they teach a wide variety of topics, depending on who can teach what in that city. The local chapter, CoderDojo Silicon Valley, teaches evening workshops in Minecraft, HTML/CSS, Python, and SCRATCH.

We think that what CoderDojo is awesome, and wanted to try using our Khan Academy JS curriculum to teach their audience, so we worked together to put on a workshop for middle school girls, last Saturday afternoon.

Around 40 girls flowed into the room on Saturday (the waitlist was 3x that!) and 10 volunteer mentors scattered around the room, while parents sat by and watched. We started off by talking about what programming is, including playing a fun game where they program each other with stacks of commands (like one of the crowd favorites: "get on all fours", "crawl 10 steps", "say 'moo'").

Then we got into actual programming in JS, working the first talk-through and challenge together. After that, we set them off to go at their own pace through the curriculum, with mentors around to help. Once they got through the drawing and coloring sections, we paired them with another ready student, and they programmed together on "Project: What's for Dinner" for the rest of the time. We ended with a Show & Tell, with each pair showing off their team chant, secret handshake, and of course, their dinner. Here are some of their pair projects:

From "Fire-Breathing Rubber Duckies":
From "Crazy Eaters":
 
From "Ninja Kitties":
From "Imagine Bosses":

 
From "Wafflicious":
From "KT Stars":

It was a lot of fun, and a workshop that I hope that both I and others can repeat. To make it easier for others to replicate, I've put together a detailed lesson plan with print outs and a suggested agenda. Let me know if you have any questions or put one on yourself!

Saturday, March 29, 2014

New way to review what you learn in Intro to JS!

For each of the concepts that we cover in Intro to JS, students learn and practice through an alternating sequence of talk-throughs and challenges, and then finish up with a creative project. We want to give students a way to review what they've learnt in the talk-throughs without having to re-watch them all, to give them another opportunity to solidify everything they've learnt, and to give them one more chance to ask questions about the concepts. So, we've added "Review" articles at the end of each tutorial, which students can read and discuss, before they tackle the project. Here are quick links to check out each one:

We've only had these articles out for a few days, but students love them so far and are asking great questions in the discussion. If you have students learning JS, you may want to point them to the articles to refresh and reenforce what they've learned.