As computing technology becomes more ubiquitous and more entangled
with engineering practices, it is no surprise that computer
programming remains a common activity that most engineering students
are expected to learn. But the evolution of computing technology and
computing culture has changed the practice of programming as
well as the content. While at one time programming was considered a
solitary job well suited for the less socially-inclined individual,
programming, and programs are becoming increasingly more social.
Almost as soon as the fledgling Internet came online, programmers
began sharing code at an ever increasing rate. However, most of our
pedagogical practices are informed by the more traditional view of
programming, namely that it consists of only learning details of
syntax, algorithms, and whichever development environment is selected
by the curriculum.
The solitary view of programming activity, while conducive to
assessment, does not necessarily reflect a holistic understanding of
the skills needed in a realistic environment. The activity of
programming has been shaped and reshaped by the products of the
process itself. Today, the selection of programming resources is
nearly boundless, from interactive instructional material, to
crowd-sourced Q\&A sites like Stack Overflow, and code hosting
repositories, like GitHub. Programming in realistic environments
involves interactions with multiple resources including people, and
technology. This study aims to build an understanding of the diversity
of programming strategies that individuals use when tasked with
programming in an open environment (i.e. no externally imposed
restrictions on language, tools, paradigms, etc).
From a situated learning perspective, programming is defined not by
the transformation of a problem solution into executable code, but by
the practices, situated in a particular context, that enable that
transformation. Thus, teaching programming is more than just
transmitting a cookbook of algorithms from teacher to student: it is
about the choice of resources one uses to resolve an error (e.g. a
google search, reference lookup), or picking an implementation
language (e.g. by familiarity, or by defining a "best" fit for a
given problem). This is not to suggest that knowledge of syntax and
algorithms is not important, but rather that many other skills are
also involved that often are not assessed.
Our qualitative study employs multi-modal observation and interview
data with participants who program regularly (e.g. members of student
organizations such as the Linux and Unix Users Group, Cyber Security,
and Women in Computing). We present an open-ended programming activity
scoped for a 30 minute session. Using a framework that situates
programming as a cognitive act entangled with a socio-techno context,
we develop a retroactive think-aloud protocol to question participants
about their thought process while working through the task. Using this
data, along with a critical discourse analysis of the interaction
between participant, program, and computer, we generate a rich
description of how people approach an open ended programming
problem. By building an understanding of how the tools shape the
practice, we will be better poised to inform teaching practices likely
to promote the kinds of skills necessary for graduates to succeed as
programmers outside of the classroom.
Are you a researcher? Would you like to cite this paper?
Visit the ASEE document repository at
for more tools and easy citations.