Hackety Hacking the Computer Science Classroom Workspace


Jump to: navigation, search


Important Dates


  • 17 Oct - Three new problems
  • 24 Oct - Three edited problems + three new problems
  • 31 Oct - Six edited problems + three new problems
  • 7 Nov - Nine edited problems + three new problems
  • 30 Nov - Twelve edited problems
  • 20 Dec - Last phase of adding more content!
  • 31 Dec - Content Ready!

Weekly Meeting Time

We will meet weekly via Skype at UTC 20:00. This is Wednesday in the US and early Thursday in India.

Project Overview

Our goal is to create at least twelve high-quality problems and solutions that may be used to teach and learn programming. Solutions are provided with relevant supporting materials to make them easier to understand for students. Problems are selected and asked in a way such that it can be related to real world which further enthuses the student to find solutions.

Note about solution platforms

Initially, we planned to focus exclusively on Hackety Hack. However, now that I have seen your wide range of experience, I think you should feel free to experiment with different platforms, depending on the problem. For example, a particular problem might be better solved with Python rather than Hackety Hack.

Learning to use the appropriate tool is a part of learning to program. To help your audience, please explain why you chose a particular platform with your solution code.

Later on, we might collect multiple solutions for each problem. For example, imagine solving the same problem in Java, Python, and Squeak.

The only limit is that the tools you use should be freely available and cross-platform compatible. This is because we want to be sure that students and teachers can actually use the solutions we provide. Hackety Hack, Python (with Pygame), Squeak, Processing, and Java are all great choices.

What is a problem?

A problem is a learning opportunity. Students should feel challenged to create a solution that can be implemented in the world outside of the classroom. Great problems can be inspired by real challenges that have faced professionals, or academics in the past.

High-quality problems are not exercises. In other words, problems challenge students to implement content knowledge towards a bigger goal. This is the crucial difference between problem-based learning and a traditional model based on testing.

Problem Statement

Your Problem Statement is a short piece of writing (one or two paragraphs) describing a challenge. It should include all of the information the reader will need to solve the problem.

A strong problem statement is like an unfinished story to be completed by the reader.

Sample Output

Provide an example of how the program will look to its user.

Curriculum Connections

Provide a list of content goals to help teachers locate your problem. Some of these content goals will be Computer Science related (e.g. "Understanding if-else logic") while others might be from other fields.


Provide at least one solution to the problem in running code. It's important that this solution is well-documented with in-line comments.

Where do I get ideas for my problems?

You might think about using existing learning materials as inspiration. For example, look at each chapter of How to Think Like a Computer Scientist: Learning with Python. Why do we learn about these topics? What types of problems do strings help you solve? What problems do arrays solve?

Sample Problem

Problem Statement

Your DJ friend has an enormous collection of vinyl records. She knows the Beats per minute (BPM) of all the records at 45rpm but wants to know how these BPMs will change if she plays the records at 33rpm. She's figured out that the proportion of 45/33 is important but isn't sure how this will affect the BPMs. Can you write a program for this DJ so that she can easily figure out what the BPMs of her 45rpm records will be when she plays them at 33rpm?

Sample Output

Please enter the BPM at 45rpm and press ENTER: 120
The BPM for this record at 33rpm will be approximately 88.0bpm.

Curriculum Connections

To solve this problem, students will:

  • Take input from a user
  • Store input in a variable
  • Perform floating-point division
  • Output data to the user
  • Demonstrate an understanding of proportions


# First, we ask the user for the bpm of the record on its normal speed
# and store this answer into a variable called bpm
bpm = input("Please enter the BPM at 45rpm and press ENTER: ")

# Next, we convert this bpm to the slower speed and store this answer in 
# a variable called slowbpm
slowbpm = bpm * (33.0 / 45.0)

# Finally, we print a friendly message to the user with the answer.
print("The BPM for this record at 33rpm will be approximately ", slowbpm, "bpm.")

Problems we're working on

Make links to incomplete problems here. Prefix your page names with Hackety_Hacking_Problem_ so that we can find them easily.

We will keep on adding new content here.

Final Content

  • Added on: 20-Sep-07 Added By: Kevin Driscoll Level Beginners
 Problem Name: Hackety_Hacking_Problem_BPM_Converter     
  • Added on: 25-Sep-07 Added By: Ankur Verma & Anubhav Agarwal Level Intermediate
 Problem Name: Hackety_Hacking_Problem_Spring_Oscillation_doend
  • Added on: 04-Oct-07 Added By: Vijay Majumdar Level Intermediate
 Problem Name: Hackety_Hacking_Problem_Family_Tree_FibonacciSeries
  • Added on: 15-Oct-07 Added By: Ankur Verma & Anubhav Agarwal Level Advanced
 Problem Name: Hackety_Hacking_Problem_AreaofN_SidedPolygon_Methods
  • Added on: 24-Oct-07 Added By: Ankur Verma & Anubhav Agarwal Level Intermediate
 Problem Name: Hackety_Hacking_Problem_Pyramid_NestedLoops
  • Added on: 31-Oct-07 Added By: Vijay Majumdar Level Advanced
 Problem Name: Hackety_Hacking_Problem_Cells_in_Human_Body_StringManipulation
  • Added on: 11-Nov-07 Added By: Vijay Majumdar Level Advanced
 Problem Name: Hackety_Hacking_Problem_Factorial
  • Added on: 19-Nov-07 Added By: Vijay Majumdar Level Advanced
 Problem Name: Hackety_Hacking_Problem_Hacking_password
  • Added on: 10-Jan-08 Added By: Ankur Verma & Anubhav Agarwal Level Advanced
 Problem Name: Hackety_Hacking_Problem_Making_robots_meet
  • Added on: 16-Jan-08 Added By: Vijay Majumdar Level Advanced
 Problem Name: Hackety_Hacking_Problem_Chess_puzzle 

Closing Thoughts

Creating compelling Computer Science curriculum remains an enormous challenge. Ankur, Anubhav, and Vijay, the three excellent students who chose to work on this SoCon project, brought their own enthusiasm for programming to the creation of a collection of interesting problems for beginning programmers. They represent an important step toward developing a large collection of problems that will spark the curiosity of new programmers.

There are many places to take this work from here:

  • Translating solutions into a variety of programming languages (in particular, Python)
  • Translating accompanying texts and inline comments into written languages other than English
  • Checking existing problems on the XO
  • Providing frameworks for practicing and acquiring the skills needed to solve these problems
  • Inventing new solutions to the existing problems
  • Creating suggested sequences into which these and future problems might be placed
  • Making concrete connections to math learning
  • Continuing to collect and create new and compelling problems

When Hal Abelson suggests that Computer Science is more akin to "magic" than science in his famous taped lectures, he indicates the joy of curiosity, exploration, and discovery. The best free and open CS learning materials will offer space for new programmers to feel challenged, successful, and in control of this adventure.


  • Kevin Driscoll - (Our Mentor) providing invaluable guidance, co-operation and support in development of problems at all times.


Summer of Content interns

Ankur Verma See more here [1]

Anubhav Agarwal Contact: anubhavit@gmail.com

Vijay Majumdar Contact: majumdar.vijay@gmail.com

Content made as a part of Summer of Content'07 organized by OLPC and COL.

Personal tools
  • Log in
  • Login with OpenID
About OLPC
About the laptop
About the tablet
OLPC wiki