Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

problems.md: Remove topics #242

Merged
merged 5 commits into from
Jan 8, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions problem_ordering.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Rust Track Problem Order

The actual source of truth of problem order and topics is [config.json](config.json), but this file documents our reasoning behind the problem order in that file.

## Background

- https://github.com/exercism/xrust/issues/126
- https://github.com/exercism/xrust/issues/127
- http://designisrefactoring.com/2016/07/09/exercism-shouldnt-make-you-cry/

## Our Approach

We order our problems for students who are learning Rust. With that audience in mind, we follow two rules when adding new problems.

- A exercise should introduce one new concept
- Exercises should progress from Rust basics to advanced Rust concepts

### One New Concept

If a problem solution requires students to use both `Result` and `HashMap`, then at least one of these concepts should be introduced by an earlier problem.

If the track has several problems that rely on a concept, group them together to reinforce learning.

### Progress Through Rust

#### Early Problems

Early problems should focus on Rust syntax and concepts that are present in many programming languages: conditionals, looping, higher-order-functions.
Copy link
Member Author

@petertseng petertseng Jan 7, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it gives me a bit of pause to see higher-order functions in the same sentence. But why is that? I realized:

  • It seems "weird" to put this in the section before Result and Option... because I usually associate higher-order functions, Result, and Option all with functional programming.
  • And of these three, it does seem that higher-order functions take more effort to understand.
  • However, maybe my estimates of the effort required to understand any concept in this sentence are wildly wrong.
  • Finally, on further reflection, it is true in my experience that a language can have higher-order functions without either Result or Option (the latter two need static typing to really make sense)

So despite my "weird" feeling, the sentence is correct and I've no change to suggest. I just wanted to share the feeling.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think HOF will depend entirely on the students' background. Those coming from Ruby/JS/Python/Java 8 will be familiar. I think they are becoming pretty standard, though that might just be my years of Ruby speaking.


#### Middle Problems

Problems in the middle of the of the track should introduce concepts that are less common. `Result` and `Option` and Traits, for example. Or syntax such as `while let`.

Through the middle section of the track students should gain familiarity with a wide range of Rust concepts.

#### Later Problems

Problems late in the track should do one of two things:

1. Introduce advanced concepts -- Lifetimes, Concurrency, Unsafety
2. Require a complex solution that synthesizes all the knowledge students have gained to date
88 changes: 0 additions & 88 deletions problems.md

This file was deleted.