paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Profiling Programming Language Learning

剖析编程语言学习
OOPSLA 8(OOPSLA1)2024匹配度 1/10 · 论文关注编程语言学习过程与教材测验干预,属于编程教育/开发者工具方向,不涉及静态分析、形式化验证、LLM/Agent 或浮点/贝叶斯程序分析。与研究画像的核心问题基本无交集。引用 3 inbox
Will Crichton, Shriram Krishnamurthi
crossref: 2026-09-10

AI 速览

一句话:通过在 Rust 官方教材中加入交互式测验,大规模刻画语言学习过程并识别难点、改进题目与教材干预。

本文报告一项为期一年的实验,旨在“刻画”编程语言学习过程:收集数据以理解语言为何难学,并据此改进学习。作者在 Rust 官方教材《The Rust Programming Language》中加入交互式测验,13 个月内共有 62,526 名读者作答 1,140,202 次。首先分析读者轨迹,发现许多读者在遇到 Rust 所有权类型等困难概念时较早退出。其次使用经典测验理论和项目反应理论分析题目特征,发现更概念化的题目(如询问程序为何不能编译,而非程序能否编译)质量更高。最后进行 12 次教材干预,平均使目标题目的测验得分提升 +20(原文单位未完整给出)。

问题
研究编程语言(尤其是 Rust)学习过程中的难点:读者在哪些概念上退出,以及何种测验题目更能反映学习困难。
方法
在 Rust 官方教材中嵌入交互式测验,收集 13 个月的大规模作答数据,并用经典测验理论与项目反应理论分析读者轨迹和题目特征,随后实施教材干预。
评估
基于 62,526 名读者的 1,140,202 次作答分析学习轨迹与题目质量;通过 12 次干预评估对目标题目测验分数的改进效果,平均提升 +20。
原文摘要(Abstract)

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

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot2570,
  title = {Profiling Programming Language Learning},
  author = {Will Crichton and Shriram Krishnamurthi},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {8},
  number = {OOPSLA1},
  year = {2024},
  doi = {10.1145/3649812}
}