Friday, August 30, 2013

Launch: Introducing Programming Challenges

- Sophia Westwood, Khan Academy CS software engineering

Today we're launching programming challenges, a major new part of Khan Academy Computer Science! We have been working on designing and building the challenge platform over the last few months, and we're excited to introduce you to our first iteration. Go ahead and try your hand at a challenge -- good luck!

We envision the challenges as a core component of our curriculum alongside the talkthroughs. While the talkthroughs involve mostly passive learning (similar to watching a video), the challenges emphasize active, participatory learning.

Why challenges?

At the start of the summer, our team discussed where we wanted to take Khan Academy Computer Science over the next few months. We agreed that students would learn best (and have more fun!) by actually coding, and we wanted more students to experience the thrill of creating something neat with code.

But, for a beginner programmer, there is an enormous gap between watching the talkthroughs on drawing or animation, and actually drawing or animating something on your own. We didn’t have anything to bridge the gap between guided, passive lessons and open-ended program creation.

So, we started tossing around the idea of coding challenges. The challenges would provide guidance and help students start coding and creating right away. Rather than just listening to talkthroughs, the students would have to figure things out and apply what what they just learned. And, after completing the challenge, they would have a program that they could continue to extend and customize.

The challenges are in essence bite-size versions of offline programming assignments that include live feedback, hints, and steps. They form a structured environment for students to gain experience with new concepts by actually coding and creating, allowing for exploration while also providing guidance on program correctness.

What is a challenge?

After a student watches a talkthrough, we encourage them to start a challenge to begin coding with the concept they just learned. A challenge is a series of steps that the student must complete to create a program. The steps break down the program, providing guidance to the student on how to approach each part. We check whether the student has completed each step, providing hints when the student goes astray.

Our challenges try to balance guidance and flexibility, centered around StructuredJS, the library we wrote to verify student code and give hints. Expect to hear more over the next few weeks about the design considerations and technical infrastructure behind the challenge framework!

Credit reel

Challenges have been a major feature for the Computer Science team over the last few months, particularly the two summer interns.

Leif Foged took charge of the challenge user interface, tirelessly working towards a more intuitive and beautiful frontend while building out functionality. I worked on the challenge infrastructure, building StructuredJS as the core static analysis driving our challenge verification and hints, as well as the necessary backend for user progress. Pamela Fox contributed creative and fun ideas for challenges, leading to crazy face, ice cream, and cloudy day. Designer Kitt Hirasaki helped us iterate all summer on the display, and after starting only four days prior, new hire Tabitha Yong designed the mock-ups for the interface that led to our final design.

And of course, our team lead John Resig masterfully guided the process, from the initial meetings where we threw out the possibility of challenges, all through the launch today, with countless code reviews and design conversations along the way.

Although we're just getting started, we're excited to see the community response and learn from your feedback. We are also looking forward to extending the curriculum with new challenges and talkthroughs.

No comments:

Post a Comment