2. Designing new kinds of
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 (
http://py-thontutor.com/) that I created in 2010.16
Python Tutor (despite its outdated
name!) lets users write code in languages such as Python, Java, C, C++,
Java-Script, 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.
I extended Python Tutor with a
real-time collaborative mode called
Codechella12, 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 Codeopticon11, 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, 6 a live programming environment that continually visualizes the
entire history of all program values to
give programmers a bird’s-eye view of
execution. With Chris Parnin and our
student Ian Drosos, we created HappyFace, 7 a medically inspired pain scale
embedded into Python Tutor to let users self-report their frustration levels.
The second set of challenges that I
tackle here relates to the fact that nov-
ices have trouble installing, configur-
ing, and managing the complex array
of software tools required to become
productive as programmers. I coined
a term called “command-line BS-ery” to
refer to these sources of extrinsic com-
plexity that demoralize novices. To
help remove these complexities, Jer-
emy Warner and I created CodePilot, 2
a programming environment that lets
novices quickly get started with pair
programming and test-driven devel-
opment by integrating real-time col-
laborative coding, testing, bug report-
ing, and version control management
into a single unified system. Similarly,
my student Xiong Zhang and I created
DS.js, 5 which lets novices get started
learning data science by writing code
to analyze data directly on any web-
page instead of needing to download
datasets and configure analysis soft-
ware on their own computers.
3. Designing new formats
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
My students and I analyzed all of
the discussion forum messages in a
popular programming MOOC14 and
also how people navigated a computer programming digital textbook. 15
We found that people often wanted
to discuss runtime 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.
My student Mitchell Gordon and I
created Codepourri, 13 a new tutorial
format and crowdsourcing workflow
that lets Python Tutor users work to-
gether to create step-by-step tutorials
by directly annotating runtime 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 accu-
rate, informative, and even contained
insights that expert instructors missed.
Back to eliminating command-line
BS-ery, my student Alok Mysore and
I created Torta4, 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 relevant operating
system events, 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 automatically runs certain steps.
1. Guo, PJ. Older Adults Learning Computer Programming:
Motivations, Frustrations, and Design Opportunities, CHI
2017. (Honorable Mention Paper Award)
2. Warner, J., and Guo, P.J. CodePilot: Scaffolding End-to-End Collaborative Software Development for Novice
Programmers, CHI 2017.
3. Warner, J., and Guo, P. J. Hack.edu: Examining How
College Hackathons Are Perceived By Student
Attendees and Non-Attendees. ICER 2017.
4. Mysore, A., and Guo, P.J. Torta: Generating Mixed-Media GUI and Command-Line App Tutorials Using
Operating-System-Wide Activity Tracing. UIST 2017.
5. Zhang, X., and Guo, P. J. DS.js: Turn Any Webpage into
an Example-Centric Live Programming Environment
for Learning Data Science. UIST 2017. (Honorable
Mention Paper Award)
6. Kang, H., and Guo, P.J. Omnicode: A Novice-Oriented
Live Programming Environment with Always-On RunTime Value Visualizations. UIS T 2017.
7. Drosos, I., Guo, P. J., and Parnin, C. HappyFace:
Identifying and Predicting Frustrating Obstacles for
Learning Programming at Scale. VL/HCC 2017.
8. Ford, D., Smith, J., Guo, P.J., and Parnin, C. Paradise
Unplugged: Identifying Barriers for Female
Participation on Stack Overflow. FSE 2016.
9. Chilana, P.K., Singh, R., and Guo, P.J. Understanding
Conversational Programmers: A Perspective from the
Software Industry. CHI 2016.
10. Chilana, P.K., Alcock, C., Dembla, S., Ho, A., Hurst,
A., Armstrong, B., and Guo, P. J.Perceptions of NonCS Majors in Intro Programming: The Rise of the
Conversational Programmer. VL/HCC 2015.
11. Guo, P. J. Codeopticon: Real-Time, One-To-Many Human
Tutoring for Computer Programming. UIS T 2015.
12. Guo, P.J., White, J., and Zanelatto, R. Codechella:
Multi-User Program Visualizations for Real-Time
Visual Coding Tutorials Using A Volunteer Crowd Of
Learners. VL/HCC 2015.
14. Zhu, J., Warner, J., Gordon, M., White, J., Zanelatto,
R., and Guo, P.J. Toward a Domain-Specific
Visual Discussion Forum for Learning Computer
Programming: An Empirical Study of a Popular MOOC
Forum. VL/HCC 2015.
15. Warner, J., Doorenbos, J., Miller, B.N., and Guo, P.J.
How High School, College, and Online Students
Differentially Engage with an Interactive Digital
Textbook. EDM 2015.
16. Guo, P. J. Online Python Tutor: Embeddable Web-Based Program Visualization for CS Education.
Philip Guo is an assistant professor of cognitive science
at the University of California, San Diego. His research
spans human-computer interaction, online learning, and
computing education. Learn more at http://pgbovine.net/
© 2017 ACM 0001-0782/17/12 $15.00