We, @rylev and @ekuber (with @nikomatsakis as lang team liaison), propose an initiative to better understand how people learn Rust with the goal of helping the Rust project continue to make learning the language and core tooling easier.
This is an open call for feedback on this idea.
Rust is well known for its somewhat steep learning curve. In the latest Rust annual survey, many pointed out that making Rust easier to learn would directly help promote the adoption of the language.
Over time, Rust has become easier to learn thanks to initiatives like the Rust book, friendly error messages, non-lexical lifetimes, and more. However, we believe it is time for there to be a concentrated effort in understanding how people learn Rust in order to continue this progress.
Charter and Goals
The project group's charter is simple: help make Rust easier to learn.
The Rust learning project group's initial goal is to better understand how Rust is being learned including common pitfalls and areas of particular confusion in order to provide information to the Rust community for how to improve Rust's learnability.
We hope the information obtained by the project group to be useful to many different parties including the lang and compiler teams to improve new and existing features and diagnostics as well as to Rust educators across the Rust community.
The project group will not engage directly in creation of learning content. Instead, the project group hopes to assist already ongoing efforts within the community.
We expect to eventually propose the project group as a lang team project, but we are open to feedback on the best home for it.
The first concrete activity to be done by the project group will be to conduct a Rust learnability survey to better understand the status quo.
Questions We Hope to Answer
The survey will aim to shed light on the following questions (note: these are not the questions that will be asked, rather the ones we hope the data helps us answer):
- Roughly how difficult is it to learn Rust compared to other languages?
- How much "effort" does it take to learn Rust?
- What technical backgrounds make it easier or harder to learn Rust?
- What is the nature of Rust's learning curve? Is it short and steep or long and gradual?
- How do people define being "competent" in Rust? How does this differ from other languages? Do people generally over or under estimate their abilities in Rust?
- How does learning Rust differ for those with different learning styles?
- How well does the Rust project's and Rust communities learning materials server those with different learning styles?
- What topics are the most difficult for people to understand?
- When in the learning process do people typically get tripped up on these topics and what exactly seems to trip them up the most?
- For those who know feel confident in these topics, what helped them gain that confidence?
- What patterns from other languages do people typically try in Rust that lead them down a bad path?
- What resources do people typically use to learn Rust and in what order?
- Are there any best practices for teaching certain topics?
- What error messages and other diagnostics are good for advanced users but poor for new learners and vice versa?
Call for participation
Assuming the community and the Rust project think this is a good idea, we would like to invite others to work with us. If you would like to participate, please let us know.
First, we are looking for feedback and participation from any interested members of any team within the Rust project. We hope that this effort can shed light on how people learn to use Rust holistically from the compiler and language to core tooling like Cargo and rustdoc.
We are also looking for people with data science backgrounds who will be able to assist us in creating and analyzing the survey.
For now, we aim to keep the goal of the project group simple, focusing on better understanding the status quo of Rust's learnability story. Further activities in pursuit of this goal may include:
- Learnability studies where we actively monitor people's unguided learning experiences.
- Guided teaching sessions which aim to teach Rust in controlled ways to gauge effectiveness.
If the first activity of this project group proves to be sustainable and successful, we may want to consider making this an official working group (potentially under the lang team, though this is an open question). This would entail growing the goals of the project group to include any of the following:
- helping the project identify what specific areas are under documented or documented in a less than ideal way.
- helping eliminate common "papercuts" from certain usage scenarios.
- explicitly assisting initiatives that produce official learning material such as the book and Rust by Example. Note: this will not be through producing content but by:
- helping gather and process feedback
- producing user study data which could help better tailor the material to learners
- recruiting help to produce content should the specific project desire it
- helping fine tune processes such as the RFC so that learnability is appropriately considered.