-
Notifications
You must be signed in to change notification settings - Fork 1
/
intro.tex
18 lines (15 loc) · 2.73 KB
/
intro.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Programming is more than dealing with language syntax and semantics: it is inherently an exercise in problem-solving that extends beyond the act of editing code in an Integrated Development Environment (IDE).
We are not the first to observe this.
For instance, programming has been characterized as an iterative process of refining mental representations of computational problems and solutions and expressing those representations as code~\cite{loksa2016programming}.
Other studies have found evidence for the facts that programming requires gathering information from multiple sources~\cite{sillito2008asking}, includes creating mental models of program structures~\cite{von1995comprehension}, and involves exploring and evaluating many alternatives~\cite{hartmann2008design}.
% Much is known already about programming being a problem-solving activity beyond editing code in the editor provided by the IDE.
% During software development, for instance, programmers are known to create all sorts of auxiliary non-code artifacts~\cite{cherubini2007whiteboard}.
% As a second example, programmers are known to organize these artifacts into structures that are relevant to the particular task(s) they are currently focused upon~\cite{baltes2016empirical}.
% As a final example, programmers are known to not pursue a single solution, but to generally approach a task by exploring (either mentally or externalized) multiple alternative solutions~\cite{madeyski2017experimentation}.
% By applying prior work on problem-solving from a cognitive psychology perspective~\cite{mayer1992thinking}, we can classify these actions, respectively, into \textit{representing relevant information}, \textit{contextualizing information}, and \textit{generating alternatives}.
% These actions can then be generalized to represent the problem-solving activities of \textit{externalizing thoughts \& ideas} and \textit{developing strategies}.
We surveyed the literature from the perspective of programming as problem-solving, with Table~\ref{pps_matrix} summarizing key activities that developers employ when programming. These activities can be partitioned into six categories (\textit{Activities}), with specific actions that represent in more detail how the high-level activities manifest themselves in practice (\textit{Actions}).
Clearly, not every task involves all of these problem-solving actions, and there is no linearity to the order in which they are employed.
Sometimes an action may not even be observable when it takes place solely in a programmer's head.
At the same time, literature has documented that all of these actions do occur and play an important role in how programmers arrive at a solution to the programming problem at hand.
\input{table_pps} % Programming as Problem-Solving Matrix