Struggles of new college graduates in their first software development job
Tuesday, October 21st, 2008I got familiar with a study Microsoft had done with eight of their just graduated employees by observing them 85 hours. They got somewhat good picture where is the problems and shared it in ACM publication.
The first thing that the emphase there is that the technical skills of graduade are rather good ones: they know how to code and write spesifications. But at the same time they provide a good case that actually working in this kind of inndustry reguires rather much human interaction also.
I skip explaining where the people were good and and go directly to problems. So, the first big problem was in area of communication:
An overarching theme of new developers’ communication problems is knowing how and when to ask questions of others. In general, NSDs [graduates] do not ask questions soon enough, and often struggle to ask questions at an appropriate level. (page 228)
Secondly there were issues on collaboration: how to prepare to a meeting, how to advocate your work and how to stand there when colleagues try to dump work. Also team work is something that needs to be focused more, as it’s how the industry works today. At the same time graduates were sometimes “left alone”, especially in cases when there’s a large code base and tiny documentation space:
The social issues we observed focused on working in large teams, working in conjunction with multiple teams, and working with a large, pre-existing codebase. Many times, NSDs were explicitly told that there was little written documentation on a feature, and that the original developers had left the team or the company. (page 228, emphasis added)
Also some core technical skills seemed to be lacking: use of version control system was poor and debuggers cause problems. Even here the human side of developing was clear: some of the subjects didn’t have access to right tools and the problematics of asking for help was rather high, as following highlights:
These technical difficulties often coupled with collaboration and orientation issues. In his first programming project, Subject U struggled with a new API, a new operating system, and a new programming language – in addition to new tools. Despite the almost overwhelming challenge, Subject U felt it necessary to try to do everything himself, without asking questions – in part to demonstrate his value to his manager. Subject U said he learns best by programming his own code and working through the mistakes. (page 228, emphasis added)
The last problem mentioned was related to taking notes and working in environment with huge amount of information — especially when everything is new. Some of use prefer paper notes, other use email — that doesn’t actually matter. But how to store this information in a proper manner and understand it well — that is difficult. Authors present this nicely:
NSDs often struggle to know “when they don’t know” something. Because there is so much new infrastructure to learn, it becomes the norm to have only partial knowledge of a tool or some code. While this is their reality, it also leads many NSDs to fail to recognize when they are truly stuck and should ask for help. (page 229)
NSDs had difficulty orienting themselves in the low information environments in their project team, codebase, and resources. However, this was sometimes coupled with confusing and poorly organized documentation – which was difficult for a novice to navigate or engage with effectively. (page 229)
So after this analysis the presentation goes to common misconceptions. I’ll just present them here and leave the discussion of these to you guys:
- I must do everything myself so that I look good to my manager.
- I must be the one to fix any bug I see – and I should fix it the “right” way, even if I do not have time for it.
- If there was only more documentation…
- I know when I am stuck when solving a problem.
So, how should these findings effect the education of computer sciences? At least we should acknowledge that application development is more than writing the code and documentation. Actually there’s some things I would rethink; more understanding on how to work with exsisting code base is clearly needed as more and more of software projects just have a pile of grappy code. Secondly, interpersonal skills need more pushing.