Our observations revealed that novice software developers demonstrate a wide variety of abilities as well as deficiencies. Among their strengths are:
Reading and writing specifications
Debugging (persistence and hypothesis generation)
Orientation (engaging with a large code base and preexisting software team)
From our observations, we could see that novice software developers were very well prepared by their universities for programming, design, and debugging. They were capable of using IDEs to code, command-line tools to analyze files, and online documentation to learn about unfamiliar APIs. They tried not just to complete their tasks, but to understand why the code change was the right one to make. Several of them practiced copy-paste coding, either from documentation or from other sections of their team’s codebase. When debugging, all of the novices demonstrated prolific hypothesis generation (e.g., see the previous section Task Sample) and persistence in trying all possibilities before contemplating giving up if nothing worked. Most took these incremental failures to solve problems in stride, and though complaints about unfamiliar and undocumented tools pervaded their self-commentary, they seldom reported this to others.
One subject had to review design specifications for two software features. This led to frequent discussions with the head of the team, leading to ...