本文来自Learning Programming at Scale, 作者是Philip Guo.
Philip Guo是来自加利福尼亚大学圣地亚哥分校认知科学的助理教授(简历)(对,就是金坷垃的故乡圣地亚哥!),我对他的认识来自于2015年接触的由他开发的python在线调试器(visualize python)以及他的一副东方面孔:
Philip Guo的研究领域包括人机交互,在线学习和计算机教育,他目前专注于构建能帮助人们学习计算机和数据科学的可扩展系统。他在MIT获得了计算机本科和硕士学位,在斯坦福大学获得了博士学位。
作为一个计算机学习者,我不仅使用过visualize python这个调试工具,而且从于美国发起的在线教育风潮中受益良多。Philip Guo或许称得上是这个风潮的领头人之一,这次看到他几个月前写的对计算机普及教育的思考文章,感慨很深,希望能够把它翻译下来,分享给大家,同时也对他的努力表示感谢。这个翻译是我的第一篇翻译文字,如有不准确的地方,可以在留言中给我指正。
Learning Programming at Scale
大规模编程学习
I just finished my third year as an assistant professor, which is roughly the halfway point before applying for tenure. This seems like a good time to take a step back and reflect on the research that I've done over the past three years with my students (from both UC San Diego and the University of Rochester) and other collaborators. In this article, I'll summarize all of the papers published from our work during this time period and show how they all fit together.
我的助理教授生涯刚过去3年,离申请终身教职还有一半时间。这些年和我的学生们(来自于UC圣地亚哥和罗切斯特大学)以及其他合作者有不少研究,这似乎是停下来做个总结的好时候。本文中我将总结这段工作中所发表的所有paper,并展示它们是如何有机结合在一起的。
My research over the past three years centers on a term that I coined in 2015 called learning programming at scale. It spans the academic fields of human-computer interaction, online learning, and computing education.
我过去3年的工作中心是大规模编程学习,它是我2015年提出的概念,它涉及了人机交互学术领域,在线学习和计算机教育。
Decades of prior research have worked to improve how computer programming is taught in traditional K-12and university classrooms, but the vast majority of people around the world—children in low-income areas, working adults with full-time jobs, the fast-growing population of older adults, and millions in developing countries—do not have access to high-quality classroom learning environments. Thus, the central question that drives my research is:** How can we better understand the millions of people from diverse backgrounds who are now learning programming online and then design scalable software to support their learning goals? **To address this question, I study learners using both quantitative and qualitative research methods and also build new kinds of interactive learning systems.
All of my publications since I started as an assistant professor fit into one of three major research directions within learning programming at scale:
- Understanding why and how people from diverse backgrounds are learning programming
- Designing new kinds of programming environments to support learners
- Designing new formats for programming-related instructional materials
过去几十年来先驱们致力于研究如何改善传统的K-12和大学的计算机教育,但是世界上的大多数人--低收入地区的儿童,全职工作的成年人,迅速增长的老年人,以及数以百万计的发展中国家的人民,他们都没有机会享受到高质量的课堂教育。因此这个中心问题驱动了我的研究:我们如何更好的了解那些文化各异背景不同的在线编程学习者,设计出满足他们学习需求的可扩展软件?为了解决这个问题,我用定性和定量的方法研究了学习者,并且构建了新类型的交互学习系统。自从我成为助理教授以来我发布的paper可以归为大规模编程学习的3个方向之一:
- 探究文化各异的人们为何以及怎样学习编程
- 为学习者设计新的编程环境
- 设计新形式的编程教学资料
Now I'll give a whirlwind tour of these publications. Click on any of the links below to see their abstracts and to download the full PDFs from my website.
接下来我会快速回顾这些文献,点击链接即可查看摘要,并可以从我的个人网站下载完整的PDF。
1. Understanding why and how people from diverse backgrounds are learning programming
One critical prerequisite for improving how programming is taught is to understand why and how people are currently learning and what obstacles they face. To work toward this goal, I have been studying traditionally-underrepresented learner populations and understudied settings for learning outside of the classroom.
1. 探究文化各异的人们为何以及怎样学习编程
我们要改善人们的编程教学,关键的先决条件是理解人们当前学习的动机和方式,找出他们所面对的障碍。为了达成这个目标,我研究了那些典型的弱势群体,找出了课堂外学习的一些特点。
I recently studied how older adults aged 60 and over are learning programming [Guo2017] (CACM blog post). I found that they were often motivated by age-related reasons such as keeping their brains challenged as they aged, making up for missed learning opportunities during their youth, connecting with younger family members, and improving their job prospects. They reported a variety of age-related frustrations such as a perceived decline in cognitive abilities, lack of social opportunities to interact with tutors and peers, and trouble dealing with constantly-changing software technologies.
我最近研究了60岁以上群体学习编程的情况[Guo2017] (CACM blog post)。我发现他们通常被年龄相关的因素激励,比如保持他们的大脑不因为年纪增大而便缓慢,弥补年轻时失去的学习机会,与年轻家族成员保持联系,提高工作前景等。他们提到年龄增大导致学习的沮丧感:认知能力的下降,缺乏同龄人学员的社交机会,对持续变化的软件科学倍感压力。
With Chris Parnin and his students, we studied the unique challenges faced by female programmers when seeking and providing help on the popular Stack Overflow question-and-answer website [Ford2016]. We found five participation barriers that affected women more than men: 1) not being aware of certain features of the site, 2) not feeling qualified enough to chime in with questions and answers, 3) being intimidated by the large size of the online community, 4) discomfort from interacting with strangers online, and 5) fear of appearing like they are slacking on the job by spending time on that website.
和Chris Parnin及他的学生的合作中,我们研究了女性群体,她们在著名的问答网站Stack Overflow上寻求或提供问题时会遇到特殊的挑战[Ford2016]。我们发现了影响女性参与的五个障碍:1) 被认为不理解该网站的某些特征,2) 被认为无法胜任参与提问和解答, 3) 被网上社区大规模威胁,4) 在网上与陌生人交流时有不舒适感,5) 害怕被在网站上花时间的原因是因为她们无法胜任工作。
My student Jeremy Warner and I also studied the recent phenomenon of hackathons where college students gather for 24-to-36-hour periods to learn coding by creating software prototypes [Warner2017hack]. We found that the time-limited format of hackathons generated excitement and focus and that learning occurred incidentally, opportunistically, and from peers. However, some students were discouraged from attending by perceptions of an overly competitive climate, an unwelcoming culture, and fears of not having enough prior experience; these factors were reported more frequently by women than by men.
我和我的学生Jeremy Warner也研究了最近的黑客马拉松,它要求大学生们组队在24-36小时内创建一个软件原型Warner2017hack]。我们发现这个时间限制或许能激发学习的热情和专注力,尤其是在竞争对手面前。但是,有些学生却不愿意参加这种比赛,她们觉得压力过大,不受欢迎,害怕没有足够的预备知识;这些因素在女性面前更多得被提及。
Finally, Parmit Chilana and I identified and studied an emerging population of college students [Chilana2015] and professionals at technology companies [Chilana2016] (joint work with Rishabh Singh) who want to learn programming but do not actually need to write code for their jobs. We call these people conversational programmers since their main goal is to learn just enough about programming to be able to hold productive technical conversations with programmers.
最后,我和Parmit Chilana确认并研究了想学习编程但工作中不适用编程的学生和科技公司的在职者[Chilana2016] (joint work with Rishabh Singh)的潜在人口。我们称这些人为口头程序员,因为他们的目标仅是能够和专业程序员富有成效的交流即可。
2. Designing new kinds of programming environments to support learners
为学习者设计新的编程环境
Current programming environments are designed to maximize the productivity of professionals who are already experts. Instead, I've been creating new environments to address the unique challenges faced by novice programmers, which can hopefully ease their path to eventually becoming experts.
当前的编程环境是为最大化专业程序员的工作效率而设计的。相反的,我已经开放了一个新的环境,可以用来解决新手的特殊挑战,有望减轻他们成为专家路上的障碍。
First I built a series of tools to help novices overcome a fundamental barrier to learning programming: understanding what happens "under the hood" as the computer runs each line of source code. These tools are all built on top of the Python Tutor web-based programming environment (pythontutor.com) that I created in 2010 [Guo2013]. Python Tutor (despite its outdated name!) lets users write code in languages such as Python, Java, C, C++, JavaScript, TypeScript, and Ruby; it runs the user's code and automatically visualizes what the computer is doing step-by-step. So far, over 3.5 million people from over 180 countries have used Python Tutor to understand and debug their code, which provides a large global user base to test the new tools that are built on top of it.
首先我创建了一系列可以帮助新手理解基本概念的工具集:理解计算机运行每行代码的背后发生了什么。这些工具构建于Python Tutor的web编程环境之下 (pythontutor.com)。Python Tutor(它的名字过时了!)可以让用户用Python, Java, C, C++, TypeScript, Ruby编写代码; 它运行用户代码并且自动逐步可视化计算机背后的操作。目前为止,超过180个国家的350万用户已经使用Python Tutor理解并调试代码,这为测试运行网站后台的新工具集提供了大量的全球用户基础。
I extended Python Tutor with a real-time collaborative mode called Codechella [Guo2015chella], which lets multiple users connect to the same visualization session and work together to solve programming problems and tutor one another. I followed up on these ideas with Codeopticon [Guo2015opticon], a real-time activity monitoring dashboard that allows a single tutor to simultaneously watch dozens of people working on the Python Tutor website and jump in to tutor multiple learners at once. My student Hyeonsu Kang and I then morphed Python Tutor into Omnicode [Kang2017], a live programming environment that continually visualizes the entire history of all numerical program values to give programmers a bird's-eye view of execution. Finally, with Chris Parnin and our student Ian Drosos, we created HappyFace [Drosos2017], a medically-inspired pain scale embedded into Python Tutor to let users self-report their frustration levels.
我为Python Tutor提供了实时协作模式:Codechella [Guo2015chella],多个用户可以连接到相同的可视化会话中,协作解决编程问题,或提供编程指导。接下来我实现了Codeopticon [Guo2015opticon]的众多想法,一个实时活动监控仪表盘,能让单个教师同时关注多个人在Python Tutor上的工作,并一次为多个学生进行教学。我和我的学生 Hyeonsu Kang将Python Tutor转变为Omnicode [Kang2017],它是一个动态的编程环境,能将整个程序周期数字可视化,给予程序员上帝视角。最后,我与Chris Parnin以及我们的学生Ian Drosos创造了HappyFace [Drosos2017],一个由医学想法激发的工具pain scale被嵌入Python Tutor,以帮助用户报告自己的沮丧水平。
The second set of challenges that I tackle here relates to the fact that novices have trouble installing, configuring, and managing the complex array of software tools required to become productive as programmers. I coined a term called command-line BS-ery to lovingly refer to these sources of extrinsic complexity that demoralize novices. To help remove these complexities, Jeremy Warner and I created CodePilot [Warner2017pilot], a programming environment that lets novices quickly get started with pair programming and test-driven development by integrating real-time collaborative coding, testing, bug reporting, and version control management into a single unified system. In a similar vein, my student Xiong Zhang and I created DS.js [Zhang2017], a bookmarklet that lets novices get started learning data science by writing code to analyze structured data directly on any existing webpage instead of needing to download data sets and configure data analysis software on their own computers.
我在这儿要解决的第二类挑战是新手在安装、配置、管理复杂的软件工具是遇到了各种麻烦,要知道这些工具是为专家准备的!我提出了一个名词:命令行屁话 lovingly refer to these sources of extrinsic complexity来指代这种用外在复杂刻意为难新手的行为。为了移除这些复杂性,我和Jeremy Warner创建了CodePilot [Warner2017pilot],一种让新手快速上手的编程环境,他们可以结对编程,基于测试驱动开发,该环境将实时合作编码,测试,bug报告,版本控制整合为一体。类似的,我和我的学生Xiong Zhang创造了DS.js [Zhang2017,一种可以帮助新手上手数据科学的书签工具,他们可以直接在已存在的网页上分析数据结构,而无需下载数据集,也无需在本地配置数据分析软件。
3. Designing new formats for programming-related instructional materials
3. 设计新形式的编程教学资料
My third major research direction involves studying the shortcomings of existing formats for programming-related instructional materials and then designing new instructional formats that improve the user experience for both creators and consumers of those materials.
我第三个主要科研方向包括研究当前相关编程教材的缺点,并设计新教材的形式,从而提高教材的创建者和使用者的体验。
In collaboration with Brad Miller and his student, Jeremy Warner and I studied how people used a popular digital textbook for learning programming, How to Think Like a Computer Scientist: Interactive Edition [Warner2015]. We found that the ability to execute code and see it visualized using Python Tutor directly within the context of textbook lessons was especially popular amongst readers.
在与Brad Miller及他的学生Jeremy Warner的协作下,我们研究了人们如何使用热门的电子书进行编程学习,How to Think Like a Computer Scientist: Interactive Edition [Warner2015]。我们发现直接在课本的上下文中使用Python Tutor进行编码和可视化特别受欢迎。
My students (led by Joyce Zhu) and I analyzed all of the discussion forum messages in a popular MOOC, Introduction to Computer Science and Programming Using Python [Zhu2015]. We found that people often wanted to discuss run-time code execution state but had lots of trouble doing so since forums are purely text-based. From these findings, we propose that a better discussion forum for learning programming should integrate automatically-generated visualizations of execution state and enable inline annotations of source code and output.
我的学生们(由Joyce Zhu带领)和我研究了一门MOOC热门课程的所有论坛内容 Introduction to Computer Science and Programming Using Python [Zhu2015]。我们发现人们经常讨论运行时代码执行状态,但是却很难真正解决它们,因为论坛是纯文本形式的。根据这些发现,我们提出更好的论坛应该嵌入执行状态自动生成的可视化图,并且开启代码内联标注和输出。
Inspired by the above work, my student Mitchell Gordon and I created Codepourri [Gordon2015], a new tutorial format and crowdsourcing workflow that lets Python Tutor users work together to create step-by-step tutorials by directly annotating run-time code visualizations. Since there are far more learners than experts, using learners as a volunteer crowd of workers is a potentially more scalable way to create coding tutorials than relying solely on experts. We found that crowd-created tutorials for simple code were accurate, informative, and even contained some insights that expert instructors missed.
受以上工作的启发,我和我的学生Mitchell Gordon创建了Codepourri [Gordon2015],它是一种教材的新形式,依靠众包工作流使python教师和用户可以在一起工作,一步一步创建出由可视化的代码构成的教材。因为学习者远多于专家,因此让学习者成为众包工作流中的志愿者,将比完全由专家编写教材更具有潜在可扩展性。我们发现众包创建的简单代码教程更精确,更详细,甚至还包含一些专家都未考虑的洞见。
Finally, back to eliminating command-line BS-ery, my student Alok Mysore and I created Torta [Mysore2017], a macOS app that allows users to create step-by-step tutorials that span multiple command-line and GUI applications by simply demonstrating the intended actions on their computers. The Torta system: a) automatically records a screencast video along with operating system events such as filesystem modifications, file diffs, and process invocations, b) generates a new kind of mixed-media tutorial with the benefits of both video and text formats, and c) gives step-by-step feedback to people who are following the tutorial and even automatically runs certain steps for them.
最后,回到消除命令行屁话上来,我和我的学生Alok Mysore创建了Torta [Mysore2017],一个macOS的app,运行使用者一步一步的创建教程,通过在电脑上简单的展示预定的动作就可以将众多命令行和GUI应用执行起来。Torta系统: a) 自动记录视频截图与操作系统上的事件,例如文件系统修改,文件对比,启动进程等,b) 生成新的由视频和文本混合而成媒体教程,c) 为使用教程的学习者的每一步动作做出反馈,甚至能自动执行某些步骤。
That's all for now, folks. In the coming years, I plan to keep building momentum along these three directions and then gradually expand outward. Stay tuned!
同志们!这就是全部了。在接下来的日子了,我打算继续朝着这三个方向前进并逐渐延伸出去。敬请期待!
References
[Guo2017] Philip J. Guo. Older Adults Learning Computer Programming: Motivations, Frustrations, and Design Opportunities. ACM Conference on Human Factors in Computing Systems (CHI), 2017. (Honorable Mention Paper Award)
[Warner2017pilot] Jeremy Warner and Philip J. Guo. CodePilot: Scaffolding End-to-End Collaborative Software Development for Novice Programmers. ACM Conference on Human Factors in Computing Systems (CHI), 2017.
[Warner2017hack] Jeremy Warner and Philip J. Guo. Hack.edu: Examining How College Hackathons Are Perceived By Student Attendees and Non-Attendees. ACM International Computing Education Research conference (ICER), 2017.
[Mysore2017] Alok Mysore and Philip J. Guo. Torta: Generating Mixed-Media GUI and Command-Line App Tutorials Using Operating-System-Wide Activity Tracing. ACM Symposium on User Interface Software and Technology (UIST), 2017.
[Zhang2017] Xiong Zhang and Philip J. Guo. DS.js: Turn Any Webpage into an Example-Centric Live Programming Environment for Learning Data Science. ACM Symposium on User Interface Software and Technology (UIST), 2017. (Honorable Mention Paper Award)
[Kang2017] Hyeonsu Kang and Philip J. Guo. Omnicode: A Novice-Oriented Live Programming Environment with Always-On Run-Time Value Visualizations. ACM Symposium on User Interface Software and Technology (UIST), 2017.
[Drosos2017] Ian Drosos, Philip J. Guo, Chris Parnin. HappyFace: Identifying and Predicting Frustrating Obstacles for Learning Programming at Scale. IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), 2017.
[Ford2016] Denae Ford, Justin Smith, Philip J. Guo, Chris Parnin. Paradise Unplugged: Identifying Barriers for Female Participation on Stack Overflow. ACM SIGSOFT International Symposium on the Foundations of Software Engineering (FSE), 2016.
[Chilana2016] Parmit K. Chilana, Rishabh Singh, Philip J. Guo. Understanding Conversational Programmers: A Perspective from the Software Industry. ACM Conference on Human Factors in Computing Systems (CHI), 2016.
[Chilana2015] Parmit K. Chilana, Celena Alcock, Shruti Dembla, Anson Ho, Ada Hurst, Brett Armstrong, Philip J. Guo. Perceptions of Non-CS Majors in Intro Programming: The Rise of the Conversational Programmer. IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), 2015.
[Guo2015opticon] Philip J. Guo. Codeopticon: Real-Time, One-To-Many Human Tutoring for Computer Programming. ACM Symposium on User Interface Software and Technology (UIST), 2015.
[Guo2015chella] Philip J. Guo, Jeffery White, Renan Zanelatto. Codechella: Multi-User Program Visualizations for Real-Time Tutoring and Collaborative Learning. IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), 2015.
[Gordon2015] Mitchell Gordon and Philip J. Guo. Codepourri: Creating Visual Coding Tutorials Using A Volunteer Crowd Of Learners. IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), 2015.
[Zhu2015] Joyce Zhu, Jeremy Warner, Mitchell Gordon, Jeffery White, Renan Zanelatto, Philip J. Guo. Toward a Domain-Specific Visual Discussion Forum for Learning Computer Programming: An Empirical Study of a Popular MOOC Forum. IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), 2015.
[Warner2015] Jeremy Warner, John Doorenbos, Bradley N. Miller, Philip J. Guo. How High School, College, and Online Students Differentially Engage with an Interactive Digital Textbook. International Conference on Educational Data Mining (EDM), short paper, 2015.
[Guo2013] Philip J. Guo. Online Python Tutor: Embeddable Web-Based Program Visualization for CS Education. ACM Technical Symposium on Computer Science Education (SIGCSE), 2013.