  This paper documents a year-long experiment to "profile" the process of
learning a programming language: gathering data to understand what makes a
language hard to learn, and using that data to improve the learning process. We
added interactive quizzes to The Rust Programming Language, the official
textbook for learning Rust. Over 13 months, 62,526 readers answered questions
1,140,202 times. First, we analyze the trajectories of readers. We find that
many readers drop-out of the book early when faced with difficult language
concepts like Rust's ownership types. Second, we use classical test theory and
item response theory to analyze the characteristics of quiz questions. We find
that better questions are more conceptual in nature, such as asking why a
program does not compile vs. whether a program compiles. Third, we performed 12
interventions into the book to help readers with difficult questions. We find
that on average, interventions improved quiz scores on the targeted questions
by +20%. Fourth, we show that our technique can likely generalize to languages
with smaller user bases by simulating our statistical inferences on small N.
These results demonstrate that quizzes are a simple and useful technique for
understanding language learning at all scales.
