Google Summer of Code

Hey all! I'm Sam Goto (, and I'll be your mentor this year for the AIMA Javascript Project for the AIMA Code organization!

Here we're not interested in showing Javascript code that implements algorithms, but rather in having interactive graphical demonstrations. So this project is for someone who can write Javascript, but more importantly someone with good graphic design sense, and an ability to invent good educational material.

I'll use this page here to coordinate the application process for the program!

If you have any questions, check the FAQ and ask here using the #gsoc tag and I'll reply. Join the glitter channel to talk to others.

Here is a quick quide of the process:

  1. What is the timeline?
  2. What is it like?
  3. How to apply?
  4. What are we looking for?
  5. FAQ

What is the timeline?

First, make sure you familiarize yourself with the timeline. Here is the rough breakdown for you:

Date Deadline
February 12th discuss application ideas
March 12th applications opens
March 27th applications closes
April 23rd students announced
May 14th coding begins
June 15th phase 1 evaluations
July 13th phase 2 evaluations
August 14th coding ends
August 21th final evaluation

What is it like?

Take a quick look at the program last year to get an idea of the scope of the project, the strategy we followed and what was concretely accomplished.

Most importantly, take a look at advice on future work and the lessons learned.

How to apply?

There are three main resources that you want to collect to apply:

  1. About yourself
  2. About your summer
  3. About your work

Tell us about yourself:

  1. resume, name, email, school, year
  2. personal projects and
  3. online footprint (e.g. blog, github, twitter, etc)

Tell us what you want your summer to be like:

  1. Form a plan: what chapters/algorithms would you like to explore (example)? Just a general idea is fine.
  2. Tell us why you think that's a realistic plan: do you have other commitments?
  3. Tell us how would you like to work together.

Bonus points: show us a sample of your best work

We are looking for a solid record of achievement in building high quality educational material.

If you already have projects in algorithm visualization (cool if it is outside of AI) point us to it (example or example or example or example or example).


  1. Drop me a line to say "hello" :)
  2. Take a look at the existing algorithms and fundamentally digest what makes them so good
  3. Pick one algorithm to prototype from the book:
    1. Internalize that we are looking for quality rather than quantity.
    2. See what other's are working on
    3. re-implement existing algorithms with a substantially better design or
    4. extend existing chapters with new algorithms or
    5. explore new algorithms in new chapters
  4. Design it
    1. Create a Design Document.Use something as lightweight and as fast as possible. Recommendation: google docs is both easy to create/edit (text and diagrams) as well as easy to get input on (with comments). Napkins and whiteboards work well too. Point here is: don't code. Design first.
    2. Get some inspiration from other students.
    3. Form a narrative
    4. Incoporate the design patterns
    5. Create wireframes
      1. With a narrative formed and some basic ideas of which diagrams you want to build and which controls they'd have, kick off a section in your design doc called "wireframes" to give you a clean canvas to put your thoughts in practice.
      2. Use text to connect the diagrams and form a flow.
      3. Use static diagrams (recommendation: google docs has some really good diagraming tools) or static images (e.g. photoshop or whatever) to turn some of your ideas more concrete (e.g. which controls would you expose? how much space would you need? does it connect well with the text? are some of the controls mixed with the text around it?).
  5. Get feedback. Add a comment in this list sending a link to your design doc.
  6. Prototype (advice)
    1. here we are less interested in seeing your ability to productionize code and more your ability to design good visualizations. quality, autonomy and expediency here is more important than technical/coding robustness, elegance or purity.
    2. use your favorite hosting environment (recommendation: github pages is very lightweight)
    3. use whichever CSS/HTML/JS framework you are most familiar/productive with
  7. Get more feedback. Add the link to your prototype here.
  8. Use the link of the thread in your application.

What are we looking for?

First and foremost, we are looking for students that have the ability to create really good explanations of algorithms in the book serving readers. Readers first, code elegance second (advice from Peter).

So, we'll be looking at students from this order:

  1. design,
  2. engagement and
  3. coding


Students will be compared first and foremost by the quality of their designs: a solid record of achievement in building educational visualizations.

As a general rule of thumb, we'll look first at depth second by breadth (on substance versus coverage): fewer higher quality visualizations trumps over lots of low quality visualizations.

Here are a few design patterns that have emerged in good work.

Here are some of the criteria to judge quality:

  • how well can you explain/present algorithms?
    • is it better than reading the book alone?
    • is it better than watching the class alone?
    • is it easy to comprehend for a large number of students with a varying degree of prior knowledge?
    • are the controls intuitive and powerful?
    • is it visually and aesthetically appealing?
    • is it correct?
    • if you sent this to an arbitrary CS/AI student who read the book, would they recommend others going through that visualization?
  • can you execute well?
    • do you feel like you know in which order to do things?
      • are you able to design things prior to prototyping?
      • are you able to prototype things prior to productionizing?
      • are you able to write good production code?
    • do you have a good intuition on when to pivot and when to push further?

Here is some advice from experience.


  • have you engaged early and often?
  • how many rounds of reviews have we gone through?
  • do you feel like we have made good progress during the interaction?
  • how good do you think your design is turning out?
  • what are your plans for the summer?
  • do you think you have formed a solid plan of attack?
  • how many visualizations do you think you can build?
  • how often would you like to meet?
  • tells us how you think your summer as a GSoC student will look like.


  • how is your CSS/HTML/JS kung-fu?
  • git?
  • TDD?
  • links to existing projects?