  Software developers solve a diverse and wide range of problems. While
software engineering research often focuses on tools to support this problem
solving, the strategies that developers use to solve problems are at least as
important. In this paper, we offer a novel approach for enabling developers to
follow explicit programming strategies that describe how an expert tackles a
common programming problem. We define explicit programming strategies,
grounding our definition in prior work both within software engineering and in
other professions which have adopted more explicit procedures for problem
solving. We then present a novel notation called Roboto and a novel
StrategyTracker tool that explicitly represents programming strategies and
frame executing strategies as a collaborative effort between human abilities to
make decisions and computer abilities to structure process and persist
information. Ina formative evaluation, 28 software developers of varying
expertise completed a design task and a debugging task. We found that, compared
to developers who are free to choose their strategies, developers gave explicit
strategies experienced their work as more organized, systematic, and
predictable, but also more constrained. Developers using explicit strategies
were objectively more successful at the design and debugging tasks. We discuss
the implications of Roboto and these findings, envisioning a thriving ecosystem
of explicit strategies that accelerate and improve developers programming
problem solving.
