Hey I'm Katie Cunningham! I'm excited to talk to you about purpose-first programming.
A growing number of people are studying computing toward a wide variety of goals,
but we teach programming to everyone in largely the same way. This approach causes particular
problems for conversational programmers. Conversational programmers want to learn
programming so they can talk with others about technology, but they don't plan to program
themselves. Conversational programmers could be project managers, designers, or entrepreneurs.
Conversational programmers often feel that they don't benefit from typical resources
like online tutorials and formal courses. These approaches prioritize syntax and semantics
while conversational programmers want high-level knowledge about how programming is used to solve
real problems. Since typical programming instruction focuses on a deep understanding
of how coding structures operate, it can take a long time before novices work on authentic
tasks that they might see in a workplace. Designing for conversational programmers is hard
because they have seemingly conflicting goals.
They want high-level knowledge about programming gained in a short time frame,
but they also want to understand authentic tasks which are often complex. Our approach,
purpose-first programming, achieves both goals by focusing on domain-specific code patterns.
This focus on patterns makes the application of what students are learning very clear.
Added technical support allows learners to understand and use these patterns quickly.
To develop a proof-of-concept purpose-first programming system, we identified five common
patterns [in] web scraping code that use[s] the BeautifulSoup Python library.
We identified these patterns from code on Github and validated the authenticity and coverage of the
patterns with two experts. Drawing inspiration from the literature on programming plans,
each pattern is annotated with the goal it achieves overall, sub-goals within the pattern,
and information about where and how the pattern should be changed. We built a brief curriculum
that supported learners ability to recognize understand combine and tailor these patterns.
The proof-of-concept has several novel technical supports for purpose-first programming learning.
Code is displayed in ways that highlight pattern structures and their key features;
activities focus on identifying ways that patterns should be tailored; and code writing
doesn't occur from scratch but involves selecting ordering and tailoring patterns.
We evaluated the proof of concept in a user study
with seven undergraduate novice programmers interested in conversational programming careers.
These novices had no experience with web scraping using BeautifulSoup, but after only about half an
hour of instruction many of these conversational programmers could complete coding activities
that involved arranging modifying and recognizing web scraping code patterns.
From an analysis of participants' actions and their thinkalouds we found that they
were largely able to make effective use of the supports that purpose first programming provided,
like sub-goal labels and information about how to tailor patterns.
In interviews after completing the curriculum all participants told us
that they wanted to keep learning about code with purpose-first approaches.
From a thematic analysis of the interviews we found several factors that led to this motivation.
The conversational programmers felt successful because they believed they
had understood and completed programming tasks. They found the purpose-first approach valuable
because they were able to focus on the type of information they cared about: high level knowledge
rather than low level details. Conversational programmers found purpose-first programming easier
because they only had to focus on certain parts of the code. The participants thought
that this approach was for people like them, who tended to struggle with programming learning.
In summary, we present a new approach for programming learning designed for learners
who care more about what code can achieve than how a programming language works. In our user study
we found that conversational programmers can not only complete purpose-first activities, but also
find them motivating due to a sense of success and in alignment with their goals. Thank you.