Skip to content

Parsons problems as exercises #95

Open
@alexmojaki

Description

@alexmojaki

Currently users may solve Parsons problems when they ask for a solution to an exercise. There should also be a way to specify an entire exercise as a Parsons problem from the beginning. This would be great way to make difficult exercises easier while still being effective for learning.

Doing this mostly requires refactoring the current frontend code.

Here's an example of a program that could be nice to frame as a Parsons problem. It's a crude simulation of a pandemic, which some people might find relevant...

import random

people = []

for _ in range(10000):
    people.append("healthy")

people[random.randrange(len(people))] = "infected"

for day in range(100):
    print("Day", day)
    for kind in ["healthy", "infected", "recovered"]:
        print(kind, people.count(kind))

    new_people = people.copy()
    for current_index in range(len(people)):
        person = people[current_index]
        if person == "infected":
            if random.random() < 0.1:
                new_people[current_index] = "recovered"
            elif random.random() < 0.5:
                index = random.randrange(len(people))
                if people[index] == "healthy":
                    new_people[index] = "infected"
    people = new_people
    print()

Example output:

Day 0
healthy 9999
infected 1
recovered 0

Day 1
healthy 9998
infected 2
recovered 0

Day 2
healthy 9996
infected 4
recovered 0

...

Day 97
healthy 122
infected 13
recovered 9865

Day 98
healthy 122
infected 11
recovered 9867

Day 99
healthy 122
infected 10
recovered 9868

The only concept this script requires which hasn't been covered already is importing modules, specifically the random module. It doesn't even need nested lists, functions, or boolean operators.

I think this program is great for getting people interested and motivated, and teach some useful ideas, but asking them to write it themselves is too much. There's plenty of complexity and subtlety, and if they get it wrong it's very hard to debug. It's not even easy to look at the output and decide if something is wrong. That's why a Parsons problem seems perfect - the exercise becomes much more manageable, but still requires plenty of thinking.

Since typing in this much code would be very tedious, I think there could be a Copy button which copies whatever is currently in the shuffled blocks into the editor.

I'm keen to hear other ideas for exercises that would be good for this format.

Metadata

Metadata

Assignees

No one assigned

    Labels

    course materialText and exercises that students work throughfrontendThe Javascript user interface

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions